Что мы используем для анализа Android-приложений

В этой статье расскажем про инструментарий для анализа мобильных приложений, который мы используем каждый день.

Рассмотрим:

  • как запускать мобильные приложения;
  • чем смотреть трафик;
  • какие мы используем инструменты для статического и динамического анализа мобильных приложений.

Девайсы

Настоящее устройство

В Digital Security примерно 99% аудитов проводится на настоящих девайсах. Это избавляет от множества проблем. С ходу могу назвать следующие проблемы, которые решает использование реального устройства:

  1. Проще пройти аттестацию среды, если таковая реализована в приложении
  2. Не тратятся полезные ресурсы на рабочей машине
  3. Встречаются приложения, у которых некоторые функциональности вынесены в нативные библиотеки, и при этом они скомпилированы только для архитектуры ARM. Большинство виртуальных девайсов это x86_64 или x64, в Android Studio есть ARM-девайс, но версия Android и быстродействие оставляют желать лучшего.
  4. Быстродействие эмулятора всегда будет ниже реального устройства

В основном мы используем Samsung с Android 12, пару Xiaomi и пикселей. Также недавно у нас появился планшет на Harmony OS.

Виртуальный девайс

Android Studio Emulator

Чтобы создать виртуальное устройство, создаем пустой проект в Android Studio, выбираем вкладку Tools, где нам нужен инструмент Device Manager. Откроется боковая вкладка с девайсами.

На следующем шаге мы можем выбрать из двух версий — с Google Play и без. Если выбрать первую, то у вас не будет возможности выйти в режим с правами суперпользователя.

После скачивания необходимых файлов на вкладке Device Manager появится ваше устройство. Можем запускать.

Windows Subsystem for Android

Про этот интересный инструмент мы уже рассказали в прошлой статье по настройке WSA— обязательно посмотрите 🙂

Прокси

Анализ мобильных приложений неразрывно связан с анализом трафика между сервером и клиентом (мобильным приложением). Для этого можно найти множество (нет) инструментов, но у нас, в основном, встречается три. О них ниже.

BurpSuite

Ссылка на BurpSuite

Это наш главный инструмент, который запущен почти всегда. Как бы это странно ни звучало, но у него самый понятный интерфейс и есть всё, что нужно, из коробки. Распространяется в двух версиях — Community и Professional. Для базового анализа хватит и первой версии, к тому же всегда можно добавить нужные расширения через Extender.

MitmProxy

Ссылка на MitmProxy

Консольная тулза, которая позволяет, как и Burp, завернуть в неё трафик и изучать его. Есть веб-интерфейс, но более интересна другая функциональность.

MitmProxy позволяет легко дописывать функционал при помощи Python API. Например, у нас был кейс, когда было реализовано шифрование данных, пересылаемых через вебсокеты, и очень хотелось посмотреть на них. А еще больше хотелось их модифицировать.
Буквально за несколько минут был написан скрипт, который расшифровывал данные (у нас были необходимые ключи), передавал их дальше в Burp, который был указан как upstream proxy, и был еще один upstream proxy, который зашифровывал данные и передавал уже на бэкенд.

Получился примерно такой флоу:

OWASP ZAP

Ссылка на OWASP ZAP

Еще один мощный инструмент, который практически не уступает BurpSuite. Единственный его минус — миллиард настроек, в которых можно бесконечно искать необходимую галку.

Хочется выделить одну из функций, которой нет в BurpSuite и которая при этом иногда просто необходима — возможность ставить точку остановки для вебсокетов. В современном мире встречаются сайты или приложения, у которых почти все клиент-серверное взаимодействие основано на вебсокетах. В BurpSuite вы можете включить Interceptor и прокликать каждое сообщение, пока не появится то самое, нужное вам, которое вы хотите модифицировать и отправить дальше. Но что делать, если таких сообщений десятки или сотни? Здесь и пригодится этот функционал.

Добавить брейкпойнт можно на вкладке с вебсокетами. Мы определяем тип передаваемых данных и данные для поиска.

Как только появится сообщение, которые будет удовлетворять нашему шаблону, произойдет прерывание, а ZAP покажет искомое сообщение.

Статический анализ

JADX

Ссылка на JADX

