Todos os ataques e técnicas de quebra de criptografia mostrados nesta aula devem ser praticados exclusivamente em ambientes de laboratório controlados, em dados próprios ou com autorização formal por escrito. A quebra ou interceptação não autorizada de comunicações e sistemas é crime previsto no art. 154-A do Código Penal (invasão de dispositivo informático), com pena de reclusão de 1 a 4 anos e multa. Em contexto de CTF (Capture The Flag), a prática é lícita dentro das regras do desafio.
🔑 Criptografia Simétrica
Uma Chave para Tudo
Na criptografia simétrica existe apenas uma chave que é usada tanto para criptografar quanto para descriptografar.
Características
Aspecto
Descrição
Chaves
Uma única chave compartilhada
Velocidade
Rápida
Uso comum
AES, DES, 3DES, Blowfish, ChaCha20
Problema
Como compartilhar a chave de forma segura?
Tamanho recomendado
AES-128 mínimo; AES-256 para dados sensíveis
Modos de Operação do AES (ofensivo e defensivo)
Modo
Vulnerabilidade Conhecida
Recomendação
ECB
Padrões visíveis (imagem do pinguim Linux)
🚫 Nunca usar
CBC
Padding Oracle Attack (POODLE, BEAST)
⚠️ Usar com HMAC
CTR
Reutilização de nonce quebra confidencialidade
⚠️ Nunca reutilizar nonce
GCM
Seguro com nonce único
✅ Recomendado
CCM
Seguro, usado em redes sem fio (802.11)
✅ Recomendado
🔴 Ataque Real: ECB Penguin
O modo ECB cifra cada bloco de 16 bytes de forma independente. Se dois blocos de plaintext são iguais, o ciphertext também será igual. Isso torna padrões visíveis em imagens e arquivos estruturados. Em um pentest, detectar uso de ECB em APIs é sinal de criptografia fraca.
Uma função Hash mapeia dados grandes e de tamanho variável para dados pequenos de tamanho fixo. Os valores retornados são chamados hashes ou códigos hash.
Algoritmos de Hash
Algoritmo
Tamanho
Status
Velocidade (RTX 4090)
MD5
128 bits
🔴 Obsoleto/Quebrado
~164 bilhões H/s
SHA1
160 bits
🔴 Obsoleto/Quebrado
~54 bilhões H/s
SHA256
256 bits
✅ Recomendado
~22 bilhões H/s
SHA384
384 bits
✅ Seguro
~8 bilhões H/s
SHA512
512 bits
✅ Seguro
~8 bilhões H/s
RIPEMD-160
160 bits
✅ Usado em Bitcoin
~15 bilhões H/s
bcrypt
variável
✅ Para senhas
~184.000 H/s (fator 10)
Argon2id
variável
✅ Melhor para senhas
Depende de parâmetros
NTLM
128 bits
🔴 Obsoleto (Windows)
~100 bilhões H/s
🔴 Por que velocidade importa para o atacante?
MD5 a 164 bilhões de hashes por segundo significa que uma senha de 6 caracteres (letras+números) pode ser quebrada em menos de 1 segundo numa RTX 4090. Um hash de senha sem salt é uma vulnerabilidade crítica.
Principais Aplicações
Verificar integridade de arquivos: Confirmar que um download não foi corrompido
Armazenar senhas: Nunca armazene senhas em texto puro!
Assinaturas digitais: Hash da mensagem é o que se assina, não a mensagem inteira
Blockchain: Encadeamento de blocos via hash (ver Blockchain)
Threat hunting: Hash MD5/SHA256 de malware em listas de IOC
🔓 Ataques a Hashes e Criptografia (Perspectiva Ofensiva)
⚠️ Contexto Ofensivo
Esta seção apresenta técnicas usadas por pentesters e red teamers para testar a robustez de sistemas de autenticação. Praticar apenas em dados próprios, CTFs ou com autorização escrita. Art. 154-A CP.
Taxonomia de Ataques a Hashes
graph TD
A[Hash ou Texto Cifrado Interceptado] --> B{Tipo de Ataque}
B --> C[Dicionário]
B --> D[Força Bruta]
B --> E[Rainbow Table]
B --> F[Regras / Mutações]
B --> G[Lookup Online]
C --> H[wordlist: rockyou.txt]
D --> I[charset: ?l?u?d?s]
E --> J[Tabela pré-computada sem salt]
F --> K[best64.rule / dive.rule]
G --> L[CrackStation / Hashes.com]
H --> M((Senha Recuperada))
I --> M
J --> M
K --> M
L --> M
Identificando o Tipo de Hash
Antes de atacar, é preciso saber o que está se atacando:
# Ataque básico com rockyou.txthashcat -m 0 -a 0 hashes.txt /usr/share/wordlists/rockyou.txt# Com regras (mutações: Senha -> S3nh@!, senha123 etc.)hashcat -m 0 -a 0 hashes.txt rockyou.txt -r /usr/share/hashcat/rules/best64.rule# Com regra dive.rule (mais abrangente, mais lenta)hashcat -m 0 -a 0 hashes.txt rockyou.txt -r /usr/share/hashcat/rules/dive.rule# SHA256 com wordlisthashcat -m 1400 -a 0 hash_sha256.txt rockyou.txt# Ver progresso em tempo realhashcat -m 0 -a 0 hashes.txt rockyou.txt --status --status-timer=5
Ataque de Força Bruta com Máscara
# Charset disponível?l = abcdefghijklmnopqrstuvwxyz?u = ABCDEFGHIJKLMNOPQRSTUVWXYZ?d = 0123456789?s = símbolos especiais?a = todos acima combinados# Senha de 6 dígitos numéricos (PIN)hashcat -m 0 -a 3 hash.txt ?d?d?d?d?d?d# Senha de 8 chars: maiúscula + 6 letras minúsculas + dígitohashcat -m 0 -a 3 hash.txt ?u?l?l?l?l?l?l?d# Incremental (testa 1 a 8 chars)hashcat -m 0 -a 3 hash.txt ?a?a?a?a?a?a?a?a --increment --increment-min=1
John the Ripper: Alternativa CPU/GPU
# Identificação automática do tipojohn hash.txt# Com wordlist e regrasjohn --wordlist=/usr/share/wordlists/rockyou.txt hash.txtjohn --wordlist=rockyou.txt --rules=Jumbo hash.txt# SHA256 explícitojohn --format=raw-sha256 --wordlist=rockyou.txt hash.txt# Ver hashes já quebradosjohn --show hash.txt# Cracking de /etc/shadow (Linux)unshadow /etc/passwd /etc/shadow > shadow_combined.txtjohn --wordlist=rockyou.txt shadow_combined.txt
Rainbow Tables vs Salting
graph LR
subgraph Sem Salt - Vulnerável
A1[senha123] --> B1[hash fixo: 482c811da5d5b4bc...]
B1 --> C1[Rainbow Table encontra em milissegundos]
end
subgraph Com Salt - Defendido
A2[senha123] --> B2[+ salt aleatório: a7f3x]
B2 --> C2[hash único: 9d2b1c7...a7f3x]
C2 --> D2[Rainbow Table inútil: salt muda tudo]
end
Defesa: Sempre use salt + KDF
Em aplicações modernas, nunca use md5(senha) ou sha256(senha). Use funções de derivação de chave (KDF) com salt embutido:
# Python: bcrypt com salt automáticoimport bcrypthashed = bcrypt.hashpw(b"senha123", bcrypt.gensalt(rounds=12))# Python: Argon2id (recomendado pelo NIST 2026)from argon2 import PasswordHasherph = PasswordHasher()hashed = ph.hash("senha123")
Ataque Padding Oracle (CBC)
O Padding Oracle Attack explora sistemas que revelam se o padding de uma mensagem cifrada em modo CBC está correto ou não. O atacante faz requisições modificadas e observa o comportamento da resposta (erro de padding vs. erro de aplicação).
Contexto histórico: vulnerabilidades POODLE (SSLv3, 2014), BEAST (TLS 1.0), Lucky13 (TLS até 1.2) exploraram variações deste princípio.
# padbuster: ferramenta automatizada para padding oracle# Instalaçãopip install padbuster # ou clonar do GitHub# Exemplo de ataque (SOMENTE em lab autorizado)padbuster http://lab-vulneravel.local/decrypt.php \ "TOKEN_BASE64_CIFRADO" 8 \ -encoding 0 \ -cookies "session=TOKEN_BASE64_CIFRADO"# O "8" = tamanho do bloco (AES=16 bytes, DES=8 bytes)
Defesa contra Padding Oracle
Usar AES-GCM em vez de AES-CBC elimina a classe inteira de padding oracle attacks porque GCM é um modo AEAD (Authenticated Encryption with Associated Data): autentica E cifra, sem padding.
🧪 Atividade 1: Identificar e Quebrar um Hash com Hashcat
Objetivo: Dado um hash desconhecido, identificar o algoritmo e recuperar a senha original.
Pré-requisitos: Kali Linux (VM ou nativo), arquivo rockyou.txt em /usr/share/wordlists/
Passo 1: Preparar o hash alvo
# Gere você mesmo o hash para praticar (dado próprio)echo -n "senha123" | md5sum# Resultado: 43e14b49d3a7a5f0a84e48a29db6c6cb -echo -n "password" | sha256sum# Resultado: 5e884898da28047151d0e56f8dc6292773603d0d6aabbdd62a11ef721d1542d8 -
Passo 2: Identificar o tipo do hash
hashid '43e14b49d3a7a5f0a84e48a29db6c6cb'# Output esperado:# [+] MD2# [+] MD5 <--- este é o mais provável para 32 chars# [+] MD4
Passo 3: Quebrar com hashcat (dicionário)
# Salvar o hash num arquivoecho '43e14b49d3a7a5f0a84e48a29db6c6cb' > hash_alvo.txt# Ataque com rockyou.txthashcat -m 0 -a 0 hash_alvo.txt /usr/share/wordlists/rockyou.txt# Resultado esperado (em segundos):# 43e14b49d3a7a5f0a84e48a29db6c6cb:senha123# Status: Cracked
🌐 TLS e o Handshake (Perspectiva Ofensiva e Defensiva)
O que é TLS?
TLS (Transport Layer Security) protege a comunicação entre cliente e servidor usando criptografia simétrica + assimétrica, transformando HTTP em HTTPS.
Diagrama do TLS 1.3 Handshake
sequenceDiagram
participant C as Cliente
participant S as Servidor
C->>S: ClientHello (versões TLS suportadas, cipher suites, chave ECDH pública)
S->>C: ServerHello (versão escolhida, chave ECDH pública do servidor)
S->>C: Certificate (certificado X.509)
S->>C: CertificateVerify (assinatura do handshake)
S->>C: Finished (MAC do handshake)
C->>S: Finished (MAC do handshake)
Note over C,S: A partir daqui: AES-GCM com chave derivada do ECDH
Forward Secrecy obrigatório em TLS 1.3: cada sessão usa chave efêmera (ECDHE). Se a chave privada do servidor vazar, sessões passadas não são comprometidas
Handshake mais rápido: 1-RTT vs 2-RTT no TLS 1.2
Versões TLS: O que ainda suportar é problema
Versão
Status
Vulnerabilidades Conhecidas
SSL 2.0
🔴 Proibido (RFC 6176)
DROWN, múltiplas
SSL 3.0
🔴 Proibido (RFC 7568)
POODLE
TLS 1.0
🔴 Descontinuado (PCI-DSS)
BEAST, POODLE-TLS
TLS 1.1
🔴 Descontinuado
Lucky13
TLS 1.2
✅ Aceitável com configuração correta
Configuração incorreta
TLS 1.3
✅ Recomendado
Nenhuma conhecida até 2026
🏛️ PKI e Certificados Digitais
graph TD
Root["🏛️ CA Raiz (Root CA)<br/>GlobalSign / DigiCert<br/>(Offline, HSM protegida)"]
Inter["🔗 CA Intermediária<br/>RNP ICPEdu OV SSL CA 2019"]
Leaf["📄 Certificado Final<br/>*.iff.edu.br<br/>(Wildcard, válido subdomínios)"]
Browser["🌐 Navegador do Aluno<br/>(Anchor de confiança: Root CA pré-instalada)"]
Root --> Inter
Inter --> Leaf
Browser -.->|"verifica cadeia de confiança"| Root
Leaf -.->|"apresentado ao cliente"| Browser
📜 Certificado Digital
Identidade Eletrônica
O certificado digital é um documento eletrônico que atesta que uma chave pública realmente pertence a uma pessoa ou empresa.
Corporações injetam CA própria para inspecionar HTTPS interno
Awareness, CT logs em browsers modernos
# Verificar se um domínio está nos Certificate Transparency logs# (detecta certs emitidos sem seu conhecimento)# Via crt.sh (online) ou ferramenta local:curl -s "https://crt.sh/?q=iff.edu.br&output=json" | python3 -m json.tool | grep name_value | head -20
🔮 Criptografia Pós-Quântica (PQC): O Futuro já Chegou
🚨 "Harvest Now, Decrypt Later" (HNDL)
Adversários estatais (NSA, inteligência de nações rivais) já estão coletando e armazenando tráfego HTTPS cifrado hoje, esperando que computadores quânticos suficientemente poderosos quebrem RSA/ECC no futuro. Dados com segredo de longa vida (governamentais, médicos, financeiros) são alvo.
Por que RSA e ECC estão ameaçados?
Algoritmo Clássico
Ataque Quântico
Algoritmo Quântico
RSA-2048
Algoritmo de Shor
Quebra em horas com ~4.000 qubits lógicos
ECDSA / ECDH
Algoritmo de Shor
Mesma ameaça que RSA
AES-256
Algoritmo de Grover
Reduz segurança para ~128 bits (ainda aceitável)
SHA-256/512
Algoritmo de Grover
Reduz segurança pela metade (SHA-512 recomendado)
Hashes e AES sobrevivem à era quântica com ajustes de tamanho. RSA e ECC não sobrevivem.
Algoritmos Aprovados pelo NIST (2024-2025)
Em agosto de 2024, o NIST publicou os primeiros padrões pós-quânticos. Em março de 2025, um quinto algoritmo foi adicionado:
Padrão NIST
Base Matemática
Uso
Status
ML-KEM (FIPS 203)
CRYSTALS-Kyber, Module-LWE
Troca de chaves / KEM
✅ Aprovado ago/2024
ML-DSA (FIPS 204)
CRYSTALS-Dilithium, Lattices
Assinatura digital
✅ Aprovado ago/2024
SLH-DSA (FIPS 205)
SPHINCS+, Hash-based
Assinatura (backup)
✅ Aprovado ago/2024
FN-DSA (FIPS 206)
FALCON, Lattices
Assinatura
✅ Aprovado ago/2024
HQC
Hamming Quasi-Cyclic, Códigos
KEM (alternativa)
✅ Selecionado mar/2025
graph LR
subgraph Hoje TLS 1.3
A[ECDHE-X25519] --> C[Chave de sessão AES-256-GCM]
B[ECDSA Cert] --> D[Autenticação servidor]
end
subgraph Futuro TLS 1.3 + PQC
E[ML-KEM-768] --> G[Chave de sessão AES-256-GCM]
F[ML-DSA Cert] --> H[Autenticação servidor]
A -.->|Hybrid KEM| E
end
Hybrid KEM: a transição segura
Os primeiros deployments PQC usam modo híbrido: combina ECDH clássico com ML-KEM. Só quebra se ambos forem quebrados simultaneamente. O Chrome e Firefox já suportam X25519MLKEM768 (desde 2024-2025).
Implicações para Pentest Red Team
# Verificar suporte a algoritmos pós-quânticos num servidoropenssl s_client -connect alvo.com:443 -groups X25519MLKEM768 2>&1 | grep "Server Temp Key"# Verificar quais grupos de curva o servidor aceita (preferência por PQC = boa prática)sslyze alvo.com --elliptic_curves
💡 Exercício: Sherlock do Certificado
Atividade Prática
Abra a tela de certificado no navegador (clicando no cadeado) e responda:
Verificação de Phishing: O nome na “Organização” é realmente “Instituto Federal”?
Verificação de Validade: O certificado ainda está válido? Quantos dias faltam?
Tipo de Certificado: Esse certificado tem asterisco (*)? O que aconteceria se a chave privada fosse roubada?
Algoritmo de assinatura: Qual algoritmo foi usado? É SHA256withRSA, SHA384withECDSA ou outro?
Certificate Transparency: Verifique no crt.sh quantos certificados já foram emitidos para o domínio do IFF. Há algum suspeito?