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

Статическое тестирование безопасности приложений (SAST) используется для обеспечения безопасности программного обеспечения путём анализа исходного кода программы с целью выявления источников уязвимостей.

В отличие от инструментов динамического тестирования безопасности приложений (DAST), предназначенных для тестирования функциональности приложений методом «чёрного ящика», инструменты SAST фокусируются на содержании кода приложения, то есть на тестировании методом «белого ящика». Инструмент SAST сканирует исходный код приложений и их компонентов для выявления потенциальных уязвимостей в программном обеспечении и архитектуре. Инструменты статического анализа могут обнаружить около 50% существующих уязвимостей.

Основной проблемой использования SAST являются ложные срабатывания, которые происходят при анализе кода. В результате мы тратим время на разбор уведомлений о проблемах, которые на самом деле не являются проблемами. Для борьбы с ложными срабатываниями традиционно используются правила, которые можно настроить в SAST системах.

Как правило, при использовании SAST нужно сначала провести сканирование с настройками по умолчанию, получить «простыню» с тысячами однотипных ошибок, затем найти похожие ложные срабатывания, которых обычно бывает большинство. После этого настроить правила в SAST-системе, отключающие эти ложные срабатывания и уже после нескольких таких итераций получить отчёт с десятками сообщений, говорящих о реальных ошибках в коде.

Но это общие рекомендации для любых SAST, а мы будем дальше говорить об инструментах для анализа исходного кода для Android. Здесь мы сразу договоримся, что рассматриваться будут отдельные утилиты, не привязанные к какой‑либо IDE и легко интегрируемые в конвейер CI/CD.

Qark

Бесплатная утилита Qark предназначена для поиска различных уязвимостей в Android‑приложениях, как в исходном коде, так и в упакованных APK. По сути, всё, что нужно Qark для анализа — это каталог с Java-кодом или собранный APK-файл, из которого утилита извлечёт нужный код и другие компоненты и произведёт их анализ.

Ещё одно полезное преимущество QARK перед традиционными инструментами анализа, которые просто указывают на возможные уязвимости, заключается в том, что он может создавать команды ADB или даже полностью функциональные APK, которые превращают гипотетические уязвимости в рабочие эксплойты "POC" (proof of concept).

В число типов уязвимостей безопасности, которые пытается найти этот инструмент, входят:

  • Случайно экспортированные компоненты

  • Неправильно защищенные экспортируемые компоненты

  • Компоненты, которые уязвимы для перехвата или подслушивания

  • Неправильная проверка сертификата x.509

  • Создание файлов, доступных для чтения или записи для всех (world)

  • Действия, которые могут привести к утечке данных

  • Использование «липких» намерений (sticky intent), не рекомендованных к использованию типов трансляций

  • Небезопасное создание отложенных намерений

  • Отправка небезопасных широковещательных намерений (broadcast intent)

  • Закрытые ключи, встроенные в источник

  • Слабое или неправильное использование криптографии

  • Потенциально уязвимые конфигурации WebView

  • Экспортированные действия с предпочтениями

  • Tapjacking (наложение поддельного пользовательского интерфейса)

  • Приложения, позволяющие создавать резервные копии

  • Приложения, собранные в режиме отладки

  • Приложения, поддерживающие устаревшие версии API с известными уязвимостями

Инструмент также способен создавать «Proof‑of‑Concept» эксплоиты APK и/или ADB‑команд, способные эксплуатировать многие из найденных уязвимостей. Нет необходимости рутовать тестовое устройство, поскольку данный инструмент фокусируется на уязвимостях, которые могут быть использованы в других безопасных условиях.

Для использование данного функционала уже потребуется Android SDK, поэтому в рамках данной статьи мы не будем рассматривать функционал создания «Proof‑of‑Concept», а посмотрим, как можно использовать утилиту для анализа исходного кода и APK‑файла.

Прежде всего, давайте установим Java и утилиту Qark

$ sudo apt install default-jre

$ git clone https://github.com/linkedin/qark

$ cd qark

$ pip install -r requirements.txt

$ pip install . --user  # --потребуется, если не использовать virtualenv

$ qark –help # убеждаемся, что всё успешно установилось

Теперь мы проведём пару тестов. Сначала посмотрим исходный код уязвимого приложения четырёхлетней давности.

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

$ qark --java InjuredAndroid-master

Анализ проекта может занять несколько минут, в итоге получаем отчёт в формате HTML, содержащий найденные ошибки.

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

Мы также можем проанализировать APK-файл — для этого нам необходимо лишь сменить ключ. Здесь для теста я использовал один из простейших калькуляторов, которые можно найти на просторах сети:

$ qark --apk com.simplemobiletools.calculator-79.apk

Анализ займёт больше времени, но и отчёт будет более подробным и, возможно, интереснее.

В целом, Qark достаточно удобная утилита, которую можно легко встроить в конвейер CI/CD и использовать в качестве одной из задач для Jenkins.

MobSF

Mobile Security Framework (MobSF) — это платформа для исследования безопасности мобильных приложений на платформах Android и iOS. MobSF может использоваться для различных целей: безопасность мобильных приложений, тестирование на проникновение, анализ вредоносного ПО и анализ конфиденциальности.

Статический анализатор поддерживает такие популярные двоичные файлы мобильных приложений, как APK, IPA, APPX и исходный код. Динамический анализатор поддерживает приложения для Android и iOS и предлагает платформу для интерактивного инструментального тестирования, анализа данных во время выполнения и сетевого трафика.

Для того, чтобы начать анализ проекта, достаточно развернуть контейнер с помощью команды:

docker run -it --rm -p 8000:8000 opensecurity/mobile-security-framework-mobsf:latest

Дальше работать с этим инструментом можно с помощью веб‑интерфейса. Учетные данные по умолчанию mobsf/mobsf

После загрузки проекта через веб-интерфейс получаем такой красочный отчёт:

Нажав на конкретный компонент, мы можем получить подробную информацию:

В целом, MobSF является достаточно мощным инструментом для анализа. Его можно интегрировать в CI/CD с помощью REST API или с помощью использования консольных команд.

AndroBugs Framework

Третий инструмент — AndroBugs Framework. Это система анализа уязвимостей Android, позволяющая находить потенциальные уязвимости в Android‑приложениях. Этот инструмент не имеет веб-интерфейса и является полностью консольным, что упрощает его интеграцию в конвейер CI/CD.

Для установки этого фреймворка достаточно клонировать репозиторий:

$ git clone https://github.com/AndroBugs/AndroBugs_Framework

И запустить скрипт на выполнение:

$ python androbugs.py -f [APK file]

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

Заключение

Мы рассмотрели несколько утилит для анализа проектов под Android. Анализировать можно как непосредственно исходный код, так и APK-файлы; причём во втором случае можно получить больше информации о потенциальных уязвимостях в проекте.

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


Пользуясь случаем, расскажу, что рамках курса Otus "Android Developer. Professional" пройдут бесплатные онлайн-лекции по темам:

  • 26 февраля: «Методы фоновой работы приложения в Android». Подробнее

  • 11 марта: «Собственный оператор Flow и его использование в архитектуре приложения». Подробнее

  • 24 марта: «Material Design 3.0 — что нужно знать разработчику». Подробнее

Комментарии (0)