Exploiting a debuggeable application
Ausnutzen einer debuggbaren Anwendung
Umgehen von Root- und Debugging-Überprüfungen
Dieser Abschnitt des Beitrags ist eine Zusammenfassung des Beitrags https://medium.com/@shubhamsonani/hacking-with-precision-bypass-techniques-via-debugger-in-android-apps-27fd562b2cc0
Schritte zum Aktivieren des Debugging-Modus und Umgehen von Überprüfungen in einer Android-App
Aktivieren des Debugging-Modus in der App
Inhalt basierend auf https://medium.com/@shubhamsonani/hacking-with-precision-bypass-techniques-via-debugger-in-android-apps-27fd562b2cc0
APK dekompilieren:
Verwenden Sie das APK-GUI-Tool zum Dekompilieren der APK.
Fügen Sie in der android-manifest-Datei
android:debuggable=true
ein, um den Debugging-Modus zu aktivieren.Kompilieren Sie die modifizierte Anwendung erneut, signieren Sie sie und führen Sie den Zipalign-Vorgang durch.
Installieren der modifizierten Anwendung:
Verwenden Sie den Befehl:
adb install <Anwendungsname>
.
Abrufen des Paketnamens:
Führen Sie
adb shell pm list packages –3
aus, um Drittanbieteranwendungen aufzulisten und den Paketnamen zu finden.
Die App auf Verbindung des Debuggers warten lassen:
Befehl:
adb shell am setup-debug-app –w <Paketname>
.Hinweis: Dieser Befehl muss jedes Mal vor dem Starten der Anwendung ausgeführt werden, um sicherzustellen, dass sie auf den Debugger wartet.
Verwenden Sie für die Persistenz
adb shell am setup-debug-app –w -–persistent <Paketname>
.Um alle Flags zu entfernen, verwenden Sie
adb shell am clear-debug-app <Paketname>
.
Vorbereitung für das Debugging in Android Studio:
Navigieren Sie in Android Studio zu Datei -> Profil oder APK öffnen.
Öffnen Sie die rekomplilierte APK.
Setzen von Breakpoints in wichtigen Java-Dateien:
Setzen Sie Breakpoints in
MainActivity.java
(insbesondere in der MethodeonCreate
),b.java
undContextWrapper.java
.
Umgehen von Überprüfungen
Die Anwendung überprüft an bestimmten Stellen, ob sie debuggbar ist, und prüft auch auf Binärdateien, die auf ein gerootetes Gerät hinweisen. Der Debugger kann verwendet werden, um App-Informationen zu ändern, das Debuggable-Bit aufzuheben und die Namen der gesuchten Binärdateien zu ändern, um diese Überprüfungen zu umgehen.
Für die Debugging-Überprüfung:
Ändern der Flag-Einstellungen:
Navigieren Sie in der Variablen-Sektion der Debugger-Konsole zu:
this mLoadedAPK -> mApplicationInfo -> flags = 814267974
.Hinweis: Die binäre Darstellung von
flags = 814267974
ist11000011100111011110
, was darauf hinweist, dass "Flag_debuggable" aktiv ist.
Diese Schritte stellen sicher, dass die Anwendung debuggt werden kann und dass bestimmte Sicherheitsüberprüfungen mithilfe des Debuggers umgangen werden können, um eine detailliertere Analyse oder Modifikation des Verhaltens der Anwendung zu ermöglichen.
Schritt 2 beinhaltet das Ändern eines Flag-Werts auf 814267972, der binär als 110000101101000000100010100 dargestellt wird.
Ausnutzen einer Schwachstelle
Es wurde eine Demonstration anhand einer verwundbaren Anwendung mit einem Button und einem Textview durchgeführt. Anfangs zeigt die Anwendung "Crack Me" an. Das Ziel besteht darin, die Nachricht zur Laufzeit von "Try Again" in "Hacked" zu ändern, ohne den Quellcode zu ändern.
Überprüfung auf Schwachstellen
Die Anwendung wurde mit
apktool
dekompiliert, um auf die DateiAndroidManifest.xml
zuzugreifen.Das Vorhandensein von
android_debuggable="true"
in der AndroidManifest.xml zeigt an, dass die Anwendung debuggbar ist und anfällig für Ausnutzung ist.Es ist erwähnenswert, dass
apktool
ausschließlich verwendet wurde, um den Debugging-Status zu überprüfen, ohne Code zu ändern.
Vorbereitung der Einrichtung
Der Prozess umfasste das Starten eines Emulators, das Installieren der verwundbaren Anwendung und die Verwendung von
adb jdwp
, um die lauschenden Dalvik-VM-Ports zu identifizieren.Das JDWP (Java Debug Wire Protocol) ermöglicht das Debuggen einer in einer VM ausgeführten Anwendung, indem es einen eindeutigen Port freigibt.
Für das Remote-Debugging war eine Portweiterleitung erforderlich, gefolgt von der Anbindung von JDB an die Zielanwendung.
Code zur Laufzeit einschleusen
Die Ausnutzung wurde durch das Setzen von Breakpoints und die Kontrolle des Anwendungsflusses durchgeführt.
Befehle wie
classes
undmethods <Klassenname>
wurden verwendet, um die Struktur der Anwendung aufzudecken.Ein Breakpoint wurde in der Methode
onClick
gesetzt und dessen Ausführung wurde kontrolliert.Die Befehle
locals
,next
undset
wurden verwendet, um lokale Variablen zu inspizieren und zu ändern, insbesondere die Änderung der Nachricht von "Try Again" zu "Hacked".Der modifizierte Code wurde mit dem Befehl
run
ausgeführt und hat die Ausgabe der Anwendung in Echtzeit erfolgreich geändert.
Dieses Beispiel zeigt, wie das Verhalten einer debuggbaren Anwendung manipuliert werden kann und verdeutlicht das Potenzial für komplexere Exploits wie den Zugriff auf die Shell auf dem Gerät im Kontext der Anwendung.
Referenzen
[https://resources.infosecinstitute
Last updated