hacktricks/mobile-pentesting/android-app-pentesting/exploiting-a-debuggeable-applciation.md

7.8 KiB
Raw Blame History

Explorando uma aplicação debuggeable

Aprenda hacking AWS do zero ao herói com htARTE (HackTricks AWS Red Team Expert)!

Outras formas de apoiar o HackTricks:

Burlando verificações de root e debuggeable

Esta seção do post é um resumo do post https://medium.com/@shubhamsonani/hacking-with-precision-bypass-techniques-via-debugger-in-android-apps-27fd562b2cc0

Passos para tornar um aplicativo Android debuggeable e burlar verificações

Tornando o Aplicativo Debuggeable

Conteúdo baseado em https://medium.com/@shubhamsonani/hacking-with-precision-bypass-techniques-via-debugger-in-android-apps-27fd562b2cc0

  1. Descompilar o APK:
  • Utilize a ferramenta APK-GUI para descompilar o APK.
  • No arquivo android-manifest, insira android:debuggable=true para habilitar o modo de depuração.
  • Recompile, assine e zipalign o aplicativo modificado.
  1. Instalar o Aplicativo Modificado:
  • Use o comando: adb install <nome_do_aplicativo>.
  1. Recuperar o Nome do Pacote:
  • Execute adb shell pm list packages 3 para listar aplicativos de terceiros e encontrar o nome do pacote.
  1. Configurar o Aplicativo para Aguardar a Conexão do Debugger:
  • Comando: adb shell am setup-debug-app w <nome_do_pacote>.
  • Observação: Este comando deve ser executado sempre antes de iniciar o aplicativo para garantir que ele aguarde o debugger.
  • Para persistência, use adb shell am setup-debug-app w -persistent <nome_do_pacote>.
  • Para remover todos os flags, use adb shell am clear-debug-app <nome_do_pacote>.
  1. Preparar para Depuração no Android Studio:
  • Navegue no Android Studio para File -> Open Profile or APK.
  • Abra o APK recompilado.
  1. Definir Pontos de Interrupção em Arquivos Java Chave:
  • Coloque pontos de interrupção em MainActivity.java (especificamente no método onCreate), b.java e ContextWrapper.java.

Burlando Verificações

O aplicativo, em determinados pontos, verificará se está debuggeable e também verificará binários que indicam um dispositivo com root. O debugger pode ser usado para modificar informações do aplicativo, desativar o bit debuggable e alterar os nomes dos binários pesquisados para burlar essas verificações.

Para a verificação de debuggable:

  1. Modificar Configurações de Flag:
  • Na seção de variáveis do console do debugger, navegue até: this mLoadedAPK -> mApplicationInfo -> flags = 814267974.
  • Observação: A representação binária de flags = 814267974 é 11000011100111011110, indicando que o "Flag_debuggable" está ativo.

https://miro.medium.com/v2/resize:fit:1400/1*-ckiSbWGSoc1beuxxpKbow.png

Esses passos garantem coletivamente que o aplicativo possa ser depurado e que certas verificações de segurança possam ser burladas usando o debugger, facilitando uma análise mais aprofundada ou modificação do comportamento do aplicativo.

O Passo 2 envolve a alteração de um valor de flag para 814267972, que é representado em binário como 110000101101000000100010100.

Explorando uma Vulnerabilidade

Foi fornecida uma demonstração usando um aplicativo vulnerável contendo um botão e um textview. Inicialmente, o aplicativo exibe "Crack Me". O objetivo é alterar a mensagem de "Tentar Novamente" para "Hackeado" em tempo de execução, sem modificar o código-fonte.

Verificando a Vulnerabilidade

  • O aplicativo foi descompilado usando apktool para acessar o arquivo AndroidManifest.xml.
  • A presença de android_debuggable="true" no AndroidManifest.xml indica que o aplicativo é debuggeable e suscetível a exploração.
  • Vale ressaltar que o apktool é utilizado exclusivamente para verificar o status debuggable sem alterar nenhum código.

Preparando o Setup

  • O processo envolveu a inicialização de um emulador, a instalação do aplicativo vulnerável e o uso de adb jdwp para identificar as portas do Dalvik VM que estão ouvindo.
  • O JDWP (Java Debug Wire Protocol) permite a depuração de um aplicativo em execução em uma VM, expondo uma porta única.
  • O encaminhamento de porta foi necessário para depuração remota, seguido pela conexão do JDB ao aplicativo alvo.

Injetando Código em Tempo de Execução

  • A exploração foi realizada configurando pontos de interrupção e controlando o fluxo do aplicativo.
  • Comandos como classes e methods <nome_da_classe> foram usados para descobrir a estrutura do aplicativo.
  • Um ponto de interrupção foi definido no método onClick, e sua execução foi controlada.
  • Os comandos locals, next e set foram utilizados para inspecionar e modificar variáveis locais, especialmente alterando a mensagem "Tentar Novamente" para "Hackeado".
  • O código modificado foi executado usando o comando run, alterando com sucesso a saída do aplicativo em tempo real.

Este exemplo demonstrou como o comportamento de um aplicativo debuggeable pode ser manipulado, destacando o potencial para exploits mais complexos, como obter acesso ao shell no dispositivo no contexto do aplicativo.

Referências

Aprenda hacking AWS do zero ao herói com htARTE (HackTricks AWS Red Team Expert)!

Outras formas de apoiar o HackTricks: