Penligent Başlık

JSON Web İmza Çözümü: Doğrulama Tuzakları, Anahtar Karışıklığı ve Gerçek İstismarlar

JSON Web İmzası (JWS) kod çözme, imzalı verileri çıkarmak ve bütünlüğünü kontrol etmek için bir JWS belirtecinin bileşenlerini (başlık, yük ve imza) ayrıştırma ve doğrulama işlemidir. Güvenlik ve sızma testi bağlamlarında, bir JWS'nin kodunun çözülmesi analistlerin hangi taleplerin gömülü olduğunu anlamalarına, yanlış yapılandırmaları tespit etmelerine ve imza atlama veya belirteç sahteciliği gibi güvenlik açıklarına yol açabilecek zayıf imzalama uygulamalarını belirlemelerine yardımcı olur.

Bu makale şunları açıklamaktadır JWS kod çözme neden önemlidir?gerçek kod kullanarak imzaların nasıl çözüleceği ve doğrulanacağı, yaygın tuzaklar, güvenlik etkileri ve 2025'te bilmeniz gereken savunma stratejileri.

JSON Web İmzası (JWS) Nedir?

JSON Web İmzası (JWS) imzalı bir mesajı temsil etmenin kompakt ve URL açısından güvenli bir yoludur. İçinde tanımlanmıştır RFC 7515 ve REST API'leri, çoklu oturum açma (SSO) ve mikro hizmet kimlik doğrulama akışları üzerinden aktarılan verilerin gerçekliğini ve bütünlüğünü sağlamak için yaygın olarak kullanılır.

Tipik bir JWS belirteci şöyle görünür:

nginx

eyJhbGciOiJFUzI1NiIsInR5cCI6IkpXVCJ9. eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvZSJ9 . MEUCIQDh...

Her segment Base64URL kodlanmış:

  1. Başlık - algoritmayı ve token türünü açıklar
  2. Yük (Talepler) - imzalı veriler
  3. İmza - dürüstlüğün kanıtı

İmzayı doğrulamadan bir JWS'nin kodunu çözmek iddiaları ortaya çıkarır, ancak yalnızca doğrulama bunların güvenilir bir kaynaktan geldiğini kanıtlar.

Yetkili standart: RFC 7515 - https://tools.ietf.org/html/rfc7515

JSON Web İmza Çözümü: Doğrulama Tuzakları, Anahtar Karışıklığı ve Gerçek Açıklar Penligent

Neden bir JWS'nin Kodunu Çözelim? Güvenlik ve Test Perspektifleri

Bir JWS'nin kodunun çözülmesi birkaç amaca hizmet eder:

  • Yerleşik talepleri anlayın: Kullanıcı kimdir? İzinler nelerdir?
  • İmzalama algoritmasını tanımlayın: Zayıf algoritmalar (örn, Hiçbiri veya HS256 öngörülebilir anahtarlarla)
  • Bütünlüğü değerlendirin: Kurcalanmış jetonları tespit edin
  • Güvenlik açıklarını keşfedin: İmza bypass, algoritma düşürme saldırıları

Saldırgan güvenlik açısından bakıldığında, zayıf JWS imzalama uygulamalarının keşfedilmesi, saldırganların belirteçleri taklit ettiği ve ayrıcalıkları artırdığı istismarlara yol açabilir.

Bir JWS Token'ın Anatomisi

İşte tipik bir jetonun dökümü:

SegmentAnlamıÖrnek
BaşlıkAlgoritma ve meta veriler{ "alg": "RS256", "typ": "JWT" }
YükTalepler{ "sub": "12345", "rol": "admin" }
İmzaİmzalı özetŞifrelenmiş başlık+payload'un Base64URL'si

Şifresi çözülmüş bir JWS, başlık ve yük için düz JSON gösterir:

ini

HeaderJSON = base64url_decode(part1)PayloadJSON = base64url_decode(part2)

Şifre çözme işlemi gerçekliği kanıtlamaz - sadece imza doğrulama işlemi kanıtlar.

Basit JWS Kod Çözme (Doğrulama Olmadan)

Güvenlik triyajında genellikle ilk adım içeride ne olduğunu görmektir:

Python Örneği (Yalnızca Kod Çözme)

python

import base64import json def base64url_decode(input_str): rem = len(input_str) % 4 input_str += "=" * (4 - rem)return base64.urlsafe_b64decode(input_str) token = "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjMifQ.SflKxw... "header, payload, signature = token.split('.') header_json = json.loads(base64url_decode(header)) payload_json = json.loads(base64url_decode(payload)) print("Header:", header_json)print("Payload:", payload_json)

Bu, okunabilir JSON çıktısı verir ancak imzanın doğru olup olmadığını doğrulamaz.

JWS İmzasını Doğrulama (Güvenlik Açısından Kritik)

Belirtecin meşru olduğundan emin olmak için beklenen algoritma ve anahtarı kullanarak imzayı doğrulamanız gerekir. İşte nasıl yapılacağı:

JavaScript (Node.js) Kullanım Örneği jose

javaScript

import { jwtVerify } from "jose"; const token = "eyJ..."; const publicKey = /* load appropriate public key, e.g., from JWKS endpoint */; async function verifyToken() {try {const { payload } = await jwtVerify(token, publicKey);console.log("Verified payload:", payload); } catch (e) {console.error("Verification failed:", e); } } verifyToken();

Bu, belirtecin açık anahtara karşılık gelen doğru özel anahtar tarafından imzalanmasını sağlar.

Gerçek Dünya Örneği: OAuth Belirtecinin Kodunu Çözme

Birçok API, erişim kontrolü için JWS belirteçleri yayınlar. Kod çözme, kullanıcı ve oturum bilgilerini ortaya çıkarır:

