المخاطر الخفية لوظائف التجزئة: هجمات تمديد الطول والمخاطر الأمنية من جانب الخادم

مقدمة

هجوم تمديد الطول هو هجوم يتعلق بخصائص أنواع معينة من وظائف التجزئة (مثل MD5 وSHA-1 وSHA-2). بعبارات بسيطة، يستغل هذا الهجوم حقيقة أنه بمعرفة H(الرسالة) وطول الرسالة، يمكننا بسهولة حساب H(الرسالة || الحشو || الامتداد) دون معرفة الرسالة نفسها. حيث يمثل "||" الاتصال، تتم إضافة "الحشوة" وفقًا لأحكام دالة التجزئة.

وذلك لأن وظائف التجزئة هذه تستخدم بنية Merkle-Damgård، التي تقسم المدخلات إلى كتل، ويعتمد تجزئة كل كتلة على تجزئة الكتلة السابقة. هذا يعني أنه بمجرد حساب تجزئة رسالة معينة، لدينا حالة يمكننا من خلالها البدء وإضافة المزيد من الكتل.

وضع التحقق من جانب الخادم

لتسهيل وصف سيناريو الثغرة الأمنية، نفترض أولاً وجود وضع المصادقة من جانب الخادم، أي أنه عندما يحاول المستخدم تسجيل الدخول، سيقوم الخادم بتمرير تجزئة محددة بناءً على معرف المستخدم واسمه ورقمه. مفتاح مكون من 30 رقمًا معروفًا للخادم فقط، وتقوم الخوارزمية بإنشاء قيمة تجزئة وإرسالها إلى العميل. لاحقًا، عندما يحاول العميل الوصول إلى بعض الواجهات المحددة، مثل الواجهة لتعديل أذونات المستخدم، سيقوم الخادم بإعادة إنشاء التجزئة للتحقق بناءً على معرف الدور واسم الدور وأذونات الدور ونفس المفتاح المكون من 30 رقمًا الأمامي -نهاية المشاركة. إذا كانت التجزئة التي تم تحميلها متوافقة مع التجزئة التي أنشأها الخادم، فسيتم اعتبار التحقق قد تم، وسيتم كتابة أذونات الدور الجديد في قاعدة البيانات.

لتسهيل الفهم، إليك بعض الرموز البسيطة المكتوبة حسب الوصف كأمثلة:

يستحوذ على السلطة

بسبب الثغرات الأمنية في وضع التحقق، يمكن للمهاجم تجاوز التحقق من الإذن عن طريق إعادة بناء طلب المعاملة دون معرفة SecretKey. الفكرة الأساسية للهجوم غير المصرح به هي استغلال خصائص هجمات التوسعة الطويلة. يحتاج المهاجم أولاً إلى الحصول على قيمة التجزئة الأصلية وحساب طول البيانات الأصلية من خلال خوارزمية تكرارية بسيطة. بمجرد الحصول على هذه المعلومات، يمكن إضافة معلمات إضافية غير مصرح بها إلى البيانات الأصلية ويمكن استخدام نفس خوارزمية التجزئة لإنشاء تجزئات ضارة.

مبدأ الهجوم لتمديد الطول

يحدث هجوم تمديد الطول بسبب الآلية الداخلية لجزء من وظيفة التجزئة. تقوم هذه الوظائف أولاً بتقسيم البيانات إلى أجزاء ذات طول ثابت قبل معالجة بيانات الإدخال، ثم تقوم بوضع وسادة في نهاية كل قطعة لتلبية متطلبات محددة. يسمح هذا التصميم للمهاجم بإنشاء قيمة تجزئة فعالة جديدة عن طريق حشو بيانات جديدة وإلحاقها مع معرفة قيمة التجزئة وطول الرسالة الأصلية.

