محترف الحاسوب: تخزين التفضيلات الخاصه بتطبيقات الاندرويد بشكل غير امن

ليس العار في أن نسقط ولكن العار ألا نستطيع النهوض

محترف الحاسوب مدونة تهتم بكل ما هو جديد بعالم التكنولوجيا والانترنت والحاسوب بشكل وتقدم اخر الاخبار و افضل البرامج و تضم مجموعة من المواضيع المفيدة في شتى مجالات التقنية

يتم التشغيل بواسطة Blogger.

محترف الحاسوب


الأربعاء، 26 أكتوبر 2016

تخزين التفضيلات الخاصه بتطبيقات الاندرويد بشكل غير امن

فقدان الأجهزة مشكلة شائعة جدا مع الأجهزة النقالة. اذا كان المهاجم الذي يستطيع الوصول للحهاز بشكل مادي  يمكنه أيضاً الوصول إلى البيانات الشخصية، وكذلك مشاركة البيانات المخزنة في الجهاز. ويمكن أن يكون الوضع أسوأ إذا كان الجهاز “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

image1
جميع التطبيقات لديها ميزة لتخزين البيانات داخل التطبيق. عندما نقوم بتشغيلها، فإنها تبدو كما هو موضح في الشكل التالي ( Shared preferences app is used here)
image2

لنبدأ بتشغيل تطبيق shared preferences ثم ندخل بعض البيانات في حقل اسم المستخدم و حقل كلمة المرور.
يتم إنشاء Shared preferences في تطبيقات الأندرويد باستخدام فئة SharedPreferences وفيما يلي جزء من التعليمات البرمجية المستخدمة في نموذج التطبيق المعطى للتحميل.
image3
كما نرى في الشكل أعلاه، قمنا بإنشاء نموذج SharedPreferences وبعد ذلك قمنا باستخدامه لإدراج البيانات في ملف XML بإستخدام object Editor
الآن، دعونا نرى أين يتم تخزين هذه البيانات في التطبيق.
الموقع الشائع لتخزين SharedPreferences في apps Android هو:
/data/data/<package name>/shared_prefs/<filename.xml>
لذا، دعونا نتنقل ونتفقد المسار أعلاه لمعرفة ما إذا تم إنشاء ملف Shared preferences في هذا التطبيق
image4
كما نرى في الشكل أعلاه، هناك مجلد باسم “shared_prefs”. ويتم انشاء هذا المجلد اذا كان هناك تطبيق يستخدم Shared preferences  يمكننا تغيير الدليل إلى shared_prefs واستخدام أمر “cat” لإلقاء نظرة على محتويات هذا التطبيق على الفور.
إذا كنا نريد للحصول على ملف xml على الجهاز المحلي لدينا، يمكننا سحب الملف كما هو موضح أدناه.
image5
كما نرى في الشكل أعلاه، تم نسخ ملف “userdetails.xml” على الجهاز المحلي. يمكننا أن نرى الآن محتويات الملف كما هو موضح في الشكل التالي
image6

إختراق تطبيقات الألعاب لتعديل النقاط:


معظم الألعاب المتوفرة على برامج الهواتف المتنقلة هي تطبيقات محلية ولا تحتاج إلى شبكة الإنترنت عند تشغيلها . لذلك، فمن الواضح أن الإحصاءات المرتبطة باللعبة سيتم تخزينها محليا في مكان ما على الجهاز نفسه. في الأجهزة المضبوطة على برمجيه الروت (Rooted ) ، إذا بحثنا في نظام الملفات المحلي عن الملفات التي تخرن نقاط هذه الالعاب يمكننا تعديلها بسهولة وتجاوز القيود.
دعونا نذهب الى التطبيق الشائع المسمى cricket stick . هذه اللعبة تحظى بشعبية كبيرة على شبكة الإنترنت وشخصيا احبها بسبب الصعوبة في تحقيق نسبة عالية من النقاط. دعونا نرى كيف يمكننا تعديل النقاط في هذا التطبيق من الواجهة الخلفية
متطلبات :
  • جهاز يملك صلاحيات  root
  •  أداة Droid Explorer لتحليل نظام الملفات
  • ADB access on the device