Инструмент, с которым знакомы почти все аналитики безопасности мобильных приложений и не только. Это самый настоящий мастхэв при анализе приложений. Если при изучении трафика мы 70% времени проводим в BurpSuite, то при исследовании мобильного приложения «‎черным ящиком» 80% времени открыт JADX.

Позволяет на лету декомпилировать код, просматривать классы, ресурсы и делать поиск по всему приложению. Самый настоящий комбайн в хорошем смысле этого слова.

Также позволяет подключиться к приложению в режиме отладки и ставить брейкпойнты.

Apktool

Ссылка на Apktool

Используется ровно для двух случаев — когда нужно достать используемые ресурсы или ассеты, а также когда JADX не хватает памяти для того, чтобы открыть и декомпилировать все приложение, чтобы поискать по нему. В таком случае распаковываем приложение при помощи apktool, делаем поиск обычным grep/ripgrep и открываем класс либо в jadx, либо файл со smali-кодом в любом текстовом редакторе.

ByteCode Viewer

Ссылка на ByteCode Viewer 

All-In-One тулза для анализа мобильных приложений. Можно закинуть APK и сравнить результаты сразу нескольких декомпиляторов. Полезно, когда JADX не может привести некоторые методы к нормальному виду, а через smali ничего не понятно.

Androguard

Ссылка на Androguard

Мощный инструмент для реверс-инжиниринга мобильных приложений. Несколько раз использовали его для автоматизации проверок, когда необходимо было пройтись по функциям и XREF’ам.

Также умеет рисовать графы для классов, что визуально может помочь разобраться в флоу работы мобильного приложения.

Mariana Trench

Ссылка на Mariana Trench

Один из наиболее «свежих» инструментов для анализа мобильных приложений. Производит Taint-анализ по байткоду Dalvik. Легко устанавливается, из коробки уже имеет некоторый набор проверок, что поможет найти низко висящие уязвимости. Естественно, под каждый проект лучше писать свои правила — это повысит эффект от анализа и позволит сэкономить время.

Главное учесть, что если у вас приложение большое и имеет кучу функционала, то нужно запастись временем и терпением — анализ может занять до получаса. Еще из замеченного: mariana trench не учитывает экспортируемый ли компонент.

Представим базовую уязвимость, когда у нас в активити есть обработка диплинка, из него берется параметр url и передается в функцию loadUrl какой-нибудь webview. Mariana Trench подсветит это как уязвимость, однако если точка входа (Activity) у нас неэкспортируемая, то это будет False Positive.

Хоть это и стоит иметь в виду, в отчет такое не напишешь.

Hbctool

Ссылка на Hbctool
Статья по теме (на английском)

Консольная утилита для работы с байткодом Hermes. Одним из популярных фреймворков для кроссплатформенной разработки является React Native. Когда вы анализируете такое приложение, у вас есть три варианта развития событий:

  • В файле ./assets/index.android.bundle будет минифицированный javascript-код, который можно попробовать прогнать через beautifier и прочесть.
  • Рядом с файлом ./assets/index.android.bundle будет лежать файл ./assets/index.android.bundle.map с маппингами для собранного файла, и вы можете при помощи Unwebpack Sourcemap распаковать его и прочесть оригинальный исходный код.
  • В файле ./assets/index.android.bundle будет бинарщина. Это и есть Hermes Bytecode.

Эта тулза на крайний случай. При помощи неё можно попробовать превратить код в так называемый HASM. Читать его всё еще трудно, но это явно лучше, чем бинарный файл. И через кровь и слезы можно попытаться изучить логику работы, изменить и собрать обратно.

Динамический анализ

Frida

Ссылка на Frida

Самый известный инструмент, который позволяет на лету подключаться к приложению и внедрять в него свой код. Если сравнивать с чем-то по назначению, то в голову приходит только Xposed Framework. Только если сравнивать по времени, то написание скрипта для Frida занимает много меньше времени, чем модуль для Xposed.

Чтобы установить необходимые вещи на хост, нужно выполнить следующую простую команду:

Скачиваем frida-server для нужной архитектуры, переносим его на устройство и запускаем с правами суперпользователя:

После этого мы сможем увидеть его в консоли и начать писать скрипты для приложений.

Objection

Ссылка на Objection

Objection — это тулкит, который основан на Frida и предоставляет уже готовые функции для работы с мобильными приложениями. Имеет следующие готовые функции:

  • работа с файловой системой;
  • байпасс SSL pinning;
  • дамп keychain & keystore;
  • работа с памятью;
  • манипуляции с интентами.

