
Помощник для оценки Android deeplink, Intent и WebView bridge для этичного взлома
Помощник для оценки Android deeplink, Intent и WebView bridge
apk-interceptor — это портативный APK для тестирования Android в рамках авторизованных оценок безопасности приложений. Он помогает инженерам по безопасности проверить, как Android-приложение обрабатывает внешние точки входа, такие как пользовательские схемы URI, deeplink, экспортированные Activity и WebView JavaScript bridge.
Инструмент намеренно ограничен:
android.permission.INTERNETcontent://Во время оценки безопасности Android-приложений многие находки статического анализа всё ещё требуют небольшого Proof of Concept на устройстве, прежде чем они могут быть подтверждены: регистрация пользовательской схемы URI, отправка явного Intent, предоставление локальной полезной нагрузки content:// или проверка, может ли JavaScript достичь WebView bridge.
Создание нового одноразового тестового приложения для каждого случая повторяемо и чревато ошибками. Небольшие различия в записях манифеста, authority, предоставлении URI, именах пакетов или построении Intent могут замедлить проверку и сделать результаты менее воспроизводимыми.
apk-interceptor был создан, чтобы сделать этот шаг подтверждения повторяемым. Вместо написания нового PoC APK для каждой оценки вы собираете этот инструмент с нужной авторизованной схемой или идентификатором приложения, запускаете тест на устройстве и сохраняете рабочий процесс ограниченным по проекту: без разрешения INTERNET, без передачи данных вовне, без выполнения команд оболочки и без зависимости от root.
apk-interceptor полезен для следующих задач оценки:
| Сценарий | Модуль | Что помогает проверить |
|---|---|---|
| Перехват пользовательской схемы URI | Interceptor | Может ли другое приложение зарегистрировать ту же пользовательскую схему и получать ссылки |
| Обработка параметров deeplink | Sender | Принимает ли оцениваемое приложение небезопасные параметры запроса/пути |
| Экспонирование экспортированной Activity | Sender | Может ли экспортированная Activity быть запущена напрямую другим приложением |
Экспонирование WebView bridge через content:// | Payload + Sender | Может ли локальная HTML-нагрузка достичь WebView JavaScript bridge |
| Проверка синтаксиса локальной нагрузки | Payload | Выполняется ли ваша HTML/JS нагрузка в тестовом WebView |
Подробные разборы уязвимостей:
content://Приложение ведет журнал оценки в памяти для отправленных Intent, полученных deeplink, обратных вызовов bridge, результатов JavaScript и ошибок. Журналы исчезают, когда процесс приложения убит. Поскольку журналы не сохраняются, фиксируйте доказательства с помощью скриншотов или записи экрана во время работы.
apk-interceptor — это инструмент подтверждения, а не фреймворк для обнаружения или эксплуатации. Он предполагает, что вы уже знаете, что тестировать (схема, класс Activity, имя bridge) из статического анализа, и предоставляет безопасный способ на устройстве проверить достижимость и зафиксировать доказательства. Он создан для установки на устройство оценки и даже для передачи клиенту, поэтому не требует разрешения INTERNET, выполнения команд оболочки, эксфильтрации данных и root.
Где он находится рядом с обычными инструментами Android:
| Инструмент | Роль | Чем отличается apk-interceptor |
|---|---|---|
| jadx / MobSF / QARK / Semgrep | Поиск уязвимых точек входа (статический) | apk-interceptor не сканирует и не декомпилирует; он подтверждает находку, которая у вас уже есть |
deep-C / NSdeepLink / adb am start | Перечисление и отправка deeplink | apk-interceptor тоже может отправлять, но его отличительная особенность — приём перехваченной схемы и отображение точного URI и параметров |
| drozer | Общий фреймворк атак на устройстве (агент + часто root) | apk-interceptor — это один легковесный APK с преднамеренными защитными ограничениями, более узкой областью применения и более простым безопасным распространением клиентам |
| Metasploit / Frida | Вооружение или перехват (например, addJavascriptInterface RCE) | apk-interceptor проверяет только достижимость bridge с безвредной нагрузкой; он никогда не эксфильтрует и не выполняет команды оболочки |
Две области, в которых apk-interceptor имеет наиболее явное преимущество перед альтернативами:
adb/статический анализ не могут показать.content:// → WebView bridge: неэкспортированный однофайловый провайдер, нагрузка которого доставляется только через временное разрешение Intent на чтение, плюс локальный тестовый WebView для предварительной проверки синтаксиса нагрузки.apk-interceptor по-разному относится к отправке и перехвату, и это самое важное, что нужно понять перед использованием:
| Действие | Модуль | Нужна ли пользовательская схема во время сборки? |
|---|---|---|
| Отправить Intent или deeplink в другое приложение | Sender | Нет, можно ввести любой URI, пакет или Activity во время выполнения |
| Перехватить (получить) deeplink для пользовательской схемы | Interceptor | Да, схема фиксируется в APK во время сборки |
Чтобы отправить подготовленный deeplink в оцениваемое приложение, пересобирать не нужно: используйте режим Implicit Deeplink на вкладке Sender и введите любой URI.
Чтобы перехватить deeplink, то есть заставить Android направить пользовательскую схему на apk-interceptor, чтобы вы могли наблюдать возможный перехват схемы, вы должны собрать APK с этой схемой через --scheme. Схема фиксируется во время сборки намеренно (проектное ограничение); apk-interceptor никогда не регистрирует произвольные схемы во время выполнения. Если вы меняете оцениваемую схему, пересоберите и переустановите.
adb для установки на устройство и дополнительного тестирования из командной строкиСоберите APK с пользовательской схемой URI, которую вы авторизованы оценивать:
./build-interceptor.sh --scheme <authorized_custom_scheme>
adb install ./out/apk-interceptor-<authorized_custom_scheme>-debug.apk
Необязательные флаги сборки:
./build-interceptor.sh \
--scheme <authorized_custom_scheme> \
--app-id <custom.application.id> \
--output ./out
--app-id устанавливает идентификатор установленного приложения (идентификатор пакета на устройстве и authority content://<applicationId>.payload) во время сборки. По умолчанию — com.sterrasec.apkinterceptor. Переопределите с помощью --app-id, когда вам нужно несколько отдельных устанавливаемых сборок для разных оценок. Эквивалент для Windows — build-interceptor.bat.