
Este projeto explora se o OpenSSH moderno revela nomes de usuário válidos por meio de diferenças sutis de resposta ou de tempo. Investigação de enumeração de usuários CVE-2016-6210 ( teste t de Welch, d de Cohen e engenharia de detecção ) em um laboratório controlado no Ubuntu 22.04.5 LTS; também examina os rastros que tais tentativas deixam para trás e como podem ser detectados.
Uma reinvestigação reproduzível da enumeração de nomes de usuário do OpenSSH usando análise estatística.
Este projeto reinvestiga o CVE-2016-6210, um canal lateral de temporização documentado do OpenSSH, para determinar se ele permanece observável em um servidor Ubuntu moderno usando a configuração padrão do PAM.
Em vez de assumir que o comportamento publicado ainda se aplica, o projeto avalia medições de temporização de autenticação coletadas por sondagem manual, Hydra e Metasploit usando o teste t de Welch e o d de Cohen para distinguir sinais de temporização genuínos do ruído de medição.
O estudo não encontrou nenhuma diferença de temporização estatisticamente significativa na configuração padrão testada, demonstrando o valor da experimentação reproduzível e da validação baseada em evidências de alegações de segurança publicadas.
⚠️ Aviso Legal
Este projeto foi conduzido inteiramente em um ambiente de laboratório isolado e de propriedade própria. Todas as descobertas se aplicam apenas à configuração testada. Nunca teste sistemas que você não possui ou para os quais não tenha autorização explícita por escrito.
Enumeração de usuários - a capacidade de determinar se um nome de usuário específico existe em um sistema remoto sem credenciais válidas. É um primeiro passo crítico na cadeia de ataque que leva ao comprometimento da conta:``` Reconnaissance → [User Enumeration] → Password Attack → Access ↑ This project investigates here
Se um atacante consegue distinguir "este usuário existe" de "este usuário não existe" ao analisar as respostas do servidor, pode reduzir drasticamente o espaço de chaves para ataques subsequentes de força bruta ou credential stuffing.
SSH é um alvo frequente porque é quase universalmente exposto, lida com autenticação por senha e implementações antigas apresentavam diferenças de tempo mensuráveis entre nomes de usuário válidos e inválidos (CVE-2016-6210).
**Esta investigação faz duas perguntas:**
1. O OpenSSH moderno no Ubuntu 22.04.5 LTS com configuração padrão vaza a existência de nome de usuário por meio de mensagens de resposta, tempo ou sinais relatados por ferramentas?
2. Se um atacante fizer a tentativa de qualquer forma, quais artefatos ela deixa? e com que confiabilidade esses podem ser detectados?
---
## 🖥️ Configuração do Laboratório
Todos os testes foram realizados em uma rede virtual isolada apenas para host, sem exposição à internet.
| Máquina | SO | Função | IP | Versão SSH |
|----------|---------------------------|-----------------------------------------|------------------|------------------|
| Atacante | Kali Linux 2024.1 | Ferramentas ofensivas, scripts de análise | 192.168.56.5 | — |
| Alvo | Ubuntu Server 22.04.5 LTS | Executando OpenSSH com configuração **padrão** | 192.168.56.10 | OpenSSH 8.9p1 |
**Configuração SSH do alvo (`/etc/ssh/sshd_config` padrão):**```
PasswordAuthentication yes
UsePAM yes # Key setting — normalises timing via dummy hash
PermitRootLogin prohibit-password
MaxAuthTries 6
LogLevel INFO
UsePAM yes é a configuração crítica de hardening. Ela força o OpenSSH a executar um cálculo bcrypt fictício para usuários inexistentes, igualando o tempo de uma verificação de senha real.
Isso foi introduzido especificamente como uma contramedida para o CVE-2016-6210.
Cada método de ataque foi executado como um teste independente com um estado de log limpo:```bash
sudo truncate -s 0 /var/log/auth.log
sudo cp /var/log/auth.log ~/evidence/trial-N-auth.log
Evidências coletadas por tentativa:
- Saída padrão/erro da ferramenta (salva textualmente)
- `/var/log/auth.log` do alvo
- Amostras de tempo de resposta via `time.perf_counter()` no `manual_ssh.py`
- Banner SSH capturado antes de qualquer tentativa de autenticação
### Métodos de Ataque
| Método | Ferramenta | Wordlist | Propósito |
|-----------------------|---------------------------------------|-------------------------|--------------------------------------------------|
| SSH manual | `ssh` CLI + Paramiko | 50 nomes de usuário comuns | Linha de base; inspecionar respostas brutas |
| Força bruta Hydra | `hydra` | mesmos 50 | Automatizado; utiliza modo enum nativo do Hydra |
| Módulo Metasploit | `auxiliary/scanner/ssh/ssh_enumuser` | mesmos 50 | Módulo de enumeração dedicado do framework |
| Impressão digital de banner | `BannerFingerprinter` personalizado | N/A | Vazamento de versão sem autenticação, verificação de CVE |
| Análise de temporização | `ResponseAnalyzer` personalizado | subconjunto válido vs inválido | Verificação estatística de canal lateral |
---
## O Que Foi Construído
Este projeto vai além de executar ferramentas — ele encapsula cada ataque e toda a lógica de detecção em uma base de código Python estruturada e fornece um orquestrador que executa todo o pipeline de ponta a ponta.
### Ferramentas de Ataque (`src/attack_tools/`)
**`ManualSSHEnumerator`** — Testa cada nome de usuário N vezes com `paramiko`, registrando
tempo preciso, tipo de resultado e banner SSH. Calcula média/desvio padrão por usuário.
Criticamente, **não** reutiliza conexões entre tentativas, garantindo que cada amostra capture
o tempo total de processamento do servidor.
**`BannerFingerprinter`** — Captura o banner SSH através de um socket TCP bruto (sem credenciais
necessárias). Analisa nome da implementação, string de versão e dica de SO. Cruza referências
com um registro local de CVEs. Uma versão como `OpenSSH_8.9p1 Ubuntu-3ubuntu0.6` revela
o software exato do servidor — potencialmente suficiente para identificar vulnerabilidades conhecidas
antes mesmo de qualquer autenticação ser tentada.
**`HydraAutomation`** — Wrapper de subprocesso em torno do Hydra. Analisa a saída padrão para extrair
logins bem-sucedidos, mensagens de erro e o próprio veredito de enumeração do Hydra
(`does not support user enumeration`).
**`MetasploitScanner`** — Escreve um script de recurso temporário e executa `msfconsole`
via subprocesso. Analisa a saída em busca de detecção de hardening e quaisquer nomes de usuário encontrados.
### Ferramentas de Detecção (`src/detection_tools/`)
**`LogParser`** — Analisador de auth.log baseado em regex, suportando cinco tipos de eventos SSH:
`failed_invalid_user`, `failed_valid_user`, `pre_auth_reject`, `accepted`,
`disconnected`. Retorna dicionários de eventos estruturados com timestamp, tipo de evento, nome de usuário,
IP de origem e porta.
**`ResponseAnalyzer`** — Realiza o teste t de Welch nas distribuições de temporização de nomes de usuário
válidos vs inválidos. Calcula delta de temporização (ms), valor-p, tamanho de efeito d de Cohen e
uma conclusão em linguagem simples. Limiar: delta ≥ 5ms E p < 0,05 dispara um aviso
de canal lateral.