رأس القلم
كالي
ل AMD64
ماك
ل ARM64
ماك
قريباً
النوافذ
قريباً

فك تشفير توقيع الويب JSON: مزالق التحقق، والتشويش على المفاتيح، والاستغلال الحقيقي

توقيع الويب JSON (JWS) فك التشفير هو عملية التحليل والتحقق من مكونات الرمز المميز لرمز JWS - الرأس والحمولة والتوقيع - لاستخراج البيانات الموقعة والتحقق من سلامتها. في سياقات اختبار الأمان والاختراق، يساعد فك تشفير JWS المحللين على فهم الادعاءات المضمنة واكتشاف التهيئة الخاطئة وتحديد ممارسات التوقيع الضعيفة التي يمكن أن تؤدي إلى ثغرات أمنية مثل تجاوز التوقيع أو تزوير الرمز المميز.

تشرح هذه المقالة سبب أهمية فك تشفير JWS، وكيفية فك تشفير التوقيعات والتحقق منها باستخدام التعليمات البرمجية الحقيقية، والمخاطر الشائعة، والآثار الأمنية المترتبة عليها، واستراتيجيات الدفاع التي يجب أن تعرفها في عام 2025.

ما هو توقيع الويب JSON (JWS)؟

توقيع الويب JSON (JWS) هي وسيلة مضغوطة وآمنة لعناوين URL لتمثيل رسالة موقّعة. يتم تعريفها في RFC 7515 وتُستخدم بشكل شائع لضمان موثوقية وسلامة البيانات المنقولة عبر واجهات برمجة تطبيقات REST، وتسجيل الدخول الأحادي (SSO)، وتدفقات مصادقة الخدمات المصغرة.

يبدو رمز JWS النموذجي كما يلي:

نغينكس

eyJJhbGciGOiOiJFUZI1NiIsInR5cCICI6IkpXVCJ9. eyJzdWIIOIOIxMjMj0NTY3ODKWIWIWIwibmFtZI6IkpvZSJ9 . MEUCIQDh...

كل جزء هو Base64URL مشفرة:

  1. الرأس - يصف الخوارزمية ونوع الرمز المميز
  2. الحمولة (المطالبات) - البيانات الموقعة
  3. التوقيع - إثبات النزاهة

إن فك تشفير JWS دون التحقق من التوقيع يكشف عن الادعاءات، ولكن التحقق فقط يثبت أنها جاءت من مصدر موثوق.

معيار موثوق: RFC 7515 - https://tools.ietf.org/html/rfc7515

فك تشفير توقيع الويب JSON: مزالق التحقق، والارتباك في المفاتيح، والثغرات الحقيقية بينلغنت

لماذا فك تشفير JWS؟ وجهات نظر الأمان والاختبار

يخدم فك تشفير JWS عدة أغراض:

  • فهم المطالبات المضمنة: من هو المستخدم؟ ما هي الأذونات؟
  • تحديد خوارزمية التوقيع: خوارزميات ضعيفة (على سبيل المثال, لا شيء أو HS256 بمفاتيح يمكن التنبؤ بها)
  • تقييم النزاهة: كشف الرموز المميزة التي تم التلاعب بها
  • اكتشاف نقاط الضعف: تجاوز التواقيع وهجمات خفض مستوى الخوارزمية

من الزاوية الأمنية الهجومية، يمكن أن يؤدي اكتشاف ممارسات توقيع JWS الضعيفة إلى ثغرات حيث يقوم المهاجمون بتزوير الرموز المميزة وتصعيد الامتيازات.

تشريح رمز JWS المميز

فيما يلي تفصيل لرمز نموذجي:

الجزءالمعنىمثال على ذلك
الرأسالخوارزمية والبيانات الوصفية{"alg": "RS256"، "typ": "JWT" }
الحمولةالمطالبات{"الفرعية": "12345"، "الدور": "المسؤول"}
التوقيعملخص موقّعBase64URL للرؤوس المشفرة+الحمولة المشفرة

تُظهر JWS المفكوك تشفيرها JSON عادي للرأس والحمولة:

إينى

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

فك التشفير لا يثبت صحة التوقيع - فقط التحقق من التوقيع هو ما يثبت ذلك.

