مقال : تخزين التفضيلات الخاصه بتطبيقات الاندرويد بشكل غير امن
في المقالة السابقة، ناقشنا تقنيات شائعة لكيفية فحص التطبيقات للاجهزه التي تم عمل لها روت واكتشاف ذلك ثم كيف يمكن للمهاجم تجاوز بعض التقنيات المستخدمة من قبل المطورين. في هذه المقالة، سوف نناقش طرق مختلفة تستخدم من قبل مطوري اجهزة الأندرويد لتخزين البيانات محليا، وبعد ذلك سوف نرى كيفية تأمين هذه الأساليب .
فقدان الأجهزة مشكلة شائعة جدا مع الأجهزة النقالة. اذا كان المهاجم الذي يستطيع الوصول للجهاز بشكل مادي يمكنه أيضاً الوصول إلى البيانات الشخصية، وكذلك مشاركة البيانات المخزنة في الجهاز. ويمكن أن يكون الوضع أسوأ إذا كان الجهاز “Rooted ” . ويجب الاخذ في عين الاعتبار أنه اذا كانت آليات تخزين البيانات المستخدمة من قبل التطبيق لا يتم تنفيذها بشكل صحيح، فإن ذلك قد يؤدي إلى هجمات خطيرة .
تقنيات لتخزين البيانات في الاندرويد
يمكن للمطورين تخزين البيانات في تطبيقات الأندرويد محليا بطرق مختلفة، كالتالي :
- Shared Preferences
وهي عبارة عن ملفات XML لتخزين البيانات البدائية في قيم زوجية اساسية. وتشمل أنواع قيم البيانات المنطقية
Booleans, floats, ints, longs, and strings
- SQLite Databases
هي قواعد بيانات مستندة إلىlightweight file-based databases . وعادة ما يكون امتدادها “db.” أو “sqlite. ” يوفر أندرويد الدعم الكامل في قواعد بيانات SQLite، قواعد البيانات التي ننشئها في التطبيقات تكون قادرة على الوصول الى أي فئة في التطبيق. لا يمكن للتطبيقات الأخرى الوصول إليها.
- Internal Storage
وهي طريقة أخرى حيث يمكننا حفظ الملفات مباشرة على الجهاز. افتراضيا فإن الملفات المحفوظة على وحدة التخزين الداخلية هي خاصة ، والتطبيقات الأخرى لا يمكنها الوصول إليها . عندما يقوم المستخدم بإلغاء تثبيت التطبيق ، هذه الملفات يتم إزالتها.
- External Storage
هو المكان الذي يمكنك استخدامه لحفظ الملفات. و يمكن أن يكون وسائط التخزين القابلة للإزالة (مثل بطاقة SD الخارجية) أو وسائط التخزين الداخلية (غير قابل للإزالة). بطاقات SD الخارجية قابلة للقراءة من جميع التطبيقات .
في الجزء التالي، دعونا نرى كيف يمكن للمطورين استخدام Shared preferences لتخزين البيانات على الجهاز، وبعد ذلك سوف نرى كيف يمكن للمهاجم الوصول إلى هذه البيانات من جهاز أيضاً
المتطلبات الأساسية لمتابعة خطوات:
- جهاز كمبيوتر مثبت عليه برنامج Android SDK
- جهاز محمول (rooted) بالإضافة الى emulator لتثبيت التطبيقات
اختبار وظائف التطبيق:
وقد قمنا بوضع تطبيق للاختبار لتوضيح هذه المشكلة. يمكنك تنزيل نموذج التطبيق من المقال الاصلي. بعد تحميل التطبيق، قم بتثبيته على Android rooted device أو emulator
يمكن تثبيت التطبيق باستخدام adb باستخدام الأوامر التاليه:
adb install <name of the apk>.apk
جميع التطبيقات لديها ميزة لتخزين البيانات داخل التطبيق. عندما نقوم بتشغيلها، فإنها تبدو كما هو موضح في الشكل التالي ( Shared preferences app is used here)
لنبدأ بتشغيل تطبيق shared preferences ثم ندخل بعض البيانات في حقل اسم المستخدم و حقل كلمة المرور.
يتم إنشاء Shared preferences في تطبيقات الأندرويد باستخدام فئة SharedPreferences وفيما يلي جزء من التعليمات البرمجية المستخدمة في نموذج التطبيق المعطى للتحميل.
كما نرى في الشكل أعلاه، قمنا بإنشاء نموذج SharedPreferences وبعد ذلك قمنا باستخدامه لإدراج البيانات في ملف XML بإستخدام object Editor
الان ، دعونا نرى أين يتم تخزين هذه البيانات في التطبيق.
الموقع الشائع لتخزين SharedPreferences في apps Android هو:
/data/data/<package name>/shared_prefs/<filename.xml>
لذا، دعونا نتنقل ونتفقد المسار أعلاه لمعرفة ما إذا تم إنشاء ملف Shared preferences في هذا التطبيق
كما نرى في الشكل أعلاه، هناك مجلد باسم “shared_prefs”. ويتم انشاء هذا المجلد اذا كان هناك تطبيق يستخدم Shared preferences يمكننا تغيير الدليل إلى shared_prefs واستخدام أمر “cat” لإلقاء نظرة على محتويات هذا التطبيق على الفور.
إذا كنا نريد للحصول على ملف xml على الجهاز المحلي لدينا، يمكننا سحب الملف كما هو موضح أدناه.
كما نرى في الشكل أعلاه، تم نسخ ملف “userdetails.xml” على الجهاز المحلي. يمكننا أن نرى الآن محتويات الملف كما هو موضح في الشكل التالي
إختراق تطبيقات الألعاب لتعديل النقاط:
معظم الألعاب المتوفرة على برامج الهواتف المتنقلة هي تطبيقات محلية ولا تحتاج إلى شبكة الإنترنت عند تشغيلها . لذلك، فمن الواضح أن الإحصاءات المرتبطة باللعبة سيتم تخزينها محليا في مكان ما على الجهاز نفسه. في الأجهزة المضبوطة على برمجيه الروت (Rooted ) ، إذا بحثنا في نظام الملفات المحلي عن الملفات التي تخرن نقاط هذه الالعاب يمكننا تعديلها بسهولة وتجاوز القيود.
دعونا نذهب الى التطبيق الشائع المسمى cricket stick . هذه اللعبة تحظى بشعبية كبيرة على شبكة الإنترنت وشخصيا احبها بسبب الصعوبة في تحقيق نسبة عالية من النقاط. دعونا نرى كيف يمكننا تعديل النقاط في هذا التطبيق من backend .
متطلبات :
- جهاز يملك صلاحيات root
- أداة Droid Explorer لتحليل نظام الملفات
- ADB access on the device
عندما نشغل تطبيق cricket stick ، فإنه يمتلك نشاطاً يظهر افضل النقاط التي تم تسجيلها إلى الآن ، عموماً من الصعب تسجيل , من الصعب تحقيق 150 نقطه من لعب اللعبه خمس مرات فقط
الان، دعونا نرى كيف يمكننا اختراق هذا التطبيق لزيادة النقاط
دعونا ننتقل إلى نظام الملفات المحلي للتطبيق لمشاهدة الملفات حيث يخزن التطبيق بياناته . هذا مُبين في الشكل التالي
فتحنا adb shell على الجهاز ومن ثم قمنا برفع الامتيازات باستخدام أمر “su” . فإن كل التطبيقات المثبتة على جهاز الأندرويد ستكون جميع البيانات الخاصة بتطبيقاتها موجودة في “/ directory / data” data. لذلك، قمنا بالذهاب إلى
/data/data/com.sticksports.stickcricket/
إذا قمنا بتنفيذ أمر “ls” هنا، يمكننا أن نرى بعض الدلائل حيث يقوم التطبيق بتخزين البيانات الخاصة به. والدليل الذي يهمنا هنا هو “shared_prefs”. الآن دعونا ننتقل إلى الدليل shared_prefs لمعرفة ما إذا كان هناك أي ملفات مثيرة للاهتمام بداخله. وهذا مبين في الشكل أدناه
لقد أنتقلنا إلى دليل shared_prefs وقمنا بوضع كافة الملفات داخل هذا الدليل. هناك ثلاثة ملفات XML داخل دليل shared_prefs اذا قمنا ببعض التحليل على هذه الملفات الثلاثة، من خلال النظر في المحتويات باستخدام أمر “cat” ، فمن الواضح أن “Cocos2dxPrefsFile.xml” هو الملف الذي يتم استخدامه لتخزين جميع النقاط. الآن سنستبدل النقاط الموجودة في هذا الملف إلى النقاط التي نتمنى الحصول عليها .
للقيام بذلك، قمنا باستخدام أداة تسمى “Droid Explorer ” في نظام التشغيل Windows
يمكن تحميل Droid Explorer من موقعه الرسمي على الانترنت .
Droid Explorer هو أداة للتفاعل مع الجهاز باستخدام Windows Explorer. واجهة المستخدم الرسومية (GUI) الموجودة فيه تجعل حياتنا أسهل لأداء المهام المختلفة مثل نقل الملفات من جهاز إلى آلة بالإضافة الى إلغاء تثبيت التطبيقات و إنشاء نسخة احتياطية، الخ.
وفيما يلي الخطوات
- قم بتوصيل جهاز الأندرويد إلى الآلة .
- تشغيل Explorer Droid وانتقل إلى الدليل المراد
- اسحب الملفات الى محرر النصوص
- احذف ملف Cocos2dxPrefsFile.xml من جهاز الأندرويد باستخدامDroid Explorer
- اضغط على تعديل ملف “Cocos2dxPrefsFile.xml” من الكمبيوتر إلى الهاتف باستخدام DroidExplorer.
- إبدأ اللعبة مرة أخرى. الآن يجب أن تكون قادرا على رؤية النتيجة المعدلة والمحدثة في التطبيق كما هو مبين أدناه.
الخلاصة :
في هذه المقالة، رأينا كيف يتم تنفيذ Shared preferences في تطبيقات الأندرويد والقضايا الأمنية المرتبطة بها إذا لم يتم تنفيذها بشكل صحيح. لتأمين بيانات التطبيق، فمن المستحسن إستخدام crypto libraries المتاحة. سوف نناقش كيفية استخدام crypto libraries في تطبيقات الأندرويد في وقت لاحق في هذه السلسلة. في المقال القادم سوف نرى الطرق الأخرى لتخزين البيانات في تطبيقات الأندرويد والقضايا الأمنية المرتبطة بها .
السلام عليكم
سلسلة المقالات عن أختبار أختراق الأندرويد ممتازة جيداً , ولكن هذا المقال الثاني الذي لا يمكن تحميل التطبيق الذي تم الشرح عليه من موقع صفحة المقالة الأصلية
المقال الأول كان أكتشاف الروت في الهواتف
يرجى حل المشكلة