أمن وحماية الهواتف الذكيةالمقال المثبتمواضيع ومقالات

مقال : إستغلال ثغرة Stage Fright على أنظمة Android وإختراقها من خلال MMS

تم أرشفة هذا المحتوى


خلال الأسابيع الماضية شكلت ثغرة Stage Fright جدل عالمي كبير جداً حولها , حيث تمكنك هذه الثغرة من إختراق الأجهزة التي تعمل بنظام Android من خلال رسالة MMS فقط ! حيث قام الباحث الأمني Joshua J. Drake بإكتشاف هذه الثغرة داخل المكتبات المخصصة لمعالجة الوسائط المتعددة في أنظمة Android , حيث فور وصول رسالة وسائط متعددة إلى النظام يحدث هنالك خلل في إستقبالها ينتج عنها buffer overflow إستطاع Joshua إستغلالاه بكل عبقرية 😀 حيث أنني فور ما قمت بالإطلاع على الإستغلال ذهلت حقاً من كيفية كتابة الإستغلال الخاصة بالثغرة ومدى الإبداع الذي قام به فعلاً.

وفي هذا المقال سوف نشرح إن شاء الله كيفية إستغلال هذه الثغرة بادئاً بتحميلها وأخيراً إلى وصول سطر أوامر حقيقي على جهاز الهدف يمكننا بالتحكم به فقط من خلال إرسال ملف mp4 مصاب إلى رقم هاتف الهدف.

قبل أن نبدأ بالطبع أنا وشركة iSecur1ty عموماً ومجتمع iSecur1ty خصوصاً لا نحرض على إستغلال هذه الثغرة بأمور غير مشروعة ونخلي مسؤوليتنا الكاملة في حال إستخدام المعلومات بشكل خاطئ.

للأسف و أثناء كتابة المقال حدثت بعض المشاكل في التعامل مع شبكة MMS لدينا , ولم أتمكن من إرسال الملف بالشكل السليم وتطبيق عملي حقيقي للثغرة كما ذكرت نظراً لبعض المشاكل المؤقتة الحالية بشكبة الهاتف بالعموم في المنطقة لدي , وفور حلها سوف أقوم بتحديث المقال وشرح وصول الإتصال العكسي لدينا , ولم نريد عمل إتصال وهمي من جهاز الهدف نظراً للأمانة العلمية في نقل المعلومة 🙂

دعونا الأن نبدأ بعملية تحميل الثغرة , وهي موجوده على هذا الرابط , سوف نقوم بتحميلها وسحبها من خلال wget وتغير إسمها إلى mp4.py لكي تعمل بالشكل المطلوب معنا :

wget_stagefright

كما نشاهد قمنا بحفظ الثغرة داخل مجلد opt بإسم mp4.py , الأن سوف نقوم بإستعراض سريع للثغرة وسوف أقوم بإستخدام nano لقرأة الملف :

code_stagefright

كما نشاهد هذا جزء من ملف الثغرة وكما ذكرت مسبقاً أن أسلوب كتابة كود الإستغلال كانت رائعة جداً بالنسبة لي , حيث أن الكود موضح بشكل كبير جداً وكذلك طريقة كتابته والتعامل مع المتغيرات والمعطيات كانت رائعة كذلك , وسببت بالطبع سهولة كبيرة بقرأة الكود وفهمه وحتى التعديل عليه ليتناسب مع أي إحياجات أو أمور أخرى قد ترغب بالعمل عليها.

ومن الجدير بالذكر أنه للان لا يوجد أي Metasploit Module يقوم بالتعامل مع هذه الثغرة حتى الأن.

سوف نقوم الأن بتشغيل ملف الثغرة لنلاحظ ما هي الأمور المتاحه لنا :

help_mp4

يوجد العديد من الخيارات الخاصة بهذه الثغرة , ما يهمنا حقاً هو خيار CBHOST , CBPORT وهما الهوست والبورت الذي سوف يتم التوصل بشكل عكسي بهم لفتح سطر أوامر مع النظام , وطبعاً سوف أقوم بالتنفيذ على جهاز متوصل بالشبكة المحلية بي فقط لإتمام الإتصال العكسي مع جهازي.

