Skip to content

تحلیل پیکربندی‌های خطرناک در Manifest ​

فایل AndroidManifest.xml علاوه بر تعریف کامپوننت‌ها، سیاست‌های امنیتی کل اپلیکیشن را تعیین می‌کند. چهار ویژگی زیر از رایج‌ترین نقاط ضعف در اپلیکیشن‌های اندرویدی هستند.

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 به اپلیکیشن وصل شده، اجرای کد را متوقف کند، متغیرها را در لحظه تغییر دهد و کل حافظه (حتی اطلاعات حساس) را استخراج کند. همچنین، فریدا در این حالت بسیار راحت‌تر متصل می‌شود.
bash
# لیست کردن تمام پکیج‌های 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 -Uai

2. پشتیبان‌گیری داده‌ها: android:allowBackup ​

این ویژگی تعیین می‌کند که آیا محتویات پوشه اختصاصی اپلیکیشن (/data/data/package_name) در عملیات adb backup شرکت کنند یا خیر.

  • خطر: اگر این مقدار true باشد (که به طور پیش‌فرض در بسیاری از نسخه‌ها هست)، هر کسی که دسترسی فیزیکی به گوشی داشته باشد (حتی بدون روت)، می‌تواند با یک کابل USB تمام دیتابیس‌ها، فایل‌های Shared Preferences و توکن‌های لاگین شما را روی کامپیوتر خود استخراج کند.
  • سناریو حمله: مهاجم گوشی قفل‌نشده شما را به کامپیوتر وصل کرده و با یک دستور، تمام چت‌ها یا اطلاعات بانکی ذخیره شده در حافظه داخلی اپ را برمی‌دارد.
bash
# استخراج دیتای اپلیکیشن روی کامپیوتر #
adb backup -f backup.ab -noapk com.target.app

# برای باز کردن فایل .ab و تبدیل آن به فایل قابل خواندن (tar): #
java -jar abe.jar unpack backup.ab backup.tar

3. مجوزهای سفارشی: Custom Permissions ​

گاهی برنامه نویس‌ها برای محدود کردن دسترسی به کامپوننت‌های خود، مجوزهای اختصاصی (Custom Permissions) تعریف می‌کنند.

  • خطر (Permission Misconfiguration):
  1. سطح حفاظت (Protection Level): اگر سطح حفاظت روی normal باشد، هر اپلیکیشنی می‌تواند آن را درخواست و دریافت کند. باید روی signature باشد تا فقط اپ‌های خودِ توسعه‌دهنده اجازه دسترسی داشته باشند.

  2. Typosquatting: اگر نام مجوز سفارشی در مانیفست اشتباه تایپ شده باشد یا اپلیکیشن دیگری زودتر آن مجوز را با نام مشابه ثبت کند، می‌تواند داده‌های ارسالی را سرقت کند.

bash
# لیست کردن تمام مجوزهای تعریف شده توسط اپلیکیشن‌های نصب شده #
adb shell dumpsys package com.target.app | grep -A 5 "Permissions:"

4. دسترسی بیرونی: android:exported ​

این ویژگی مشخص می‌کند که آیا یک کامپوننت (Activity, Service و...) می‌تواند توسط اپلیکیشن‌های دیگر فراخوانی شود یا خیر.

  • خطر: اگر یک صفحه حساس (مثل پنل مدیریت) اکسپورت شده باشد، مهاجم با دور زدن لاگین مستقیما آن را باز می‌کند.
bash
# باز کردن مستقیم صفحه اکسپورت شده #
adb shell am start -n com.target.app/.AdminDashboardActivity

# استخراج محتوای دیتابیس از طریق پرووایدر اکسپورت شده #
adb shell content query --uri content://com.target.app.provider/users