خذ SHA-256، على سبيل المثال، والذي يعمل على كتل 512 بت. بالنسبة للبيانات التي لا يكون طولها من مضاعفات 512 بت، تكون الحشوة مطلوبة. قواعد التعبئة الخاصة بها هي كما يلي:

  1. أضف بت "1" في نهاية البيانات؛

  2. أضف عددًا معينًا من البتات "0"، بحيث يكون طول وحدة البيانات 512 يساوي 448 (لمزيد من التفاصيل، راجع [1] ;

  3. أضف كتلة طويلة 64 بت في النهاية لتمثيل طول البيانات الأصلية.

باختصار، يتم إلحاق "1" متبوعًا بـ m "0"s، بالإضافة إلى عدد صحيح 64 بت أو 128 بت، بنهاية الرسالة لإنتاج رسالة حشو بطول 512*n. العدد الصحيح المُلحق هو طول الرسالة الأصلية. تتم بعد ذلك معالجة رسالة الحشو بواسطة دالة التجزئة إلى كتل بحجم n 512 بت.

طريقة البناء

في هذا المثال، سنستخدم الكود المذكور في الصورة أعلاه كسيناريو محدد، حيث تكون سلسلة البيانات data="user_id=1&user_name=aa" والمفتاح هو SecretKey="Length_extension\ _attack\ _سر". سيقوم الخادم بتحليل حقل البيانات في البيانات التي تم تحميلها وتحليل المعلمات المطلوبة user_id وuser_name من خلال المحدد &. إذا كان حقل الدور موجودًا، فسيحصل الخادم أيضًا على قيمة هذا الحقل. يقوم الخادم بعد ذلك بتجزئة جميع الحقول باستخدام SecretKey ومقارنتها بتجزئة التحقق التي تم تحميلها. إذا كانت قيم التجزئة متسقة، تعتبر المعلمات متوافقة مع القواعد وتستخدم مباشرة.

أولاً، نقوم بتسجيل الدخول إلى واجهة loginHandler للحصول على قيمة التجزئة hash="37d310d3465506486431fb2c2eb163f0f470479703f66dc9e5fdead8a3390c68" التي تم إنشاؤها باستخدام SHA-256 استنادًا إلى البيانات وSecretKey.

بعد ذلك، سوف نستكشف مدى صعوبة كسرها. بأخذ موقف الاختبار الخاص بنا كمثال، وفقًا لمبدأ هجوم تمديد الطول، طالما أننا نعرف H (الرسالة) وطول الرسالة، يمكننا إضافة بيانات جديدة من خلال هجوم تمديد الطول. الرسالة الأصلية = SecretKey + data، الآن لدينا H(message)، نحتاج فقط إلى معرفة طول الرسالة لإنشاء قيمة تجزئة جديدة. نظرًا لأن SecretKey عبارة عن مفتاح 30 بت، فيمكن معرفة الطول الحقيقي للرسالة بعد 30 تكرارًا فقط. لذلك، يمكننا بسهولة إنشاء قيمة تجزئة جديدة. نظرًا لأننا نحتاج إلى استخدام أذونات المسؤول، فإننا نحتاج إلى دمج الحقل الضار "&role=admin" في البيانات الأصلية.

يمكننا استخدام ميزة هجوم تمديد الطول لإضافة بيانات جديدة وإنشاء قيمة تجزئة جديدة دون معرفة المفتاح السري. نستخدم هنا مكتبة تنفذ هذه الوظيفة بالفعل [2] لإكمال الاختبار. ثم استخدم الأداة لإنشاء قيمة تجزئة جديدة.

نظرًا لأن التحقق من واجهة adminActionHandler يتحقق من التجزئة بناءً على المستخدم_id، وuser_name والدور الذي تم تحميله، فإن البيانات التي قمنا بتحميلها في هذا الوقت هي user_id=1، user_name=aa\x80\x00\x00\x00 \ x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x70 و role=admin، كما هو موضح في الشكل أدناه:

قيمة التجزئة هي 84ae4ae437eeabf3bd8a26294392770b86f64a81998194156ac003d58a21acd0. بعد ذلك، يمكنك الاتصال بواجهة adminActionHandler، وبعد استلام البيانات، سيقوم الخادم بمقارنة التجزئة التي تم تحميلها مع sha256 (SecretKey + FakeData)، وبعد اجتياز التحقق، سيتم تنفيذ بعض العمليات الحساسة. وبهذه الطريقة، نجحنا في تجاوز التحقق من جانب الخادم باستخدام هجوم تمديد الطول، وأدركنا العملية غير المصرح بها.

سيناريوهات الهجوم المحتملة الأخرى

1. التحقق من سلامة الملف: إذا تم التحقق من سلامة الملف عن طريق ربط المفتاح ومحتوى الملف، ثم تجزئته، فقد يقوم المهاجم بتوسيع الملف وإنشاء تجزئة صالحة، وبالتالي تجاوز عمليات التحقق من التكامل؛

2. أمان تطبيقات الويب: في تطبيقات الويب، إذا تم استخدام وظيفة التجزئة المعرضة لهجمات التمديد للتحقق من البيانات المقدمة من المستخدم، فقد يستغل المهاجمون ذلك لإرسال بيانات ضارة؛

3. التوقيعات الرقمية: في بعض أنظمة التوقيع الرقمي، إذا تم إنشاء التوقيع عن طريق ربط المفتاح الخاص والرسالة ثم تجزئتهما، فقد يقوم المهاجم بتوسيع الرسالة وإنشاء توقيع صالح؛

**4. تخزين كلمة المرور: **على الرغم من أنه أمر غير شائع، إذا تم تخزين كلمة المرور عن طريق سلسلة مفتاح (مثل الملح) وكلمة المرور، ثم تجزئتها، فقد يحاول المهاجم اختراقها باستخدام كلمة مرور هجوم ذات امتداد طويل.

كيفية الوقاية

1. اختر دالة تجزئة ليست عرضة لهجمات التمديد، مثل SHA-3؛

**2. استخدم HMAC: **يتطلب HMAC مفتاحًا ورسالة كمدخلات، وتعتمد نتيجة الإخراج على كل من المفتاح والرسالة، لذا لا يمكن للمهاجم تنفيذ هجوم تمديد طويل دون معرفة المفتاح.

**3. تعزيز التحقق من السلطة: **أضف خطوات إضافية للتحقق من السلطة من جانب الخادم، مثل استخدام المصادقة متعددة العوامل.

فيما يلي خصائص بعض خوارزميات التجزئة شائعة الاستخدام:

| الخوارزمية | مقاومة الاصطدام | هجوم الاصطدام البادئة المحددة | مقاومة Preimage | هجوم تمديد الطول | | --- | --- | --- | --- | --- | | MD5 | 2 ^ 18 | 2 ^ 39 | 2 ^ 123.4 | عرضة للخطر | | SHA-1 | 2^61.2 | 2^63.4 | 2^160 | عرضة للخطر | | SHA-256 (SHA-2) | 2^65.5 | - | 2^254.9 | عرضة للخطر| | SHA-512 (SHA-2) | 2^32.5 | - | 2^511.5 | عرضة للخطر| | SHA-3 | 2^50 | - | غير معروف | غير معرض للخطر | | BLAKE2s | 2^112 | - | 2^241 | غير معرض للخطر | | BLAKE2b | 2^224 | - | 2^481 | غير معرض للخطر|

خاتمة

الدفاع الفعال ضد هجمات تمديد الطول هو استخدام وظائف التجزئة المحصنة ضد مثل هذه الهجمات، مثل SHA-3 وBLAKE2. بالإضافة إلى ذلك، يمكن أيضًا حمايته بواسطة بنية HMAC (رمز مصادقة رسالة التجزئة المفتاحية). يمكن لهذه التدابير تحسين أمان النظام بشكل فعال وضمان سلامة البيانات واستقرار التطبيق.

الرابط المرجعي:

[1]

[2]

شاهد النسخة الأصلية
قد تحتوي هذه الصفحة على محتوى من جهات خارجية، يتم تقديمه لأغراض إعلامية فقط (وليس كإقرارات/ضمانات)، ولا ينبغي اعتباره موافقة على آرائه من قبل Gate، ولا بمثابة نصيحة مالية أو مهنية. انظر إلى إخلاء المسؤولية للحصول على التفاصيل.
  • أعجبني
  • تعليق
  • إعادة النشر
  • مشاركة
تعليق
0/400
لا توجد تعليقات
  • تثبيت