لا يهم إن كان الجهاز الهدف داخل شبكتك أم لا ولكن انا هنا قمت بالتنفيذ على شبكتي لكي أقوم بالتوصل بجهاز اللابتوب الخاص بي.

حسناً سوف أقوم بإدخال الخيارات الخاصة ب CBPORT , CBHOST من خلال سطر الأوامر كما هو موضح بالصورة التالية :

run_mp4_save

كما نشاهد تم تكوين الملف وقمت بحفظه بإسم my_file.mp4 , هذا الملف سوف أقوم بإرساله إلى الهدف على أمل أن يقوم بالإتصال بي دون أي حاجه لتدخل الهدف , ولكن قبل ذلك سوف نقوم بتلقي الإتصال عبر المنفذ 8888 لكي نستقبل الإتصال القادم من الجهاز وسوف أقوم بالطبع بإستخدام أداة nc لتلقي الإتصال كما هو موضح :

nc_listen

حسناً , سوف أستخدم جهازي بعملية إرسال ملف mp4 لرقم محدد تابع لي بعد ما أقوم بنقل الملف إلى الجهازي , و

الأن سوف نقوم بإرسال الملف من خلال جهازي عبر MMS إلى الجهاز الهدف , وسوف نرى النتائج بشكل فوري إن شاء الله 🙂

في الغالب تحددك بعض الأجهزة بحجم معين لرسائل MMS  بحجم صغير ولن تستوعب حجم الملف النتاج وهو 2MB لذلك سوف نتخطى هذه المشكلة

كيف سوف نتخظى مشكلة الحجم ؟ الحل بسيط جداً هنالك تطبيقات طرف ثالث تساعدك على التحكم بحجم رسائل MMS من طرف الجهاز  وانا إستخدمت تطبيق chompSMS في عملية تعديل الحجم من خلال فتح التطبيق بعد تثبيته وتغير إعدادات رسائل الوسائط من Settings – SMS&MMS settings – MMS settings  – Send Size Limit كما يلي :

limit_mms

الأن سوف نقوم بإرسال الملف إلى الهدف كما في الصورة التالية  وإنتظار النتيجة :

send_mp4

كما يمكنكم إستخدام برامج مثل textra ورفع الحد الأعلى لرسالة MMS

طبعاً عند To نقوم بوضع رقم الهاتف ولكني قمت بوضعه بعد تصوير الشاشة 😀 , يجب أن ننتظر قليلاً لغاية وصول الملف ومن ثم تشغيله على الجهاز بشكل أوتوماتيكي من قبل النظام.

وكما ذكرت مسبقاً وجود بعض المشاكل المؤقتة في شبكة الهاتف بالعموم لذلك لن أتمكن من إرسال الملف والتطبيق بشكل عملي عليه.

أثبتت هذه الثغرة خصوصاً والثغرات التي ظهرت بأخر فترة عموماً أن نظام Android كباقي الأنظمة الأخرى يمكن أن يكون يصاب بثغرات قاتلة فيه تؤدي إلى مشاكل كبيرة للمستخدم.

كيف يمكنني حماية نفسي من ثغرة Stage Fright ؟

في البداية يجب عليك أن تقوم بالتأكد من وجود الثغرة لديك , وتستطيع تحميل تطبيق Stage Fright detector من Google Play وهذه صورة للتطبيق :

SFDT1 SFDT2

طبعاً هذا التطبيق يقوم بالتحقق من وجود الثغرة بجهازك وإعطائك النتائج وبعض المصادر كذلك.

الأن بعد التأكد من وجود الثغرة لديك , ننصحك بتعطيل خاصة التشغيل التلقائي لرسائل MMS , أو  يمكنك تشغيل الرسائل من خلال برمجية طرف ثالث تساعدك على تعطيل تشغيل رسائل MMS بكل بساطة.

هذه بعض المصادر المفيده التي يمكنكم الإعتماد عليها في مراجعة الثغرة بشكل أكبر  و أوسع :

1- إعلان نشر الإستغلال للعلن وذكر مراحل الإستغلال.

2- فيديو يوضح عملية الإستغلال والحصول على الإتصال العكسي.

4- محاضرة الباحث Joshua في مؤتمر Black Hat.

