Skip to content

Latest commit

 

History

History
378 lines (311 loc) · 46.9 KB

Part_3.md

File metadata and controls

378 lines (311 loc) · 46.9 KB

Содержание СТАТИЧЕСКИЙ АНАЛИЗ

  • 3.1: ‟Обратная разработка”
  • 3.2: ‟Компоненты Android приложения”
  • 3.3: ‟Анализ вызовов API”
  • 3.4: ‟Анализ прав”
  • 3.5: ‟Анализ кода”

gif

Заметки | Дополнительно

✏️ Заметки

3.1 Обратная разработка

🧰 [ Инструментарий ]

Утилита / Инструмент Пример вызова Действие
strings strings <путь> Выводит строковые данные
nm Выводит таблицу символов исполняемого файла
keytool [🔗] keytool -printcert -v -file *.RSA > certificate.txt Встроена в JDK; Выводит информацию о сертификатах
SmaliSCA [🔗] smalisca> sc -c class_name -p <паттерн> -r 10 Выводит информацию о Smali файлах
Maldrolyzer [🔗] python maldrolyzer.py <путь> Извлекает любопытные данные (телефонные номера, ...)
APKiD [🔗] apkid <путь> Идентифицирует компиляторы, упаковщики и обфускаторы, использованные при создании APK
dex2jar [🔗] sh d2j-dex2jar.sh "<путь>" Превращает .dex / .apk файлы в код на Java
jadx [🔗] sh d2j-dex2jar.sh "<путь>" Превращает .dex / .apk файлы в код на Java
JD-GUI - Предоставляет графический интерфейс для просмотра исходного кода
Bytecode Viewer [🔗] - Предоставляет графический интерфейс для декомпиляции приложений, просмотра ресурсов APK и байт-кода
APKTool [🔗] apktool d <название>.apk Распаковывает и запаковывает обратно APK
Androguard [🔗] androguard analyze <путь> Декомпилирует, дизассемблирует, выводит фингерпринты сертификатов, графы вызовов, ...
Angr [🔗] Python: import angr Декомпилирует, дизассемблирует, анализирует поток выполнения, поддерживает символическое исполнение, ...
APKLab [🔗] - Расширение для VS Code, совмещает в себе несколько инструментов; Распаковывает, декомпилирует, переподписывает, ...
FlowDroid [🔗] Выполняет taint-анализ приложения с учётом компонентов, контекста и флоу данных
radare2 [🔗] r2 <путь>; /
rafind2 -ZS <запрос> AndroidManifest.xml; /
rabin2 -I <путь>
Фреймворк для обратной разработки

🪚 [ Препарируем ]

  1. Декомпиляция APK онлайн: decompiler.com

  2. Распаковка APK с помощью APKTool [ :octocat: ]:

    • apktool d <название>.apk
  3. Превращение файлов в исходный код на Java с помощью dex2jar [ :octocat: ]:

    • Для .dex файлов: sh d2j-dex2jar.sh classes.dex
    • Для всего APK: sh d2j-dex2jar.sh -f <название>.apk
    • Просмотр реконструированного кода с JD-GUI [ :octocat: ]
  4. Превращение файлов в исходный код на Java + просмотр реконструированного кода с помощью jadx [ :octocat: ]


3.2 Компоненты Android приложения

Составляющие распакованного Android приложения [🔗]:
 - 📄 AndroidManifest.xml [🔗]: – метаданные: имя пакета, запрашиваемые права, определения компонентов (Действий, Сервисов, Широковещательного приемника, Контент-провайдера), минимальная / максимальная поддерживаемые версии SDK, связанные библиотеки, ...;
 - 📄 Build.gradle: – автоматически генерируемый файл, который содержит: версию SDK для отладки и компиляции приложения compileSdkVersion, версию SDK для запуска приложения targetSdkVersion, versionCode, versionName, ...;
 - 📄 classes.dex: – байт-код Dalvik, представляющий скомпилированный Java / Kotlin код;
 - 📁 META-INF: – тут располагается сертификат;
 - 📁 lib: – нативные библиотеки, разделённые на подкатегории в зависимости от архитектуры CPU;
 - 📁 assets: – разные файлы, нужные приложению: дополнительные нативные библиотеки, .dex файлы, ...; иногда используются во вредоносном ПО для сокрытия дополнительного кода;
 - 📁 res/drawable: – растровые файлы;
 - 📁 res/layout: – детали о пользовательском интерфейсе;
 - 📁 res/values: – содержит значения, таких как цветовые значения / строки / числа;