عندما نشغل تطبيق cricket stick ، فإنه يمتلك نشاطاً يظهر افضل النقاط التي تم تسجيلها إلى الآن ، عموماً من الصعب تسجيل , من الصعب تحقيق 150 نقطه من لعب اللعبه خمس مرات فقط
image7
الآن، دعونا نرى كيف يمكننا اختراق هذا التطبيق لزيادة النقاط
دعونا ننتقل إلى نظام الملفات المحلي للتطبيق لمشاهدة الملفات حيث يخزن التطبيق بياناته . هذا مبين في الشكل التالي
image8
فتحنا adb shell على الجهاز ومن ثم قمنا برفع الامتيازات باستخدام أمر “su” . فإن كل التطبيقات المثبتة على جهاز الأندرويد ستكون جميع البيانات الخاصة بتطبيقاتها موجودة في “/ directory / data” data. لذلك، قمنا بالذهاب إلى
/data/data/com.sticksports.stickcricket/
إذا قمنا بتنفيذ أمر “ls” هنا، يمكننا أن نرى بعض الدلائل حيث يقوم التطبيق بتخزين البيانات الخاصة به. والدليل الذي يهمنا هنا هو “shared_prefs”. الآن دعونا ننتقل إلى الدليل shared_prefs لمعرفة ما إذا كان هناك أي ملفات مثيرة للاهتمام بداخله. وهذا مبين في الشكل أدناه
image9

لقد أنتقلنا إلى دليل shared_prefs وقمنا بوضع كافة الملفات داخل هذا الدليل. هناك ثلاثة ملفات XML داخل دليل shared_prefs اذا قمنا ببعض التحليل على هذه الملفات الثلاثة، من خلال النظر في المحتويات باستخدام أمر “cat” ، فمن الواضح أن “Cocos2dxPrefsFile.xml” هو الملف الذي يتم استخدامه لتخزين جميع النقاط. الآن سنستبدل النقاط الموجودة في هذا الملف إلى النقاط التي نتمنى الحصول عليها .
للقيام بذلك، قمنا باستخدام أداة تسمى “Droid Explorer ” في نظام التشغيل Windows
يمكن تحميل Droid Explorer من موقعه الرسمي على الانترنت .
Droid Explorer هو أداة للتفاعل مع الجهاز باستخدام Windows Explorer. واجهة المستخدم الرسومية (GUI) الموجودة فيه تجعل حياتنا أسهل لأداء المهام المختلفة مثل نقل الملفات من جهاز إلى آلة بالإضافة الى إلغاء تثبيت التطبيقات و إنشاء نسخة احتياطية، الخ.
وفيما يلي الخطوات
  • قم بتوصيل جهاز الأندرويد إلى الآلة .
  • تشغيل Explorer Droid وانتقل إلى الدليل المراد
image10

  • اسحب الملفات الى محرر النصوص
image11
  • احذف ملف Cocos2dxPrefsFile.xml من جهاز الأندرويد باستخدامDroid Explorer
image12
  • اضغط على تعديل ملف “Cocos2dxPrefsFile.xml” من الكمبيوتر  إلى الهاتف باستخدام DroidExplorer.
  • إبدأ اللعبة مرة أخرى. الآن يجب أن تكون قادرا على رؤية النتيجة المعدلة والمحدثة في التطبيق كما هو مبين أدناه.
image13

الخلاصة :


