دسته OWASP: MASVS-CODE: کیفیت کد
نمای کلی
هدف از پشتیبانگیری برنامه حفظ دادههای کاربران است تا بعداً بتوان آنها را در دستگاه جدیدی بازیابی کرد یا درصورت ازدست رفتن دادهها، آنها را بازگرداند. توصیههای امنیتی موجود درباره پشتیبانگیری برنامه ظریف و پیچیده است و بین نسخههای Android و سازندگان دستگاه متفاوت است. موضوع مشترک این است که هدف این توصیهها اطمینان از این است که هیچ داده حساسی فاش نشود.
سیستم «پشتیبانگیری Android استاندارد» ایمنترین، قویترین، و آسانترین راهکار را برای برنامهها فراهم میکند تا دادههایشان را در فضای ابری پشتیبانگیری کنند یا دادهها را ازطریق پشتیبانگیری خودکار (که بهطور پیشفرض فعال است، برای پیادهسازی به هیچ کاری نیاز ندارد، و میتواند گسترش هم یابد) و پشتیبانگیری مقدار کلید به دستگاه جدیدی منتقل کنند. توصیه میکنیم از این راهحل استفاده کنید زیرا دادههای پشتیبانگیری حاصل را در دایرکتوریهایی ذخیره میکند که سایر برنامههای طرف سوم نمیتوانند به آنها دسترسی داشته باشند، و همچنین رمزگذاری در حالت سکون، رمزگذاری در حین انتقال، و پیکربندیهایی را که امکان مستثنی کردن دادههای حساس از پشتیبانگیری را فراهم میکنند تسهیل میکند.
اگر برنامهای بهجای سیستم «پشتیبانگیری Android» استاندارد، راهحل پشتیبانگیریای را پیادهسازی کند که به این سیستم متکی نباشد، این امر میتواند احتمال اشتباهاتی را که منجر به نشت دادههای حساس میشود افزایش دهد. نمونههایی از راهکارهای پشتیبانگیری غیراستاندارد که دادههای کاربر را درمعرض نشت قرار میدهند شامل برنامههایی است که قابلیت «صادر کردن» یا «پشتیبانگیری» ارائه میدهند که نسخهای از دادههای برنامه را در فهرستهای راهنمایی ایجاد میکند که توسط برنامههای دیگر قابلخواندن است و بنابراین مستعد نشت است (چه بهطور مستقیم یا ازطریق آسیبپذیریهای دیگر).
تأثیر
دنبال کردن توصیههای امنیتی هنگام راهاندازی پشتیبانگیری برنامه از نشت احتمالی دادههای حساس که ممکن است در نسخههای پشتیبان وجود داشته باشد جلوگیری میکند. بسته به دادههای واقعی و اهداف مهاجم، نشت دادههای حساس میتواند به افشای اطلاعات، جعل هویت کاربر، و ضرر مالی منجر شود.
کاهش
استفاده از سیستم «پشتیبانگیری Android» استاندارد
سیستم «پشتیبانگیری Android» استاندارد همیشه دادههای پشتیبان را درحال انتقال و درحال سکون رمزگذاری میکند. این رمزگذاری صرفنظر از نسخه Android مورداستفاده و اینکه دستگاهتان صفحه قفل دارد یا نه اعمال میشود. از Android 9 به بعد، اگر دستگاه صفحه قفل داشته باشد، دادههای پشتیبانگیریشده نهتنها رمزگذاری میشوند، بلکه با کلیدی رمزگذاری میشوند که برای Google شناختهشده نیست (رمز صفحه قفل از کلید رمزگذاری محافظت میکند، بنابراین رمزگذاری سرتاسر فعال میشود).
بهطور کلی، بهیاد داشته باشید که از ذخیرهسازی داده و دستورالعملهای امنیتی پیروی کنید.
اگر نسخه پشتیبان شما حاوی دادههای بسیار حساس است، توصیه میکنیم یا این دادهها را مستثنی کنید یا اگر نمیتوانید آنها را مستثنی کنید، رمزگذاری سرتاسر را طبق آنچه در بخش زیر شرح داده شده است الزامی کنید.
درحال مستثنی کردن دادهها از نسخه پشتیبان
میتوانید بااستفاده از فایل قوانین، که معمولاً backup_rules.xml نامیده میشود و در پوشه برنامه res/xml قرار دارد، مشخص کنید کدام دادهها از نسخه پشتیبان مستثنی شوند.
بسته به نسخه Android مورداستفاده، تفاوتهایی در نحوه پیکربندی قوانین پشتیبانگیری وجود دارد:
- برای Android نسخه ۱۲ (سطح میانای برنامهسازی کاربردی ۳۱) و بالاتر، یک
مشخصه
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> تنظیم نشده باشد، همه
دادههای برنامه درطول انتقال دستگاه به دستگاه منتقل خواهد شد. باید تأکید کرد که حتی اگر برنامه هدف Android 12 یا بالاتر را هدف قرار دهد، همیشه باید یک فایل جداگانه با مجموعه دیگری از قوانین پشتیبانگیری برای دستگاههای دارای Android 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 نسخه ۹
یا بالاتر و فقط وقتی صفحه قفل تنظیم شده است مجاز کنید. میتوانید این کار را بااستفاده از پرچم requireFlags="clientSideEncryption" انجام دهید که باید از Android 12 به disableIfNoEncryptionCapabilities تغییر نام داده شود و روی true تنظیم شود.
اگر نمیتوانید از سیستم «پشتیبانگیری Android استاندارد» استفاده کنید
اگر نمیتوانید از سیستم «پشتیبانگیری Android استاندارد» استفاده کنید، ذخیره کردن ایمن دادههای پشتیبان و همچنین مشخص کردن اینکه کدام دادهها از پشتیبانگیری مستثنی شوند پیچیدهتر است. این مورد باید در سطح کد مشخص شود و درنتیجه مستعد خطا است و خطر نشت دادهها را بههمراه دارد. در این سناریو، همچنین توصیه میشود که پیادهسازیتان را بهطور منظم آزمایش کنید تا مطمئن شوید که هیچ تغییری در رفتار پشتیبانگیری موردانتظار ایجاد نشده است.
منابع
- شرح مشخصه allowBackup
- رمزگذاری فایلمبنا
- تغییرات رفتار انتقال دستگاه به دستگاه
- پشتیبانگیری از دادههای کاربر با «پشتیبانگیری خودکار»
- پشتیبانگیری از جفتهای کلید-مقدار با Android Backup Service
- کنترل پشتیبانگیری در Android 12 یا بالاتر
- کنترل پشتیبانگیری در Android 11 و نسخههای پایینتر
- درک اطلاعات شناساننده شخصی در قراردادها و خطمشیهای Google
- آزمایش پشتیبانگیری و بازیابی
- رمزنگاری
- سیستم Android Keystore
- ADB
- گزینههای توسعهدهنده