- Viele Apps integrieren AI-Modelle direkt auf dem Gerät. Das ist vorteilhaft, wenn schnelle Inferenz und Offline-Zugriff wichtig sind
- Das Vorhandensein der Modelldatei auf dem Gerät bedeutet jedoch auch, dass Nutzer diese Datei extrahieren und analysieren können
Ziel
- Microsofts Seeing AI-App ist eine „sprechende Kamera“ für sehbehinderte Menschen, die Objekte, Dokumente, Geldscheine und mehr erkennt und per Sprache beschreibt
- Insbesondere die Währungserkennung unterstützt mehr als 17 Währungen und erkennt 225 eindeutige Banknoten
- Das Modell ist zwar im APK-Paket der App enthalten, liegt dort aber als verschlüsselte Datei (
currency) vor
- Wenn die Datei nur einfach verschlüsselt ist, kann man ihren Speicherbereich oder den Entschlüsselungsprozess während der App-Ausführung verfolgen und die Datei extrahieren
Erste Untersuchung
- Android-Apps werden als APK-Dateien verteilt, also Archive, die alles enthalten, was zum Ausführen der App nötig ist
- AI-Modelle werden in der Regel zusammen mit diesen Assets gespeichert
- Mit
apktool lässt sich eine APK dekompilieren und ihre Struktur analysieren
- Im Ordner
assets wurde eine Datei namens currency gefunden, die jedoch verschlüsselt ist
Einen Schritt weiter
- Es ist möglich, per Reverse Engineering nachzuvollziehen, wie die App die Datei
currency entschlüsselt
- Es wurde bestätigt, dass TensorFlow Lite in
com.microsoft.seeingai verwendet wird
- Mit
org.tensorflow.lite.NativeInterpreterWrapper lassen sich *.tflite-Modelle laden
Frida verwenden
- Frida ist ein Dynamic-Instrumentation-Tool, das auf nahezu allen Betriebssystemen läuft und sich an laufende Prozesse anhängen kann, um ihr Verhalten zu verändern
- Während der Prozess läuft, kann man Methodenaurufe verfolgen, Argumente und Rückgabewerte prüfen oder den Methodeninhalt durch eigene Logik ersetzen
- Beispiel:
checkKey(key) könnte so geändert werden, dass es immer true zurückgibt
- Objection ist ein CLI-Tool, das Frida-Skripte bündelt und für die Untersuchung mobiler Apps nützlich ist
- Durch das Verfolgen von Funktionsaufrufen von
org.tensorflow.lite.NativeInterpreterWrapper wurde das Modell auf die Festplatte gedumpt
- Beim Start der App wird
.createModelWithBuffer(java.nio.ByteBuffer, long) aufgerufen; das dabei übergebene ByteBuffer ist sehr wahrscheinlich das entschlüsselte .tflite-Modell
- Ersetzt man diese Methode per Hooking durch Code zum Dumpen, kann das Modell auf die Festplatte geschrieben werden
- Mit dem Befehl
adb pull wurde das extrahierte .tflite-Modell (currency.tflite) auf ein lokales Gerät kopiert
- Mit Tools wie Netron wurde geprüft, ob es sich tatsächlich um ein TensorFlow-Lite-Modell handelt (Layer, Gewichte, Biases usw.)
- Der vollständige Dump des Währungserkennungsmodells war erfolgreich
CTRL + C; CTRL + V
- Dieser Angriff lässt sich gegen Apps einsetzen, die TensorFlow Lite verwenden
- Ein Beispiel ist Adobe Scan, eine wirklich großartige App, die ich selbst oft nutze; ihre beste Funktion ist das Scannen von Dokumenten mit der Handykamera
Hinweise
- Das extrahierte Modell ist urheberrechtlich geschützt; eine Nutzung oder Modifikation ohne rechtmäßige Genehmigung sollte vermieden werden
- Die in diesem Beitrag beschriebene Methode dient Forschungszwecken; bei einer praktischen Anwendung müssen einschlägige Gesetze und Fragen des geistigen Eigentums berücksichtigt werden
3 Kommentare
Und auch Modelle werden zurückentwickelt,,
Wow, die Weight-Datei aus einer APK-Datei extrahieren??
Zwar auf bestimmte Bibliotheken beschränkt, aber trotzdem beeindruckend..
Hacker-News-Kommentare
tflitein Betracht ziehen, ist es sicherer, Modelle auf Firebase zu hosten und sie nach Abschluss der Aufgabe zu löschen.