بقلم: كونرادو جوفيا / أندريه "دكستر" بيريزا
كشفت شركة OpenSSL في 28 يناير 01 عن وجود ثغرة أمنية قد تؤثر على الخوادم التي تستخدم Diffie-Hellman للاتفاق على المفاتيح في الاتصالات الآمنة.
الهجوم
O بينسل هي مكتبة تشفير عامة الغرض لها القدرة على إنشاء اتصال آمن بين نقطتين باستخدام بروتوكول TLS.
إحدى خطوات الاتصال الآمن هي اتفاقية المفاتيح، والتي يمكن أن تستخدم أنواعًا مختلفة من الخوارزميات. الخوارزمية المعنية هي Diffie-Hellman (DH)، التي أنشأها Whitfield Diffie و Martin Hellman في عام 1976. وتتكون من ثلاث مراحل: توليد المعلمات، وتوليد المفتاح والاتفاقية نفسها.
يتم إنشاء معلمات DH عادةً مرة واحدة فقط في بداية تكوين الخادم ويظل الأمر كما هو طوال تشغيل الخادم. من الأفضل أن يتم إنشاء المفتاح عند كل اتصال من قبل الطرفين، يليه اتفاقية المفتاح نفسها. بهذه الطريقة، يتم الحصول على خاصية "السرية الأمامية"، أي إذا تم تسريب مفتاح Diffie-Hellman الخاص بأي شكل من الأشكال، فلا يمكن قطع الاتصالات السابقة، بل الاتصالات اللاحقة فقط. ومع ذلك، لأسباب تتعلق بالكفاءة، تقوم بعض الخوادم بإنشاء مفتاح في بداية التنفيذ ويتم إعادة استخدامه بواسطة جميع الاتصالات أثناء تنفيذ الخادم. تؤدي هذه الممارسة إلى المساس بسرية التوجيه، حيث يؤدي تسريب مفتاح DH إلى قطع جميع الاتصالات التي تم إنشاؤها منذ بدء تشغيل الخادم.
قدمت OpenSSL وظيفة في الإصدار 1.0.2 تسمح بإنشاء معلمات Diffie-Hellman الموضحة في RFC 5114. تكمن المشكلة في أن هذه المعلمات لم يتم تعريفها بشكل صحيح وهي غير آمنة. يتمكن العميل الخبيث من استخراج المفتاح الخاص للخادم باستخدام مثل هذه المعلمات إذا تمكن من الاتصال بالخادم عدة مرات، ويستخدم الخادم نفس مفتاح Diffie-Hellman في جميع الاتصالات أثناء تنفيذه. كما ذكرنا، هذا غير مستحسن، ولكنه تكوين OpenSSL الافتراضي.
المحلول
يحتوي OpenSSL على إعداد يسمى "SSL_OP_SINGLE_DH_USE". عندما يتم تمكين هذا الإعداد، فإنه يتسبب في قيام OpenSSL بإنشاء مفاتيح DH لكل اتصال جديد. عند تعطيله، وهو الإعداد الافتراضي لـ OpenSSL، يتم إنشاء زوج مفاتيح واحد عند بدء تشغيل التطبيق وإعادة استخدامه عبر جميع الاتصالات طوال وقت تشغيل التطبيق.
في أحدث إصدار له، 1.0.2f، تم تعديل OpenSSL بحيث يكون "SSL_OP_SINGLE_DH_USE" نشطًا دائمًا، مما يجعل تعطيله مستحيلًا. بالإضافة إلى ذلك، أضاف OpenSSL فحصًا على الخادم للكشف عن هذا الهجوم ومنعه من خلال التحقق من صحة المعلمات التي أرسلها العميل.
الإصدارات السابقة من OpenSSL ليست عرضة لهذا الخلل، حيث لم تكن الوظيفة التي تولد معلمات غير آمنة موجودة قبل OpenSSL 1.0.2، ولكن عائلة OpenSSL 1.0.1 قامت بإصلاحه كإجراء احترازي. مع ذلك، فإن الإصدارات الأقدم من OpenSSL لديها "SSL_OP_SINGLE_DH_USE" معطلة بشكل افتراضي. ومن المثير للاهتمام أيضًا ملاحظة أن الخيار التناظري "SSL_OP_SINGLE_ECDH_USE"، ولكن بالإشارة إلى Diffie-Hellman مع المنحنيات الإهليلجية، لا يزال معطلاً بشكل افتراضي حتى في الإصدارات الأخيرة.
ملخص
ماذا تفعل كمدير خادم:
- تمكين SSL_OP_SINGLE_USE و/أو تحديث OpenSSL إلى 1.0.2f
- تأكد من أن معلمات Diffie-Hellman لم يتم إنشاؤها باستخدام "genpkey" باستخدام خيار "dh_rfc5114"، أو باستخدام "dhparam" وخيار "-dsaparam". قد يكون من الأسهل إنشاء معلمات جديدة بدون هذه الخيارات، فقط في حالة الطوارئ.
- بدلاً من ذلك، قم بتعطيل مجموعات TLS التي تستخدم DH وتستخدم ECDH فقط (وهو أكثر كفاءة)، وقم بتمكين SSL_OP_SINGLE_ECDH_USE.
ما يجب فعله كمدير مستخدم أو عميل:
- لا داعي لفعل أي شيء، فقط الخوادم هي التي تتأثر.
المراجع:
استشارة أمنية حول OpenSSL: https://www.openssl.org/news/secadv/20160128.txt
وصف الهجوم من قبل مرتكبه: http://intothesymmetry.blogspot.com.br/2016/01/openssl-key-recovery-attack-on-dh-small.html[/ Vc_column_text] [vc_column_text]