3.3 Анализ вызовов API

  • Специфичные для приложений ресурсы:

    • Класс ContentResolver [🔗]:

      • Позволяет производить действия над контент-провайдерами, направляет CRUD (create/read/update/delete) операции к подходящим контент-провайдерам
      • delete(), insert(), ...
      • query() – может быть использован для сбора чувствительной информации от контент-провайдеров других приложений, если они не защищены;
      • 🔗 Подробнее про риски ContentResolver
    • Класс Context [🔗]:

      • Предоставляет информацию о классах и ресурсах
      • startService() – может быть использован для фонового запуска сервиса без взаимодействия с пользователем;
      • getFilesDir(), openFileOutput(), ... – могут быть использованы для действий над файлами;
      • getApplicationInfo() – может быть использован для получения информации о приложении (возможна ли отладка, установлен ли во внешнем хранилище, ...)
    • Класс Intent [🔗]:

      • Позволяет взаимодействовать с аппаратным обеспечением телефона, запускать сервисы и активности
      • setDataAndType() – может быть использован для настройки URI и типа MIME у намерений;
      • setFlags(), addFlags() – могут быть использованы для установки / добавления флагов к намерениям для указания способа их обработки (прим: для выдачи компоненту приоритет переднего плана);
  • Ресурсы фреймворков:

    • Класс ActivityManager [🔗]:

      • Позволяет взаимодействовать с другими активностями, запущенными на устройстве
      • getRunningServices() – может быть использован для выявления запущенных сервисов (прим: антивирусов);
      • getMemoryInfo() – может быть использован для проверки объёма свободной памяти и того, насколько система близка к пределу, когда начнёт принудительно завершать процессы для освобождения памяти;
      • restartPackage() – может быть использован для завершения сервисов других приложений;
    • Класс PackageManager [🔗]:

      • Предоставляет информацию о пакетах, установленных на устройство
      • getInstalledPackages() – может быть использован для выявления запущенных сервисов (прим: антивирусов);
    • Классы Telephony/SmsManager [🔗] / Telephony/gsm/SmsManager [🔗]:

      • Методы класса могут быть использованы для взаимодействия с SMS
      • sendTextMessage() – может быть использован для отправки SMS с заражённого устройства для траты денег пользователя;

      // Примеры вредоносов: SpyEye, OpFake, Gemini

    • Класс TelephonyManager [[🔗]

      • Методы класса могут быть использованы для доступа к информации о сервисах телефонии на устройстве для составления "профиля пользователя"
      • getSubscriberId(), getSimSerialNumber(), getLine1Number(), getNetworkOperator(), getCellLocation(), getDeviceId(), getNetworkType(), ...

      // Примеры вредоносов: Ginmaster, Exodus

  • Ресурсы, относящиеся к DVM (Dalvik Virtual Machine):

    • Класс DexClassLoader [🔗]:

      • Позволяет загружать классы из внешних .jar / .apk, которые содержат classes.dex
      • loadClass() – может быть использован для выполнения кода, который не является частью приложения, чтобы обойти механизмы обнаружения;
    • Класс Runtime [🔗]:

      • Позволяет приложениям взаимодействовать со средой, в которой они запущены
      • Runtime.getRuntime.exec() – может быть использован для выполнения Linux команд / shell-скриптов внутри новых нативных процессов за пределами нормального жизненного цикла исполнения программы для обхода механизмов обнаружения;
    • Класс System [🔗]

      • Предоставляет системные средства, такие как стандартные потоки данных: Input / Output / Error
      • loadLibrary() – может быть использован для динамической загрузки нативных библиотек для запуска нативного кода и эксплуатации уязвимостей системы;
  • Системные ресурсы:

    • Классы ConnectivityManager [🔗] / NetworkInfo [🔗] / WifiManager [🔗]:

      • Предоставляют функциональность, связанную с сетью, такую как запрос информации о подключениях (прим: Wi-Fi, GPRS, UMTS) / сетевых интерфейсах
      • Методы класса могут быть использованы для установки сетевого соединения / взаимодействия с удалёнными серверами атакующих
      • ConnectivityManager: getNetworkInfo(), ...
      • NetworkInfo: NetworkInfo(), getExtraInfo(), getTypeName(), isConnected(), getState(), ...
      • WifiManager: setWifiEnabled(), getWifiState(), ...
    • Классы HttpURLConnection [🔗] / Sockets [🔗]:

      • Методы класса используются для установки соединений с удалёнными серверами / получения и отправки данных по сети
      • setRequestMethod(), getInputStream(), getOutputStream(), ... – могут быть использованы для установки соединения и передачи данных от приложения удалённому серверу атакующих;
    • Пакет классов android.OS [🔗]:

      • Предоставляет API для управления процессами / потоками исполнения
      • sendMessage() – добавляет сообщения в очереди сообщений потоков исполнения;
      • obtainMessage() – получает сообщения из очередей сообщений;
      • myPid() & killProcess() – могут быть использованы для принудительного завершения запущенных процессов на основе их идентификаторов;

        // Ядро накладывает ограничения на возможность приложений принудительно завершать процессы: только приложения / пакеты с общим UID могут принудительно завершить друг друга
        // Это ограничение можно обойти, если устройство root'нуто

    • Пакет классов java.IO [🔗]:

      • Предоставляет доступ к чтению / записи в потоки данных, файлы, буферы внутренней памяти, ...
      • IO.DataOutputStream: writeBytes() – записывает данные и загружает файлы через соединение с URL;
      • IO.DataInputStream: readLines(), available() – считывает и скачивает вредоносную полезную нагрузку из соединения с URL;
      • IO.FileOutputStream: write() – записывает вредоносный контент, скачанный с удалённого сервера, в локальные файлы;
      • IO.File: delete(), mkdir(), exists(), ListFiles() – для управления файлами;
  • Утилиты:

    • Классы String [🔗] / StringBuilder [🔗] / StringBuffer [🔗]:

      • Предоставляют интерфейс для создания и манипуляции строками
      • substring(), indexOf(), getBytes(), valueOf(), replaceAll(), Append(), ... – могут быть использованы для обфускации вредоносного кода, составления полезной нагрузки, обхода статических методов обнаружения путём динамического создания URL'ов / параметров / опасных команд;
    • Класс Timer [🔗]:

      • Предоставляет возможность планирования единоразовых / повторяющихся запусков задач
      • schedule(), cancel() – могут быть использованы для того, чтобы "спрятать" вредоносную функциональность от динамического анализа, отложив запуск вредоносного кода до определённой даты / события;
    • Класс Crypto [🔗]:

      • Предоставляет интерфейс для проведения криптографических операций (шифрование, дешифрование, совместная выработка ключа)
      • Методы класса могут быть использованы для обфускации вредоносного кода + обхода статических методов обнаружения путём шифрования полезной нагрузки, телефонных номеров, ссылок, ...
      • Crypto.Cipher: getInstance(), doFinal() – трансформируют ввод в зашифрованный / расшифрованный формат;
      • Crypto.spec.DESKeySpec() – позволяет указать DES ключ;
    • Класс ZipInputStream [🔗]:

      • Методы класса могут быть использованы для распаковки вредоносных архивов / считывания данных из сжатых файлов, скачанных во время выполнения приложения или изначально прикреплённых к приложению
      • read(), close(), getNextEntry(), closeEntry(), ...
    • Класс w3c.dom [🔗]:

      • Предоставляет официальные интерфейсы w3c Java для DOM
      • getDocumentElement(), getElementByTagName(), getAttribute() – могут быть использованы для парсинга XML файлов (прим: для обработки локальных конфигурационных файлов, ...)

3.4 Анализ прав

🔗 Ещё раз про уровни прав + [🔗]


Уровень права Право Использование Вредоносное использование Примеры вредоносов
🟢 Normal ACCESS_NETWORK_STATE Получение информации о сетях Сбор / Отслеживание информации о сетях DEFENSOR, Dplug, MouaBad
🟢 Normal ACCESS_WIFI_STATE Получение информации о сетях Wi-Fi Сбор / Отслеживание информации о сетях Wi-Fi SOVA, ActionSpy, Dplug
🟢 Normal CHANGE_WIFI_STATE Изменение состояния подключения к Wi-Fi Установка соединения с вредоносным сервером ActionSpy, Dplug
🟢 Normal INTERNET Открытие сетевых сокетов Установка соединения с вредоносным сервером DEFENSOR, FlixOnline, FluBot, Dplug
🟢 Normal KILL_BACKGROUND_PROCESSES Вызов ActivityManager.killBackgroundProcesses(), который моментально убивает все фоновые процессы, ассоциированные с конкретным пакетом Принудительное завершение фоновых процессов антивируса FluBot, Daam, Dplug
🟢 Normal RECEIVE_BOOT_COMPLETED Получение Intent.ACTION_BOOT_COMPLETED, который транслируется по завершении запуска системы Запуск вредоносной активности сразу по завершении запуска системы Cerberus, Xbot, ActionSpy, Simplelocker, Exobot
🟢 Normal SET_WALLPAPER Изменение обоев Загрузка вредоносного контента на устройство; Множественная перезагрузка устройства MouaBad
🟢 Normal WAKE_LOCK Использование блокировки пробуждения (PowerManager WakeLocks) для того, чтобы не усыпал процессор / не гас экран Беспрерывное выполнение вредоносной фоновой активности Cerberus, Simplelocker, DEFENSOR
🟢 Normal WRITE_SMS Право устарело; Эмуляция получение SMS / Изменение локальных SMS SMS-фишинг FluBot, GodFather
🔵 Signature BIND_NOTIFICATION_LISTENER_SERVICE Запрашивается NotificationListenerService для получения новых уведомлений Сбор / Отслеживание информации из уведомлений SOVA, MasterFred
🔵 Signature BROADCAST_PACKAGE_REMOVED Бродкаст уведомления об удалении пакета приложения Принудительное завершение других запущенных приложений (антивирусов)
🔵 Signature DELETE_PACKAGES Удаление пакетов Удаление приложений (антивирусов) SecuriDropper, Dplug
🔵 Signature INSTALL_PACKAGES Установка пакетов Установка вредоносных пакетов SOVA, Dplug
🔵 Signature MOUNT_UNMOUNT_FILESYSTEMS Монтирование / размонтирование файловых систем для съемного хранилища Доступ к SD картам устройства для чтения / записи данных с / на устройство MouaBad, ActionSpy
🔵 Signature WRITE_APN_SETTINGS Запись настроек APN + Чтение конфиденциальных полей существующих настроек APN (имя пользователя, пароль) Сбор чувствительной информации об устройстве MouaBad, Dplug
🔴 Dangerous ACCESS_COARSE_LOCATION
ACCESS_FINE_LOCATION
Получение приблизительного (сетевой провайдер) / точного (GPS) местоположения Отслеживание местоположения пользователя SOVA, ActionSpy
🔴 Dangerous CALL_PHONE Инициация телефонного звонка без подтверждения пользователем вызова Инициация звонков для траты денег Cerberus, GodFather, FluBot
🔴 Dangerous CAMERA Получение доступа к камере Съёмка фотографий и видео с камеры пользователя
🔴 Dangerous GET_ACCOUNTS Получение списка аккаунтов Получение списка аккаунтов в соцсетях SOVA
🔴 Dangerous PROCESS_OUTGOING_CALLS Право устарело; Просмотр набранного номера во время исходящего звонка + Перенаправление исходящего вызова на другой номер + Завершение исходящего звонка Отслеживание телефонных номеров SpyNote
🔴 Dangerous READ_CALENDAR Чтение записей в календаре Сбор / Отслеживание событий пользователя
🔴 Dangerous READ_CONTACTS Чтение контактов пользователя Инфицирование других устройств на основе контактной информации SOVA, Cerberus, Anubis
🔴 Dangerous READ_PHONE_STATE Read-only доступ к состоянию телефона (информация о сотовой сети, статус текущих звонков, список зарегистрированных на устройстве телефонных учётных записей PhoneAccount) Отслеживание активности пользователя Cerberus, GodFather
🔴 Dangerous READ_SMS Чтение SMS Чтение SMS для сбора чувствительной информации о пользователе SOVA, Cerberus
🔴 Dangerous RECEIVE_SMS Получение SMS Получение SMS для последующей отправки их на удалённые сервера атакующих Cerberus, Dplug, BlackRock
🔴 Dangerous RECORD_AUDIO Запись аудиозаписи Подслушивание за пользователем Daam, GodFather, SOVA, Anubis, SpyNote
🔴 Dangerous SEND_SMS Отправка SMS Отправка SMS на платные номера SOVA, Cerberus, Asacub
🔴 Dangerous WRITE_EXTERNAL_STORAGE Запись во внешнее хранилище Чтение / Манипуляция локальными файлами SOVA, GodFather, SpyNote

3.5 Анализ кода

🔍 [ Точки входа ]

Частые точки входа:

Вредоносный код часто располагается близко к точкам входа, чтобы быстрее исполниться;

  • [ EXPORTED ACTIVITIES ]
    Экспортируемые активности (включая главную активность приложения)

  • [ BROADCAST RECEIVERS ]
    Широковещательные приёмники (обработчики сообщений, посылаемых системой / другими приложениями)

    • Manifest-registered receivers: Отмечены в манифесте тегом <receiver>;
    • Context-registered receivers: Регистрируются программно во время исполнения приложения;
      • Android API 26+: не могут быть использованы для того, чтобы будить приложения
      • Могут работать только во время выполнения приложения
  • [ SERVICES ]
    Сервисы (определяются приложением для запуска длительных фоновых операций)

    • Отмечены в манифесте тегом <service>
  • [ SUBCLASSES ]
    Подклассы класса android.app.Application

    • Отмечены в манифесте тегом <application>

📌 [ Анализ Намерений ]

🔗HackTricks про намерения


Составляющие Intent (Намерения):

  1. Имя компонента: – имя компонента приложения, которому будет передано намерение;
    • Explicit intent: если имя компонента указано
    • Implicit intent: если имя компонента не указано → тогда система сама выбирает компонент на основе другой информации намерения
  2. Действие: – определение задачи, которая должна выполняться компонентом (просмотр, выбор, ...);
  3. Данные: – определение типа данных, зависит от указанного действия;
  4. Категория: – строка с дополнительным указанием типа компонента, который должен обработать намерение;
  5. Дополнительное: – дополнительная информация для передачи компонентам для выполнения нужного действия;
  6. Флаги: – метаданные намерения, сообщают системе как запустить активность + как работать с активностью после запуска;


Вредоносное использование намерений [🔗]:
 - android.app.action.DEVICE_ADMIN_ENABLED: проверка, активированы ли привилегии администратора;
 - android.intent.action.ACTION_EXTERNAL_APPLICATIONS_AVAILABLE: запуск вредоносного приложения, расположенного на SD карте;
 - android.intent.action.ACTION_POWER_CONNECTED: проврека, заряжается ли устройство, для запуска обновления вредоносного ПО;
 - android.intent.action.BATTERY_LOW / BATTERY_OKAY: проверка уровня зарядки для запуска соответствующей активности;
 - android.intent.action.BOOT_COMPLETED: запуск вредоносных активностей по завершении запуска системы;
 - android.intent.action.INPUT_METHOD_CHANGED: проверка изменился ли способ ввода;
 - android.intent.action.PACKAGE_INSTALL / PACKAGE_ADDED: проверка, установлен / добавлен ли вредоносный пакет;
 - android.intent.action.PHONE_STATE: проверка входящих звонков;
 - android.intent.action.QUICKBOOT_POWERON: запуск вредоносных сервисов, когда запущена система;
 - android.intent.action.SCREEN_ON / SCREEN_OFF: проверка, включен / выключен ли экран;
 - android.intent.action.SIG_STR: проверка силы сигнала;
 - android.intent.action.USER_PRESENT: проверка, присутствует ли пользователь (разблокировано ли устройство);
 - android.provider.Telephony.SMS_RECEIVED: проверка, получило ли устройство новое SMS для отправки на вредоносный сервер;

🔀 INTENT REDIRECTION

🔗 Официальные подробности про атаку Intent Redirection
🔗 Разбор атаки Intent Redirection с исходным кодом на Medium
🔗 Разбор атаки Intent Redirection с исходным кодом от Snyk


❓) Смысл:

  • Компоненты Android приложения (активности, сервисы, широковещательные приёмники, контент-провайдеры) – приватные и доступны только другим компонентам этого приложения;
  • Если компоненты Android приложения объявлены как публичные – они становятся доступны компонентам других приложений;

