Bypass SSL Pinning
Tendo em vista a LGPD e a grande
utilização de apps, a preocupação com os dados trafegando numa rede só aumentam.
A situação fica ainda mais preocupante porque os dados podem ser interceptados
por um atacante utilizando a técnica do MITM (Man in the Middle), tema já abordado no Labs.
Normalmente, uma aplicação confia
em certificados do tipo custom que
permite a interceptação do tráfego de informações. Porém, quando o SSL Pinning
é implementado, a aplicação não confia mais em certificados customizados ou
auto-assinados, e também não permite que ferramentas de proxy interceptem o
trafego. Ao configurar o pinning, é permitido que a aplicação apenas confie
nos certificados ou chaves-publicas pré-definidos ou validados.
Formas de Bypass
Utilizando ferramentas
automatizadas, é possível “bypassar” o SSL Pinning, especialmente se ele não
estiver configurado ou implementado corretamente. Por outro lado, caso o código
do app esteja ofuscado e o pinning esteja bem escondido, fica mais difícil que uma
ferramenta ou framework o encontre. Além do mais, muitas tools requerem que o device
esteja como root.
Pela engenharia reversa (como
modificar os arquivos .smali), ao analisar como a aplicação funciona e foi desenvolvida,
pode-se usar uma ferramenta como Apktool para “descompilar” o app e analisar os
diretórios, como .li, .smali, .assets etc. Se o atacante encontrar o Pinning, pode utilizá-lo para alterar a validação ou mesmo a checagem de
certificados confiáveis. Feito isso, o atacante recompila o código e assina a
aplicação com sua própria chave privada.
Também é possível utilizar uma
técnica chamada de hooking, que é
usada para modificar ou adulterar a aplicação durante sua execução. Um
framework bastante conhecido que executa essa tarefa é o Frida, que permite
interceptar dados recebidos e enviados pelo app e ainda injetar o seu próprio
código durante o processo. O comando utilizado na ferramenta para Android seria
algo do tipo:
Frida –U –f com.siteblindado.app –l
c:\frida\seuscript.js --no-paus
Caso o script esteja certo e
obtenha sucesso, um atacante poderá interceptar o trafego de dados.
Como se prevenir?
É possível mitigar o bypass do
pinning SSL utilizando conexão SSL com autenticação mútua (two-way authentication) entre cliente e servidor, entretanto, esta
forma tende a ser complexa.
Um método mais simples é configurar
o Pinning tanto do certificado quanto da chave pública, fazendo com que, quando
a aplicação se comunicar com o servidor, a mesma analise se aquele determinado
código corresponde ao que está presente no certificado, evitando, assim, que
sejam utilizados certificados auto assinados. É o método mais usual, que, agregado
a um código ofuscado, dificulta o Bypass.
Referências:
0 comentários: