Статический анализ мобильных приложений

po4vmw8ssilc6lw98ns2wbvusgs.png

Одним из этапов тестирования мобильного приложения — это статический анализ. Статический анализ приложения — это анализ приложения без выполнения каких либо функций приложения. Наиболее удобным для меня из open source фреймворков есть MobSF. Кому интересно, добро пожаловать под кат.

MobSF выполняет статический анализ приложений: Android, Apple iOS и Windows Phone и динамический анализ: только приложения для Android. Как проводить динамический анализ расскажу в следующей статье посвящённой MobSF. Более подробное описание и мануал по установке можно прочитать по ссылке.

После установки MobSF — выполним следующий батничек для запуска сервера (писал для себя, поэтому диск D).

d:
cd .\MobSF\
python .\manage.py runserver


Дальше нужно перейтипо адресу http[:]//127.0.0.1:8000 и открывается главная страница (Рис. 1). Здесь функционала не много:

  • загрузка файла;
  • просмотреть отчеты по прошедшим сканам;
  • переход на документацию API;
  • переход на GitHub проекта.


kcexlpy81ltrqw3x8noqj77pgka.png
Рис. 1. Главная страница

После того как файл был загружен и проанализирован, появляется страница с результатом анализа (Рис. 2). Слева меню, которое позволит переходить быстро по всей странице (результат объёмный просто). Какая полезная информация находится на этом скриншоте:

  • хэш-сумма приложения;
  • поддерживаемые версии OS Android;
  • количество и типы компонентов (экспортированный или нет), это важно, так как экспортированные компоненты могут привести к критическим уязвимостям;
  • возможность просмотреть и скачать java- и smali-файлы, которые можно проанализировать другими инструментами или вручную;
  • просмотреть файл манифеста, для анализа.


118yc0hog79wdipmxyvx3kkyzps.png
Рис. 2. Результат анализа

Идем далее. На рис. 3 показана информация по сертификату, которым было подписано приложение.

fr_8ajijjmj3-xv4fhdwsep2zue.png
Рис. 3. Информация о сертификате

Далее идёт описание анализа permissions, которые описаны в файле AndroidManifest.xml (Рис. 4). MobSF анализирует permissions приложения, определяет его статус, на предмет критичности и описание permissions. Здесь нужно понимать архитектуру OS Android для действительной критичности приложения.

qgzxmcd5qtdsrr0kcmsxqrcsrdo.png
Рис. 4. Анализ Android Permissions

На вкладке Security Analysis → Code Analysis (Рис. 5) показывается результат анализа java-кода статическим анализатором, который определяет потенциальные уязвимости, определяет их критичность и файлы в которых этот тип уязвимости был найден. Во многом эти результаты является являются false positive, но нужно это всё перепроверять.

knp4jecd1p3q4jytukqr-aih7cw.png
Рис. 5. Анализ кода

Следующая вкладка (Рис. 6) — это анализ файлов, на сервисе virustotal.com. В данном случае файл не определялся как заражённый.

tjqkjdmwyep_jnydi9n7otvthvm.png
Рис. 6. Анализ файла

Вкладка URLs (Рис. 7) выводит список URL-адресов, IP-адресов и файлов в которых они хранятся или вызываются. В этом разделе анализируются куда приложение отправляет данные или куда сохраняет информацию.

r7k-iy-kh9wewaxdacapvcaglne.png
Рис. 7. Вкладка URLs

Вкладка «Strings» (Рис. 8) проводит анализ текстовых файлов, которые находятся в директории res. При анализе приложения эти файлы могут содержать захардкодженые учетки и другие чувствительные данные. Хотя на моей памяти такого не было.

8_73fnoxfr9qb4m0pvw7hemqnhg.png
Рис. 8. Анализ текстовых файлов

Вкладка «Components» (Рис. 9) выводит полный список компонентов (activity, service, content provider и receives), импортированные библиотеки и файлы без определения расширения.

6vkh3a6nokht3nm4x6cag7oraqq.png
Рис. 9. Список компонентов

Дополнительно анализ исходного кода можно провести с помощью статического анализатора VCG scanner. Для VCG нужен исходный код. Исходный код можно загрузить через кнопку Download Java Code (Рис. 10). Файл скачивается в ZIP-архиве. Дальше нужно извлечь папку с файлами из архива (Рис. 11).

naatlgyyoaxxqyldmtnpxy5p97q.png
Рис. 10. Скачивание исходного кода

i90p5hqpzvde9zpcd3vscerm1qi.png
Рис. 11. Извлечение исходного кода

Сканирование исходного кода делается следующим образом:

  1. Во вкладке «Settings» выбираем пункт «Java» — рисунок 12.
  2. Во вкладке «File» выбираем «New Target Directory» — рисунок 13.
  3. Во вкладке «Scan» выбираем «Full scan» — рисунок 14.


_eshldleegurgff8uus7minjqhw.png
Рис. 12. Выбор исходного кода

0zl84gixni6cdnnu1cd6m6xyjkk.png
Рис. 13. Подгрузка директории с файлами

pxiokculoodzwt-6dmr7xn8jojk.png
Рис. 14. Запуск сканирования

После завершения сканирования сканер выдаёт названия уязвимости, её критичность, краткое описание и место в исходном коде (Рис. 15). Можно получить полный список уязвимостей и сортировать по их критичности (Рис. 16).

ejox_du7anrxo2vu1mfsib8o4kc.png
Рис. 15. Описание уязвимостей

cwzywwojb56vp8d70jwkrzpip2k.png
Рис. 16. Полный список уязвимостей

Вывод

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

© Habrahabr.ru