→ Вредоносное перенаправление намерения возможно когда аткующий может частично / полноценно контролировать содержимое намерения, которое используется для запуска компонента в контексте уязвимого приложения, через своё вредоносное приложение.
→ Если публичный компонент содержит функциональность, связанную с перенаправлением вложенных намерений, и недостаточно санитизирует вложенные намерения – приложение уязвимо;

❗️) Влияние:
Атакующий получает доступ к взаимодействию с компонентами уязвимого приложения, включая приватные компоненты, которые могут содержать чувствительные данные, а также со внутренней функциональностью уязвимого приложения.

🔢) Шаги:

  1. Уязвимое приложение допускает получение намерений из недоверенных источников и недостаточно санитизирует вложенные намерения;
  2. Во вредоносном приложении реализована функциональность, отправляющая намерение уязвимому приложению;

    // Вложенное намерение: основное запустит легитимную активность, вложенное – приватную


Пример проведения атаки от Snyk
[ Пример проведения атаки от Snyk 🔗 ]


💉 INTENT PARAMETER INJECTION

🔗 Разбор атаки Intent Parameter Injection с исходным кодом от Snyk


❓) Смысл:
Пользователю разрешается указывать произвольные параметры для намерений (в дополнение к оригинальным) с помощью метода putExtra(). Если дополнительные параметры недостаточно санитизируются, атакующий может получить доступ к приватным компонентам уязвимого приложения через своё вредоносное приложение.

