Guia

O que o certificate pinning ainda bloqueia

Um app que fixa seu certificado não é descriptografado pelo Busymate DevTools — nem no iOS, nem no Android, nem pelo proxy. Aqui está exatamente o que cada caminho de captura consegue e não consegue ver, como reconhecer um host com pinning e o que continua sendo útil.

Toda ferramenta de captura que descriptografa HTTPS funciona do mesmo jeito: apresenta ao cliente um certificado assinado por ela mesma, e o cliente aceita porque confia na autoridade que assinou. Certificate pinning é o app dizendo que só vai confiar em um certificado ou chave específicos e em nada mais. Quando um app com pinning encontra o certificado substituto, ele simplesmente recusa a conexão. Isso é uma propriedade do app, não uma chave na ferramenta, e nenhum caminho de captura do Busymate contorna isso.

Uma ferramenta que omite isso faz você desperdiçar uma sessão de pesquisa em um alvo que nunca ia ser descriptografado. Por isso este guia é um mapa, não um atalho: o que a captura no iOS, o app Android, o proxy de desktop, um celular com root na farm e o conector do Chrome entregam diante de um host com pinning, como o feed rotula isso e quais partes do trabalho ainda são feitas.

Antes de começar

O que você precisa

Este guia pressupõe que o tráfego já está chegando ao seu dashboard por pelo menos um caminho de captura.

  • Um celular ou cliente já pareado e capturando — o guia do iPhone ou do Android leva você até lá.

  • Os nomes de host do app que você está investigando, adicionados à lista de SSL proxy para que a descriptografia seja ao menos tentada.

  • O feed do dashboard aberto, com o filtro de inspeção ao alcance.

  • Permissão para inspecionar o app: essas técnicas são para tráfego de apps e sites que você possui ou está autorizado a depurar.

Passo a passo

Faça na ordem

Percorra os caminhos em ordem — cada um estreita o que um host com pinning ainda consegue contar.

  1. 01

    Saiba de qual repositório de confiança seu caminho de captura depende

    No iOS, a descriptografia depende de o perfil do Busymate estar instalado e com confiança total nos Ajustes — depois disso, todo app do celular confia no certificado que o app apresenta, exceto os apps que fazem pinning. No Android há dois repositórios: o do usuário, que desde o Android 7.0 só é honrado por apps que optam explicitamente por ele, e o do sistema, que todo app honra mas no qual só um dispositivo com root pode escrever. O proxy de desktop usa a confiança que a máquina ou o navegador cliente tiver na autoridade gerada por ele.

    O pinning fica acima dos três. Um app que faz pinning rejeita o certificado substituto de qualquer repositório que ele venha, então mover um certificado para um repositório mais forte nunca ajuda contra um host com pinning. Só ajuda contra apps que estavam recusando o repositório do usuário.

  2. 02

    Reconheça um host com pinning no feed

    Um host que você não listou para descriptografia mostra um cadeado fechado com apenas o nome e uma contagem de requisições — isso é por design, não pinning. Um host com pinning parece diferente: ele está na sua lista, a descriptografia foi tentada, e a conexão falhou ou o app tentou de novo e desistiu. O filtro de inspeção do feed do dashboard tem três opções — só descriptografados, só criptografados e só com SSL pinning — e a última isola exatamente essas linhas.

    O outro sinal é comportamental: o app para de funcionar para aquele host no momento em que ele é descriptografado, e volta a funcionar no momento em que você remove o host da lista. Se as duas coisas forem verdade, você encontrou uma conexão com pinning.

  3. 03

    Captura no iPhone: metadados, nunca o corpo

    O app iOS captura o sistema inteiro, por Wi-Fi e rede celular, e descriptografa os hosts que você lista. Diante de um app com pinning ele ainda registra cada conexão — o host, o tempo, o número e o tamanho das requisições, o modo de conexão em vigor — mas não consegue produzir os cabeçalhos nem o corpo, e não há chave que mude isso. Ligar o MITM All Hosts descriptografa todos os hosts sem pinning; em um host com pinning, só serve para quebrá-lo.

    O movimento prático é tirar o host com pinning da lista para o app continuar funcionando, manter os outros hosts do app nela e ler o que os endpoints sem pinning revelam. Muitos apps fazem pinning só no host de autenticação ou de pagamento e deixam o resto aberto.

  4. 04

    Android: sem root, com root, e onde o pinning se encaixa

    Em um Android sem root, o certificado gerado pelo app fica no repositório do usuário, então só seus builds de debug e outros clientes que optaram por ele são descriptografados; todos os outros apps são registrados como metadados. Em um dispositivo com root, o certificado pode ser instalado no repositório do sistema, e o HTTPS passa a ser descriptografável em todo o sistema — exceto pelo pinning de cada app. A farm de celulares roda seus Androids nesse nível com root exatamente por isso.

    Ou seja, o root converte uma classe de apps opacos em legíveis — os que apenas ignoravam o repositório do usuário — e deixa a classe com pinning intocada. O Busymate nunca afirma descriptografar todo o sistema em um dispositivo sem root, e nunca afirma derrotar o pinning em um com root.

  5. 05

    O proxy: o mesmo limite, mais hosts que ele recusa de propósito

    O proxy de desktop tem a mesma relação com o pinning que os apps de celular: um cliente com pinning recusa o certificado gerado e a conexão falha. Ele também carrega uma lista curta de hosts que nunca intercepta, não importa o que suas configurações de SSL proxy digam — a PKI e os endpoints de revogação da Apple, os respondedores de status de certificado que a cadeia da Apple usa e o próprio backend do Busymate — porque interceptá-los quebraria o dispositivo ou a conexão ao vivo do dashboard. Eles passam como túneis brutos, e isso é intencional, não um erro de configuração.

    Hosts que o proxy deixa passar intocados por design
    text
    # Passed through as raw tunnels by the proxy, regardless of your SSL-proxy list:
    pkis.apple.com  ocsp*.apple.com  crl*.apple.com  valid.apple.com  ppq.apple.com
    # the DigiCert OCSP / CRL responders Apple's chain uses
    *.busymate.net   # the dashboard's own backend + Realtime connection
  6. 06

    O conector do Chrome: o pinning não se aplica

    Há um caminho de captura em que o pinning é irrelevante. O conector de linha de comando abre uma instância do Chrome e lê o tráfego dela pelo DevTools Protocol, do lado do navegador do TLS. A conexão criptografada entre o Chrome e o servidor nunca é tocada — não há certificado substituto para rejeitar, nada para instalar e nada para o pinning detectar. Fluxos de login em provedores cujos certificados fixados um proxy não consegue abrir são registrados de ponta a ponta, redirecionamentos e tokens inclusos.

    O preço é o escopo: ele cobre o que roda dentro daquele Chrome, não um app nativo. Se o fluxo que importa para você tem versão web, esse é o caminho que o enxerga por inteiro.

  7. 07

    Use o que um host com pinning ainda entrega

    Metadados não são nada desprezível. Você ainda vê quando o app fala com o host com pinning, com que frequência, o tamanho das trocas e quanto tempo elas levam, e pode correlacionar isso com as chamadas descriptografadas ao redor. Regras de bloqueio ainda casam no nível do host em um host criptografado — o caminho é invisível, mas você pode fazer o app se comportar como se aquele endpoint estivesse inacessível, que muitas vezes é exatamente o modo de falha que você queria testar. As pausas deixam o host contornar o proxy por completo para o app continuar funcionando enquanto você inspeciona todo o resto.

    E toda ação que você fez está na trilha de auditoria, então uma sessão de pesquisa deixa registro do que foi descriptografado, do que foi bloqueado e do que foi deixado em paz.

