دسته OWASP: MASVS-CODE: کیفیت کد
نمای کلی
هدف پشتیبانگیری از برنامه حفظ اطلاعات کاربران است تا بعداً بتوان آن را به دستگاه جدید بازیابی کرد یا در صورت از دست رفتن دادهها. توصیههای امنیتی موجود در مورد پشتیبانگیری از برنامهها متفاوت است و بین نسخههای اندروید و سازندگان دستگاه متفاوت است. موضوع رایج این است که هدف این توصیهها حصول اطمینان از افشای دادههای حساس است.
سیستم استاندارد پشتیبانگیری اندروید امنترین، قویترین و سادهترین راهحل را برای برنامهها فراهم میکند تا از دادههای خود در فضای ابری پشتیبانگیری کنند یا از طریق پشتیبانگیری خودکار ، دادهها را به دستگاه جدید منتقل کنند (که بهطور پیشفرض فعال است، برای پیادهسازی نیازی به کار ندارد و میتواند همچنین تمدید شود) و پشتیبان گیری کلید-مقدار . ما استفاده از این راه حل را توصیه می کنیم زیرا داده های پشتیبان حاصل را در دایرکتوری هایی ذخیره می کند که توسط سایر برنامه های 3p قابل دسترسی نیستند، همچنین رمزگذاری در حالت استراحت، رمزگذاری در حین انتقال و پیکربندی هایی را که امکان حذف داده های حساس از پشتیبان ها را فراهم می کند، تسهیل می کند.
اگر در عوض یک برنامه یک راه حل پشتیبانگیری را اجرا کند که به سیستم استاندارد پشتیبانگیری اندروید متکی نیست، این میتواند احتمال اشتباهاتی که منجر به نشت اطلاعات حساس شود را افزایش دهد. نمونههایی از راهحلهای پشتیبانگیری غیر استاندارد که دادههای کاربر را در معرض نشت قرار میدهند، شامل برنامههایی هستند که قابلیت «صادرات» یا «پشتیبانگیری» را ارائه میکنند که یک کپی از دادههای برنامه را در فهرستهای راهنمای قابل خواندن توسط برنامههای دیگر ایجاد میکنند، و از این رو مستعد لو رفتن هستند (یا مستقیماً). یا از طریق آسیب پذیری های دیگر).
تاثیر
پیروی از توصیههای امنیتی هنگام راهاندازی پشتیبانگیری از برنامه، از نشت احتمالی دادههای حساسی که ممکن است پشتیبانگیری داشته باشد، جلوگیری میکند. بسته به داده های واقعی و نیات مهاجم، نشت داده های حساس ممکن است منجر به افشای اطلاعات، جعل هویت کاربر و ضرر مالی شود.
اقدامات کاهشی
از سیستم استاندارد پشتیبان گیری اندروید استفاده کنید
سیستم استاندارد پشتیبان گیری اندروید همیشه داده های پشتیبان را در حال انتقال و در حالت استراحت رمزگذاری می کند. این رمزگذاری صرف نظر از نسخه Android در حال استفاده و اینکه آیا دستگاه شما صفحه قفل دارد یا خیر اعمال می شود. با شروع از Android 9، اگر دستگاه دارای صفحه قفل تنظیم شده باشد، داده های پشتیبان نه تنها رمزگذاری می شوند، بلکه با کلیدی که گوگل آن را نمی شناسد رمزگذاری می شود (راز صفحه قفل از کلید رمزگذاری محافظت می کند، بنابراین رمزگذاری سرتاسر را امکان پذیر می کند. ).
به طور کلی به یاد داشته باشید که دستورالعمل های ذخیره سازی داده و امنیت را دنبال کنید.
اگر نسخه پشتیبان شما شامل دادههای بسیار حساسی است، توصیه میکنیم یا این دادهها را حذف کنید یا اگر نمیتوانید آنها را حذف کنید، به رمزگذاری انتها به انتها که در بخش زیر توضیح داده شده است، نیاز دارید.
حذف دادهها از پشتیبانگیری
میتوانید با استفاده از یک فایل قوانین، که معمولاً backup_rules.xml
نامیده میشود و در پوشه برنامه res/xml
قرار میگیرد، مشخص کنید که کدام دادهها از نسخه پشتیبان حذف شوند. بسته به نسخه اندرویدی که استفاده میشود، تفاوتهایی در نحوه پیکربندی قوانین پشتیبانگیری وجود دارد:
- برای نسخههای Android 12 (سطح API 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
به توسعه دهندگان این امکان را می دهد تا قوانین پشتیبان گیری سفارشی را برای انتقال Cloud و Device-to-Device (D2D) تعریف کنند. اگر ویژگی <device-transfer>
تنظیم نشده باشد، تمام داده های برنامه در طول انتقال D2D منتقل می شود. نکته مهم این است که حتی اگر برنامه هدف اندروید 12 یا بالاتر را هدف قرار دهد، همیشه باید یک فایل جداگانه با مجموعه ای از قوانین پشتیبان اضافی برای دستگاه های دارای Android 11 (سطح API 30) یا پایین تر مشخص شود.
- برای نسخههای Android 11 و پایینتر ، یک ویژگی
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
تغییر نام داده و از Android 12 روی true
تنظیم شود، به این هدف دست یابید.
اگر نمی توانید از سیستم استاندارد پشتیبان گیری اندروید استفاده کنید
اگر نمیتوانید از سیستم استاندارد پشتیبانگیری Android استفاده کنید، ذخیره ایمن دادههای پشتیبان خود و همچنین تعیین اینکه کدام دادهها را از نسخه پشتیبان خود حذف کنید، پیچیدهتر است. این باید در سطح کد مشخص شود و در نتیجه مستعد خطا است و خطر نشت داده ها را به همراه دارد. در این سناریو، همچنین توصیه میشود که به طور منظم پیادهسازی خود را آزمایش کنید تا مطمئن شوید که هیچ تغییری در رفتار پشتیبانگیری مورد انتظار ایجاد نشده است.
منابع
- شرح ویژگی allowBackup
- رمزگذاری مبتنی بر فایل
- رفتار انتقال D2D تغییر می کند
- با پشتیبانگیری خودکار از اطلاعات کاربر نسخه پشتیبان تهیه کنید
- با Android Backup Service از جفت های کلید-مقدار پشتیبان تهیه کنید
- پشتیبانگیری را در Android 12 یا بالاتر کنترل کنید
- پشتیبانگیری را در اندروید ۱۱ و پایینتر کنترل کنید
- درک PII در قراردادها و خطمشیهای Google
- تست پشتیبان گیری و بازیابی
- رمزنگاری
- سیستم Android Keystore
- بانک انکشاف آسیایی
- گزینه های توسعه دهنده