
trueseeing v2.2.11
Сканер уязвимостей приложений iOS/Android без декомпиляции (DC25 demo lab, CB17)
README
trueseeing — это быстрый, точный и устойчивый сканер уязвимостей для iOS/Android-приложений. Мы работаем на уровне Dalvik VM для Android — то есть нам неважно, обфусцировано целевое приложение или нет.
Возможности
В настоящее время мы можем:
- Автоматически сканировать приложение на уязвимости, формируя отчёт в формате HTML/JSON/текст (см. ниже)
- Модифицировать приложение для упрощения анализа: например, включать отладочный бит, разрешать полное резервное копирование, отключать TLS pinning, изменять целевой API level, внедрять frida-gadget и т. д.
- Изучать общую информацию о приложении
- Копировать данные в/из приложения через отладочный интерфейс
- Искать определённые вызовы/константы/sput/iput
- Восстанавливать константы/наборы типов для аргументов операций
- Сканировать вызовы API/приватных методов для нативного кода (примечание: требуется ts2-disasm-ghidra)
- Сканировать iOS-приложения на базовые уязвимости (примечание: требуется ts2-disasm-ghidra)
- Подключать frida-скрипты
- Запускать интерактивную сессию frida
- Трассировать вызовы
- и т. д.
Установка
Контейнеры
ПРИМЕЧАНИЕ:
- Начиная с версии 2.1.9 мы размещаемся на ghcr.io (Docker Hub несколько устарел).
- Требуется adbd на хосте для управления устройствами.
Мы предоставляем контейнеры, которые можно использовать сразу, как показано ниже; сейчас это также рекомендуемый способ и единственный для Windows:
$ docker run --rm -v $(pwd):/out -v ts2:/cache ghcr.io/alterakey/trueseeing
Если вы хотите запускать без сохранения состояния, можно не монтировать том в /cache (не рекомендуется для повседневного использования; см. также #254):
$ docker run --rm -v $(pwd):/out ghcr.io/alterakey/trueseeing
Установка с помощью uv
Кроме того, вы можете установить наш пакет с помощью uv следующим образом. Особенно форма uv tool install может быть полезна для расширений (см. ниже), так как она предоставляет им наибольшую свободу. Просто помните, что вам понадобятся JRE и Android SDK (опционально; для работы с устройствами):
$ uvx trueseeing
$ uv tool install trueseeing
$ trueseeing
Установка с помощью pip (устаревший способ)
Конечно, вы всегда можете использовать старый добрый pip, если это необходимо:
$ pip install trueseeing
Использование
Интерактивный режим
Вы можете интерактивно сканировать/анализировать/модифицировать приложения — это идеальный выбор для ручного анализа:
$ trueseeing target.apk
[+] trueseeing x.y.z
ts[target.apk]> ?
...
ts[target.apk]> i # показать общую информацию
...
ts[target.apk]> pf AndroidManifest.xml # показать манифест
...
ts[target.apk]> a # также анализировать ресурсы
...
ts[target.apk]> /s something # поиск текста
...
ts[target.apk]> as # сканирование
...
[+] done, found 6403 issues (174.94 sec.)
ts[target.apk]> gh report.html
Пакетный режим
Мы принимаем встроенную команду (-c) или файл скрипта (-i) для выполнения перед выводом приглашения, а также возможность сразу завершить работу без приглашения (-q; в этом режиме tty не требуется!).
Вы можете использовать эти возможности для проведения пакетного сканирования, например, для вывода результатов сразу в stderr:
$ trueseeing -eqc 'as' target.apk
Для создания файла отчёта в формате HTML:
$ trueseeing -eqc 'as;gh report.html' target.apk
Для создания файла отчёта в формате JSON:
$ trueseeing -eqc 'as;gj report.json' target.apk
Чтобы вывести отчёт в stdout, опустите имя файла в последней команде g*:
$ trueseeing -eqc 'as;gh' target.apk > report.html
$ trueseeing -eqc 'as;gj' target.apk > report.json
Неинтерактивный режим сканирования (устаревший способ)
Традиционно вы можете сканировать приложения с помощью следующей командной строки, чтобы получить список находок в stderr:
$ trueseeing --scan target.apk
Чтобы создать отчёт в формате HTML:
$ trueseeing --scan --scan-output report.html target.apk
$ trueseeing --scan --scan-report=html --scan-output report.html target.apk
Чтобы создать отчёт в формате JSON:
$ trueseeing --scan --scan-report=json --scan-output report.json target.apk
Чтобы вывести отчёт в stdout, укажите '-' в качестве имени файла:
$ trueseeing --scan --scan-output - target.apk > report.html
$ trueseeing --scan --scan-report=html --scan-output - target.apk > report.html
$ trueseeing --scan --scan-report=json --scan-output - target.apk > report.json
Расширенное использование
Расширения
Вы можете создавать свои собственные команды и сигнатуры в виде расширений. Расширения размещаются в каталоге /ext (контейнеры) или ~/.trueseeing2/extensions/ (uv/pip). Кроме того, вы можете распространять расширения в виде wheel-пакетов. Мы предоставляем информацию о типах, так что вы сможете не только проверять типы ваших расширений с помощью zuban, но и получать хорошую поддержку от IDE. Подробнее см. в разделе «Детали».
Сборка
Сборка выполняется следующим образом:
$ docker build -t trueseeing https://github.com/alterakey/trueseeing.git#main
Для сборки wheel-пакетов можно воспользоваться flit:
$ flit build
Для взлома (разработки) необходимо создать подходящее окружение. С помощью uv можно просто сделать:
$ git clone https://github.com/alterakey/trueseeing.git wc
$ uv sync --locked --dev
$ (... hack ...)
$ uv run trueseeing ... # запуск
$ uv run zuban check trueseeing && uv run ruff trueseeing # проверка
Success: no issues found in XX source files
$ uv run flit build # сборка (wheel)
$ docker build -t trueseeing . # сборка (контейнер)
С помощью pip: сначала создайте venv, установите flit и инструменты проверки (zuban и ruff), затем позвольте flit подтянуть зависимости. Вкратце:
$ git clone https://github.com/alterakey/trueseeing.git wc
$ python3 -m venv wc/.venv
$ source wc/.venv/bin/activate
(.venv) $ pip install flit zuban ruff
(.venv) $ flit install --deps=develop -s
(.venv) $ (... hack ...)
(.venv) $ trueseeing ... # запуск
(.venv) $ zuban check trueseeing && ruff check trueseeing # проверка
Success: no issues found in XX source files
(.venv) $ flit build # сборка (wheel)
(.venv) $ docker build -t trueseeing . # сборка (контейнер)
Детали
Классы уязвимостей
В настоящее время мы можем обнаружить следующие классы уязвимостей, в основном описанные в OWASP Mobile Top 10 - 2016:
-
Неправильное использование платформы (M1)
- Debuggable
- Непреднамеренная публикация Activity, Service, ContentProvider, BroadcastReceiver
-
Небезопасные данные (M2)
- Backupable (т.е. подвержено атаке через резервное копирование)
- Небезопасные права доступа к файлам
- Логирование
-
Незащищённые коммуникации (M3)