Como interceptar a comunicação de um aplicativo sem Root - Android

Em alguns cenários, não temos um celular com acesso "root" para interceptar a comunicação do aplicativo com um proxy. Um exemplo real é o Samsung SM-J600GT onde não foi possível desabilitar o RMM no estado "prenormal", e portanto o processo de "root" não pôde ser feito.  

Ao pesquisar, encontrei o método que vou descrever abaixo, onde é possível interceptar a comunicação do aplicativo sem o acesso "root" no aparelho. Isso é possível ao adicionar (ou modificar) no arquivo network_security_config localizado no diretório /res/xml, a configuração <trust-anchors> que é usada para definir quais CAs (Autoridades Certificadoras) são confiáveis para o aplicativo nas conexões usando o protocolo HTTPS. 

Na estrutura da tag <trust-anchors>, os elementos <certificates src="system"> e <certificates src="user"> apontam para os certificados instalados no celular. Logo, para fazer o aplicativo confiar em CAs que não estão na lista padrão do Android, usamos a configuração abaixo: 


Pre-Requisitos:

Arquivo .apk do aplicativo que será testado

Apktool instalado a partir do repositório oficial - apktool.org

Keytool - essa ferramenta é parte do JDK - Java Development Kit  e para instalar basta instalar o JDK

## Instalação geral 

apt update 

apt install default-jdk

## Instalação a partir de uma versão específica do JDK

apt install openjdk-11-jdk (modifique para a versão que deseja)

## Confirma a instalação 

keytool -help

Apksigner - está incluído no "Command Line Tools" do Android Studio SDK 

Com essas ferramentas o processo pode ser iniciado. 

Extrair os arquivos do aplicativo com Apktool

Nesse artigo vou usar o aplicativo Twitter Lite disponível no repositório Apkpure

apktool d [nome-do-arquivo].apk


Acesse os diretórios [nome-do-app]/res/xml e procure pelo arquivo network_security_config.xml. Caso o arquivo não exista, é preciso criar pois a configuração do certificado para interceptar a comunicação sem "root" é feita neste arquivo. No caso do Twitter Lite (versão disponível no Apkpure), o aquivo não existe, e criei o arquivo network_security_config.xml, conforme mostra a imagem abaixo. 


No AndroidManifest.xml é preciso adicionar a referência para o network_security_config.xml (caso não exista) adicionando a seguinte configuração: 

android:networkSecuriyConfig="@xml/[nome-do-arquivo]"

No Twitter Lite, a referência não existe e, portanto, adicionei conforme podemos ver na imagem abaixo. 


Depois dessa configuração, o arquivo .apk está pronto para o "build" com o comando:

apktool b [nome-do-diretorio] -o [nome-do-arquivo].apk


Antes de instalar o aplicativo modificado no telefone, é necessário assiná-lo. 

Gerar o par de chaves e o certificado autoassinado com a Keytool

O par de chaves e o certificado que vão assinar o aplicativo são armazenados na keystore.

keytool -genkey -v -keystore [nome].keystore -keyalg RSA -keysize 2048 -validity 1000 -alias [nome]


Em seguida, assinamos o aplicativo usando a ferramenta apksigner, com o comando: 

apksigner sign --ks-key-alias [nome] --ks [nome].keystore [nome].apk


O aplicativo é instalado com a ferramenta ADB - Android Debug Bridge.



Interceptar a comunicação do aplicativo sem root 

Para interceptar a comunicação, é preciso adicionar o certificado do proxy no celular, e neste caso é o certificado do Burp Suite. Dentro do telefone, acessamos o endereço do proxy e baixamos o certificado, para em seguida, instalar. 

No caso do SM-J600GT, o certificado depois de instalado fica armazenado em: 

Biometria e segurança > Outras config. de segurança > Exibir certificado de segurança > Usuário 


A configuração feita no arquivo "network_security_config" faz referência a esse local de armazenamento do certificado. 


Dessa forma, conseguimos interceptar a comunicação do aplicativo sem ter acesso "root" no celular, conforme mostra a imagem abaixo. 



Infelizmente, nem todos os aplicativos permitem modificação em seus arquivos e pode apresentar erros nos processo de "build" ou quando tentamos assiná-lo. No entanto, alguns aplicativos já possuem a configuração do <trust-anchors> e não requer modificação, como é o exemplo de um famoso aplicativo de telefonia. Importante sempre verificar o arquivo network_security_config e também testar se o aplicativo permite alterações. 

Outro método de interceptar a comunicação sem acesso "root" no telefone é usando o Objection para adicionar um "gadget" do Frida no aplicativo.  Além do Objection são necessárias as seguintes ferramentas instaladas: 

Apksigner (mencionada anteriormente)
Zipalign - ferramenta do Android Studio para otimizar os arquivos do aplicativo

O comando para adicionar o Frida no apk é: 

objection patchapk -s [nome-do-arquivo].apk


Será criado um arquivo [nome].objection.apk que possui o "gadget" do Frida e deve ser instalado no celular. Após instalar o aplicativo modificado, execute o Objection para iniciar o aplicativo e interceptar a comunicação. Use o comando abaixo:

objection explore

Depois de acessar o Objection e o aplicativo iniciar, desabilite o SSL Pinning com o comando:

android sslpinning disable 


No exemplo acima, o processo foi realizado usando o aplicativo Twitter Lite. Usei esse mesmo método no aplicativo Wish também disponível no repositório Apkpure. 


Após injetar o "gadget" do Frida com o Objection e instalar o aplicativo no celular, acessei o Objection, desabilitei o SSL Pinning. 


Com o Burp Suite, a comunicação foi interceptada, conforme mostra a imagem abaixo. 


Esses dois métodos são uma opção quando não há um telefone com acesso "root" ou quando o aplicativo não permite a instalação em telefone modificado ou no emulador. 

#hackingbr

Comentários

Postagens mais visitadas