فئة OWASP: MASVS-CODE: جودة الرموز البرمجية
نظرة عامة
تهدف النُسخ الاحتياطية للتطبيق إلى الحفاظ على بيانات المستخدمين حتى يمكن استعادتها لاحقًا على جهاز جديد أو في حال فقدان البيانات. إنّ اقتراحات الأمان الحالية بشأن النُسخ الاحتياطية للتطبيقات دقيقة، وتختلف بين إصدارات Android والشركات المصنّعة للأجهزة. والموضوع الشائع هو أنّ هذه الاقتراحات تهدف إلى ضمان عدم تسرُّب أي بيانات حسّاسة.
يقدّم نظام الاحتفاظ بنسخة احتياطية العادي في Android أفضل حلّ وأمن وفعال للتطبيقات من أجل الاحتفاظ بنسخة احتياطية من بياناتها على السحابة الإلكترونية أو لنقل البيانات إلى جهاز جديد من خلال ميزة الاحتفاظ التلقائي بنسخة احتياطية (التي تكون مفعّلة تلقائيًا ولا تتطلّب أي جهد لتنفيذها ويمكن أيضًا تمديدها) وميزة الاحتفاظ بنسخة احتياطية من المفاتيح والقيم. ننصح باستخدام هذا الحلّ لأنّه يخزّن البيانات الاحتياطية الناتجة في أدلة لا يمكن للتطبيقات الأخرى التابعة لجهات خارجية الوصول إليها، بالإضافة إلى تسهيل التشفير في وضع عدم الاتّصال بالإنترنت والتشفير أثناء النقل والإعدادات التي تسمح باستبعاد البيانات الحسّاسة من النُسخ الاحتياطية.
وإذا كان التطبيق يستخدم بدلاً من ذلك حلًا للاحتفاظ بنسخة احتياطية لا يعتمد على نظام "الاحتفاظ بنسخة احتياطية" العادي في Android، قد يؤدي ذلك إلى زيادة احتمالية حدوث أخطاء منجرّة إلى تسرُّب البيانات الحسّاسة. ومن الأمثلة على حلول النسخ الاحتياطي غير العادية التي تعرِّض بيانات المستخدمين لتسرُّبها التطبيقات التي توفّر إمكانية "التصدير" أو "النسخ الاحتياطي" التي تنشئ نسخة من بيانات التطبيق في أدلة يمكن للتطبيقات الأخرى قراءتها، وبالتالي تكون عرضة للتسرُّب (إما بشكل مباشر أو من خلال ثغرات أمنية أخرى).
التأثير
عند اتّباع اقتراحات الأمان عند إعداد نُسخ احتياطية من التطبيقات، يمكنك منع احتمال تسرُّب البيانات الحسّاسة التي قد تتضمّنها النُسخ الاحتياطية. استنادًا إلى البيانات الفعلية وإلى نوايا المهاجم، قد يؤدي تسرُّب البيانات الحسّاسة إلى إفصاح عن المعلومات وانتحال هوية المستخدمين وخسارة مالية.
إجراءات التخفيف
استخدام نظام "الاحتفاظ بنسخة احتياطية" العادي في Android
يشفِّر نظام الاحتفاظ بنسخة احتياطية من البيانات في جهاز Android الأساسي دائمًا بيانات النُسخ الاحتياطية أثناء نقلها وفي حالات عدم النشاط. يتم تطبيق هذا التشفير بغض النظر عن إصدار Android المستخدَم وما إذا كان جهازك مزوّدًا بقفل شاشة. بدءًا من الإصدار 9 من نظام التشغيل Android، إذا كان الجهاز مزوّدًا بقفل شاشة، لن يتم تشفير البيانات الاحتياطية فقط، بل سيتم تشفير باستخدام مفتاح لا تعرفه Google (يحمي مفتاح قفل الشاشة مفتاح التشفير، ما يتيح التشفير التام بين الأطراف).
بشكل عام، يجب اتّباع إرشادات أمان تخزين البيانات.
إذا كانت النسخة الاحتياطية تتضمّن بيانات حسّاسة بشكل خاص، ننصحك إما بمحاولة استبعاد هذه البيانات أو، إذا لم تتمكّن من استبعادها، بطلب التشفير من جهة إلى أخرى كما هو описан في القسم التالي.
استبعاد البيانات من النسخة الاحتياطية
يمكنك تحديد البيانات التي تريد استبعادها من النسخة الاحتياطية باستخدام ملف قواعد، ويُشار إليه عادةً باسم backup_rules.xml
ويتم وضعه في مجلد التطبيق res/xml
.
هناك بعض الاختلافات في كيفية ضبط قواعد الاحتفاظ بنسخة احتياطية استنادًا إلى
إصدار Android المستخدَم:
- بالنسبة إلى إصدارات Android 12 (المستوى 31 من واجهة برمجة التطبيقات) والإصدارات الأحدث، أضِف السمة
android:dataExtractionRules
إلى العنصر<application>
فيAndroidManifest.xml
: - xml
xml <application android:name="com.example.foo" android:dataExtractionRules="@xml/backup_rules_extraction"> … </application>
بعد ذلك، اضبط ملف backup_rules.xml
وفقًا
لمتطلبات أمان البيانات واستمراريتها في التطبيق، مع اتّباع
تنسيق الضبط المعدَّل.
يتيح التنسيق المطلوب لإعداد ملف backup_rules.xml
للمطوّرين تحديد قواعد احتياطية مخصّصة لكل من عمليات النقل في السحابة الإلكترونية وعمليات النقل من جهاز إلى جهاز
(D2D). في حال عدم ضبط سمة <device-transfer>
، سيتم نقل جميع
بيانات التطبيق أثناء عملية نقل البيانات من جهاز إلى آخر. من المهم
توضيح أنّه حتى إذا كان التطبيق المستهدَف يستهدف الإصدار 12 من نظام التشغيل Android أو إصدارًا أحدث، يجب تحديدملفٍ
منفصل يحتوي على مجموعة إضافية من قواعد الاحتفاظ بنسخة احتياطية
للأجهزة التي تعمل بالإصدار 11 من نظام التشغيل Android (المستوى 30 لواجهة برمجة التطبيقات) أو إصدارًا أقدم.
- في الإصدار 11 من Android والإصدارات الأقدم، أضِف سمة
android:fullBackupContent
إلى العنصر<application>
ضمنAndroidManifest.xml
: - xml
xml <application android:name="com.example.foo" android:fullBackupContent="@xml/backup_rules_full"> … </application>
بعد ذلك، عليك ضبط ملف backup_rules.xml
وفقًا لمتطلبات ثبات البيانات
والأمان في التطبيق باستخدام البنية الموضّحة في مقالة
الاحتفاظ بنسخة احتياطية من بيانات المستخدمين.
طلب التشفير التام بين الأطراف
إذا لم تتمكّن من استبعاد البيانات الحسّاسة من النسخة الاحتياطية، ننصحك
بطلب التشفير التام بين الأطراف، ما يعني السماح بإنشاء النُسخ الاحتياطية على نظام التشغيل Android 9
أو إصدار أحدث فقط وعند ضبط شاشة القفل فقط. يمكنك إجراء ذلك باستخدام
العلامة requireFlags="clientSideEncryption"
التي يجب إعادة تسميتها إلى
disableIfNoEncryptionCapabilities
وضبطها على true
اعتبارًا من الإصدار Android
12.
في حال تعذّر استخدام نظام "الاحتفاظ بنسخة احتياطية من البيانات في جهاز Android" العادي
إذا لم تتمكّن من استخدام نظام "الاحتفاظ بنسخة احتياطية من البيانات في جهاز Android" العادي، سيكون تخزين بياناتك الاحتياطية بأمان وتحديد البيانات التي تريد استبعادها من النسخة الاحتياطية أكثر تعقيدًا. يجب تحديد ذلك على مستوى الرمز البرمجي، وبالتالي هو عرضة للخطأ، ما يعرّض البيانات للتسرّب. في هذا السيناريو، ننصحك أيضًا باختبار عملية التنفيذ بانتظام للتأكّد من عدم حدوث أي تغيير في سلوك الاحتفاظ بنسخة احتياطية المتوقّع.
المراجع
- وصف السمة Allow Backup
- التشفير على مستوى الملفات
- تغييرات في سلوك نقل البيانات من جهاز إلى آخر
- الاحتفاظ بنسخة احتياطية من بيانات المستخدمين باستخدام ميزة "الاحتفاظ بنسخة احتياطية تلقائيًا"
- الاحتفاظ بنسخة احتياطية من أزواج المفتاح/القيمة باستخدام "خدمة الاحتفاظ بنسخة احتياطية من البيانات في Android"
- التحكّم في ميزة الاحتفاظ بنسخة احتياطية على نظام التشغيل Android 12 أو الإصدارات الأحدث
- التحكّم في ميزة "الاحتفاظ بنسخة احتياطية" على الإصدار 11 من نظام التشغيل Android والإصدارات الأقدم
- فهم معلومات تحديد الهوية الشخصية في عقود وسياسات Google
- اختبار الاحتفاظ بنسخة احتياطية والاستعادة
- التشفير
- نظام ملف تخزين مفاتيح Android
- ADB
- خيارات المطوّرين