Android

Материал из InformationSecurity WIKI
Перейти к: навигация, поиск


Страница посвящена тестированию на проникновение Android-приложений.


Содержание

Этап I - получение APK

С устройства

Из интернета

Этап II - Распаковка приложения

Этап III - получение исходных кодов

Этап IV - включение отладки

Этап VI - патчинг

.smali

.java

Этап V - подключение frida

Этап VI - переупаковка приложения

Этап VII - добавление подписи

Этап VIII - сборка приложения

Этап IX - запуск приложения

На эмуляторе

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

Список проверок

Наличие обфускации

Как правило относится только к Java-коду но в редких случаях и к native-библиотекам.

Проверка

Для Java - достаточно посмотреть читается ли декомпилированный код или нет.

Для Native сложнее - нужно открыть ее в дизассемблере и уже смотреть статьи по обфускации кода (например добавление Virtual Machine в ассемблерный код)

Эксплуатация

Просто чтение кода и изучение используемых алгоритмов.

Исправление

Использовать бесплатные или платные(лучше) обфускаторы кода.


Ссылки

ROOT detection

Определяет есть ли на устройстве рут или нет.

Проверка

Либо поиск по ключевым словам "root", "safetynet api", "play integrity" либо запуск на рутованном девайсе


Также часть решений могут детектить по работе с директориями которые по-умолчанию закрыты (например /etc/)

TODO

Эксплуатация

Отсутствует, просто best-practice

Исправление

Добавление детекта например на базе платных продуктов или Play Integrity API.

Ссылки

Устаревший SafetyNetAPI

Использование устаревшего SafetyNetAPI для проверки целостности, рута и тд.

Проверка

Поиск в коде по строке "SafetyNet".

Эксплуатация

Magisc Bypass - https://github.com/kdrag0n/safetynet-fix/

Zygisk Bypass with detection evasion https://github.com/kdrag0n/safetynet-fix/issues/269

Youtube - https://www.youtube.com/watch?v=2J4QHsB5lsA

Исправление

Использовать новый Play Integrity

Ссылки

https://developer.android.com/privacy-and-security/safetynet/attestation

https://developer.android.com/privacy-and-security/safetynet/deprecation-timeline

https://developer.android.com/google/play/integrity


Отсутствие проверки на контейнеризацию

Китайцы опубликовали новое решение под названием MultiApp - https://github.com/WaxMoon/MultiApp и демо-приложением https://github.com/WaxMoon/MultiAppDemo и именно это приложение легло в основу VCamera. VCamera использует "HackAPI" которое указано в "MultiApp".

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

Проверка

Самая быстрая проверка - скачивание VCamera и тестирование с приложением https://play.google.com/store/apps/details?id=virtual.camera.app&hl=en_GB

Эксплуатация

На данный момент самое простое - VCamera и показать что камера была подменена.

Исправление

Проверки надо делать в Native-коде (С/C++ код) приложения с вызовом syscall

пример такой проверки - https://github.com/andvipgroup/VCamera/blob/f12f0b9c7131948b9369dd50aee3f3a23ab249e1/check_env_demo/code/native-lib.cpp


Почему так можно определить окружение? Как я понял, потому что хуки если и можно вешать, то не на системные функции ядра (по крайней мере без рута), поэтому вызов системных функций из Native-кода позволяет определить такую виртуализацию.

Ссылки

https://play.google.com/store/apps/details?id=virtual.camera.app&hl=en_GB

https://github.com/WaxMoon/MultiApp

https://github.com/WaxMoon/MultiAppDemo


Секреты в коде

Спрятанные в коде секреты


Проверка

1. Искать самому секреты по ключевым словам

2. Использовать SemGrep для поиска секретов

3. Использовать автоматические утилиты (например, MobSF) которые ищут в тч секреты

Эксплуатация

В зависимости от полученного секрета.

Исправление

Убрать секреты из кода приложения (иногда меняя архитектуру системы).

Ссылки

Остаточная информация

Поиск остаточной информации после компиляции в коде приложения.

Проверка

Что за информация может быть:

1. Private URLs

2. IP-addresses

3. Private API-endpoints

4. Полный путь компиляции (включая имя пользователя)

5. ...


Поиск опять же с SemGrep, MobSF или вручную.

Эксплуатация

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

Исправление

(Просто удалите если оно не требуется)

Ссылки

Небезопасные привилегии

В AndroidManifest.xml есть список привилегий приложения. Некоторые из них могут быть опасны.

Проверка

Обычно можно не мучиться и дать MobSF проверить привилегии.

JadX может распаковать AndroidManifest.xml и перевести его в читаемый формат.

Эксплуатация

В зависимости от привилегий, но как правила это просто best-practise.

Исправление

Отключение ненужных или опасных привилегий.

Ссылки

FireBase Misconfiguration

Различные мисконфиги сервиса FireBase по сбору логов.

Проверка

Поиск по подстроке "firebase" - поиск firebase url.

Эксплуатация

Один из вариантов - попытаться сдампить FireBase DB.

Пример - вы нашли URL test.firebaseio.com

Попробуйте открыть test.firebaseio.com/.json - если есть бд то уязвимо.


Другой вариант - сделать PUT запрос на

import requests
data= {"Exploit":"Successfull", "H4CKED BY": "Sheikh Rishad"}
reponse = requests.put("https://test.firebaseio.com/.json", json=data)

И проверить заменились ли данные. Но! Осторожнее мб бд перезаписывает.

Исправление

TODO

Ссылки

https://cyberweapons.medium.com/misconfigured-firebase-db-on-both-android-and-web-apps-a85927e4678f

https://hackerone.com/reports/1065134


AndroidManifest.xml - Debug

Включенный дебаг позволяет отладчику с ADB подключаться и отлаживать приложение.

Проверка

debuggable="true"

Поиск этой строки в AndroidManifest.xml


Также это можно найти автоматически с MobSF.

Эксплуатация

Обычно проще всего это сделать в AndroidStudio - выбрать устройство для отладки при открытом APK-файле.


Исправление

debuggable="false"

Ссылки

AndroidManifest.xml - Backup

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

Проверка

android:allowBackup="true"

Поиск этой строки в AndroidManifest.xml


Также это можно найти автоматически с MobSF.

Эксплуатация

Для Samsung мб нужно будет удалить безопасное хранилище Knox.


adb shell pm list packages -f -3
# Список приложений
...
# Замените на ссылку приложения
adb pull /data/app/org.fedorahosted.freeotp-Rbf2NWw6F-SqSKD7fZ_voQ==/base.apk freeotp.apk


Исправление

android:allowBackup="false"

Ссылки

https://gist.github.com/AnatomicJC/e773dd55ae60ab0b2d6dd2351eb977c1

TEST

Краткое_описание

Проверка

Эксплуатация

Исправление

Ссылки

TEST

Краткое_описание

Проверка

Эксплуатация

Исправление

Ссылки

Ссылки