
Android-Deeplink-, Intent- und WebView-Bridge-Bewertungshelfer für ethisches Hacken
Android-Bewertungshelfer für Deeplinks, Intents und WebView-Brücken
apk-interceptor ist eine portable Android-Test-APK für autorisierte Anwendungssicherheitsbewertungen. Sie hilft Sicherheitsingenieuren zu überprüfen, wie eine Android-App externe Einstiegspunkte wie benutzerdefinierte URI-Schemata, Deeplinks, exportierte Activities und WebView-JavaScript-Brücken verarbeitet.
Das Tool ist absichtlich eingeschränkt:
android.permission.INTERNETcontent://-Payload-Datei bereitBei der Sicherheitsbewertung von Android-Anwendungen müssen viele Erkenntnisse aus der statischen Analyse dennoch durch einen kleinen Proof of Concept auf dem Gerät bestätigt werden, bevor sie als bestätigt gelten können: Registrierung eines benutzerdefinierten URI-Schemas, Senden eines expliziten Intents, Bereitstellen einer lokalen content://-Payload oder Überprüfung, ob JavaScript eine WebView-Brücke erreichen kann.
Das Erstellen einer neuen Wegwerf-Test-App für jeden Fall ist wiederholt und fehleranfällig. Kleine Unterschiede in Manifesteinträgen, Authorities, URI-Grants, Paketnamen oder Intent-Konstruktion können die Verifizierung verlangsamen und die Reproduzierbarkeit der Ergebnisse erschweren.
apk-interceptor wurde erstellt, um diesen Bestätigungsschritt wiederholbar zu machen. Statt für jede Bewertung eine neue PoC-APK zu schreiben, bauen Sie dieses Tool mit dem autorisierten Schema oder der Anwendungs-ID, die Sie benötigen, führen den Test auf dem Gerät durch und halten den Workflow bewusst eingeschränkt: keine INTERNET-Berechtigung, keine externe Datenübertragung, keine Shell-Ausführung und keine Root-Abhängigkeit.
apk-interceptor ist für diese Bewertungsaufgaben nützlich:
Detaillierte Schwachstellen-Durchgänge:
content://Die App führt ein In-Memory-Bewertungsprotokoll für gesendete Intents, empfangene Deeplinks, Bridge-Callbacks, JavaScript-Ergebnisse und Fehler. Protokolle verschwinden, wenn der App-Prozess beendet wird. Da Protokolle nicht dauerhaft gespeichert werden, erfassen Sie Beweise mit Screenshots oder Bildschirmaufnahmen während der Arbeit.
apk-interceptor ist ein Bestätigungs-Tool, kein Entdeckungs- oder Exploit-Framework. Es setzt voraus, dass Sie bereits wissen, was zu testen ist (Schema, Activity-Klasse, Bridge-Name) aus der statischen Analyse, und bietet eine sichere, geräteseitige Möglichkeit, die Erreichbarkeit zu überprüfen und Beweise zu sammeln. Es ist dazu gebaut, auf einem Bewertungsgerät installiert und sogar mit einem Kunden geteilt zu werden, daher enthält es keine INTERNET-Berechtigung, keine Shell-Ausführung, keine Datenexfiltration und keine Root-Anforderung.
Wo es neben den üblichen Android-Tools steht:
Die beiden Bereiche, in denen apk-interceptor den deutlichsten Vorteil gegenüber den Alternativen hat:
adb/statische Analyse nicht zeigen kann.content:// → WebView-Brückenverifikation: Ein nicht exportierter, einzelner Dateianbieter, dessen Payload nur durch eine temporäre Intent-Leseberechtigung zugestellt wird, plus ein lokaler Selbsttest-WebView zur Vorabvalidierung der Payload-Syntax.apk-interceptor behandelt Senden und Abfangen unterschiedlich, und dies ist das Wichtigste, das Sie vor der Nutzung verstehen müssen:
| Aktion | Modul | Benutzerdefiniertes Schema zur Build-Zeit nötig? |
|---|---|---|
| Senden eines Intents oder Deeplinks an eine andere App | Sender | Nein, geben Sie zur Laufzeit eine beliebige URI, Paket oder Activity ein |
| Abfangen (Empfangen) eines Deeplinks für ein benutzerdefiniertes Schema | Interceptor | Ja, das Schema wird zur Build-Zeit in die APK eingebaut |
Um einen maßgeschneiderten Deeplink an die bewertete App zu senden, müssen Sie nicht neu bauen: Verwenden Sie den Implicit Deeplink-Modus des Sender-Tabs und geben Sie eine beliebige URI ein.
Um einen Deeplink abzufangen, das heißt, Android dazu zu bringen, ein benutzerdefiniertes Schema an apk-interceptor weiterzuleiten, damit Sie einen möglichen Schema-Hijack beobachten können, müssen Sie die APK mit diesem Schema über --scheme bauen. Das Schema wird absichtlich zur Build-Zeit festgelegt (eine Design-Schutzmaßnahme); apk-interceptor registriert niemals beliebige Schemata zur Laufzeit. Wenn Sie das zu bewertende Schema ändern, bauen Sie neu und installieren Sie erneut.
adb für Geräteinstallation und optionale BefehlszeilentestsBauen Sie die APK mit dem benutzerdefinierten URI-Schema, das Sie zu bewerten berechtigt sind:
./build-interceptor.sh --scheme <authorized_custom_scheme>
adb install ./out/apk-interceptor-<authorized_custom_scheme>-debug.apk
Optionale Build-Flags:
./build-interceptor.sh \
--scheme <authorized_custom_scheme> \
--app-id <custom.application.id> \
--output ./out
--app-id setzt die installierte Anwendungs-ID (die Paketidentität auf dem Gerät und die content://<applicationId>.payload-Authority) zur Build-Zeit. Der Standardwert ist com.sterrasec.apkinterceptor. Überschreiben Sie ihn mit --app-id, wenn Sie mehrere getrennt installierbare Builds für verschiedene Bewertungen benötigen. Das Windows-Äquivalent ist build-interceptor.bat.
Das Standard-Schema intercept-poc-example ist ein harmloser Platzhalter. Das Build-Skript weigert sich, eine Bewertungs-APK mit diesem Standard-Schema zu produzieren.
Beim ersten Start für jede App-Version zeigt apk-interceptor einen Dialog zur autorisierten Nutzung. Nachdem Sie auf Ich verstehe getippt haben, zeigt dieselbe Version den Dialog nicht erneut. Der Sender-Tab zeigt dennoch eine dauerhafte Warnung, da er Intents an andere Apps senden kann.
| Sender | Payload | Interceptor |
|---|---|---|
![]() | ![]() | ![]() |
Verwenden Sie diesen Tab, um die Abfangbarkeit benutzerdefinierter URI-Schemata zu überprüfen.
Was es anzeigt:
Grundlegender Workflow:
Über Test-Deeplink senden: Es sendet immer <scheme>://test?<Ihre Parameter> mit einem festen test-Host, ist also dazu gedacht zu bestätigen, dass apk-interceptor das Schema empfängt und protokolliert, nicht um die spezifischen Deeplink-Routen der bewerteten App anzusteuern. Um einen maßgeschneiderten Deeplink zu senden, der dem erforderlichen Host oder Pfad der bewerteten App entspricht, verwenden Sie stattdessen den Implicit Deeplink-Modus des Sender-Tabs.
adb-Beispiel:
adb shell am start -W \
-a android.intent.action.VIEW \
-d 'my-authorized-scheme://test?source=adb\&message=hello%20world'
Verwenden Sie \&, wenn Sie mehrere Query-Parameter über adb shell senden; andernfalls könnte die Geräte-Shell & als Befehlstrenner behandeln.
Erwartetes Ergebnis:
RECEIVED-Protokolleintrag erscheintVerwenden Sie diesen Tab, um während eines autorisierten Tests kontrollierte Intents zu senden.
Modi:
Intent(ACTION_VIEW, Uri.parse(uri))Felder und Steuerelemente:
Implicit-Deeplink-Workflow:
Explicit-Activity-Workflow:
Hinweise:
content://-Anhang ist nützlich, wenn Sie testen, ob eine Ziel-Activity nicht vertrauenswürdige Intent-Daten an ein WebView übergibt.data des Intents zugestellt, was die im Implicit Deeplink-Modus eingegebene URI überschreiben würde, daher ist die Option dort ausgeblendet.PayloadProvider ist nicht exportiert. Die bewertete App kann die angehängte content://-Payload nur lesen, weil der Intent ihr über FLAG_GRANT_READ_URI_PERMISSION temporären Lesezugriff gewährt. Lassen Sie dieses Flag aktiviert und liefern Sie die URI über den Intent. Ein content://-URI, der auf andere Weise geöffnet wird, ist für eine andere App nicht lesbar.Verwenden Sie diesen Tab, um eine lokale HTML-Payload zu erstellen und die JavaScript-Bridge-Syntax im eigenen Selbsttest-WebView von apk-interceptor zu validieren.
Was es enthält:
content://-URIGeneriertes Payload-URI-Format:
content://<applicationId>.payload/current.html
Der Anbieter stellt nur diese feste Datei bereit:
filesDir/payloads/current.html
Payload-Selbsttest-Workflow:
localBridge.BRIDGE_RESULT, console.log und evaluateJavascript result im Protokoll.Beispiel-Selbsttest-JavaScript:
console.log("payload loaded");
window.localBridge.logResult(window.localBridge.getInfo());
Der Selbsttest-Bridge stellt zur Verfügung:
window.<bridgeName>.logResult("message");
window.<bridgeName>.getInfo();
Wichtige Einschränkung:
Der Selbsttest-WebView bestätigt, dass Ihre lokale Payload und Bridge-Call-Syntax innerhalb von apk-interceptor funktionieren. Er kann nicht beobachten, ob das WebView einer anderen App Ihre Payload ausgeführt oder seine eigene Bridge aufgerufen hat. Überprüfen Sie für die bewertete App über deren UI, Protokolle, Test-Hooks oder Chrome DevTools, falls die App debuggbar ist.
Risiko:
Eine Android-App registriert ein benutzerdefiniertes URI-Schema anstelle eines verifizierten App-Links. Jede andere App kann dasselbe Schema registrieren, sodass Android möglicherweise eine App-Auswahl anzeigt oder Links an eine andere App weiterleitet.
Verwenden Sie apk-interceptor, um zu prüfen:
Schritte:
Zu erfassende Beweise:
Risiko:
Die bewertete App vertraut Deeplink-Parametern für Navigation, URL-Ladung, Feature-Flags, Kontoauswahl oder Darstellung ohne ausreichende Validierung.
Verwenden Sie apk-interceptor, um zu prüfen:
Schritte:
Beispiel-Platzhalter:
my-authorized-scheme://open?next=https%3A%2F%2Fauthorized-test.example%2Flanding
Verwenden Sie keine echten Drittanbieter-Domänen oder -Konten, es sei denn, sie sind ausdrücklich im Umfang enthalten.
Risiko:
Eine exportierte Activity führt sensible Aktionen aus oder zeigt sensible Daten an, ohne den Aufrufer, den Benutzerzustand oder die erforderliche Autorisierung zu überprüfen.
Verwenden Sie apk-interceptor, um zu prüfen:
Schritte:
content://-Payload-URI an.Zu erfassende Beweise:
content://Risiko:
Die bewertete App lädt nicht vertrauenswürdige content://-Intent-Daten in ein WebView, das auch eine JavaScript-Brücke über addJavascriptInterface bereitstellt.
Verwenden Sie apk-interceptor, um zu prüfen:
content:// zugestellt werden kannSchritte:
Wichtige Einschränkung:
apk-interceptor kann keine Ergebnisse von einer anderen App empfangen, es sei denn, diese App gibt sie explizit zurück oder zeigt sie an. Das Tool ist dazu entwickelt, eine lokale Payload zuzustellen und Syntax zu validieren, nicht Daten zu exfiltrieren.
Überprüfen Sie, dass die APK keinen Netzwerkzugriff anfordert:
aapt dump permissions ./out/apk-interceptor-<scheme>-debug.apk
Erwartet: kein android.permission.INTERNET.
Einen Deeplink explizit an apk-interceptor senden:
adb shell am start -W \
-n com.sterrasec.apkinterceptor/.InterceptActivity \
-a android.intent.action.VIEW \
-d 'my-authorized-scheme://test?source=adb'
Einen Deeplink über den Android-Resolver senden:
adb shell am start -W \
-a android.intent.action.VIEW \
-d 'my-authorized-scheme://test?source=adb'
Der explizite Befehl bestätigt das Verhalten von InterceptActivity. Der implizite Befehl bestätigt das Manifest-Intent-Filter und das Resolver-Verhalten.
Unit-Tests laufen auf der JVM mit Robolectric, sodass kein Gerät oder Emulator erforderlich ist. Sie decken PayloadProvider ab, einschließlich der Pfad-Whitelisting- und Traversal-Prüfungen, die verhindern, dass der Provider etwas anderes als die einzelne current.html-Payload bereitstellt.
./gradlew testDebugUnitTest
Testergebnisse werden nach app/build/reports/tests/testDebugUnitTest/index.html geschrieben. Dieselbe Aufgabe wird in CI bei jedem Push und Pull-Request zu main ausgeführt.
android.permission.INTERNET/current.html wird von PayloadProvider bereitgestelltMIT
| Szenario | Modul | Was es zu überprüfen hilft |
|---|
| Hijacking benutzerdefinierter URI-Schemata | Interceptor | Ob eine andere App dasselbe benutzerdefinierte Schema registrieren und Links empfangen kann |
| Deeplink-Parameterverarbeitung | Sender | Ob die bewertete App unsichere Query-/Path-Parameter akzeptiert |
| Exposition exportierter Activities | Sender | Ob eine exportierte Activity direkt von einer anderen App gestartet werden kann |
WebView-Brücken-Exposition über content:// | Payload + Sender | Ob eine lokale HTML-Payload eine WebView-JavaScript-Brücke erreichen kann |
| Syntaxprüfung lokaler Payloads | Payload | Ob Ihre HTML/JS-Payload im Selbsttest-WebView läuft |
| Tool | Rolle | Wie apk-interceptor sich unterscheidet |
|---|
| jadx / MobSF / QARK / Semgrep | Finden anfälliger Einstiegspunkte (statisch) | apk-interceptor scannt oder dekompiliert nicht; es bestätigt einen bereits vorhandenen Befund |
deep-C / NSdeepLink / adb am start | Deeplinks auflisten und senden | apk-interceptor kann auch senden, aber sein Unterscheidungsmerkmal ist das Empfangen eines gekaperten Schemas und die genaue Anzeige von URI und Parametern |
| drozer | Allgemeines On-Device-Angriffsframework (Agent + oft Root) | apk-interceptor ist eine einzelne leichte APK mit bewussten Sicherheitsvorkehrungen, engerem Umfang und einfacherer, kundensicherer Verteilung |
| Metasploit / Frida | Bewaffnen oder Haken (z. B. addJavascriptInterface RCE) | apk-interceptor prüft nur die Erreichbarkeit der Brücke mit einer harmlosen Payload; es exfiltriert nie oder führt keine Shell-Befehle aus |