فك تشفير JWS البسيط (بدون تحقق)

في الفرز الأمني، غالبًا ما تكون الخطوة الأولى في الفرز الأمني هي رؤية ما بداخله:

مثال بايثون (فك التشفير فقط)

بايثون

استيراد base64import json def base64url_decode(input_str): rem = len(input_str) % 4 input_str +="=" * (4 - rem)إرجاع base64.urlsafe_b64decode(input_str) رمز مميز = "eyJhbGciGOiJSUzISUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIIOiXMjMifQ....SflKxxw..."header, payload, signature = token.split('.') header_json = json.loads.loads(base64url_decode(header)) payload_json = json.loads.loads.loads(base64url_decode(payload))) طباعة("header:"، header_json)طباعة("Payload:"، payload_json)

يُنتج هذا JSON قابل للقراءة ولكنه لا يتحقّق من صحة التوقيع.

التحقّق من توقيع JWS (أمني-حرج)

للتأكد من شرعية الرمز المميز، يجب عليك التحقق من صحة التوقيع باستخدام الخوارزمية والمفتاح المتوقعين. وإليك الطريقة:

جافا سكريبت (Node.js) مثال باستخدام خوسيه

جافا سكريبت

استيراد { jwtVerify } من "jose"؛ const token = "eyJ..."؛ const publicKey = /* تحميل المفتاح العام المناسب، على سبيل المثال، من نقطة نهاية JWKS */؛ دالة مزامنة التحقق من الرمز المميز() {تجربة {تحاول {const { payload } = await jwtVerify(token, publicKey)؛ console.log("تم التحقق من الحمولة:"، الحمولة)؛ } التقاط (e) {console.error("فشل التحقق:"، e)؛ } } } التحقق من الرمز المميز();

وهذا يضمن توقيع الرمز المميز بواسطة المفتاح الخاص الصحيح المطابق للمفتاح العام.

مثال من العالم الحقيقي: فك تشفير رمز OAuth المميز

تصدر العديد من واجهات برمجة التطبيقات رموز JWS للتحكم في الوصول. يكشف فك التشفير عن معلومات المستخدم وجلسة العمل:

json

{"iss": "", "sub": "alice"، "exp": 1700000000، "النطاق": "قراءة وكتابة" }

تقوم فرق الأمان بمراجعة الرموز المميزة التي تم فك تشفيرها لمراجعة النطاقات وأوقات انتهاء الصلاحية.

نقاط الضعف الشائعة في تطبيقات JWS

خفض مستوى الخوارزمية

تسمح بعض المكتبات بشكل غير صحيح بتغيير زئبق إلى لا شيءمما يمكّن المهاجمين من تجاوز عملية التحقق.

مثال على رأس غير آمن:

json

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

دفاع هجومي هجومي: ارفض دائمًا الرموز المميزة التي تحتوي على الزرعة: لا شيء ما لم تكن آمنة بشكل صريح في السياق.

المفاتيح المتماثلة الضعيفة (HS256)

يسمح استخدام مفاتيح متماثلة ضعيفة أو يمكن التنبؤ بها للمهاجمين بتخمين المفتاح وتزوير الرموز.

التخفيف من الآثار:

  • استخدام مفاتيح سرية قوية (≥ 256 بت)
  • تفضيل الخوارزميات غير المتماثلة (RS256, ES256)

أدوات CLI لفك تشفير JWS السريع

الأداةالوصفرسمي
jwt.io مصحح الأخطاءفك التشفير والتحقق عبر الإنترنتhttps://jwt.io
خوسيه CLIفك التشفير/التحقق القائم على العقدةhttps://github.com/panva/jose
جوت-كليCLI عبر الأنظمة الأساسيةhttps://github.com/mike-engel/jwt-cli

مثال لفك تشفير CLI:

باش

فك تشفير jwt eyJhbbGciOi...

سيناريو الثغرة الأمنية: تزوير الرمز المميز (إثبات المفهوم)

إذا قبل الخادم بشكل غير صحيح الزرعة: لا شيءيمكن للمهاجم تزويرها:

css