في هذه المقالة، رأينا كيف يتم تنفيذ Shared preferences في تطبيقات الأندرويد والقضايا الأمنية المرتبطة بها إذا لم يتم تنفيذها بشكل صحيح. لتأمين بيانات التطبيق، فمن المستحسن إستخدام crypto libraries المتاحة. سوف نناقش كيفية استخدام crypto libraries في تطبيقات الأندرويد في وقت لاحق في هذه السلسلة. في المقال القادم سوف نرى الطرق الأخرى لتخزين البيانات في تطبيقات الأندرويد والقضايا الأمنية المرتبطة بها .
فقدان الأجهزة مشكلة شائعة جدا مع الأجهزة النقالة. اذا كان المهاجم الذي يستطيع الوصول للحهاز بشكل مادي  يمكنه أيضاً الوصول إلى البيانات الشخصية، وكذلك مشاركة البيانات المخزنة في الجهاز. ويمكن أن يكون الوضع أسوأ إذا كان الجهاز “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

image1
جميع التطبيقات لديها ميزة لتخزين البيانات داخل التطبيق. عندما نقوم بتشغيلها، فإنها تبدو كما هو موضح في الشكل التالي ( Shared preferences app is used here)
image2

لنبدأ بتشغيل تطبيق shared preferences ثم ندخل بعض البيانات في حقل اسم المستخدم و حقل كلمة المرور.
يتم إنشاء Shared preferences في تطبيقات الأندرويد باستخدام فئة SharedPreferences وفيما يلي جزء من التعليمات البرمجية المستخدمة في نموذج التطبيق المعطى للتحميل.
image3
كما نرى في الشكل أعلاه، قمنا بإنشاء نموذج SharedPreferences وبعد ذلك قمنا باستخدامه لإدراج البيانات في ملف XML بإستخدام object Editor
الآن، دعونا نرى أين يتم تخزين هذه البيانات في التطبيق.
الموقع الشائع لتخزين SharedPreferences في apps Android هو:
/data/data/<package name>/shared_prefs/<filename.xml>
لذا، دعونا نتنقل ونتفقد المسار أعلاه لمعرفة ما إذا تم إنشاء ملف Shared preferences في هذا التطبيق
image4
كما نرى في الشكل أعلاه، هناك مجلد باسم “shared_prefs”. ويتم انشاء هذا المجلد اذا كان هناك تطبيق يستخدم Shared preferences  يمكننا تغيير الدليل إلى shared_prefs واستخدام أمر “cat” لإلقاء نظرة على محتويات هذا التطبيق على الفور.
إذا كنا نريد للحصول على ملف xml على الجهاز المحلي لدينا، يمكننا سحب الملف كما هو موضح أدناه.
image5
كما نرى في الشكل أعلاه، تم نسخ ملف “userdetails.xml” على الجهاز المحلي. يمكننا أن نرى الآن محتويات الملف كما هو موضح في الشكل التالي
image6

إختراق تطبيقات الألعاب لتعديل النقاط:


معظم الألعاب المتوفرة على برامج الهواتف المتنقلة هي تطبيقات محلية ولا تحتاج إلى شبكة الإنترنت عند تشغيلها . لذلك، فمن الواضح أن الإحصاءات المرتبطة باللعبة سيتم تخزينها محليا في مكان ما على الجهاز نفسه. في الأجهزة المضبوطة على برمجيه الروت (Rooted ) ، إذا بحثنا في نظام الملفات المحلي عن الملفات التي تخرن نقاط هذه الالعاب يمكننا تعديلها بسهولة وتجاوز القيود.
دعونا نذهب الى التطبيق الشائع المسمى cricket stick . هذه اللعبة تحظى بشعبية كبيرة على شبكة الإنترنت وشخصيا احبها بسبب الصعوبة في تحقيق نسبة عالية من النقاط. دعونا نرى كيف يمكننا تعديل النقاط في هذا التطبيق من الواجهة الخلفية
متطلبات :
  • جهاز يملك صلاحيات  root
  •  أداة Droid Explorer لتحليل نظام الملفات
  • ADB access on the device