3- بيان إطلاق أداة Stage Fright Detector tool.

أنصحكم بشدة بمشاهدة محاضرة Joshua في مؤتمر Black Hat لأنها بالفعل تحتوي على معلومات رائعة وأمور من الجيد أن تكون على معرفة ودراية بها.

إلى هنا يكون إنتهى المقال , وإن شاء الله سوف نخبركم بأي تحديثات سوف نصدرها عليه بشكل مباشر , ونتمنى من أي شخص قام بتجربة الثغرة أن يقوم بإعطائنا النتائج الخاصة بها , وما هي التعليمات الكاملة التي إتبعها لمشاركتها معكم أيضاً.

مقالات ذات صلة

‫28 تعليقات

  1. الثغره مش رح تشتغل لانو لازم تعدل على بارامتر spray addr و rop pivot
    وكل جهاز الو عنوان مختلف وبعتقد اننو طريقة معرفة العنوان لاستغلال الثغره هي عن طريقة تشغيل debugger وفتح ملف الmp4 بالجهاز…
    صاحب الثغره كتب الاستغلال لتعمل فقط على جهازه وهو nexus
    if args.spray_addr == None:
    args.spray_addr = sp_addr
    if args.rop_pivot == None:
    args.rop_pivot = newpc_val

    # The address of a fake StrongPointer object (sprayed)
    sp_addr = 0x41d00010 # takju @ imm76i – 2MB (via hangouts)

    # The address to of our ROP pivot
    newpc_val = 0xb0002850 # point sp at __dl_restore_core_regs

    1. شكراً جزيلاً لك عزيزي على مشاركتك الرائعة , بالفعل عندما قمت بمراجعة الكود أثناء كتابة المقال وجدت بعض المتغيرات المطلوبة موجوده في حالة إفتراضية , وكما نرى بالأساس يمكن إدخالهم كخيارات إضافية مع توليد ملف mp4 الناتج , أنا قمت بذكر التقنية بشكل عام دون التطرق لأي أمور أخرى , شكراً جزيلاً مجدداً لإضافتك الرائعة 🙂

    1. السلام عليكم

      حجم الراسلة بتطلع 2 ميجا وشركات الجوال لا تسمح بأكثر من 100-400 كيلو لحجم الرسائل المتعددة..
      كيف بنقدر انحل المشكلة

  2. عفوا
    جميل ان الثغره يمكن استغلالها فقط صاحب الجهاز على نفسه ليختبرها وليش بشكل عشوائي على الجميع..
    اتمنى النظر ايضا على ثغرة جديده نزلت في exploit-db بأسم Android libstagefright – Integer Overflow Remote Code Execution

    1. بالضبط صديقي ,, بالأساس عندما تم طرح الثغرة تم طرحها على أساس أنها للإختبار فقط , ولكن يمكننا تنفيذ هندسة عكسية كما تناقشنا من قليل وإستخراج العناوين المطلوبه لتنفيذها على الأجهزة المختلفة , وبخصوص الثغرة سمعت عنها اليوم ويسرنا أن تقوم بالمشاركة بها معنا لإفادة الجميع 🙂

      شكراً لك مجدداً

  3. لدي سؤال بعيد عن الجانب الامني المعلوماتي وهو من اين يمكنني شراء قالب عربي مثل قالبكم سمعت عن موقع themeforest لكن القوالب كلها اجنبية اتمنا ان احصل علا قالب مثل قوالبكم وشكرا

  4. ممكن تعمل شرح عملي حول تعديل الإستغلال و تطبيقه على إحدى الأجهزة التي عندك؟
    لأنو عندي Galaxy s4 و المشكلة أنه لا يوجد valid point_sp address في تطبيق الرسائل الخاص بال Samsung
    سأقوم بتثبيت تطبيق hangouts و محاولة إستخراج العنوان

    1. لم يسبق لي القيام بتنقيح كامل لتطبيق أندرويد في الحقيقة , ولكن سوف أجعل أحد المختصين في الأندرويد لدينا يقوم بذلك إن شاء الله , أتوقع أن الثغرة ليست مرتبطة بنوع معين من تطبيقات معالجة الرسائل بقدر إرتباطها بمعالجة رسالة MMS بحد ذاتها.

  5. هل يمكن عمل اتصال عكسي مع جهاز خارج الشبكة اي بمعنى ip خاررج نطاق الشبكة المحلية اي في اي بلد في العالم يرجى ذكر الطريقة لو سمحت يعنني ممكن نغير LHOST = 192.168.1.14 الى lhost=45.69.1.25 مثلاً و هل سيحصل اتصال عكسي في هذه الحالة

    1. يجب استعمال port-forwarding لأن ip address التي تستعملها تسمى internal ip address و تحتاج لربط internal ip address مع router لإرسال أي شيء يتلقاه عبر البورت الذي تختاره إلى العنوان الذي تضعه أي external ip address

  6. الثغرة ليست في معالج رسائل Mms
    الثغرة موجودة عند تشغيل ملف mp4 معين و بالضبط في مكتبة libstagefright
    أما إستخدام mms فهي مجرد طريقة لإستغلال الثغرة
    ممكن أن تفتح مباشرة الملف الناتج عن الإستغلال

    1. كلامك صحيح عزيزي ولكن لا أتوقع أن يتم تنفيذ الإستغلال في حال تشغيل ملف mp4 بشكل عادي “مجرد رأيي” سوف أقوم بعدة محاولات لاحقاً إن شاء الله للثغرة وتدوين النتائج , يبدو أنني قد أسأت توضيح ذلك لك , شاكر جداً لك توضيح الفكرة بشكل أكبر وسوف أقوم بتحديث الموضوع إن شاء الله وذكر هذه الملاحظة , أنا حاولت أن أذكر بهذا المقال نظرة عامة وسريعة لمراحل إتمام الإستغلال وكذلك معلومات عامة وكيفية الحماية من هذه الثغرة , شكراً لك مجدداً وعيد أضحى مبارك عليك إن شاء الله 🙂

  7. “وفي هذا المقال سوف نشرح إن شاء الله كيفية “إستغلال هذه الثغرة بادئاً بتحميلها وأخيراً إلى وصول سطر أوامر حقيقي على جهاز الهدف” يمكننا بالتحكم به فقط من خلال إرسال ملف mp4 مصاب إلى رقم هاتف الهدف.”

    humm .. 🙂

    1. ذكرت عزيزي بأن هنالك خلل حدث أثناء تكملة المقال , وأنا فعلياً كتبت المقال خلال فترتين زمنيتين مختلفتين وممكن لم أتمكن من السرد بشكل صحيح لذلك من الممكن أن هنالك لبس قد حصل لك :), أعتذر عن ذلك وعيد أضحى مبارك 🙂

  8. لقد جربت تطبيق هذه الثغرة لكن لم تنجح. مع العلم ان هاتفي مصاب بهذه الثغرة
    و بالنسبة ل spray addr و rop pivot مذا يجب ان اكتب هناك ؟

  9. سلام عليكم ، اريد تعلم الهاكر الاخلاقي ، بحيث احصل على شهادة وتكون مؤهل وظيفي لي ، هل من كتب عربية في هذا المجال تؤهل خوض اختبار الهاكر ؟

  10. السلام عليكم
    أخي أتمنى أنك تقوم بطرح موضوع حول كيفية إستخراج spray addr و rop pivot الأي هاتف وكام قلت لك ياصديقي الثغرة موجودة في مكتبة libstagefright صحيح إذا شغلت ملف Mp4 لايمكن الإستغلال بشكل مباشر وذالك عائد إلى سبب طريقة كتابة سكريبت بحيث كتب على أساس رسائل ولاكن كما تعلم فهناك إستغلال أخر وهو نزل إسمه metaphor وإنما يقوم بإستغلال على شكل رابط بحيث يتم فقط إستغلال عن طريق ملف php ولاكن نفس الشيء هناك تشتغل فقط على Android 5.0.1; Nexus 5 Build ويجب عليك التعديل على بعض المتغيرات لتشغيل على هاتف أخر

اترك تعليقاً

لن يتم نشر عنوان بريدك الإلكتروني. الحقول الإلزامية مشار إليها بـ *

زر الذهاب إلى الأعلى