في المقالة السابقة، ناقشنا كيف يستغل المهاجمون مكونات الانشطة الضعيفة وسبل تأمينها. وفي هذه المقالة، سوف نناقش “تسرب مزود المحتوى “.

ما هو مزود المحتوى Content Provider ؟


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

insert(), query(), update(),  delete()

وهناك شكل خاص من عنوان URI يبدأ ب “//:content” تم تعيينه إلى كل موفرات المحتوى. أي ان تطبيق يعرف بعنوان “URI ” يمكنه الإدراج و التحديث و الحذف، والاستعلام عن البيانات من قاعدة بيانات التطبيق الموفر.

image1

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

تطبيق الرسائل القصيرة ةSMS الموجود في أجهزة الأندرويد يعد مثالاً كلاسيكيا على مزودات المحتوى. إن أي التطبيق يمكنه الاستعلام من الجهاز باستخدام عنوان URI” ” الخاص به

content://sms/inbox

ولكن، يجب إعطاء إذن بقراءة الرسائل القصيرة”READ_SMS permission ” في ملف AndroidManifest.xml على التطبيق من أجل الوصول إلى بيانات تطبيق الرسائل القصيرة .

 

المتطلبات الأساسية لمتابعة الخطوات:


• تثبيت برنامج SDK Android على جهاز كمبيوتر

• جهاز محمول (non-rooted ) لتثبيت التطبيق

اختبار وظائف التطبيق الرئيسية :


بعد تحميل تطبيق الاختبار، وتثبيته في الجهاز من أجل اختباره واستغلاله. ( يمكن تحميل الملف من المقالة الأصلية )

ويمكن تثبيته من “adb” باستخدام الأمر التالي:

adb install <name of the apk>.apk

يمتع مزود المحتوى بميزة تخزين البيانات داخل التطبيق. عندما نقوم بتشغيله، فإنه يبدو كما هو مبين في الشكل..

image2

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

 

الموضوعات المتضمنة:


• جمع المعلومات

• مهاجمة موفرات المحتوى الضعيفة

• تأمين التطبيقات

 

جمع المعلومات:


مثل أي عملية اختبار اختراق  ، دعونا نبدأ بعملية جمع المعلومات. ويفترض أن لدينا ملف APK . لذلك، قم بفك ضغط ملف APK المثبت كما هو مبين في المقال السابق و تحقق من وجود اي موفر محتوى مسجل في ملف AndroidManifest.xml . يجب علينا أيضا التحقق من الملفات smali لجميع عناوين (URI) المستخدمة في التطبيق.

يتم تسجيل مزود المحتوى عادةً في ملف AndroidManifest.xml على الشكل التالي.

image3

لذلك دعونا نبدأ بدراسة الملف .

image4

سجلنا مزود محتوى واحد في ملف 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 كما تظهر في الشكل أدناه

image5

 

استخدام التطبيقات الخبيثة للاستعلام:


يمكننا حتى كتابة تطبيق خبيث ليقوم بالاستعلام عن البيانات من مزود المحتوى الخاص به . وما يلي شفرة مختصرة للاستعلام عن البريد الوارد من الجهاز المحمول.

image6

 

استخدامMercury Framework:


ويمكن إجراء العملية بأكملها بإستخدام Mercury Framework بطريقة أكثر كفاءة وبساطة.

 

تأمين التطبيقات:


 Setting android:exported attribute’s value to false:

في ملف AndroidManifest.xml في التطبيق، ينبغي أن نضيف الخصائص التالية إلى مزود المحتوى لتأمينه. وهنا فإن،com.isi.contentprovider.MyProvider هو مزود المحتوى.

image7 اذا حاولنا الاستعلام عن مزود المحتوى الذي فيه ال android:exported value is set to false فإنه سيتم طرح استثناء كما هو مبين أدناه.

image8

ملاحظة: القيمة الافتراضية من 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