Solução de problemas

O que pode dar errado

Os erros que mais custam tempo são os que parecem bugs da ferramenta e não são.

  • O app quebrou no momento em que adicionei o host dele

    Isso é pinning. Remova o host da lista de SSL proxy — no iOS, reinicie a VPN depois para que o túnel perceba a mudança — e o app se recupera. Mantenha os outros hosts dele listados.

  • O MITM All Hosts não destravou o app

    Nunca ia destravar. Essa chave amplia quais hosts sem pinning são descriptografados; não tem efeito em um host que o app fixa, e faz todas as outras conexões com pinning do celular falharem também. Desligue de novo.

  • Fazer root no Android também não ajudou

    O root move o certificado para o repositório do sistema, o que convence apps que ignoravam o repositório do usuário. Ele não toca em um app que compara o certificado com o próprio pin.

  • Um host de sistema da Apple nunca é descriptografado no proxy

    Ele está na lista de hosts que o proxy nunca intercepta, porque descriptografá-lo quebraria o dispositivo. Nada a corrigir; o filtro o mostra como criptografado por design.

Perguntas frequentes

Perguntas que as pessoas fazem

O Busymate inclui uma forma de burlar o pinning?

Não. Nenhum dos caminhos de captura modifica o app alvo, injeta código ou altera sua lógica de confiança. A resposta honesta para um app nativo com pinning é metadados mais o que os hosts sem pinning dele revelarem.

Como diferencio pinning de um host que simplesmente esqueci de listar?

Um host não listado mostra um cadeado fechado e o app continua funcionando. Um host com pinning está listado, a descriptografia foi tentada, o filtro de SSL pinning do feed o isola e o app falha até você tirá-lo da lista.

Qual caminho escolho para um fluxo de autenticação em um provedor com pinning?

Se o provedor tem login web, rode-o pelo conector do Chrome — o TLS termina dentro do navegador e toda a cadeia de redirecionamentos é registrada. Para um app nativo não há caminho descriptografado; capture os metadados e as chamadas sem pinning ao redor.

Conheça o limite antes de começar

Restrinja a descriptografia aos hosts que você está testando, deixe o feed dizer quais fazem pinning e gaste a sessão no que realmente pode ser lido.

Ask your mate