- Muchas apps están integrando modelos de IA directamente en el dispositivo. Esto es ventajoso cuando la inferencia rápida y el acceso sin conexión son importantes
- Sin embargo, que el archivo del modelo exista dentro del dispositivo también significa que el usuario puede extraerlo y analizarlo
Objetivo
- La app Seeing AI de Microsoft es una "cámara parlante" para personas con discapacidad visual, que reconoce objetos, documentos, billetes y más, y los describe por voz
- En particular, la función de reconocimiento de billetes soporta más de 17 monedas y reconoce 225 billetes únicos
- El modelo está incluido dentro del archivo APK, formato de distribución de la app, pero existe como un archivo cifrado (
currency)
- Si el archivo está cifrado de forma simple, es posible extraerlo rastreando la memoria o el proceso de descifrado mientras la app se ejecuta
Investigación inicial
- Las apps de Android se distribuyen como archivos APK, que son archivos comprimidos que contienen todo lo necesario para ejecutar la app
- Los modelos de IA normalmente se almacenan junto con estos recursos
- Se puede usar
apktool para decompilar el APK y analizar su estructura
- En la carpeta
assets se encontró un archivo llamado currency, pero está cifrado
Ir más allá
- Se puede hacer ingeniería inversa para ver cómo la app descifra el archivo
currency
- Se confirmó que TensorFlow Lite se usa en
com.microsoft.seeingai
- Se puede cargar modelos
*.tflite usando org.tensorflow.lite.NativeInterpreterWrapper
Usar Frida
- Frida es una herramienta de instrumentación dinámica que puede ejecutarse en casi cualquier sistema operativo y conectarse a procesos en ejecución para modificar su comportamiento
- Puedes adjuntarte a un proceso en ejecución para rastrear llamadas a métodos, revisar argumentos y valores de retorno, o sobrescribir el contenido del método con la lógica que quieras
- Ejemplo: también podrías cambiar
checkKey(key) para que siempre devuelva true
- Objection es una herramienta CLI que reúne scripts de Frida y es útil para investigar apps móviles
- Se rastrearon las llamadas a funciones de
org.tensorflow.lite.NativeInterpreterWrapper para volcar el modelo al disco
- Cuando la app se ejecuta, se llama a
.createModelWithBuffer(java.nio.ByteBuffer, long), y en ese momento es muy probable que el ByteBuffer que se pasa sea el modelo .tflite ya descifrado
- Si mediante hooking se reemplaza este método con código para volcado, se puede guardar ese modelo en disco
- Con el comando
adb pull se llevó el modelo .tflite extraído (currency.tflite) al dispositivo local
- Se cargó con una herramienta como Netron para comprobar que realmente era un modelo TensorFlow Lite (capas, pesos, sesgos, etc.)
- Se logró un volcado completo del modelo de reconocimiento de billetes
CTRL + C; CTRL + V
- Este ataque puede aprovecharse contra apps que usan TensorFlow Lite
- Por ejemplo, Adobe Scan es una app excelente que yo uso con frecuencia, y una de sus mejores funciones es escanear documentos con la cámara del teléfono
Precauciones
- Los modelos extraídos están protegidos por derechos de autor, por lo que debe evitarse su uso o modificación sin autorización legal adecuada
- El método de esta publicación es con fines de investigación, y al aplicarlo en la práctica es necesario considerar las leyes relevantes y los temas de propiedad intelectual
3 comentarios
Y también hacen ingeniería inversa del modelo,,
Guau, ¿extraer el archivo de pesos desde un APK?
Aunque esté limitado a ciertas bibliotecas, es impresionante..
Comentarios de Hacker News
tflite, una forma más segura es alojar el modelo en Firebase y eliminarlo cuando termine el trabajo