
Debian OpenSSL PRNG قابل للتنبؤ (CVE-2008-0166)
الرابط الأصلي: http://metasploit.com/users/hdm/tools/debian-openssl/ (مرآة)
الاستغلال:
الأداة الموصى بها: Crowbar (قادرة على اختراق مفاتيح SSH بالقوة العمياء)
طريقة الاختبار: ssh-vulnkey & dowkd.pl
CVE (CVE-2008-0166):
في 13 مايو 2008، أعلن مشروع دبيان 5 أن لوتشيانو بيلو وجد ثغرة مثيرة للاهتمام في حزمة OpenSSL التي كانوا يوزعونها. كان الخلل المعني ناتجًا عن إزالة السطر التالي من الكود من md_rand.c
MD_Update(&m,buf,j);
[ .. ]
MD_Update(&m,buf,j); /* purify complains */
تمت إزالة هذه الأسطر 6 لأنها تسببت في إصدار أدوات Valgrind 7 و Purify تحذيرات حول استخدام بيانات غير مهيأة في أي كود مرتبط بـ OpenSSL. يمكنك رؤية أحد هذه التقارير لفريق OpenSSL هنا. كان لإزالة هذا الكود تأثير جانبي يتمثل في تعطيل عملية التزويد الأولي لمولد الأعداد العشوائية PRNG في OpenSSL. بدلاً من خلط بيانات عشوائية للتزويد الأولي، كانت القيمة "العشوائية" الوحيدة المستخدمة هي معرف العملية الحالي. على منصة Linux، الحد الأقصى الافتراضي لمعرف العملية هو 32,768، مما أدى إلى عدد صغير جدًا من قيم التزويد المستخدمة في جميع عمليات PRNG.
جميع مفاتيح SSL و SSH التي تم إنشاؤها على الأنظمة القائمة على دبيان (أوبونتو، كوبونتو، إلخ) بين سبتمبر 2006 و 13 مايو 2008 قد تتأثر. في حالة مفاتيح SSL، يجب إعادة إنشاء جميع الشهادات التي تم إنشاؤها وإرسالها إلى هيئة التصديق للتوقيع. أي مفاتيح لهيئة تصديق تم إنشاؤها على نظام قائم على دبيان ستحتاج إلى إعادة إنشائها وإبطالها. جميع مسؤولي الأنظمة الذين يسمحون للمستخدمين بالوصول إلى خوادمهم باستخدام SSH ومصادقة المفتاح العام يحتاجون إلى تدقيق هذه المفاتيح لمعرفة ما إذا تم إنشاء أي منها على نظام ضعيف. أي أدوات اعتمدت على PRNG الخاص بـ OpenSSL لتأمين البيانات التي تنقلها قد تكون عرضة لهجوم خارج الخط. أي خادم SSH يستخدم مفتاح مضيف تم إنشاؤه بواسطة نظام معيب يكون عرضة لفك تشفير حركة المرور وهجوم رجل في المنتصف قد يكون غير مرئي للمستخدمين. هذه الثغرة قبيحة لأن حتى الأنظمة التي لا تستخدم برامج دبيان تحتاج إلى التدقيق في حالة استخدام أي مفتاح تم إنشاؤه على نظام دبيان. قام مشروعا دبيان وأوبونتو بإصدار مجموعة من الأدوات لتحديد المفاتيح الضعيفة. يمكنك العثور عليها في قسم المراجع أدناه.
توضح القوائم السوداء التي نشرها دبيان وأوبونتو مدى صغر مساحة المفاتيح. عند إنشاء مفتاح OpenSSH جديد، هناك فقط 32,767 نتيجة محتملة لبنية معينة وحجم مفتاح ونوع مفتاح. السبب هو أن البيانات "العشوائية" الوحيدة التي يستخدمها PRNG هي معرف العملية. من أجل إنشاء المفاتيح الفعلية التي تطابق هذه القوائم السوداء، نحتاج إلى نظام يحتوي على الثنائيات الصحيحة للنظام المستهدف وطريقة لإنشاء مفاتيح بمعرف عملية محدد. لحل مشكلة معرف العملية، كتبت مكتبة مشتركة يمكن تحميلها مسبقًا وتعيد قيمة يحددها المستخدم لاستدعاء getpid() في مكتبة libc.
الخطوة التالية كانت بناء بيئة chroot تحتوي على الثنائيات والمكتبات الفعلية من نظام ضعيف. أخذت لقطة من نظام أوبونتو على الشبكة المحلية. يمكنك العثور على بيئة chroot الكاملة هنا من أجل إنشاء مفتاح OpenSSH بنوع معين وعدد بتات ومعرف عملية، كتبت سكريبت شل يمكن تنفيذه داخل بيئة chroot. يمكنك العثور على سكريبت الشل هذا هنا. يتم وضع هذا السكريبت في الدليل الجذر لنظام ملفات أوبونتو المستخرج. من أجل إنشاء مفتاح، يتم استدعاء هذا السكريبت بسطر الأوامر التالي:
# chroot ubunturoot /dokeygen.sh 1 -t dsa -b 1024 -f /tmp/dsa_1024_1
سيؤدي هذا إلى إنشاء مفتاح DSA جديد بطول 1024 بت لـ OpenSSH بحيث تكون قيمة getpid() دائمًا ترجع الرقم "1". لدينا الآن أول مفتاح SSH مولد مسبقًا. إذا واصلنا هذه العملية لجميع معرفات العمليات حتى 32,767 ثم كررناها لمفاتيح RSA بطول 2048 بت، فسنكون قد غطينا نطاقات المفاتيح الصالحة لأنظمة x86 التي تعمل بالإصدار المعيب من مكتبة OpenSSL. مع هذه المجموعة من المفاتيح، يمكننا اختراق أي حساب مستخدم لديه مفتاح ضعيف مدرج في ملف authorized_keys. هذه المجموعة من المفاتيح مفيدة أيضًا لفك تشفير جلسة SSH تم التقاطها مسبقًا، إذا كان خادم SSH يستخدم مفتاح مضيف ضعيف. الروابط إلى مجموعات المفاتيح المولدة مسبقًا لمفاتيح DSA 1024 بت و RSA 2048 بت (x86) متوفرة في قسم التنزيلات أدناه.
الشيء المثير للاهتمام حول هذه المفاتيح هو كيفية ارتباطها بمعرف العملية. نظرًا لأن معظم الأنظمة القائمة على دبيان تستخدم قيم معرفات عمليات متسلسلة (تتزايد من بدء تشغيل النظام وتلتف عند الحاجة)، يمكن أن يشير معرف العملية لمفتاح معين أيضًا إلى مدى قرب إنشاء هذا المفتاح من بدء تشغيل النظام. إذا نظرنا إلى عكس ذلك، يمكننا تحديد المفاتيح التي يجب استخدامها أثناء الهجوم بالقوة العمياء بناءً على الهدف الذي نهاجمه. عند محاولة تخمين مفتاح تم إنشاؤه في وقت بدء التشغيل (مثل مفتاح مضيف SSH)، ستكون المفاتيح ذات قيم PID أقل من 200 هي الخيارات الأفضل للهجوم بالقوة العمياء. عند مهاجمة مفتاح تم إنشاؤه بواسطة مستخدم، يمكننا افتراض أن معظم مفاتيح المستخدمين الصالحة تم إنشاؤها بمعرف عملية أكبر من 500 وأقل من 10,000. يمكن لهذا التحسين تسريع هجوم القوة العمياء بشكل كبير على حساب مستخدم بعيد عبر بروتوكول SSH.
في المستقبل القريب، سيتم تحديث هذا الموقع ليشمل أداة هجوم بالقوة العمياء يمكن استخدامها بسرعة للوصول إلى أي حساب SSH يسمح بمصادقة المفتاح العام باستخدام مفتاح ضعيف. تستخدم المفاتيح في ملفات البيانات أدناه اصطلاح التسمية التالي:
/ الخوارزمية / البتات / بصمة-معرفالعملية
و
/ الخوارزمية / البتات / بصمة-معرفالعملية.pub
للحصول على ملف المفتاح الخاص لأي مفتاح عام، تحتاج إلى معرفة بصمة المفتاح. أسهل طريقة للحصول على هذه البصمة هي من خلال الأمر التالي:
$ ssh-keygen -l -f targetkey.pub
2048 c6:7b:14:fa:ae:b6:89:e6:67:17:ee:04:17:b0:ec:4e targetkey.pub
إذا نظرنا إلى المفتاح العام في محرر، يمكننا أيضًا استنتاج أن نوع المفتاح هو RSA. من أجل تحديد موقع المفتاح الخاص لهذا المفتاح العام، نحتاج إلى استخراج ملفات البيانات والبحث عن ملف باسم:
rsa/2048/**c67b14faaeb689e66717ee0417b0ec4e-26670**
في المثال أعلاه، يتم تمثيل البصمة بالنظام الست عشري مع إزالة النقطتين، ويشار إلى معرف العملية على أنه "26670". إذا أردنا المصادقة على نظام ضعيف يستخدم هذا المفتاح العام للمصادقة، سنقوم بتشغيل الأمر التالي:
$ ssh -i rsa/2048/c67b14faaeb689e66717ee0417b0ec4e-26670 root@targetmachine
س: كم من الوقت استغرق إنشاء هذه المفاتيح؟
ج: استخدمت 31 نواة Xeon بسرعة 2.33 جيجاهرتز. استغرق الأمر ساعتين لإنشاء مفاتيح DSA 1024 بت و RSA 2048 بت لـ x86. استغرقت مفاتيح RSA 4096 بت حوالي 6 ساعات لإنشائها. سيستغرق إنشاء مفاتيح RSA 8192 بت حوالي 100 ساعة بالمعدل الحالي ومن المحتمل أن يتوقف قبل الاكتمال.
س: هل ستشارك الكود الخاص بك لتوزيع إنشاء المفاتيح عبر معالجات متعددة؟
ج: لا. الكود مكتوب خصيصًا لهذه المجموعة المحددة من المعالجات وهو سيء التنظيم لدرجة لا تستحق التنظيف.
س: كم من الوقت يستغرق اختراق حساب مستخدم SSH باستخدام هذه المفاتيح؟
ج: هذا يعتمد على سرعة الشبكة وإعدادات خادم SSH. يجب أن يكون من الممكن تجربة جميع المفاتيح الـ 32,767 من نوعي DSA-1024 و RSA-2044 في غضون ساعتين، ولكن كن حذرًا من سكريبتات مكافحة القوة العمياء على الخادم المستهدف.
س: أستخدم مفاتيح RSA بطول 16384 بت، هل يمكن كسرها؟
ج: نعم، إنها مجرد مسألة وقت وقوة معالجة. سيستغرق إنشاء مجموعة مفاتيح RSA 8192 بت حوالي 3100 ساعة من وقت وحدة المعالجة المركزية لإنشاء جميع المفاتيح الـ 32,767 (100 ساعة على 31 نواة التي أستخدمها الآن). أتصور أن مجموعة مفاتيح RSA 16384 بت ستستغرق حوالي 100,000 ساعة من وقت وحدة المعالجة المركزية. شيء واحد يجب أخذه في الاعتبار هو أن معظم المفاتيح تقع ضمن نطاق أصغر بكثير، بناءً على بذرة معرف العملية، ولن تكون هناك حاجة لإنشاء المجموعة الكاملة لتغطية غالبية مفاتيح المستخدمين (معظم المفاتيح تقع ضمن أول 3,000 معرف عملية).
حقوق النشر © 2008 H D Moore