مقال : هجمات Content Provider Leakage على تطبيقات الاندرويد
في المقالة السابقة، ناقشنا كيف يستغل المهاجمون مكونات الانشطة الضعيفة وسبل تأمينها. وفي هذه المقالة، سوف نناقش “تسرب مزود المحتوى “.
ما هو مزود المحتوى Content Provider ؟
وفقا لنموذج الأمن الخاص بجوجل ، فإن بيانات التطبيق سرية ولا تعرض للتطبيقات الأخرى ، وبالتالي فإنه ليس من الممكن لأي تطبيق للوصول إلى البيانات تطبيق آخر بشكل افتراضي. عندما تريد التطبيقات تبادل البيانات مع التطبيقات الأخرى، فإن مزود المحتوى يعتبر وسيلة تعمل بمثابة واجهة لتبادل البيانات بين التطبيقات. موفر المحتوى يستخدم طرق الإدراج للوصول الى بيانات التطبيق مثل .
insert(), query(), update(), delete()
وهناك شكل خاص من عنوان URI يبدأ ب “//:content” تم تعيينه إلى كل موفرات المحتوى. أي ان تطبيق يعرف بعنوان “URI ” يمكنه الإدراج و التحديث و الحذف، والاستعلام عن البيانات من قاعدة بيانات التطبيق الموفر.
قد يكون هناك بعض الحالات حيث لا يقوم مزود المحتوى بتنفيذ تبادل البيانات مع تطبيقات أخرى، أو أن المطور قد يرغب بمنح إذن الوصول فقط للتطبيقات التي تمتلك اذونات خاصة . وفي مثل هذه الحالات، إذا لم يتم فرض الضوابط الأمنية المناسبة في التطبيق، فإن ذلك يؤدي إلى تسرب المعلومات.
تطبيق الرسائل القصيرة ةSMS الموجود في أجهزة الأندرويد يعد مثالاً كلاسيكيا على مزودات المحتوى. إن أي التطبيق يمكنه الاستعلام من الجهاز باستخدام عنوان URI” ” الخاص به
content://sms/inbox
ولكن، يجب إعطاء إذن بقراءة الرسائل القصيرة”READ_SMS permission ” في ملف AndroidManifest.xml على التطبيق من أجل الوصول إلى بيانات تطبيق الرسائل القصيرة .
المتطلبات الأساسية لمتابعة الخطوات:
• تثبيت برنامج SDK Android على جهاز كمبيوتر
• جهاز محمول (non-rooted ) لتثبيت التطبيق
اختبار وظائف التطبيق الرئيسية :
بعد تحميل تطبيق الاختبار، وتثبيته في الجهاز من أجل اختباره واستغلاله. ( يمكن تحميل الملف من المقالة الأصلية )
ويمكن تثبيته من “adb” باستخدام الأمر التالي:
adb install <name of the apk>.apk
يمتع مزود المحتوى بميزة تخزين البيانات داخل التطبيق. عندما نقوم بتشغيله، فإنه يبدو كما هو مبين في الشكل..
والهدف هو معرفة ما إذا كان هناك أي موفر محتوى مضمن في هذا التطبيق، وإذا كان الجواب نعم، نحن بحاجة إلى التحقق إذا كان عرضة لتسرب البيانات.
الموضوعات المتضمنة:
• جمع المعلومات
• مهاجمة موفرات المحتوى الضعيفة
• تأمين التطبيقات
جمع المعلومات:
مثل أي عملية اختبار اختراق ، دعونا نبدأ بعملية جمع المعلومات. ويفترض أن لدينا ملف APK . لذلك، قم بفك ضغط ملف APK المثبت كما هو مبين في المقال السابق و تحقق من وجود اي موفر محتوى مسجل في ملف AndroidManifest.xml . يجب علينا أيضا التحقق من الملفات smali لجميع عناوين (URI) المستخدمة في التطبيق.
يتم تسجيل مزود المحتوى عادةً في ملف AndroidManifest.xml على الشكل التالي.
لذلك دعونا نبدأ بدراسة الملف .
سجلنا مزود محتوى واحد في ملف AndroidManifest.xml والخبر الجيد انه تم تصديره لتتمكن جميع التطبيقات الأخرى من الوصول اليه
مهاجمة مزودات المحتوى الضعيفة:
هذا هو الجزء الأكثر إثارة للاهتمام. يجب الان ان نحاول الاستعلام عن مزود المحتوى الذي تم العثور عليه. فإذا قام بإعادة أي بيانات هذا يعني انه عرضة للخطر. ويمكننا التحقق بطرق متعددة.
1. باستخدام adb shell
2. عن طريق استخدام تطبيق خبيث للاستعلام
3. باستخدام Mercury Framework”
استخدام “Adb” :
للإستعلام عن مزود المحتوى من” adb”، ينبغي ان يكون التطبيق مثبتا على الجهاز. احصل على “adb shell ” على الجهاز ثم اكتب الأمر التالي للإستعلام عن مزود المحتوي. هنا سنقوم بعملية الاستعلام من عنوان “URI” الذي وجدناه في مزود المحتوى inmyprovider.smali هو الملف الذي يستخرج بإستخدام أداة apk.
Content –query –uri content://com.isi.contentprovider.MyProvider/udetails
يجب علينا الان رؤية جميع المعلومات المخزنة في تطبيق db كما تظهر في الشكل أدناه
استخدام التطبيقات الخبيثة للاستعلام:
يمكننا حتى كتابة تطبيق خبيث ليقوم بالاستعلام عن البيانات من مزود المحتوى الخاص به . وما يلي شفرة مختصرة للاستعلام عن البريد الوارد من الجهاز المحمول.
استخدامMercury Framework:
ويمكن إجراء العملية بأكملها بإستخدام Mercury Framework بطريقة أكثر كفاءة وبساطة.
تأمين التطبيقات:
Setting android:exported attribute’s value to false:
في ملف AndroidManifest.xml في التطبيق، ينبغي أن نضيف الخصائص التالية إلى مزود المحتوى لتأمينه. وهنا فإن،com.isi.contentprovider.MyProvider هو مزود المحتوى.
اذا حاولنا الاستعلام عن مزود المحتوى الذي فيه ال android:exported value is set to false فإنه سيتم طرح استثناء كما هو مبين أدناه.
ملاحظة: القيمة الافتراضية من Android:exported هي “true” لجميع التطبيقات التي تستخدم API بمستوى أقل من 17..
يمكننا أيضا فرض إذونات مستندة إلى قيود عن طريق تحديد أذونات خاصة بنشاط ما . وهذا، مفيد إذا كان المطور يريد أن يحد وصول التطبيقات التي تمتلك اذونات إلى مكونات تطبيقه
مشاكل اخرى خاصة بمزود المحتوى:
- SQL Injection: إذا كانت الضوابط الأمنية غير موجودة فإن مزود المحتوى يكون عرضة للهجمات مثل SQL Injection.
- Path Traversal: هذا نوع اخر من الهجمات التي يمكن تنفيذها إذا كان مزود المحتوى مضمن بشكل صحيح وهذا يشبه attack path Traversal على تطبيقات ويب, وتسمح للمهاجمين بالعبور وعرض ملفات النظام المحلية . الملفات الحساسة يمكن نقلها من الجهاز إلى الجهاز المحلي باستخدام تطبيق عرضة Path Traversal attack. •
ترجمه لمقال : Android Hacking and Security, Part 2: Content Provider Leakage لصاحبها Srinivas
جميل والله تسلم يدك