- De nombreuses applications intègrent directement des modèles d’IA sur l’appareil. C’est avantageux lorsque l’inférence rapide et l’accès hors ligne sont importants
- Mais la présence du fichier modèle sur l’appareil signifie aussi que l’utilisateur peut potentiellement l’extraire et l’analyser
Objectif
- L’application Seeing AI de Microsoft est une « caméra parlante » pour les personnes malvoyantes, capable de reconnaître des objets, des documents, des billets, etc., puis de les décrire à voix haute
- Sa fonction de reconnaissance de devises prend notamment en charge plus de 17 monnaies et reconnaît 225 billets uniques
- Le modèle est inclus dans le fichier APK de distribution de l’application, mais sous la forme d’un fichier chiffré (
currency)
- Si le fichier n’est protégé que par un chiffrement simple, il est possible de l’extraire en suivant la mémoire ou le processus de déchiffrement pendant l’exécution de l’application
Enquête initiale
- Les applications Android sont distribuées sous forme de fichiers APK, des archives qui contiennent tout le nécessaire à leur exécution
- Les modèles d’IA sont généralement stockés avec ces ressources
apktool permet de décompiler un APK et d’en analyser la structure
- Dans le dossier
assets, un fichier nommé currency a été trouvé, mais il est chiffré
Aller plus loin
- Il est possible de faire de la rétro-ingénierie pour comprendre comment l’application déchiffre le fichier
currency
- Il a été confirmé que TensorFlow Lite est utilisé dans
com.microsoft.seeingai
org.tensorflow.lite.NativeInterpreterWrapper peut être utilisé pour charger des modèles *.tflite
Utiliser Frida
- Frida est un outil d’instrumentation dynamique qui fonctionne sur presque tous les systèmes d’exploitation et permet de se connecter à un processus en cours d’exécution pour en modifier le comportement
- On peut s’attacher à un processus pendant son exécution pour suivre les appels de méthodes, inspecter les arguments et les valeurs de retour, ou remplacer le contenu d’une méthode par la logique de son choix
- Exemple : on peut modifier
checkKey(key) pour qu’elle renvoie toujours true
- Objection est un outil CLI qui regroupe des scripts Frida et s’avère utile pour l’analyse d’applications mobiles
- En traçant les appels de fonction de
org.tensorflow.lite.NativeInterpreterWrapper, il est possible de dumper le modèle sur le disque
- Lors de l’exécution de l’application,
.createModelWithBuffer(java.nio.ByteBuffer, long) est appelé, et le ByteBuffer transmis a de fortes chances d’être le modèle .tflite déchiffré
- En remplaçant cette méthode via un hook par du code de dump, on peut enregistrer le modèle sur le disque
- La commande
adb pull permet ensuite de récupérer en local le modèle .tflite extrait (currency.tflite)
- On peut le charger avec un outil comme Netron pour vérifier qu’il s’agit bien d’un véritable modèle TensorFlow Lite (couches, poids, biais, etc.)
- Dump complet du modèle de reconnaissance de devises réussi
CTRL + C; CTRL + V
- Cette attaque peut être appliquée à des applications qui utilisent TensorFlow Lite
- Par exemple, Adobe Scan est une excellente application que j’utilise souvent, et sa meilleure fonctionnalité est la numérisation de documents avec l’appareil photo du téléphone
Points d’attention
- Les modèles extraits sont protégés par le droit d’auteur ; il faut éviter toute utilisation ou modification non autorisée sans permission légale appropriée
- La méthode présentée dans ce billet est destinée à la recherche ; en pratique, il faut tenir compte des lois applicables et des questions de propriété intellectuelle
3 commentaires
Et les modèles aussi, reverse engineering,,
Waouh, extraire le fichier de poids à partir d’un APK ??
C’est limité à certaines bibliothèques, mais c’est impressionnant..
Commentaires Hacker News
tflite, il est plus sûr d’héberger les modèles sur Firebase puis de les supprimer une fois le travail terminé