مقال : استغلال Broadcast Receivers على اجهزة الاندرويد
في المقالة السابقة , تحدثنا عن الهجمات المرتبطة بمكونات النشاط, تسريبات مزود المحتوى وطرق تأمينها. في هذه المقالة سوف نناقش الهجمات على مستقبلات البرودكاست.
ملاحظة : تم استخدام كلمة برودكاست في هذا المقال والتي تعني : اشارة يرسلها التطبيق لمستقبلات البرودكاست .
ماهي مستقبلات البرودكاست
مستقبلات البرودكاست تعتبر مكون مهم من مكونات الأندرويد. مستقبلات البرودكاست سُجلت لاحداث معينة ستحصل. عندما يقع حدث معين, يتم استدعاء المستقبل حينها وينفذ المهام, مثل إظهار رسالة للمستخدم. مايمكننا ان نقوم به بمستقبلات البرودكاست يعود الى إبداع المطور.
المخاطر الأمنية
لفهم المخاطر الأمنية المرتبطة بمستقبلا البرودكاست, يجب ان نعلم عن كيفية بث الأحداث. يوجد نوعين من الأحداث.
1. أحداث النظام
يمكن تسجيل التطبيق لإستقبال البرودكاست الناتج من أحداث النظام مثل: الإقلاع الكامل, إستلام الرسالة, البطارية المنخفضة, الخ. عندما يسجل التطبيق لحدث إستلام الرسائل, مستقبل التطبيق سوف يتدخل بكل مرة يتم فيها إستلام رسالة.
2. برودكاست خاص
بمعزل عن أحداث النظام المتولدة, يمكن للتطبيق توليد بعض البرودكاست بهدف تمكيننا من تسجيل مستقبل.
الأن لننظر على بعض الأسئلة.
- عندما يرسل تطبيقنا رسالة برودكاست (intent) فانه يُستلم من قبل التطبيق المقصود, او غنه يستلم من قبل كل التطبيقات.
- عندما نقوم بتسجيل مستقب برودكاست, هل نقوم بإستقبال كل البرودكسات من مصادر قانونية, او يتكم ان تطبيق خبيث من خداع هذه المستقبلات.
اذا لم يقم المطور بفرض سيطرته على من يمكنه الإرسال ومن لايمكنه الإرسال, فبتأكيد ستكون الاجابة بنعم. اذا وافق المستقبل على البرودكاست من مصادر غير موثوقة, فيمكن ان تضع تطبيقنا في وضع خطر.
لإيضاح كيفية إسستغلال مثل هذه السيناريوهات, قمت بتطوير تطبيق بسيط. يمكنك التحميل من المقالة الاصليه.
المتطلبات الرئيسية لإتباع الخطوات
- جهاز كميتوتر مع SDK منصب.
- محاكيين(في حالتي, emulator-5554 حيث يوجد التطبيق المعرض للهجوم, emulator-5556 لإستلام الرسائل من التطبيق المعرض للهجوم).
إختبار وظائف التطبيق
بعد تحميل التطبيق, قم بتنصيبه على محاكي بغرض إختباره وإستغلاله.
يمكن تنصيبه بواسطة adb بإستخدام الامر:
adb install <name of the apk>.apk
عندما نقوم بتشغيل التطبيق, سيظهر كما في الصورة بالأسفل. تحتاج للتسجيل برقم هاتف خاص. وبعد الضغط على زر submit, برودكاست معدلة سترسل وسوف نستقبل رسالة تأكيد على الرقم المسجل”registered” (في حالتي emulator-5556).
الهدف من هذا هو إرسال برودكاست مزيفة ورؤية ما اذا التطبيق سيوافق عليها. فاذا وافق, سوف نستغل التطبيق لإرسال رسالة نصية لبعض ارقام الموبايل العشوائية بإستخدام برودكسات مزيفة.
المواضيع المشاركة
- فهم طريقة عمل التطبيق.
- الهجوم على مستقبلات البرودكاست المصابة بثغرات.
- تأمين التطبيق.
فهم وظيفة عمل التطبيق
مستقبل البروكسات “MyBroadCastReceiver” مسجل في ملف AndroidManifest.xml.
مستقبل البرودكاست مسجلون حسب الصيغة التالية. يبدو الكود غير أمن منذ تصدير المستقبل.
يرسل التطبيق نيته بواسطة المود التالي, input يعتبر رقم الموبايل الذي سنستقبله كمدخل من المستخدم.
الكود التالي يأخذ رقم الموبايل من البرودكاست ويرسل رسالة تاكيد نصية للرقم المسجل.
في القسم التالي, سوف نحاول إستغلال الوظيفة الموجودة في الأعلى بواسطة إرسال برودكاست من مصادر غير موثوقة.
الهجوم على مستقبلات البرودكاست المصابة بالثغرات
لنحاول الان بإرسال برودكاست مزيفة الى المستقبل الموجود في الأعلى. يمكن تنفيذ ذلك بعدة طرق.
- بإستخدام أداة am المتاحة في adb.
- بإستخدام تطبيق خبيث للإستعلام.
- بإستخدام Mercury فريمورك.
بإستخدام adb
إحصل على شيل adb على الجهاز واكتب الأمر التالي لإرسال برودكاست مزيفة.
am broadcast -a MyBroadcast -n
com.isi.vul_broadcastreceiver/.MyBroadCastReceiver
الأمر هذا يرسل برودكاست, لكن لايحتوي على رقم موبايل. يمكننا تمرير رقم الموبايل كـ string بإستخدام خيار es- المتاح في أداة am. الأن, الأمر في الاعلى سيصبح:
am broadcast -a MyBroadcast -n
com.isi.vul_broadcastreceiver/.MyBroadCastReceiver –es number 5556.
نفس الشئ موضوح في الصورة.
الأن, حدث البرودكاست سيرسل الى الخلفية, وبما ان التطبيق لايوقمبالتحقق من مصدر الإدخال’ سترسل رسالة نصية الى emulator-5556 بدون إعتراض من المستخدم.
بإستخدام تطبيق خبيث للإستعلام
أيضا يمكننا كتابة تطبيق خبيث لإرسال برودكاست وإستغلال الأداء الوظيفي للتطبيق الضعيف. الجزء الجميل هو أن التطبيق الخبيث لايحتاج أذن SEND_SMS بما انه يسخدم الأذن المسجل من قبل التطبيق الضعيف.
بإستخدام Mercury فريمورك
العملية الكاملة يمكن تنفيذها بإستخدام Mecury فريمورك بطريقة أبسط وأكثر فعالية.
تأمين التطبيق
1. تحويل قيمة android:exported الى false
في ملف AndroidManifest.xml في تطبيقنا, يجب إضافة الخاصية التالية للمستقبل لتأمينه.
2. الحد من الوصول بصلاحيات مخصصة
يمكننا فرض قيود على الأذونات بتعريف الأذونات المخصصة لكل مستقبل وهذا شئ جيد اذا أراد المطور للحد من الوصول الى مكونات تطبيه , هذا يساعد المطوريين لوضع صلاحيات على البرمجيات لمنع التطبيقات الاخرى من الوصول الى بعض المكونات .
هذا هو السبب لماذا نحتاج لتحديد أذن “android.permission.RECEIVE_SMS” في ملف AndroidManifest.xml اذا اراد اي تطبيق الإستماع لحدث إستلام الرسالة النصية بإستخدام عمل “android.provider.Telephony.SMS_RECEIVED“.
الكلمات الأخيرة
في نظام الأندرويد, مستقبلات البرودكاست تزود أداء وظيفي عظيم لتطوير تطبيقات إبداعية. لكن عند عدم فرض تطبيقات أمنية صحيحة يمكن ان يؤدي الى هجومات جدية. لذا دائما من الأفضل تجريب جميع مكونات التطبيق خلال إختبار الإختراق.
ترجمة مقال Android Hacking and Security, Part 3: Exploiting Broadcast Receivers لصاحبها Srinivas.