❗️) Влияние:
Атакующий получает доступ к взаимодействию с компонентами уязвимого приложения, включая приватные компоненты, которые могут содержать чувствительные данные, а также со внутренней функциональностью уязвимого приложения.

🔢) Шаги:

  1. Уязвимое приложение допускает получение намерений из недоверенных источников и использует дополнительные параметры из внешних намерений, но недостаточно их санитизирует;
  2. Во вредоносном приложении реализована функциональность, отправляющая намерение уязвимому приложению, которое содержит вредоносные дополнительные параметры;


Пример проведения атаки от Snyk
[ Пример проведения атаки от Snyk 🔗 ]


✈️ IMPLICIT INTENT HIJACKING

🔗 Официальные подробности про атаку Implicit Intent Hijacking


❓) Смысл:
Если уязвимое приложение не указывает полное имя класса компонента / пакета при запуске намерения, то атакующий может зарегистрировать фильтр намерений и перехватывать намерения, адресованные легитимному приложению, с помощью вредоносного приложения.

❗️) Влияние:
Атакующий может перехватывать + читать / редактировать содержимое намерения, что может привести к утечке чувствительной информации или к запуску компонентов, контролирующихся атакующим.


⚙️ [ Анализ байт-кода ]

🔗 Подробнее про байт-код и коды операций Dalvik

