تحلیل پیکربندیهای خطرناک در Manifest
فایل AndroidManifest.xml علاوه بر تعریف کامپوننتها، سیاستهای امنیتی کل اپلیکیشن را تعیین میکند. چهار ویژگی زیر از رایجترین نقاط ضعف در اپلیکیشنهای اندرویدی هستند.
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.target.app">
<permission
android:name="com.target.app.PRIVATE_DATA"
android:protectionLevel="normal" />
<application
android:debuggable="true"
android:allowBackup="true"
android:backupAgent=".MyBackupAgent">
<activity
android:name=".AdminDashboardActivity"
android:exported="true"
android:permission="com.target.app.PRIVATE_DATA">
</activity>
<provider
android:name=".UserProvider"
android:authorities="com.target.app.provider"
android:exported="true" />
</application>
</manifest>1. وضعیت عیبیابی: android:debuggable
این ویژگی مشخص میکند که آیا یک دیباگر (مثل JDWP) میتواند به پروسه اپلیکیشن متصل شود یا خیر. در نسخههای انتشار نهایی (Release)، این مقدار باید حتما false باشد.
- خطر: اگر
trueباشد، مهاجم میتواند با ابزاری مثلjdbبه اپلیکیشن وصل شده، اجرای کد را متوقف کند، متغیرها را در لحظه تغییر دهد و کل حافظه (حتی اطلاعات حساس) را استخراج کند. همچنین، فریدا در این حالت بسیار راحتتر متصل میشود.
# لیست کردن تمام پکیجهای debuggable #
adb shell "pm list packages -3" | cut -d":" -f2 | xargs -I{} adb shell "run-as {} echo {} is debuggable" 2>/dev/null
# یا سادهتر، از طریق ابزار frida: #
frida-ps -Uai2. پشتیبانگیری دادهها: android:allowBackup
این ویژگی تعیین میکند که آیا محتویات پوشه اختصاصی اپلیکیشن (/data/data/package_name) در عملیات adb backup شرکت کنند یا خیر.
- خطر: اگر این مقدار
trueباشد (که به طور پیشفرض در بسیاری از نسخهها هست)، هر کسی که دسترسی فیزیکی به گوشی داشته باشد (حتی بدون روت)، میتواند با یک کابل USB تمام دیتابیسها، فایلهای Shared Preferences و توکنهای لاگین شما را روی کامپیوتر خود استخراج کند. - سناریو حمله: مهاجم گوشی قفلنشده شما را به کامپیوتر وصل کرده و با یک دستور، تمام چتها یا اطلاعات بانکی ذخیره شده در حافظه داخلی اپ را برمیدارد.
# استخراج دیتای اپلیکیشن روی کامپیوتر #
adb backup -f backup.ab -noapk com.target.app
# برای باز کردن فایل .ab و تبدیل آن به فایل قابل خواندن (tar): #
java -jar abe.jar unpack backup.ab backup.tar3. مجوزهای سفارشی: Custom Permissions
گاهی برنامه نویسها برای محدود کردن دسترسی به کامپوننتهای خود، مجوزهای اختصاصی (Custom Permissions) تعریف میکنند.
- خطر (Permission Misconfiguration):
سطح حفاظت (Protection Level): اگر سطح حفاظت روی
normalباشد، هر اپلیکیشنی میتواند آن را درخواست و دریافت کند. باید رویsignatureباشد تا فقط اپهای خودِ توسعهدهنده اجازه دسترسی داشته باشند.Typosquatting: اگر نام مجوز سفارشی در مانیفست اشتباه تایپ شده باشد یا اپلیکیشن دیگری زودتر آن مجوز را با نام مشابه ثبت کند، میتواند دادههای ارسالی را سرقت کند.
# لیست کردن تمام مجوزهای تعریف شده توسط اپلیکیشنهای نصب شده #
adb shell dumpsys package com.target.app | grep -A 5 "Permissions:"4. دسترسی بیرونی: android:exported
این ویژگی مشخص میکند که آیا یک کامپوننت (Activity, Service و...) میتواند توسط اپلیکیشنهای دیگر فراخوانی شود یا خیر.
- خطر: اگر یک صفحه حساس (مثل پنل مدیریت) اکسپورت شده باشد، مهاجم با دور زدن لاگین مستقیما آن را باز میکند.
# باز کردن مستقیم صفحه اکسپورت شده #
adb shell am start -n com.target.app/.AdminDashboardActivity
# استخراج محتوای دیتابیس از طریق پرووایدر اکسپورت شده #
adb shell content query --uri content://com.target.app.provider/users