عندما نشغل تطبيق cricket stick ، فإنه يمتلك نشاطاً يظهر افضل النقاط التي تم تسجيلها إلى الآن ، عموماً من الصعب تسجيل , من الصعب تحقيق 150 نقطه من لعب اللعبه خمس مرات فقط
image7
الآن، دعونا نرى كيف يمكننا اختراق هذا التطبيق لزيادة النقاط
دعونا ننتقل إلى نظام الملفات المحلي للتطبيق لمشاهدة الملفات حيث يخزن التطبيق بياناته . هذا مبين في الشكل التالي
image8
فتحنا adb shell على الجهاز ومن ثم قمنا برفع الامتيازات باستخدام أمر “su” . فإن كل التطبيقات المثبتة على جهاز الأندرويد ستكون جميع البيانات الخاصة بتطبيقاتها موجودة في “/ directory / data” data. لذلك، قمنا بالذهاب إلى
/data/data/com.sticksports.stickcricket/
إذا قمنا بتنفيذ أمر “ls” هنا، يمكننا أن نرى بعض الدلائل حيث يقوم التطبيق بتخزين البيانات الخاصة به. والدليل الذي يهمنا هنا هو “shared_prefs”. الآن دعونا ننتقل إلى الدليل shared_prefs لمعرفة ما إذا كان هناك أي ملفات مثيرة للاهتمام بداخله. وهذا مبين في الشكل أدناه
image9

لقد أنتقلنا إلى دليل shared_prefs وقمنا بوضع كافة الملفات داخل هذا الدليل. هناك ثلاثة ملفات XML داخل دليل shared_prefs اذا قمنا ببعض التحليل على هذه الملفات الثلاثة، من خلال النظر في المحتويات باستخدام أمر “cat” ، فمن الواضح أن “Cocos2dxPrefsFile.xml” هو الملف الذي يتم استخدامه لتخزين جميع النقاط. الآن سنستبدل النقاط الموجودة في هذا الملف إلى النقاط التي نتمنى الحصول عليها .
للقيام بذلك، قمنا باستخدام أداة تسمى “Droid Explorer ” في نظام التشغيل Windows
يمكن تحميل Droid Explorer من موقعه الرسمي على الانترنت .
Droid Explorer هو أداة للتفاعل مع الجهاز باستخدام Windows Explorer. واجهة المستخدم الرسومية (GUI) الموجودة فيه تجعل حياتنا أسهل لأداء المهام المختلفة مثل نقل الملفات من جهاز إلى آلة بالإضافة الى إلغاء تثبيت التطبيقات و إنشاء نسخة احتياطية، الخ.
وفيما يلي الخطوات
  • قم بتوصيل جهاز الأندرويد إلى الآلة .
  • تشغيل Explorer Droid وانتقل إلى الدليل المراد
image10

  • اسحب الملفات الى محرر النصوص
image11
  • احذف ملف Cocos2dxPrefsFile.xml من جهاز الأندرويد باستخدامDroid Explorer
image12
  • اضغط على تعديل ملف “Cocos2dxPrefsFile.xml” من الكمبيوتر  إلى الهاتف باستخدام DroidExplorer.
  • إبدأ اللعبة مرة أخرى. الآن يجب أن تكون قادرا على رؤية النتيجة المعدلة والمحدثة في التطبيق كما هو مبين أدناه.
image13

الخلاصة :


في هذه المقالة، رأينا كيف يتم تنفيذ Shared preferences في تطبيقات الأندرويد والقضايا الأمنية المرتبطة بها إذا لم يتم تنفيذها بشكل صحيح. لتأمين بيانات التطبيق، فمن المستحسن إستخدام crypto libraries المتاحة. سوف نناقش كيفية استخدام crypto libraries في تطبيقات الأندرويد في وقت لاحق في هذه السلسلة. في المقال القادم سوف نرى الطرق الأخرى لتخزين البيانات في تطبيقات الأندرويد والقضايا الأمنية المرتبطة بها .

ليست هناك تعليقات :

إرسال تعليق

عبدالعظيم الهادي2013 : عبدالعظيم الهادي2013