// Приложение компилируется → генерируются коды операций Dalvik
//  → ART транслирует коды операций в набор инструкций процессора


Предложенный код для извлечения кодов операций:

for FILE in ./*.apk;
do
	apktool d -f $FILE
done

for DIR in $(ls -d */);
do
	mkdir ${DIR}smali/opcodes
	FILES=$(find ${DIR}smali -type f -name "*.smali")
	for FILE in $FILES;
	do
		grep -v '[0*.#:}{\"]' $FILE | sed '/^$/d' | sed 's/ //g' | cut -d ',' -f 1 | sort -u >> ./${DIR}smali/opcodes/opcodes0.txt
	done
done

for DIR in $(ls -d */);
do
	sed 's/v[0-9]//' ./${DIR}smali/opcodes/opcodes0.txt > ./${DIR}smali/opcodes/opcodes1.txt
	sed 's/p[0-9]//' ./${DIR}smali/opcodes/opcodes1.txt > ./${DIR}smali/opcodes/opcodes2.txt
	sed 's/[0-9]$//' ./${DIR}smali/opcodes/opcodes2.txt > ./${DIR}smali/opcodes/opcodes3.txt
done

🗡 [ Техники против анализа ]

  • Отражение (Reflection): – техника против анализа, заключающаяся в использовании API "отражения", которое используется для динамического поиска, создания экземпляров, вызова классов / методов во время выполнения программы → может быть использовано для сокрытия вредоносного кода;

    Необходимо искать использование API отражения! = import java.lang.reflect
    Также могут быть использованы: dalvik.system.DexClassLoader / dalvik.system.DexFile / ClassLoader API / ...

    • Часто при легитимном использовании API отражения задействуются константные значения;
    • Часто при вредоносном использовании API отражения задействуются неконстантные значения / объединяющиеся во время выполнения / зашифрованные / обфусцированные;
  • Код не на Java: – техника против анализа, заключающаяся в написании части / всего кода на других, более новых / редких языках программирования, что усложняет анализ в связи с недостатком подходящих инструментов;

    • Выявление использования JavaScript кода:

      1. Поиск JS скриптов в объектах WebView: addJavascriptInterface
    • Выявление использования нативного ARM кода:

      1. Нативный код часто может быть найден в папке lib внутри APK
      2. Ключевые слова в Java для взаимодействия с нативным кодом: native / System.loadLibrary
  • Шифрование & Кодирование: – техника против анализа, заключающаяся в шифровании / кодировании значений;

    Необходимо искать использование пакетов javax.crypto / java.util.Base64 / android.util.Base64 / ...


📑 Дополнительно

  • [ 📙 ] Мануал: Список инструментов для тестирования мобильных приложений от OWASP 🔗
  • [ 📘 ] Документация: Официальная документация о ресурсах Android приложения 🔗
  • [ 📘 ] Документация: Официальная документация о манифесте Android приложения 🔗
  • [ 📘 ] Документация: Официальная документация о правах Android приложения 🔗
  • [ 📄 ] Статья: ‟Малварь для Android за полчаса. Отслеживаем местоположение, читаем SMS, пишем аудио и делаем фото” от Евгения Зобнина в ][akep 🔗
  • [ 📄 ] Статья: ‟What Is Android Intent Redirection Vulnerability and How to Prevent It” от Masoud Fallahpour в Medium 🔗
  • [ 📄 ] Статья: ‟Exploring intent-based Android security vulnerabilities on Google Play” от Snyk 🔗