- Muitos aplicativos estão integrando modelos de IA diretamente no dispositivo. Isso é vantajoso quando inferência rápida e acesso offline são importantes
- Mas a existência do arquivo do modelo dentro do dispositivo também significa que o usuário pode extraí-lo e analisá-lo
Objetivo
- O aplicativo Seeing AI, da Microsoft, é uma “câmera falante” para pessoas com deficiência visual, que reconhece objetos, documentos, dinheiro e mais, descrevendo-os por voz
- Em especial, o recurso de reconhecimento de moeda (
currency) oferece suporte a mais de 17 moedas e reconhece 225 cédulas únicas
- O modelo está incluído dentro do arquivo APK, formato de distribuição do app, mas existe como um arquivo criptografado (
currency)
- Se o arquivo estiver apenas criptografado de forma simples, é possível extraí-lo rastreando a memória ou o processo de descriptografia durante a execução do app
Investigação inicial
- Aplicativos Android são distribuídos como arquivos APK, que são arquivos compactados contendo tudo o que é necessário para executar o app
- Modelos de IA normalmente são armazenados junto com esses recursos
- É possível usar
apktool para descompilar o APK e analisar sua estrutura
- Na pasta
assets, foi encontrado um arquivo chamado currency, mas ele está criptografado
Indo além
- É possível fazer engenharia reversa de como o app descriptografa o arquivo
currency
- Foi confirmado que o TensorFlow Lite é usado em
com.microsoft.seeingai
- É possível carregar modelos
*.tflite usando org.tensorflow.lite.NativeInterpreterWrapper
Usando Frida
- Frida é uma ferramenta de instrumentação dinâmica que roda em praticamente qualquer sistema operacional e pode se conectar a um processo em execução para alterar seu comportamento
- Você pode se anexar ao processo durante a execução para rastrear chamadas de método, verificar argumentos e valores de retorno, ou sobrescrever o conteúdo do método com a lógica que quiser
- Exemplo: também seria possível alterar
checkKey(key) para sempre retornar true
- Objection é uma ferramenta CLI que reúne scripts do Frida e é útil para pesquisa de aplicativos móveis
- Ao rastrear chamadas de função de
org.tensorflow.lite.NativeInterpreterWrapper, foi possível fazer dump do modelo em disco
- Quando o app é executado,
.createModelWithBuffer(java.nio.ByteBuffer, long) é chamado, e o ByteBuffer passado nesse momento provavelmente contém o modelo .tflite já descriptografado
- Ao substituir esse método por código de dump via hooking, é possível salvar esse modelo em disco
- O modelo
.tflite extraído (currency.tflite) foi copiado para o dispositivo local com o comando adb pull
- Ele foi carregado em uma ferramenta como o Netron para verificar se realmente era um modelo TensorFlow Lite, com camadas, pesos, vieses etc.
- Dump completo do modelo de reconhecimento de moeda realizado com sucesso
CTRL + C; CTRL + V
- Esse ataque pode ser aplicado a aplicativos que usam TensorFlow Lite
- Por exemplo, o Adobe Scan é um ótimo app que eu realmente uso com frequência, e seu melhor recurso é escanear documentos com a câmera do celular
Observações
- O modelo extraído é protegido por direitos autorais, então seu uso ou modificação sem a devida permissão deve ser evitado
- O método deste post é para fins de pesquisa, e sua aplicação prática exige considerar as leis relevantes e questões de propriedade intelectual
3 comentários
E o modelo também foi alvo de engenharia reversa,,
Uau, extrair o arquivo de weights a partir de um APK??
Mesmo que seja limitado a uma biblioteca específica, é impressionante..
Comentários do Hacker News
tflite, uma forma mais segura é hospedar o modelo no Firebase e removê-lo após a conclusão da tarefabizarre