
مهمة جامعية توثق ثغرة CVE-2020-8597، وهي تجاوز سعة المخزن المؤقت (stack buffer overflow) في محلل EAP لـ pppd، مع عرض استغلال لتنفيذ تعليمات برمجية عن بعد باستخدام إعداد خادم pppoe وعميل.
معهد سريلانكا لتكنولوجيا المعلومات
الواجب 1
م. ب. د. م. دياس
IT19165530
MLB_WD_Y2S1_13.1
ثغرة تنفيذ التعليمات البرمجية عن بُعد في برنامج خادم بروتوكول نقطة إلى نقطة (CVE-2020-8597)
برمجة الشبكات والأنظمة – IE2012
المحتوى
المقدمة
بروتوكول نقطة إلى نقطة (PPP) هو بروتوكول مزدوج الاتجاه يسمح بتغليف البيانات البسيطة وتوزيعها عبر البنية التحتية للطبقة الثانية أو طبقة ارتباط البيانات، والتي تمتد من اتصالات الطلب الهاتفي عبر DSL إلى الشبكات الخاصة الافتراضية (VPN) التي تتضمن تشفير SSL. نظرًا لأن هذه البروتوكولات لا تسمح بالاتصالات من نقطة إلى نقطة، يُستخدم PPP أيضًا لفرض IP و TCP عبر عقدتين متصلتين مباشرة. pppd هو برنامج خادم يُستخدم في أنظمة التشغيل الشبيهة بـ Unix لإدارة إنشاء جلسات PPP وإنهاء الجلسات بين عقدتين.
PPP هو البروتوكول المستخدم لإنشاء اتصالات الإنترنت عبر مودمات الطلب الهاتفي واتصالات DSL والعديد من أشكال الاتصالات الأخرى من نقطة إلى نظير عبر الشبكات الخاصة الافتراضية (VPN)، مثل بروتوكول tunneling من نقطة إلى نقطة (PPTP). يمكن لبرنامج pppd أيضًا مصادقة النظير المتصل بالشبكة و/أو تزويد النظير بتفاصيل المصادقة باستخدام بروتوكولات مصادقة متنوعة مثل EAP.
بسبب خلل في معالجة برنامج خادم بروتوكول نقطة إلى نقطة (pppd) لحزمة بروتوكول المصادقة القابل للتوسيع (EAP)، يمكن لمهاجم بعيد غير موثوق أن يتسبب في تجاوز سعة المخزن المؤقت للمكدس، مما قد يسمح بتنفيذ تعليمات برمجية عشوائية على النظام المستهدف. يحدث هذا الضعف بسبب خطأ في التحقق من حجم الإدخال قبل نسخ البيانات المقدمة إلى الذاكرة. نظرًا لعدم صحة التحقق من صحة حجم البيانات، يمكن نسخ بيانات عشوائية إلى الذاكرة مما قد يؤدي إلى تسرب الملفات والمساهمة في تنفيذ تعليمات برمجية غير مقصودة.
يكمن الضعف في منطق كود تحليل EAP، وتحديدًا في دوال eap request() و eap response() في ملف eap.c والتي يستدعيها معالج إدخال الشبكة. تستخدم هذه الدوال، باستخدام البايت الأول كنوع، مؤشرًا وطولًا كمدخلات. إذا كان النوع هو EAPT MD5CHAP(4)، فإنها تنظر إلى منطقة مضمنة بطول 1 بايت. يهدف المنطق في هذا الكود إلى التأكد من أن المدة المضمنة أقل من الطول الإجمالي للحزمة. بعد هذا التحقق، تحاول نسخ البيانات المقدمة (اسم المضيف)، والتي توجد في مخزن مؤقت محلي للمكدس بعد حقل الطول المضمن. هذا التحقق للحدود غير صحيح ويسمح بنسخ الذاكرة بطول بيانات عشوائي.
يؤدي خطأ منطقي إضافي إلى عدم قيام الدالة eap input() باختبار ما إذا تم حل EAP أثناء عملية بروتوكول التحكم في الخط (LCP). يسمح هذا لمهاجم غير موثوق بإرسال حزمة EAP حتى إذا رفض ppp التفاوض على المصادقة بسبب عدم دعم EAP أو بسبب عدم الامتثال لعبارة مرور مشتركة متفق عليها مسبقًا في مرحلة LCP. في eap input، يجب أن يستمر كود pppd غير الآمن في معالجة حزمة EAP ويسبب تجاوز سعة المخزن المؤقت للمكدس. يمكن استخدام هذه البيانات غير المؤكدة وغير المعروفة الحجم لاختراق ذاكرة الجهاز الهدف. يعمل pppd أيضًا بامتيازات عالية (النظام أو الجذر)، ويعمل بالتكامل مع برامج تشغيل kernel.
يُستخدم برنامج pppd أيضًا مع مشروع LWIP (IP خفيف الوزن) لتوفير قدرة pppd لأجهزة الكمبيوتر الصغيرة. تركيبات وتثبيتات lwIP الافتراضية ليست عرضة لفيض المخزن المؤقت هذا. ومع ذلك، إذا تم استخدام كود مصدر lwIP وتم تعديله صراحةً للسماح بـ EAP في وقت الترجمة، فقد يكون البرنامج عرضة لفيض المخزن المؤقت.
CVE-2020-8597 هو خطأ في فيض المخزن المؤقت في pppd بسبب عيب مفاهيمي في معالج حزمة بروتوكول المصادقة القابل للتوسيع (EAP). يمكن لمهاجم بعيد غير موثوق يرسل حزمة EAP مصممة خصيصًا إلى عميل أو خادم PPP ضعيف أن يتسبب في حالة رفض الخدمة أو تنفيذ تعليمات برمجية عشوائية. نظرًا لأن pppd يعمل بالتكامل مع برامج تشغيل kernel وله أيضًا امتيازات عالية، مثل الجهاز أو النواة، فإن أي تنفيذ تعليمات برمجية قد يتم أيضًا بنفس الامتيازات.
الإشارة إلى من اكتشف الثغرة
اكتشفها الباحث في أمان IOActive، إيلجا فان سبرونديل، المشكلة الحرجة هي ثغرة فيض مخزن مؤقت للمكدس تنشأ بسبب خطأ منطقي في محلل وحدة بروتوكول المصادقة القابل للتوسيع (EAP) في تطبيقات pppd، وهو امتداد يوفر دعمًا لطرق مصادقة إضافية في اتصالات PPP.
يمكن استغلال الضعف، الذي يُراقب تحت CVE-2020-8597 بنتيجة CVSS 9.8، من قبل مهاجمين غير موثوقين لتنفيذ تعليمات برمجية عشوائية عن بُعد على الأجهزة المتأثرة والسيطرة الكاملة عليها.
كيف تم اكتشافها
يُعزى هذا الضعف إلى خطأ في التحقق من حجم الإدخال قبل نقل البيانات إلى الذاكرة. نظرًا لأن التحقق من صحة حجم البيانات خاطئ، يمكن نسخ بيانات عشوائية إلى الذاكرة وقد يؤدي ذلك إلى تجزئة قاعدة البيانات، مما يساهم على الأرجح في تنفيذ تعليمات برمجية غير مصرح بها.
تم العثور على الثغرة في منطق كود تحليل EAP، وتحديدًا في دوال eap request() و eap response() في ملف eap.c، والتي يتم استدعاؤها بواسطة معالج إدخال الشبكة.
من الخطأ الاستنتاج أن pppd ليس غير آمن إذا لم يتم السماح بـ EAP أو إذا لم يتم بدء EAP بواسطة نظير بعيد باستخدام كلمة مرور أو عبارة مرور. وذلك لأن متطفلاً موثوقًا قد يكون دائمًا قادرًا على إرسال حزمة EAP غير مرغوب فيها لإحداث فيض مخزن مؤقت.
تم تحديد الثغرة في برنامج خادم بروتوكول نقطة إلى نقطة (PPP)، أو pppd. PPP هو بروتوكول طبقة 2 يُستخدم لإنشاء اتصالات عبر مودمات الطلب الهاتفي واتصالات DSL والعديد من الشبكات المادية الأخرى، بما في ذلك الشبكات المحمولة. تم تضمين PPP وتوسيعه ليشمل بروتوكولات إضافية، مثل بروتوكول tunneling من نقطة إلى نقطة (PPTP) المستخدم في الشبكات الخاصة الافتراضية (VPN) لتوفير اتصالات مشفرة.
طوال هذه الحالة، تعاون فريق تعاون SEI CERT مع محلل الأمان إيلجا فان سبرونديل (IOActive) الذي اكتشف هذا الخلل والمطور البرمجي بول ميكراس (OZlabs) الذي يدير الكود المصدري لفحص المشكلة بسهولة وإيجاد حل بديل. تضمنت المشكلة فيض مخزن مؤقت في الكود المصدري لـ pppd بسبب فيض مخزن مؤقت أساسي في التعبير المنطقي وتنفيذ العبارات الشرطية الناتجة. يمكن خداع الجملة أدناه للسماح بتغذية راجعة ذات مدة غير معروفة ونسخها إلى مخزن مؤقت للمكدس. يُشار إلى ذلك عادةً باسم تحميل الإطار أو فيض المخزن المؤقت للمكدس.
if (vallen >= len + sizeof(rhostname)) { // Copy to buffer rhostname
كان إصلاح الثغرة هو ببساطة تغيير العبارة أعلاه إلى المنطق المنطقي أدناه.
if (len-vallen >= sizeof(rhostname)) { // Copy to buffer rhostname
أصدر بول CVE-2020-8597 لهذا الخلل واستمر في إصلاحه في الكود المصدري الذي يديره. تحديث النظام المطلوب لتصحيح الخطأ هو تحديث بسيط يتطلب بضعة أسطر فقط من التعليمات البرمجية. ومع ذلك، توجد هذه التكنولوجيا غير الآمنة في آلاف مكتبات مشاريع البرمجيات. تم اعتمادها من قبل أكثر من 100 شركة تقدم أجهزة وصول إلى الشبكة تتراوح من أجهزة التوجيه المنزلية إلى أجهزة الشبكات التجارية. نظرًا لأن هذا الضعف يؤثر على جميع عملاء وخوادم PPP، فإنه يؤثر أيضًا على مزودي خدمة الإنترنت (ISPs).
متى تم اكتشافها
في 4 مارس 2020، نشر باحثون في مركز تنسيق CERT (CERT/CC) ملاحظة ثغرة # 782301 لثغرة حرجة في إصدارات برنامج خادم بروتوكول نقطة إلى نقطة (pppd) من 2.4.2 إلى 2.4.8، مع الإفصاح المنسوب إلى إيلجا فان سبرونديل من IOActive.
ما الضرر الذي يمكن أن تسببه
من خلال إرسال حزمة EAP غير مرغوب فيها إلى عميل أو خادم PPP ضعيف، يمكن لمتطفل بعيد غير موثوق أن يتسبب في تلف الذاكرة في عملية pppd، مما قد يتطلب تنفيذ تعليمات برمجية عشوائية.
وفقًا للباحث، فإن إصدارات برنامج خادم بروتوكول نقطة إلى نقطة من 2.4.2 إلى 2.4.8 — جميع الإصدارات المنشورة في آخر 17 عامًا — معرضة لخطأ تنفيذ التعليمات البرمجية عن بُعد الجديد هذا. تم بالفعل الإبلاغ عن تأثر العديد من توزيعات Linux الشائعة والناجحة المذكورة أدناه، ومن المحتمل أن تتأثر العديد من المشاريع الأخرى أيضًا.
Debian Ubuntu SUSE Linux Fedora NetBSD Red Hat Enterprise Linux
بالإضافة إلى ذلك، من المحتمل أيضًا أن يكون عدد التطبيقات والأجهزة الأخرى القابلة للتأثر (بعضها مذكور أدناه) التي تشحن تطبيقات pppd واسعًا، مما يوفر سطح هجوم واسع للمتسللين.
Cisco CallManager منتجات TP-LINK نظام التشغيل المضمن OpenWRT منتجات Synology
بسبب خلل في معالجة حزمة بروتوكول المصادقة القابل للتوسيع (EAP) في برنامج خادم بروتوكول نقطة إلى نقطة (pppd)، قد يتمكن مهاجم بعيد غير موثوق من التسبب في تجاوز سعة المخزن المؤقت للمكدس، مما قد يسمح بتنفيذ تعليمات برمجية عشوائية على النظام المستهدف. يرجع هذا الضعف إلى خطأ في التحقق من حجم الإدخال قبل نسخ البيانات المقدمة إلى الذاكرة. نظرًا لأن التحقق من صحة حجم البيانات غير صحيح، يمكن نسخ بيانات عشوائية إلى الذاكرة والتسبب في تلف الذاكرة مما قد يؤدي إلى تنفيذ تعليمات برمجية غير مرغوب فيها.
ما تقنيات الاستغلال
المشكلة الحرجة هي ثغرة فيض مخزن مؤقت للمكدس تنشأ بسبب خطأ منطقي في محلل حزمة بروتوكول المصادقة القابل للتوسيع (EAP) في برنامج pppd، وهو امتداد يوفر دعمًا لطرق مصادقة إضافية في اتصالات PPP.
لهذا، كل ما يحتاج المهاجم فعله هو إرسال حزمة EAP مشوهة غير مرغوب فيها إلى عميل أو خادم PPP ضعيف عبر رابط تسلسلي مباشر، أو ISDN، أو Ethernet، أو SSH، أو socket CAT، أو PPTP، أو GPRS، أو شبكات ATM. بالإضافة إلى ذلك، نظرًا لأن pppd يعمل غالبًا بامتيازات عالية ويعمل بالتنسيق مع برامج تشغيل kernel، فقد يسمح الخلل للمهاجمين بتنفيذ تعليمات برمجية ضارة بامتيازات النظام أو مستوى الجذر. طريقة الاستغلال التي اخترتها
طريقة تنفيذ التعليمات البرمجية عن بُعد المستخدمة لاستغلال العميل الضعيف. يتعلق تنفيذ التعليمات البرمجية عن بُعد (RCE) بقدرة متسلل إلكتروني على الدخول وإجراء تعديلات على جهاز يتحكم فيه شخص آخر، دون إذن ودون معرفة مكان وجود الجهاز. يسمح RCE للمهاجم بالسيطرة على جهاز كمبيوتر أو خادم عن طريق تشغيل برامج ضارة (برامج ضارة) عشوائية.
أستخدم جهازين افتراضيين للاختبار على نفس الكمبيوتر. واحد كخادم والآخرة كعميل. لتوصيل الأجهزة الافتراضية، أقوم بتثبيت SSH. باستخدام عناوين IP الخاصة بهما، أقوم بتوصيل جهاز Fedora 29 الافتراضي كجانب الخادم وجهاز Kali Linux الافتراضي كجانب العميل الضعيف. وفقًا للتعليمات، قمت بإعداد خادم PPPoE. بعد فتح وضع التصحيح وتعيين ملف السجل وإضافة ما يلي إلى ملف السجل '/etc/ppp/pppoe-server-options'. ثم قم بإعداد عميل PPPoE عن طريق إدخال 'sudo pppoeconf'. أخيرًا، باستخدام كود Python، يمكن استغلال العميل الضعيف. أيضًا عن طريق إرسال حزمة EAP غير مرغوب فيها إلى عميل PPP ضعيف، يمكن للمهاجم البعيد التسبب في تلف الذاكرة في عملية pppd، مما قد يسمح بتنفيذ تعليمات برمجية عشوائية.
لقطات شاشة للاستغلال
اختبار ping مع العميل الضعيف
تثبيت SSH على الخادم
الحصول على وصول الجذر إلى جانب العميل
بعد الحصول على وصول الجذر للعميل
تمكين SSH في جانب العميل
التعطل
النتيجة
الخاتمة
GitHub Security Lab للإنقاذ
بينما كان فيجاي سارفيبالي يبحث في مبادرة حماية GitHub الأخيرة، أراد فيجاي سارفيبالي تحديد فرص للاستفادة من API GitHub وحلول CodeQL لمعالجة المشكلة، واستخدم الكود لاقتراح الإصلاح لمستخدمي مستودعات البرامج. لقد اتصل بقائد الحماية الحكومي لدينا، آلان فريدمان (مدير مبادرات الأمن السيبراني في الإدارة الوطنية للاتصالات والمعلومات (NTIA) في وزارة التجارة الأمريكية)، والذي قام بتجميع مجموعة من المنظمات، بما في ذلك GitHub، لإنشاء قائمة مواد برمجية (SBOM). عرّف آلان فيجاي سارفيبالي على الأشخاص في GitHub الملتزمين بالسرية، وقد وضعوني على اتصال برئيس GitHub Security Lab، نيكو وايسمان.
وجد نيكو وفريقه الدولي في GitHub Security Lab بسرعة طريقة لتكييف آلية التصحيح الأمني الخاصة بهم مع هذه المشكلة. لقد قاموا بتشغيل تقنية "روبوت" تلقائية تواصلت مع مالكي جميع المستودعات المتأثرة بهذا الخلل. كان على مالكي المستودعات فقط اتخاذ بضع خطوات سريعة لإصلاح وتأمين نسختهم المنسوخة أو المتفرعة من برنامج pppd، لإصلاح الخلل. أخذتنا هذه المبادرة المجتمعية إلى المرحلة التي تم فيها إصلاح التكنولوجيا. قدم هذا نهجًا معياريًا وفي الوقت المناسب لتنفيذ تحسينات على الكود المصدري لتعزيز الحماية. في غضون أربعة أيام من التحديثات التلقائية لـ GitHub Security Lab، قدم 1,896 مالك مستودع تفاصيل الخلل ومنحوا خيار إصلاحه بنقرات قليلة. وافق ما لا يقل عن 42 من هؤلاء المالكين على تصحيح تلقائي؛ وأكد 13 آخرون أن المشكلة قد تم إصلاحها بالفعل. بدون التشغيل الآلي، سيستغرق الأمر عدة أيام للاتصال بمالكي المستودعات المتأثرة لإصلاح تطبيقاتهم.
تحدي وزارة الدفاع ودور CERT في مستقبل البرمجيات
كمركز أبحاث وتطوير ممول فيدراليًا (FFRDC)، يواجه معهد هندسة البرمجيات (SEI) بجامعة كارنيجي ميلون وقسم CERT باستمرار التحديات التي تواجهها وزارة الدفاع الأمريكية (DoD) في الفضاء الإلكتروني. قال تيري هالفورسن، كبير مسؤولي المعلومات في وزارة الدفاع، وهو مُبشر مشهور بالأمن السيبراني، إن "الإجراءات الدفاعية والهجومية الإلكترونية ستحدث في أجزاء من الثانية" في خطابه في مؤتمر AFCEA. لا يمكن تنفيذ هذه الإجراءات الدفاعية الإلكترونية المرغوبة يدويًا أو من خلال عمليات اتصال مرهقة. يجب تقديمها عبر البرمجيات وأتمتتها قدر الإمكان للحد من المشاكل مع نماذج التصحيح الحالية التي تتضمن الإنسان في الحلقة.
طوال أنشطة إدارة التهديدات المحتملة، نتوقع تحديد المواقف التي يمكننا فيها الاستفادة من الحوافز (مثل هذه الشراكة مع GitHub Security Lab) لتسريع تصحيح الكود المصدري ضد ثغرات أمن المعلومات. على الرغم من أننا ندرك أن هذا لن يحل أي مشكلة تتعلق بحماية المعلومات وليس بديلاً لممارسات الترميز الجيدة، إلا أننا ندرك أن الأخطاء قد تميل إلى الظهور في المعلومات بعد نشرها. عندما تكون المعلومات منتشرة في حياتنا اليومية، لا يمكن حماية المعلومات إلا من خلال التحديد السريع للثغرات — وإذا أمكن، من خلال أتمتة كل من التحديد والإجابة.
المراجع
• https://www.kb.cert.org/vuls/id/782301/ • https://thehackernews.com/2020/03/ppp-daemon-vulnerability.html • https://www.tenable.com/blog/cve-2020-8597-buffer-overflow-vulnerability-in-point-to-point-protocol-daemon-pppd • https://insights.sei.cmu.edu/cert/2020/03/security-automation-should-begin-at-the-source.html • https://packetstormsecurity.com/files/156802/pppd-2.4.8-Buffer-Overflow.html • https://www.drizgroup.com/driz_group_blog/what-is-remote-code-execution-attack-how-to-prevent-this-type-of-cyberattack • https://github.com/WinMin/CVE-2020-8597 • http://www.howtodoityourself.org/pppoe-server-how-to-do-it-yourself.html