في عام 2014 ظهرت ثغرة بعنوان Shellshock، سيكون شرح اليوم مفصل لها للأغراض السلمية.
ما هي ثغرة Shellshock؟
ثغرة Shellshock هي عبارة عن خطأ برمجي في مفسر الأوامر bash هو اختصار لـ”Bourne-again shell” ومثال عن ثغرات ACE
(Arbitrary code execution) تحتاج ثغرات ACE إلى فهم متطور للغاية لكل من تنفيذ الأوامر والأجزاء الداخلية لعملية التنفيذ بالإضافة إلى معرفة بتخطيط الذاكرة ولغة assembly مختصر الأمر .. تحتاج إلى خبير في هذه المجالات، المهاجم يستخدم ثغرة ACE لرفع أو تنفيذ برنامج يعطيه طريقة سهلة للتحكم في آلة الهدف، هذا غالبا يتحقق بتنفيذ ما يسمى “Shell” والـ”Shell” هو عبارة عن سطر أوامر حيث يمكن للأوامر أن تدخل وتنفذ.
ثغرة الـ Shellshock هي مشكلة بحد ذاتها لأنها تمحي الاحتياج لأية مهارات ومعرفة خاصة، وتعطي طريقة سهلة (سهلة جدا) للاستيلاء والسطيرة على كمبيوتر آخر (كخادم ويب مثلا) وجعله ينفذ الأكواد.
سبب سهولة ثغرة Shellshock
حين يتسلم خادم ويب أو سيرفر طلب فإنه يكون مكون من ثلاثة مقاطع يمكن أن تكون مصابة بثغرة Shellshock: الـ URL المطلوب، الـ http header أو المعلومات المدخلة ما يسمى “arguments” (حين تكتب اسمك وبريدك الإلكتروني وتعليق فى ELMOPARMEG سيتم إرسالها كـ Arguments) وكنا قد شرحنا سابقاً استخدام الـ HTTP HEADER، الآن سنوضح بمثال بسيط لو استقبل سيرفر موقعنا طلب بسيط سيكون كالآتي:
في الطلب السابق يمكنك رؤية الـ Header وما يحتويه من معلومات عن المتصفح أو المستخدم مثلا/هو طلب للصفحة الرئيسية و Accept-Encoding ..إلخ. هذه المعلومات تقدم للسيرفر ليعرف نوع المتصفح واللغة المفضله والموقع المراد طلبه ونوع حزمة الاتصال، وليس من الشائع لهذه المعلومات أن تُحوَّل إلى متغيرات في داخل السيرفر ليقوم بدارستها.
فرضا ستظهر للسيرفر الذي طلب به صفحة موقعنا بالشكل التالي:
في حالة بقاء هذه المتغيرات في برنامج السيرفر نفسه بدون الخروج لبرامج أخرى فإن السيرفر يكون غير مصاب بثغرة Shellshock.
Shellshock تحدث حين يتم تمرير هذه المتغيرات إلى برنامج آخر يسمى “bash” وكما ذكرنا سابقا فهو مفسر ومنفذ الأوامر في أنظمة Linux. في الكثير من الأحيان تحتاج السيرفرات إلى تمرير هذه المتغيرات إلى برامج أخرى ومن الشائع أن يتم تمرير هذه المتغيرات إلى bash أو shell آخر.
ثغرة Shellshock تحدث بالتحديد حين يقوم المهاجم بتعديل طلب HTTP الأصلي وجعله يحتوي على المتغير السحري الذي هو استغلال الثغرة
ويكون على شكل
ويكون على شكل
() { :; };
في الطلب يوجد نوع المتصفح فسوف يقوم المهاجم بتغييره من Mozilla/5.0 إلى x() {:;}; /bin/cat /etc/passwd وسيكون قادرا على قراءة ملف passwd في النظام وعرضه في الصفحة المطلوبة. سوف يقرأ السيرفر الأمر وينفذه كالآتي:
الخلل في برنامج bash سوف يقرأ الجزء الأول ويهمله، وبعدها ينفذ الجزء الثاني، نعم بهذه السهولة.
استغلالات متقدمة
سنشرح الآن ما يمكن عمله بصورة سهلة جدا وخطيرة أيضا، وسوف نبدأ ببعض السيناريوهات، منها:
سحب وإرسال المعلومات إلى بريد المهاجم
يمكن للمهاجم البحث عن الثغرة واستخدام هذا الكود مثلا:
إذا كان السيرفر يملك صلاحيات ROOT (صلاحيات مستخدم كاملة أو ما يسمى Superuser ) فسوف ينفذ الأمر
whoami
الذي يستخدم لإيجاد أسماء المستخدمين الموجودين على السيرفر وبعدها إرسال رسالة بريد إلكتروني إلى myevilemail@gmail.com بعنوان example.com 1
بعدها يدخل المهاجم إلى بريده للحصول على المعلومات، نفس التكنيك يمكن استعماله لفك ضغط وإرسال ملفات كلمات السر إلى البريد.
هجوم الاستطلاع
يعد أحد أهم الهجمات في عالم الاختراق سنتطرق له في مقالات أخرى يسمى هجوم الاستطلاع أو “reconnaissance” ، في هجوم reconnaissance يرسل المهاجم أوامر سوف تقوم لاحقا بإرسال رسالة إلى آلة طرف ثالث كسيرفر مثلا، وآلة الطرف الثالث تقوم بعمل لائحة للآلات المصابة التي قامت بالاتصال بها.
في السابق كان يتم عمل الآلات وتحويلها إلى شبكات بوت نت أو لعمل سبام أو أعراض أخرى كالفساد مثلا.
وأحد أشهر التكنيكات المستعملة في reconnaissance هو استخدام الأمر
ping لجعل الآلة المصابة ترسل حزمة واحدة (تسمى ping) إلى خادم طرف ثالث يكون خاصا بالمهاجم. الاستغلال يبدو مثل:
عادة يستخدم الأمر ping لاختبار هل السيرفر “alive” أو موجود على الشبكة. إذا كان السيرفر مصابا بثغرة Shellshock سوف يرسل حزمه واحدة الموضوع عددها في (-c 1) إلى hacker-server.com مع البايلود الذي تمت إضافته في (-p). البايلود هو عبارة عن رقم أو رمز فريد من نوعه يضاف بواسطة المهاجم ليستطيع تعقب الحزمة التي تم استلامها من قبل السيرفر المصاب.
التحكم بالمكونات المادية للسيرفر
من الأمور التي يمكن إرسالها للسيرفر للتحقق من إذا ما كان السيرفر مصابا يمكن إرسال:
x هذا الأمر يقوم بعمل طلب إلى موقع example.com، فإذا كان السيرفر مصابا سوف يقوم بفتح محرك الأقراص cd او dvd، فإذا رأيت محرك الأقراص مفتوحا قد يكون المهاجم جرب ثغرة ShellShock عليك.
هجوم حجب الخدمة محليا
بطلب بسيط مثل هذا:
في الاستغلال أعلاه يحاول المهاجم بثلاث طرق تنفيذ الأمر (sleep) لأن أمر sleep قد يكون في أحد المسارات bin أو sbin أو usr/bin. الأمر يقوم بعمل إيقاف للسيرفر عن تنفيذ التعليمات لمدة 20 ثانية. إذا تم تأخير السيرفر فالسيرفر مصاب، قد يقوم المهاجم بتأخير المدة وزيادة عدد هذه الطلبات لذلك سيكون السيرفر عاجزا عن التعامل مع طلبات أخرى وبهذا يسبب DoS .
كلمة أخيرة
توجد أنواع أخرى أكثر خطورة يمكنك الاطلاع عليها لاحقا (انتظرونا).
مصادر وروابط مفيدة
- أداة لفحص السيرفر
- ShellShock
- CVE-2014-6277 , CVE-2014-6278 , CVE-2014-7169
- bash
مع تحياتي وتحيات فريق عمل "المبرمج"، لأي اسفتسار اترك تعليقا أو تواصل معنا عبر فيسبوك


