در این مقاله به ویژگی گرفتن نسخه پشتیبان اتوماتیک می‌پردازیم. نگرانی اصلی در مورد اینکه آیا داده‌های حساس کاربر ممکن است در فرایند تهیه نسخه پشتیبان افشا گردند؟

در مقالات اول، دوم و سوم به تحلیل آسیب‌پذیری‌های موبایل که در گروه آسیب پذیری M2:Insecure Data Storage قرار می گیرند پرداختیم در این مقاله نیز مورد دیگری را اضافه خواهیم کرد: تست نسخه پشتیبان برای داده های حساس و مهم.

مرور

مانند سایر سیستم عامل های موبایل، اندروید ویژگی گرفتن نسخه پشتیبان اتوماتیک را ارایه می‌دهد. نسخه پشتیبان معمولا شامل کپی از داده‌ها و تنظیمات برنامه‌های نصب شده می‌باشد. نگرانی اصلی در مورد اینکه آیا داده‌های حساس کاربر ممکن است در فرایند تهیه نسخه پشتیبان افشا گردند؟

اندروید با توجه به اکوسیستم گسترده‌اش راه‌کارهای زیادی را پشتیبانی می‌کند:

  • اندروید دارای ویژگی تهیه نسخه پشتیبان به کمک USB می‌باشد. هنگامیکه USB debugging  فعال می‌باشد، شما می‌توانید با دستور adb backup برای تهیه نسخه‌های پشتیبان تمام اطلاعات و نسخه‌های پشتیبان اطلاعات دایرکتوری نرم‌افزار استفاده کنید.
  • گوگل یک ویژگی “Back Up My Data”  فراهم می‌کند که از کلیه داده‌های برنامه روی سرورهای گوگل نسخه پشتیبان تهیه می‌کند.
  • دو API نسخه پشتیبان برای توسعه دهندگان نرم‌افزارها در دسترس می‌باشد
    • Key/Value Backup: (Backup API or Android Backup Service) در سرویس شبکه ابری نسخه پشتیبان اندروید را آپلود می‌کند.
    • Auto Backup: برای اندروید های ۶ به بالا (و API 23 به بالا) گوگل ویژگی “Auto Backup for Apps feature.” را اضافه کرده است. این ویژگی به طور اتوماتیک حداکثر ۲۵ مگابایت از داده‌های برنامه‌های کاربردی را با اکانت کاربر در Google Drive هم‌گام می‌کند.

تحلیل ایستا

محلی

اندروید یک مشخصه به نام allowBackup را برای تهیه نسخه پشتیبان داده‌های برنامه ایجاد می‌کند. این مشخصه در فایل AndroidManifest.xml تنظیم می‌شود. اگر مقدار این مشخصه true باشد، دستگاه به کاربران اجازه می‌دهد با ADB از طریق دستور $ adb backup از داده های برنامه نسخه پشتیبان تهیه کنند.

جهت جلوگیری ایجاد نسخه پشتیبان از اطلاعات برنامه ویژگی android:allowBackup را برابر false قرار داده شود. وقتی این ویژگی در دسترس نباشد، تنظیمات allowBackup به صورت پیش‌فرض فعال می‌شود و گزینه تهیه نسخه پشتبان باید به صورت دستی غیرفعال شود.

بنابراین در فایل AndroidManifest.xml فلگ زیر را بررسی کنید:

android:allowBackup="true"

اگر مقدار فلگ true بود بررسی کنید آیا برنامه کاربردی مورد نظر هر نوع داده حساسی را ذخیره می‌کند.

شبکه ابری Cloud

بدون توجه به اینکه آیا شما از کدام یک از موارد (key/value backup or auto backup) در برنامه استفاده می‌کنید، موارد زیر باید مشخص گردد:

  • کدام فایل‌ها به شبکه ابری فرستاده می‌شود: (Shared Preferences)
  • آیا فایل‌ها شامل اطلاعات حساس هستند؟
  • آیا اطلاعات حساس قبل از ارسال به شبکه ابری رمزگذاری شده‌اند؟

