امنیت دادهها و ذخیرهسازی (Insecure Data Storage)
یکی از رایجترین اشتباهات در توسعه اپلیکیشنهای موبایل، ذخیرهسازی اطلاعات حساس (مانند نام کاربری، رمز عبور، توکنهای احراز هویت یا اطلاعات مالی) به صورت متن خام (Plaintext) در حافظه گوشی است.
اگر یک مهاجم دسترسی فیزیکی به گوشی داشته باشد (یا گوشی روت شده باشد)، میتواند به راحتی این فایلها را استخراج کرده و حساب کاربری قربانی را تصاحب کند.
۱. فایلهای تنظیمات (Shared Preferences)
این مکانیزم برای ذخیره تنظیمات ساده اپلیکیشن (مثل تم برنامه یا وضعیت صدا) طراحی شده است. فایلها به صورت XML در مسیر زیر ذخیره میشوند: /data/data/<package_name>/shared_prefs/
- آسیبپذیری: بسیاری از توسعهدهندگان
Session Tokenیا حتیPasswordکاربر را برای راحتیِ "لاگین خودکار" در اینجا ذخیره میکنند.
نمونه فایل آسیبپذیر (XML):
<map>
<boolean name="is_logged_in" value="true" />
<string name="username">admin</string>
<string name="password">SuperSecret123</string>
<string name="auth_token">eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...</string>
</map>۲. پایگاه دادههای محلی (SQLite Databases)
اپلیکیشنها برای ذخیره دادههای ساختار یافته (مثل تاریخچه چتها، لیست مخاطبین یا تراکنشها) از SQLite استفاده میکنند. این فایلها با پسوند .db در مسیر زیر قرار دارند: /data/data/<package_name>/databases/
- آسیبپذیری: عدم رمزنگاری دیتابیس (مثلا استفاده نکردن از SQLCipher). کافی است فایل
.dbرا به کامپیوتر منتقل کرده و با نرمافزاری مثل DB Browser for SQLite باز کنید.
نحوه استخراج دیتابیس:
# ۱. دسترسی روت به گوشی #
adb shell su
# ۲. کپی کردن دیتابیس به حافظه قابل دسترسی (sdcard) #
cp /data/data/com.target.app/databases/user_data.db /sdcard/
# ۳. خروج از شل و دانلود فایل به کامپیوتر #
exit
adb pull /sdcard/user_data.db .
# حالا فایل user_data.db را با نرمافزار DB Browser باز کنید. #۳. حافظه خارجی (External Storage / SD Card)
حافظه خارجی (مانند /sdcard/) یک فضای عمومی است. هر اپلیکیشنی که مجوز READ_EXTERNAL_STORAGE را داشته باشد، میتواند فایلهای موجود در این فضا را بخواند.
- آسیبپذیری: اگر اپلیکیشن فایلهای حساس (مثل فاکتور خرید، عکسهای خصوصی یا لاگهای برنامه) را در حافظه خارجی ذخیره کند، سایر بدافزارهای نصب شده روی گوشی میتوانند آنها را سرقت کنند.
هشدار امنیتی
هیچ داده حساسی نباید در External Storage ذخیره شود. فایلهایی که اینجا هستند "World Readable" محسوب میشوند.
۴. فایلهای موقت و حافظه پنهان (Temp Files & Cache)
گاهی اوقات اپلیکیشنها تصاویر پردازش شده یا پاسخهای سرور (HTTP Responses) را در پوشه cache ذخیره میکنند. اگر سرور هدرهای Cache-Control را درست تنظیم نکرده باشد، اطلاعات حساس بانکی ممکن است در کش گوشی باقی بماند.
- مسیر:
/data/data/<package_name>/cache/
۵. چکلیست بررسی امنیت دادهها
برای تست این بخش، مراحل زیر را انجام دهید:
- با اپلیکیشن کار کنید (لاگین کنید، دیتا وارد کنید).
- با دستور
adb shellوارد گوشی شوید. - به مسیر
/data/data/package_nameبروید. - تمام فایلهای XML و DB را برای پیدا کردن اطلاعاتی که وارد کرده بودید، جستجو کنید (Grep).
دستور جستجوی سریع:
# وارد شدن به پوشه دیتای اپلیکیشن (نیاز به روت) #
adb shell su -c "cd /data/data/com.target.app && grep -rEi 'password|token|user|bearer' ."
# توضیحات دستور: #
# -r: جستجوی بازگشتی (داخل تمام پوشهها) #
# -E: استفاده از عبارات باقاعده (Regex) #
# -i: عدم حساسیت به حروف بزرگ و کوچک #