Frida Android SSL-Pinning

Ao realizar testes de invasão é comum nos depararmos com um problema em interceptar as requisições de aplicativos Android. Com essa dificuldade em mente, criei um tutorial ensinanso os meios que utilizo em testes.

Então foi onde fui buscar mais saber do tal SSL-Pinning.
Primeiramente, faço este tutorial com o smartphone como ROOT e Kali Linux.

Bom vamos lá!

Primeiramente instalamos o ADB em nossa máquina e o frida-tools, e nosso proxy Burpsuite.

Para instalarmos o frida-tools, precisamos do pip instalado em nossa máquina. Como instalar o pip? Leia.

apt-get install adb
pip install frida-tools

Feita as instalações vamos no telefone, e ativamos a opção de desenvolvedor do telefone. Como ativar a opção? Leia.

Com a opção ativada, conectamos nosso telefone em nosso computador.

E vamos no nosso terminal, e digitamos adb shell onde faremos a conexão com o telefone, no nosso telefone ira pedir uma solicitação, aceitamos.

Agora que esta o pulo do gato, precisamos saber qual arquitetura do nosso telefone para podermos enviar um binário do frida, pois ele que será nosso “server no android”. Github.

No meu telefone feito o download do arquivo.

frida-server-12.7.26-android-arm64

Precisamos enviar para o telefone nosso binário, com o comando:

adb push frida-server-12.7.26-android-arm64 /data/local/tmp/

/data/local/tmp/ é o destino para a cópia.

Agora no nosso Burp iremos gerar o certificado com a extensão .cer e enviarmos para o mesmo caminho do binário do server-frida.

Vamos em proxy e na aba options.

Vamos em Export

Certificate in DER forma
t

Agora trocamos a extensão .der para a .cer

Criei um certificado cert4.cer, salva em qualquer lugar para podermos enviar para o Android.

Agora enviamos nosso certificado para o lugar onde enviamos nosso server-frida.

Certificado enviado com sucesso

Agora temos que ir no terminal e rodar o binário que enviamos, para isso digitamos o comando.

adb shell

su

su para sermos root para podermos dar privilegio no arquivo de execução.

Chegando no diretório do binário, vamos dar permissão para o binário de execução

chmod +x frida-server-12.7.26-android-arm64

Dado privilégio

Agora executamos nosso binário para ele ser um processo.

./frida-server-12.7.26-android-arm64 &

Binário executando

Agora para vermos se esta tudo certinho com o binário e o frida local se comunicando com o server do Android.

Temos que ter uma resposta assim, com os pid do android.

Digitamos então:

frida-ps -U

Frida local & server se comunicando perfeitamente.

Agora temos o frida e o server frida sendo executados vamos configurar nosso proxy no android e no burp, para podermos interceptar os aplicativos, bypassando o ssl-pinning.

Agora teremos que criar um .js do bypass do ssl-pinning.

*/

Java.perform(function() {

var array_list = Java.use(“java.util.ArrayList”);

var ApiClient = Java.use(‘com.android.org.conscrypt.TrustManagerImpl’);

ApiClient.checkTrustedRecursive.implementation = function(a1, a2, a3, a4, a5, a6) {

// console.log(‘Bypassing SSL Pinning’);

var k = array_list.$new();

return k;

}

}, 0);

Agora recapitulando, temos:

Burp, adb, pip, frida-tools, frida-server e certificado do burp .cer

Vamos configurar nosso proxy no Android e no burp.

Vamos no Android e em conexões, gerenciar configurações de rede, colocamos o ip do nosso burp que no meu caso é. 172.108.2.249 e a porta 8080.

Lembrando que tem que estar na mesma rede!

Vamos no burp e visualizamos que eles já se comunicam.

Sabemos que temos a comunicação agora iremos bypassar o ssl do Linkedin, pois ainda não estamos interceptando o aplicativo, ou outro app que queiras realizar o teste.

Bem… Vamos lá! Digitamos:

frida-ps -U

Aqui localizaremos o processo do Linkedin no nosso Android.

Agora vamos no diretório do nosso arquivo que criamos, o .js no meu caso foi criado bypass-ssl.js

E vamos bypassar o ssl. 😀 😀

frida -U -f com.linkedin.android -l bypass-ssl.js — no-pause

Notaremos que no nosso Android será fechado e aberto automaticamente o processo que escolhemos, então bypassadis.

Agora vamos no nosso burp e veremos as requisições HTTPS do linkedin sendo interceptadas.

Lembrando que pode ser realizado em qualquer aplicativo, pois pegamos o processo do aplicativo e bypassamos o SSL.

Espero ter ajudado e qualquer coisa prende o grito!!


WRITTEN BY:
Ataide Junior
https://br.linkedin.com/in/atjunior

Frida Android SSL-Pinning
Tags:                 

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *