Hackeando o Site da Wikipédia? Entendendo SSL Pinning no Android

12/10/202517 min de leitura

Introdução

O SSL Pinning é uma das técnicas de segurança mais importantes para proteger a comunicação entre aplicativos móveis e servidores.
Neste artigo, você vai entender como essa proteção funciona e como ela pode ser contornada em versões antigas do Android — não para fins maliciosos, mas para compreender conceitos de segurança e realizar testes éticos.

⚠️ AVISO IMPORTANTE:
Este conteúdo é estritamente educacional.
Realizar testes de segurança sem autorização é ilegal.
Use esse conhecimento apenas em ambientes controlados e com permissão.


🎥 Vídeo Tutorial Completo

Confira o tutorial no YouTube:
👉 Hackeando o Site do Wikipédia? Android SSL Pinning


🧠 O que é SSL Pinning?

SSL Pinning (ou Certificate Pinning) é uma técnica que “fixa” o certificado SSL esperado dentro do aplicativo.
Isso significa que o app só aceita conexões com um certificado específico, impedindo ataques do tipo Man-in-the-Middle (MITM).

Como Funciona?

  • Sem SSL Pinning: o app confia em qualquer certificado válido por uma Autoridade Certificadora (CA).
  • Com SSL Pinning: o app confia apenas no certificado específico embutido no código.

🧰 Ferramentas Necessárias

  • Emulador Nox (Android 5.1 ou inferior)
  • Fiddler Classic (para interceptação de tráfego)
  • Certificado SSL (gerado pelo Fiddler)
  • Aplicativo Wikipedia (ou outro app para teste)

⚙️ Passo a Passo: Configurando o Ambiente

1. Instalação do Emulador Nox

Baixe e instale o emulador Nox Player com Android 5.1.
Configure a versão para Android 5.1.1, pois versões antigas possuem menos proteções.

💡 Por que Android 5?

  • Sistema de certificados mais permissivo
  • Menos camadas de defesa
  • Facilita testes e interceptações

2. Configuração do Fiddler Classic

  1. Abra o Fiddler Classic
  2. Vá em Tools > Options > HTTPS
  3. Marque:
    • “Capture HTTPS CONNECTs”
    • “Decrypt HTTPS traffic”
  4. Clique em Actions > Export Root Certificate to Desktop

3. Configurando o Proxy no Emulador

No Nox:
Settings > Wi-Fi > Long press na rede > Modify Network

Proxy hostname: 10.0.2.2
Proxy port: 8888

4. Instalando o Certificado no Android

  1. Transfira o certificado .cer para o emulador
  2. Vá em Settings > Security > Install from storage
  3. Escolha o certificado Fiddler e instale como CA raiz

🔍 Interceptando o Tráfego da Wikipedia

  1. Inicie o Fiddler Classic
  2. Abra o app Wikipedia no emulador
  3. Navegue por alguns artigos
  4. Observe as requisições no Fiddler

Exemplo de Requisição

GET /api/rest_v1/page/summary/Internet HTTP/1.1
Host: pt.wikipedia.org
User-Agent: WikipediaApp/2.7
Accept: application/json

Exemplo de Resposta

{
  "type": "standard",
  "title": "Internet",
  "extract": "A Internet é um sistema global de redes de computadores..."
}

🧩 O que Podemos Observar

  • Headers HTTP: User-Agent, cookies, tokens
  • Payload JSON: dados enviados/recebidos
  • URLs e endpoints da API
  • Parâmetros de requisição

🕵️‍♂️ Detectando Emuladores

Exemplo simples de detecção:

public boolean isEmulator() {
  return Build.FINGERPRINT.contains("generic")
      || Build.MODEL.contains("Emulator")
      || Build.MANUFACTURER.contains("Genymotion")
      || Build.HARDWARE.contains("goldfish");
}

Contornos possíveis

  1. Modificar propriedades do sistema
  2. Usar emuladores menos conhecidos
  3. Aplicar patches no APK

⚗️ Possíveis Explorações (Contexto Educacional)

1. Análise de APIs

import requests

response = requests.get(
  "https://pt.wikipedia.org/api/rest_v1/page/summary/Python",
  headers={"User-Agent": "WikipediaApp/2.7"}
)
print(response.json()["extract"])

2. Teste de Força Bruta (Somente em Ambientes Autorizados)

import requests

def test_login(username, password):
    response = requests.post(
        "https://example.com/api/login",
        json={"user": username, "pass": password}
    )
    return response.status_code == 200

weak_passwords = ["123456", "password", "admin"]

for pwd in weak_passwords:
    if test_login("admin", pwd):
        print(f"Senha fraca encontrada: {pwd}")

3. Análise de Tokens JWT

Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...

Use ferramentas como jwt.io para inspecionar tokens.


🛡️ Como Desenvolvedores Devem se Proteger

Exemplo em Java (Android)

public class SSLPinningExample {
  public OkHttpClient createSecureClient() {
    CertificatePinner pinner = new CertificatePinner.Builder()
      .add("api.example.com", "sha256/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=")
      .build();

    return new OkHttpClient.Builder()
      .certificatePinner(pinner)
      .build();
  }
}

Exemplo em Kotlin

val pinner = CertificatePinner.Builder()
  .add("api.wikipedia.org", "sha256/++MBgDH5WGvL9Bcn5Be30cRcL0f5O+NyoXuWtQdX1aI=")
  .build()

val client = OkHttpClient.Builder()
  .certificatePinner(pinner)
  .build()

🧱 Outras Boas Práticas

  1. Verificação de root/jailbreak
  2. Ofuscação de código
  3. Detecção de ferramentas de análise
  4. Criptografia adicional no payload
  5. Rate limiting no backend

📊 Comparação: Com vs Sem SSL Pinning

Aspecto Sem SSL Pinning Com SSL Pinning
Interceptação Fácil Bloqueada
MITM Attack Vulnerável Protegido
Análise de tráfego Simples Difícil
Certificado falso Aceito Rejeitado
Segurança Baixa Alta

⚖️ Aspectos Legais e Éticos

✅ Uso Permitido

  • Testar seus próprios apps
  • Pesquisa de segurança com permissão
  • Programas de bug bounty
  • Ambientes educacionais controlados

❌ Uso Proibido

  • Interceptar dados de terceiros
  • Roubar credenciais
  • Explorar vulnerabilidades
  • Compartilhar dados interceptados

📜 Lei nº 12.737/2012 (Lei Carolina Dieckmann)
Invadir dispositivo informático alheio é crime.
Pena: Detenção de 3 meses a 1 ano + multa


📚 Recursos para Aprender Mais

Cursos e Certificações

  • eJPT — eLearnSecurity Junior Penetration Tester
  • CEH — Certified Ethical Hacker
  • OSCP — Offensive Security Certified Professional

Ferramentas Adicionais

  • Burp Suite — alternativa profissional ao Fiddler
  • mitmproxy — proxy de código aberto
  • Frida / Objection — instrumentação dinâmica

Plataformas de Prática Legal


🧾 Comandos Úteis

netstat -an | findstr "8888"       # verificar porta
adb push certificate.cer /sdcard/  # transferir certificado
adb install app.apk                # instalar APK
adb logcat | grep "Wikipedia"      # logs em tempo real
openssl s_client -connect wikipedia.org:443 -showcerts  # extrair certificado

🧭 Conclusão

O SSL Pinning é uma camada essencial de segurança em aplicativos móveis.
Compreender seu funcionamento ajuda a:

  1. Desenvolver apps mais seguros
  2. Realizar auditorias éticas
  3. Entender riscos de segurança mobile
  4. Promover boas práticas no desenvolvimento

Próximos Passos

  • 📺 Assistir ao vídeo completo no YouTube
  • 🧪 Praticar em ambientes controlados
  • 🔍 Estudar Frida para bypass moderno
  • 🐞 Explorar programas de bug bounty legítimos

Lembre-se:
Com grandes poderes vêm grandes responsabilidades.
Use esse conhecimento para proteger, não para atacar.

🎥 Assista ao tutorial completo:
https://youtu.be/kYo-U0wvd7M


Gostou do post?

Deixe seu like e ajude a divulgar o conteúdo!