الرأس: {"alg":"none","typ":"JWT"} الحمولة: {"sub":"attacker","role":"admin"} التوقيع: ""

سيناريو إثبات المفهوم (Python):

بايثون

استيراد base64import json def b64url(x): إرجاع base64.urlsafe_b64encode(x).rstrip(b'=').decode() header = {"alg":"لا شيء"، "typ":"JWT"} الحمولة = {"sub":"مهاجم"، "role":"admin"} الرمز المميز = f"{b64url(json.dumps(header).encode())}.{b64url(json.dumps(payload).encode())}."print("رمز مزور:"، رمز)

الدفاع

  • رفض الرموز المميزة حيث زئبق هو لا شيء ما لم تكن آمنة بشكل صريح
  • فرض خوارزمية القائمة البيضاء
فك تشفير توقيع الويب JSON Web Signature Penligent

أهمية التحقق من التوقيعات في عام 2025

في الخدمات المصغرة الحديثة وواجهات برمجة التطبيقات الموزعة، تقود الرموز المميزة قرارات الوصول. يمكن أن يؤدي التحقق غير السليم إلى:

  • تصعيد الامتيازات
  • الوصول غير المصرح به
  • اختطاف الجلسات

يجب أن يكون مختبِرو الاختراق والمدافعون قادرين على فك تشفير الرموز والتحقق من صحتها برمجياً وعلى نطاق واسع.

الكشف عن التحقق المعطّل في واجهات برمجة التطبيقات

يمكن للماسحات الضوئية المؤتمتة التحقق مما إذا كانت واجهة برمجة التطبيقات (API) تحاول قبول توقيعات JWS غير صالحة.

كود بايثون الزائف (فحص الأمان)

بايثون

def test_broken_verification(api_url, forged_token): الرؤوس = {"ترخيص": f"حامل {رمز مزور}"} الاستجابة = طلبات.get(api_url, headers=headers)إرجاع رمز الحالة bad_api = test_broken_verification("", forged_token)إذا كان bad_api == 200:اطبع("يحتمل أن يكون عرضة لتزوير JWS")

إذا استجابت واجهة برمجة التطبيقات ب 200 موافق، قد يكون منطق القبول الرمزي معيبًا.

أفضل الممارسات الدفاعية

الدفاعالوصف
استخدام مفاتيح غير متماثلةتفضيل RS256 و ES256 على المفاتيح المتماثلة
فرض القائمة البيضاء للخوارزميةرفض قيم alg غير متوقعة
الأعمار الرمزية القصيرةتقليل مخاطر الإعادة إلى الحد الأدنى
تناوب المفاتيحتحديث مفاتيح التوقيع بانتظام
مكتبات الرمز المميز للتدقيقالحفاظ على التبعيات محدثة

دمج فك تشفير الرمز المميز في أمان CI/CD

في عام 2025، غالبًا ما تقوم خطوط أنابيب الأمان بالتحقق تلقائيًا من صحة ممارسات نظم الإنذار المشترك:

  • التنقيح الآلي لتكوينات JWT
  • اختبار CI الذي يرفض المعارف غير الآمنة
  • مراقبة وقت التشغيل لقبول الرمز المميز السيئ

مثال على مقتطف النص البرمجي CI (باش):

باش

#Reject إذا كان أي كود يستخدم "alg: لا شيء"grep -R ""alg": *"لا شيء" ./ src &&خروج 1

المفاهيم ذات الصلة: JWE مقابل JWS

المدةالمعنى
جيه دبليو إستوقيع الويب JSON (توقيع فقط)
جيه دبليو إيتشفير الويب JSON (مشفر)

يحمي نظام JWE السرية؛ بينما يحمي نظام JWS النزاهة والموثوقية. تستخدم العديد من الأنظمة كليهما معاً.

الأدوات والمكتبات (حزمة الأمان 2025)

  • Node.js خوسيه - فك تشفير JWT/JWS والتحقق منها
  • بايثون بيثون-جوز - دعم التشفير المرن
  • OpenSSL - التحقق من التشفير منخفض المستوى
  • jwt.io - فك ترميز الويب السريع
شارك المنشور:
منشورات ذات صلة