json

{ "iss": "", "sub": "alice", "exp": 1700000000, "kapsam": "okuma yazma" }

Güvenlik ekipleri, kapsamları ve sona erme sürelerini denetlemek için kodu çözülmüş belirteçleri inceler.

JWS Uygulamalarında Sık Karşılaşılan Güvenlik Açıkları

Algoritma Düşürme

Bazı kütüphaneler hatalı olarak alg için HiçbiriBu da saldırganların doğrulamayı atlamasına olanak tanır.

Güvenli olmayan başlık örneği:

json

{"alg":"none","typ":"JWT"}

Savunma saldırısı: ile belirteçleri her zaman reddedin alg: yok bağlam içinde açıkça güvenli olmadığı sürece.

Zayıf Simetrik Anahtarlar (HS256)

Zayıf veya öngörülebilir simetrik anahtarların kullanılması, saldırganların anahtarı tahmin etmesine ve belirteçleri taklit etmesine olanak tanır.

Hafifletme:

  • Güçlü gizli anahtarlar kullanın (≥ 256 bit)
  • Asimetrik algoritmaları tercih edin (RS256, ES256)

Hızlı JWS Kod Çözme için CLI Araçları

AletAçıklamaResmi
jwt.io Hata AyıklayıcıWeb tabanlı kod çözme ve doğrulamahttps://jwt.io
jose CLIDüğüm tabanlı kod çözme/doğrulamahttps://github.com/panva/jose
jwt-cliPlatformlar arası CLIhttps://github.com/mike-engel/jwt-cli

Örnek CLI kod çözme:

bash

jwt decode eyJhbGciOi...

Güvenlik Açığı Senaryosu: Token Sahteciliği (Kavram Kanıtı)

Eğer bir sunucu yanlışlıkla alg: yokbir saldırgan taklit edebilir:

css

Başlık: {"alg":"none","typ":"JWT"} Yük: {"sub":"attacker","role":"admin"} İmza: ""

Kavram Kanıtı Komut Dosyası (Python):

python

import base64import json def b64url(x): return base64.urlsafe_b64encode(x).rstrip(b'=').decode() header = {"alg": "none", "typ": "JWT"} payload = {"sub": "attacker", "role": "admin"} token = f"{b64url(json.dumps(header).encode())}.{b64url(json.dumps(payload).encode())}. "print("Sahte token:", token)

Savunma:

  • Şu durumlarda belirteçleri reddedin alg o Hiçbiri açıkça güvenli olmadığı sürece
  • Algoritma beyaz listesini zorlama
JSON Web İmza Kod Çözme Penligent

İmza Doğrulama 2025'te Neden Önemli?

Modern mikro hizmetlerde ve dağıtılmış API'lerde erişim kararlarını belirteçler yönlendirir. Yanlış doğrulama şunlara yol açabilir:

  • Ayrıcalık yükseltme
  • Yetkisiz erişim
  • Oturum ele geçirme

Sızma test uzmanları ve savunucular, belirteçleri programlı olarak ve geniş ölçekte çözebilmeli ve doğrulayabilmelidir.

API'lerde Bozuk Doğrulamayı Tespit Etme

Otomatik tarayıcılar, bir API'nin geçersiz JWS imzalarını kabul etmeye çalışıp çalışmadığını kontrol edebilir.

Python Sözde Kodu (Güvenlik Kontrolü)

python

def test_broken_verification(api_url, forged_token): headers = {"Authorization": f "Bearer {forged_token}"} response = requests.get(api_url, headers=headers)return response.status_code bad_api = test_broken_verification("", forged_token)if bad_api == 200:print("Potentially vulnerable to JWS forgery")

API şu şekilde yanıt verirse 200 TAMAMjeton kabul mantığı hatalı olabilir.

En İyi Savunma Uygulamaları

SavunmaAçıklama
Asimetrik Anahtarlar KullanınSimetrik anahtarlar yerine RS256, ES256'yı tercih edin
Algoritma Beyaz Listesini ZorlaBeklenmedik alg değerlerini reddetme
Kısa Token ÖmürleriTekrar riskini en aza indirin
Anahtar Rotasyonuİmzalama anahtarlarını düzenli olarak güncelleyin
Denetim Simgesi KütüphaneleriBağımlılıkları güncel tutun

Token Kod Çözme İşlemini CI/CD Güvenliğine Entegre Etme

2025 yılında, güvenlik ardışık düzenleri genellikle JWS uygulamalarını otomatik olarak doğrular:

  • JWT konfigürasyonlarının otomatik tiftiklenmesi
  • Güvensiz kütüphaneleri reddeden CI testi
  • Hatalı token kabulü için çalışma zamanı izleme

Örnek CI Kod Parçacığı (Bash):

bash

1TP5Herhangi bir kod "alg: none "grep -R '"alg" kullanıyorsa reddet: *"none"' ./src && exit 1

İlgili Kavramlar: JWE vs JWS

DönemAnlamı
JWSJSON Web İmzası (yalnızca imzalı)
JWEJSON Web Şifreleme (şifreli)

JWE gizliliği korur; JWS bütünlüğü ve gerçekliği korur. Birçok sistem her ikisini birlikte kullanır.

Araçlar ve Kütüphaneler (2025 Güvenlik Yığını)

  • Node.js jose - JWT/JWS kod çözme ve doğrulama
  • Python python-jose - Esnek kriptografi desteği
  • OpenSSL - Düşük seviyeli kripto doğrulama
  • jwt.io - Hızlı web kod çözücü
Gönderiyi paylaş:
İlgili Yazılar
tr_TRTurkish