Установка: pip3 install objection

Запуск: objection -g "package_name" explore

А еще у него просто шикарнейшие автоподсказки.

Medusa

В моем представлении это андерграунд среди средств для анализа мобильных приложений. Он мало где упоминается, что зря, так как это самая большая коллекция скриптов для Frida, которые я вместе видел. Можно сравнить с metasploit по подходу — у вас есть коллекция скриптов, вы выбираете необходимые, они компилируются вместе и инжектятся в процесс.

Удобно и иногда экономит кучу времени. Однако пару раз в модулях находились опечатки и ошибки, из-за чего скрипты ломались, так что приходилось править руками.

Magisk-модули

Если посмотреть на Magisk-модули, то не так уж и много необходимых нам, которые позволяют сэкономить время

MagiskTrustUserCerts

Ссылка на MagiskTrustUserCerts

Таким модулем является MagiskTrustUserCerts. Современные версии Android не дают возможность добавить системный CA. Это надо делать вручную или при помощи вот таких модулей, которые на этапе загрузки системы перенесут клиентские сертификаты в системный каталог. Это необходимо, чтобы приложения доверяли нам, когда мы заворачиваем трафик на прокси для последующего анализа.

Данный модуль уже упоминался нами, когда мы настраивали WSA.

XPosed-модули

Ввиду устаревания оригинального XPosed, нами используется его форк — LSposed. Данный форк — это модуль для Magisk, из-за чего установка производится буквально в несколько кликов.

WebViewDebugHook

Ссылка на WebViewDebugHook

Мало что можно написать про этот модуль, но он делает буквально следующее:

Удобно, если приложение использует WebView и нужно взглянуть на всё «изнутри».
Устанавливаем данный модуль, через LSposed выбираем скоуп приложений, на которые будет распространяться данный модуль.

Теперь, когда у нас на активном экране будет WebView, мы сможем посмотреть на неё через Chrome (chrome://inspect).

Xintent

Данный модуль позволяет видеть работу системы с интентами, которыми обмениваются приложения или компоненты приложения. Если вы хотите понять лучше логику работы приложения в динамике, то это отличный вариант.

Как и раньше, достаточно выбрать целевое приложение — и вперед смотреть логи.

ADB

Наверное, странно его тут видеть, но не упомянуть его нельзя. ADB умеет многое и играет роль чуть ли не основного инструмента при взаимодействии с устройством.

Проброс портов

Манипуляции с настройками

Командами ниже можно указать HTTP proxy и убрать его соответственно.

Текущая on-top activity и fragment

Вывести список всех приложений и путь до base APK

ADB logcat по package name

Запустить intent

Базовый пример:

am умеет практически всё. У него хоть и длинный, но крайне понятный manual.

Прочее

Сюда попало всё то, что не вошло в остальные категории

scrcpy

Ссылка на scrcpy

Это приложение позволяет отобразить экран Android-девайса, который доступен через ADB. Также позволяет вводить данные через клавиатуру. Удобно, когда нужно вводить огромный пароль от тестовой УЗ и делать через телефон лениво 🙂

Есть под все ОС, что довольно редко для наших дней.

ScreenStream

Казалось бы, зачем он нужен, когда есть scrcpy. Но что если нет возможности подключиться по проводу и вы находитесь в одной сети? Данное приложение нужно не очень часто, но помнить о нем полезно.

Работает с полпинка, главное — иметь сетевой доступ.

Заключение

В этой статье представлены не все, но большинство инструментов, которые мы используем каждый день при работе с мобильными приложениями.

Надеемся, что это поможет тем, кто только погружаются в анализ мобильных приложений и хочет собрать первое рабочее окружение.

 

Евгений Лукин 

 

Подпишитесь на наши обновления
Узнавайте все новости первыми

    Нажимая «Отправить заявку», вы даете согласие на обработку своих
    данных согласно политике обработки персональных данных.

    Напишите нам!

      Свяжитесь с нами, и мы поможем выстроить надежную защиту ваших
      информационных систем

      Согласие на получение последних новостей компании, сообщений рекламного и информационного характера.

      Нажимая «Отправить», вы даете согласие на обработку своих данных согласно политике обработки персональных данных.

      Мы используем куки-файлы, которые помогают сделать сайт удобнее для вас. Подробнее