
Scanner para identificação de servidores com softwares SSH possivelmente vulnerável às CVEs CVE-2024-6387 e CVE-2023-48795.
Scanner para identificação de servidores com softwares SSH possivelmente vulnerável às CVEs CVE-2024-6387 e CVE-2023-48795.
| CVE | Nome | Condição | Severidade |
|---|---|---|---|
| CVE-2024-6387 | regreSSHion | OpenSSH < 9.8p1 | CRITICAL |
| CVE-2023-48795 | Terrapin | OpenSSH < 9.6 | HIGH |
Race condition no handler de sinal SIGALRM do servidor OpenSSH permite RCE não autenticado como root em sistemas Linux com glibc. Afeta todas as versões do OpenSSH anteriores à 9.8p1.
Prefix truncation attack no handshake SSH (protocolo binário) que permite a um adversário MITM remover mensagens de extensão de segurança negociadas no início da sessão. Afeta OpenSSH < 9.6.
O script conecta diretamente na porta SSH dos alvos e lê o banner de identificação (ex: SSH-2.0-OpenSSH_9.7), sem enviar nenhuma credencial. Com a versão em mãos, compara contra as versões fixadas de cada CVE e classifica o host.
Alvo → Conexão TCP porta 22 → Leitura do banner SSH → Identificação do software
→ Parse da versão OpenSSH → Comparação com versões fixadas → Classificação + Log + CSV
O script também identifica o fabricante/software SSH a partir do banner, reconhecendo:
| Banner | Fabricante identificado |
|---|---|
SSH-2.0-OpenSSH_9.7 | OpenSSH |
SSH-2.0-ROSSSH | Mikrotik |
SSH-2.0-Cisco-1.25 | Cisco |
SSH-2.0-dropbear_2022.83 | Dropbear |
SSH-2.0-libssh-0.9.6 | libssh |
SSH-2.0-AsyncSSH_2.13.2 | AsyncSSH |
SSH-2.0-paramiko_2.9.5 | Paramiko |
SSH-2.0-Bitvise-... | Bitvise |
SSH-2.0-WolfSSH_1.4.14 | wolfSSH |
| Outros não mapeados | Nome extraído do banner |
pip install requests packaging urllib3 dnspython
dnspythoné opcional, mas altamente recomendado — a resolução reversa paralela é significativamente mais rápida com ele. Semdnspython, o script usasocketcomo fallback.
# IP individual
python ssh_scanner.py --ip 192.168.1.10
# Faixa CIDR
python ssh_scanner.py --cidr 10.0.0.0/24
# Múltiplos CIDRs
python ssh_scanner.py --cidr 10.0.0.0/24 192.168.1.0/24
# ASN (prefixos resolvidos via RIPE Stat, fallback para bgp.tools)
python ssh_scanner.py --asn AS12345
# Combinação de entradas
python ssh_scanner.py --asn AS12345 --cidr 10.0.0.0/8 --ip 1.2.3.4
# A partir de um arquivo (um IP, CIDR ou ASN por linha)
python ssh_scanner.py --file alvos.txt
# Portas adicionais (além da 22)
python ssh_scanner.py --cidr 10.0.0.0/24 --ports 22 2222 22222
| Parâmetro | Padrão | Descrição |
|---|---|---|
--ports | 22 | Porta(s) SSH a varrer |
--workers | 60 | Threads simultâneas para o scan SSH |
--timeout | 3.0 | Timeout da conexão SSH em segundos |
--dns-workers | 200 | Threads simultâneas para resolução DNS reversa |
--dns-timeout | 1.5 | Timeout das queries DNS em segundos |
--no-confirm | — | Pula a confirmação antes de iniciar (útil em automações) |
A resolução DNS é executada em lote antes do scan SSH, com fila dedicada de threads, evitando que a latência do DNS impacte na velocidade da varredura.
Todos os resultados são gravados em ./logs/:
| Arquivo | Conteúdo |
|---|---|
ssh_scan_<timestamp>.log | Log completo da varredura (todos os hosts SSH encontrados) |
ssh_scan_<timestamp>_vulneraveis.txt | Apenas hosts classificados como VULNERÁVEL |
ssh_scan_<timestamp>_resultados.csv | Todos os hosts SSH com status completo |
ssh_scan_<timestamp>_formato_estruturado.csv | CSV estruturado com IP, porta, timestamp, domínio, fabricante e CVEs |
formato_estruturado.csv)Colunas presentes:
| Coluna | Descrição |
|---|---|
IP | Endereço IP do host |
PORTA | Porta SSH onde o banner foi capturado |
TIMESTAMP_UTC | Timestamp ISO 8601 UTC do momento do scan |
DOMINIO | Hostname via DNS reverso (PTR) ou SEM-PTR |
FABRICANTE | Fabricante identificado a partir do banner |
SW_NAME | Nome do software SSH extraído do banner |
SW_VERSAO | Versão do software SSH |
CVEs | CVEs afetadas separadas por ; (minúsculas) |
BANNER | Banner SSH completo capturado |
Exemplo de linhas:
IP | PORTA | TIMESTAMP_UTC | DOMINIO | FABRICANTE | SW_NAME | SW_VERSAO | CVEs | BANNER
192.168.1.10 | 22 | 2026-05-20T00:39:33Z | host.exemplo.com | OpenSSH | OpenSSH | 9.7 | cve-2024-6387;cve-2023-48795 | SSH-2.0-OpenSSH_9.7
192.168.1.20 | 22 | 2026-05-20T12:46:03Z | host2.exemplo.com | OpenSSH | OpenSSH | 9.4 | cve-2023-48795;cve-2024-6387 | SSH-2.0-OpenSSH_9.4
192.168.1.30 | 22 | 2026-05-20T12:47:11Z | router.exemplo.com | Mikrotik | ROSSSH | N/D | | SSH-2.0-ROSSSH
Ao final da varredura, se houver hosts vulneráveis, o script exibe automaticamente uma prévia das primeiras 20 linhas do CSV estruturado no terminal.
| Status | Significado |
|---|---|
VULNERÁVEL | Versão OpenSSH confirmada abaixo da versão corrigida |
SEGURO | Versão OpenSSH confirmada em versão corrigida ou superior |
VERSÃO-OCULTA | SSH detectado mas versão não exposta — não confirmado seguro |
SSH-NÃO-OPENSSH | Servidor SSH encontrado mas não é OpenSSH (Dropbear, Cisco, etc.) |
NÃO-SSH | Porta respondeu mas o banner não corresponde ao protocolo SSH |
Atualize o OpenSSH para a versão 9.8p1 ou superior (cobre ambas as CVEs):
# Ubuntu / Debian — via repositório do sistema
sudo apt update && sudo apt install --only-upgrade openssh-server
ssh -V
# CentOS / RHEL / Rocky
sudo dnf update openssh-server
ssh -V
# Compilação a partir do fonte (versão mais recente)
wget https://cdn.openbsd.org/pub/OpenBSD/OpenSSH/portable/openssh-9.9p1.tar.gz
tar xzf openssh-9.9p1.tar.gz
cd openssh-9.9p1 && ./configure && make && sudo make install
Após atualizar, reinicie o serviço:
sudo systemctl restart sshd