نکته: اگر نمی‌خواهید فایل‌ها را با Google Cloud به اشتراک بگذارید، می‌توانید آن‌ها را از حالت Auto Backup خارج کنید. اطلاعات حساس ذخیره شده در دستگاه باید قبل از ارسال به شبکه ابری رمز گذاری شوند.

  • Auto Backup از طریق مقدار بولین android:allowBackup درون فایل manifest برنامه تنظیم می‌شود. Auto Backup به صورت پیش فرض بر روی اندروید ۶ به بالا فعال می‌باشد. شما می‌توانید مشخصه android:fullBackupOnly را برای فعال سازی auto backup زمانیکه یک پشتیبان گیری را پیاده سازی می‌کنید به کار ببرید. اما در نظر داشته باشید این ویژگی هم برای اندروید ۶ به بالا در دسترس می‌باشد. دیگر نسخه‌های اندروید از ویژگی نسخه پشتیبان key/value استفاده می‌کنند.

Auto backup تقریبا شامل تمام فایل‌های برنامه می‌شود و برای هر برنامه کاربردی تقریبا ۲۵ مگابایت از فایل‌های آن‌ها را در اکانت Google Drive ذخیره می‌کند و آخرین نسخه‌های پشتیبان ذخیره می‌شود و نسخه‌های قبلی‌ها حذف می‌گردند.

  • Key/Value Backup: جهت فعال کردن این ویژگی، شما باید یک backup agent در فایل manifest تعریف کنید. در فایل AndroidManifest.xml مشخصه زیر را بررسی کنید
android:backupAgent

جهت پیاده‌سازی key/value backup یکی از کلاس‌های زیر را توسعه دهید:

برای چک کردن پیاده‌سازی key/value backup  این کلاس‌ها را در سورس کد بررسی کنید.

تحلیل پویا

بعد از تست و اجرای تمامی توابع در دسترس برنامه کاربردی، تلاش کنید تا با adb نسخه پشتیبان بگیرید. اگر ایجاد نسخه پشتیبان موفق بود، آرشیو نسخه پشتیبان را برای داده‌های حساس بررسی کنید. یک ترمینال باز کنید و دستور زیر را اجرا کنید:

$ adb backup -apk -nosystem <package-name>

در پاسخ این دستور پسوورد دستگاه اندروید سوال می شود که امری غیرالزامی است. در صورت عدم موفقیت از دستور زیر استفاده نمایید. مشکل به دلیل نسخه adb می باشد.

$ adb backup "-apk -nosystem <package-name>"

سپس ایجاد نسخه پشتیبان از روی دستگاه تان را با انتخاب “ Back up my data”  تایید کنید و بعد از اتمام  فرآیند پشتیبان گیری فایل .ab در دایرکتوری شما خواهد بود. دستور زیر را جهت تبدیل فایل .ab به .tar استفاده کنید:

$ dd if=mybackup.ab bs=24 skip=1|openssl zlib -d > mybackup.tar

در این دستور ممکن است  شما خطای openssl:Error: ‘zlib’ که دستور نامعتبر است را بگیرید. شما می توانید به جای آن از پایتون استفاده کنید.

dd if=backup.ab bs=1 skip=24 | python -c "import zlib,sys;sys.stdout.write(zlib.decompress(sys.stdin.read()))" > backup.tar

Android Backup Extractor یکی دیگر از ابزارهای نسخه پشتیبان می‌باشد که با jre7  یا jre8 اجرا می شود.

$ java -jar abe.jar unpack backup.ab

و بادستور زیر هم فایل .tar را استخراج کنید و بررسی وجود اطلاعات حساس بر روی فایل پشتیبان را می توانید انجام دهید.

$ tar xvf mybackup.tar

آموزش ویدیویی در مورد تحلیل انجام شده برنامه موبایل همانطور که در بالا ارایه شده از دو دیدگاه ایستا و دینامیک را می‌توانید مشاهده نمایید.

منابع

راهنمای امنیتی تست موبایل  OWASP.