Exploitation Framework für Android


Gestern bin ich über SecurityTube auf das Mercury Framework gestoßen, ein Tool zum Analysieren von Apps und Android-Devices. Mithilfe dieses Frameworks lassen sich ziemlich einfach Schwachstellen in Apps auffinden sowie PoC-Exploits für diese schreiben.

Funktionsweise

Das Framework besteht aus zwei Teilen, zum einen aus dem Server, welcher als Android-App auf dem entsprechenden Device installiert wird, zum anderen aus dem Client, welcher auf einem Rechner mit Python gestartet werden kann. Dabei ist zu beachten, dass der Server lediglich die Permission INTERNET benötigt. Die wird benutzt, um eine TCP-Verbindung zwischen Server und Client herzustellen. Die Daten werden dann in XML übertragen.

Nehmen wir an, der Server ist bereits auf einem Android-Gerät mit der IP 192.168.2.115 installiert und gestartet. Das Clientprogramm wurde ebenfalls durch python mercury.py geöffnet. Ein normaler Verbindungsaufbau über WLAN würde hier über den Befehl connect 192.168.2.115 durchgeführt. Danach sollten sich durch die Eingabe eines Fragezeichens die verfügbaren Befehle anzeigen lassen.

Verbinden mit dem Server

Verbinden mit dem Server

Nun lassen sich viele Sachen mit dem Device anstellen. Ich werde hier nur einige Möglichkeiten aufzeigen.

Mögliche Aktionen

Eine Shell benutzen

Um das Dateisystem des Geräts zu durchsuchen können wir uns über den Punkt shell eine Shell holen:

Holen einer Shell

Nun hat man Zugriff auf das Dateisystem im Kontext von Mercury. Interessant hierbei ist, dass jede App lesend auf den Inhalt der SD-Karte zugreifen kann. Für uns würde das bedeuten, wir könnten den gesamten Inhalt der SD-Card auf einen Server laden, da wir ja die INTERNET-Permission haben.

Erstellen einer Reverse-Shell

Es ist auch möglich, eine Reverse-Shell zu erstellen. Hierfür müssen wir in den Bereich modules wechseln. Damit wir die Shell aber überhaupt erreichen, müssen wir uns erstmal in einem zweiten Terminal einen lauschenden Socket mittels nc (netcat) erstellen. In meinem Fall lautet der Socket 192.168.2.113:1337. Ist der Socket erstellt, können wir nun mithilfe von run exploit.shell.reverseshell die Verbindung zu unserem PC mit der IP 192.168.2.113 aufbauen:

Senden der Reverse-Shell

Senden der Reverse-Shell

Um die Shell zu benutzen wechseln wir nun wieder in das Terminal, in dem netcat ausgeführt wird und führen beispielsweise den Befehl pwd aus, der uns das aktuelle Verzeichnis ausgibt:

Die Shell ist hier

Die Shell ist hier

Wie man sieht, ist es uns nicht erlaubt, den Befehl whoami zu benutzen, da uns hierfür die erforderlichen Rechte fehlen.

Dateien austauschen

Mit Mercury hat man die Möglichkeit, Dateien zwischen Client und Server auszutauschen, ohne adb benutzen zu müssen. Für diesen Zweck gibt es im Bereich tools die Befehle download und upload. Im folgenden Beispiel wird die Datei „nf19.ogg“ von der SD-Karte auf die Arbeitsfläche des PCs heruntergeladen.

Download der Datei nf19.ogg

Download der Datei nf19.ogg

Das Ganze ist natürlich auch umgekehrt mit dem Kommando upload möglich.

Apps auf SQLis prüfen

Um checken zu können, ob eine App eine SQL-Injection Lücke besitzt, müssen wir uns zunächst eine Liste mit Authoritys holen, die für das Auslesen ihrer Daten keine besonderen Berechtigungen erfordern (Schließlich haben wir nur die INTERNET-Permission). Das geht mit dem Befehl info -p null, welcher im Unterpunkt provider verfügbar ist. In meinem Beispiel fällt nun beispielsweise folgender Block auf:

channels benötigt keine Berechtigungen zum Lesen

Da die Authority channels keine Berechtigungen zum Lesen aus der Datenbank benötigt, haben wir nun eine potenzielle Zielapp. Als nächstes sehen wir uns mittels query content://channels den Inhalt der Tabelle channels an. Durch den Zusatz –projection können wir das Ergebnis auf eine bestimmte Spalte reduzieren. Aus (vereinfacht gesagt) SELECT * FROM channels wird also SELECT projection FROM channels. Wird der Inhalt von projection nicht überprüft, existiert in der App eine SQLi-Lücke. Diese Lücke kann man z.B. benutzen, um sich den Inhalt der Tabelle SQLITE_MASTER anzeigen zu lassen, welche alle Tabellen innerhalb der DB enthält. Mit dieser Information lassen sich dann die Daten aus jeder beliebigen Tabelle auslesen.

Die App com.android.providers.telephony hat eine SQL-Injection Lücke

Erweiterbarkeit

Das Framework ist sehr leicht um eigene Funktionen erweiterbar. Will man ein eigenes Modul hinzufügen, so muss die Python-Datei lediglich in den entsprechenden Unterordner merc/modules eingefügt werden. Somit ist es möglich, Proof-Of-Concept Exploits für bestimmte Anwendungsfälle zu schreiben.

Fazit

Mit dem Mercury-Framework existiert ein leistungsfähiges Tool, das die Analyse von einzelnen Apps und auch ganzen Android-Geräten erheblich vereinfacht. Das Framework ist auch gut geeignet, um zu sehen, wieviele Informationen eine Applikation abgreifen kann, die lediglich Zugriff auf das Internet fordert. Durch die einfache Erweiterbarkeit durch eigene Module eignet sich das Programm gut zum Schreiben von PoCs. Wer sich für das Thema interessiert, dem empfehle ich, sich mal das Whitepaper „The Heavy Metal that Poisoned the Droid“ durchzulesen.

Links:
Mercury – MWR Labs 

Quellen:
Artikelbild: http://labs.mwrinfosecurity.com/tools/2012/03/16/mercury/

Über m4gu5

Geek/Nerd, Level 12 Paladin, Linux-User
Dieser Beitrag wurde unter Security abgelegt und mit , , , verschlagwortet. Setze ein Lesezeichen auf den Permalink.

Schreibe einen Kommentar

Trage deine Daten unten ein oder klicke ein Icon um dich einzuloggen:

WordPress.com-Logo

Du kommentierst mit Deinem WordPress.com-Konto. Abmelden / Ändern )

Twitter-Bild

Du kommentierst mit Deinem Twitter-Konto. Abmelden / Ändern )

Facebook-Foto

Du kommentierst mit Deinem Facebook-Konto. Abmelden / Ändern )

Google+ Foto

Du kommentierst mit Deinem Google+-Konto. Abmelden / Ändern )

Verbinde mit %s