
Questo progetto esplora se l'OpenSSH moderno rivela nomi utente validi attraverso sottili differenze nelle risposte o nei tempi. Indagine sull'enumerazione degli utenti CVE-2016-6210 (test t di Welch, d di Cohen e ingegneria del rilevamento) in un laboratorio controllato su Ubuntu 22.04.5 LTS; esamina inoltre le tracce che tali tentativi lasciano dietro di sé e come possono essere rilevate.
Una ri-indagine riproducibile dell'enumerazione degli username OpenSSH utilizzando l'analisi statistica.
Questo progetto riesamina CVE-2016-6210, un side-channel temporale documentato di OpenSSH, per determinare se rimane osservabile su un moderno server Ubuntu utilizzando la configurazione PAM predefinita.
Invece di assumere che il comportamento pubblicato sia ancora valido, il progetto valuta le misurazioni dei tempi di autenticazione raccolte tramite probing manuale, Hydra e Metasploit utilizzando il test t di Welch e il d di Cohen per distinguere i segnali temporali genuini dal rumore di misurazione.
Lo studio ha riscontrato nessuna differenza temporale statisticamente significativa sulla configurazione predefinita testata, dimostrando il valore della sperimentazione riproducibile e della validazione basata su prove delle affermazioni di sicurezza pubblicate.
⚠️ Avviso legale
Questo progetto è stato condotto interamente all'interno di un ambiente di laboratorio isolato di proprietà. Tutti i risultati si applicano solo alla configurazione testata. Non testare mai sistemi che non possiedi o per i quali non hai esplicita autorizzazione scritta.
Enumerazione degli utenti - la capacità di determinare se un nome utente specifico esiste su un sistema remoto senza credenziali valide. È un primo passo critico nella catena di attacco che porta al compromesso dell'account:``` Reconnaissance → [User Enumeration] → Password Attack → Access ↑ This project investigates here
Se un attaccante può distinguere "questo utente esiste" da "questo utente non esiste" analizzando le risposte del server, può ridurre drasticamente lo spazio delle chiavi per successivi attacchi di forza bruta o credential stuffing.
SSH è un bersaglio frequente perché è quasi universalmente esposto, gestisce l'autenticazione tramite password e le implementazioni più vecchie presentavano differenze di temporizzazione misurabili tra nomi utente validi e non validi (CVE-2016-6210).
**Questa indagine si pone due domande:**
1. OpenSSH moderno su Ubuntu 22.04.5 LTS con configurazione predefinita perde informazioni sull'esistenza degli utenti
tramite messaggi di risposta, temporizzazione o segnali riportati dagli strumenti?
2. Se un attaccante tenta comunque l'attacco, quali artefatti lascia? e con quanta
affidabilità possono essere rilevati?
---
## 🖥️ Configurazione del Laboratorio
Tutti i test sono stati eseguiti in una rete virtuale host-only completamente isolata, senza esposizione a internet.
| Macchina | Sistema Operativo | Ruolo | IP | Versione SSH |
|----------|----------------------------|-----------------------------------------|------------------|-----------------|
| Attaccante | Kali Linux 2024.1 | Strumenti offensivi, script di analisi | 192.168.56.5 | — |
| Target | Ubuntu Server 22.04.5 LTS | Esecuzione di OpenSSH con configurazione **predefinita** | 192.168.56.10 | OpenSSH 8.9p1 |
**Configurazione SSH di destinazione (`/etc/ssh/sshd_config` predefinita):**```
PasswordAuthentication yes
UsePAM yes # Key setting — normalises timing via dummy hash
PermitRootLogin prohibit-password
MaxAuthTries 6
LogLevel INFO
UsePAM yes è l'impostazione critica di hardening. Forza OpenSSH a eseguire un calcolo bcrypt fittizio per utenti inesistenti, eguagliando i tempi di un controllo password reale. Questo è stato introdotto specificamente come contromisura per CVE-2016-6210.
Ogni metodo di attacco è stato eseguito come prova indipendente con uno stato del log pulito:```bash
sudo truncate -s 0 /var/log/auth.log
sudo cp /var/log/auth.log ~/evidence/trial-N-auth.log
Evidenze raccolte per ogni prova:
- stdout/stderr dello strumento (salvati fedelmente)
- `/var/log/auth.log` dal target
- Campioni di temporizzazione delle risposte tramite `time.perf_counter()` in `manual_ssh.py`
- Banner SSH acquisito prima di qualsiasi tentativo di autenticazione
### Metodi di Attacco
| Metodo | Strumento | Wordlist | Scopo |
|--------------------------|--------------------------------------|-------------------------|-------------------------------------------------|
| SSH manuale | `ssh` CLI + Paramiko | 50 nomi utente comuni | Baseline; ispezionare risposte grezze |
| Forza bruta con Hydra | `hydra` | stessi 50 | Automatico; sfrutta la modalità enum integrata |
| Modulo Metasploit | `auxiliary/scanner/ssh/ssh_enumuser` | stessi 50 | Modulo di enumerazione dedicato del framework |
| Impronta digitale banner | `BannerFingerprinter` personalizzato | N/A | Perdita di versione senza autenticazione, CVE |
| Analisi temporale | `ResponseAnalyzer` personalizzato | subset valido vs invalido | Controllo statistico del canale laterale |
---
## Cosa è Stato Realizzato
Questo progetto va oltre la semplice esecuzione di strumenti — incapsula ogni attacco e tutta la logica di rilevamento in un codebase Python strutturato e fornisce un orchestratore che esegue l'intera pipeline dall'inizio alla fine.
### Strumenti di Attacco (`src/attack_tools/`)
**`ManualSSHEnumerator`** — Testa ogni nome utente N volte con `paramiko`, registrando
temporizzazione precisa, tipo di risultato e banner SSH. Calcola media/deviazione standard per nome utente. Criticamente,
**non** riutilizza le connessioni tra tentativi, assicurando che ogni campione catturi il
tempo completo di elaborazione lato server.
**`BannerFingerprinter`** — Acquisisce il banner SSH su un socket TCP grezzo (nessuna credenziale
necessaria). Analizza il nome dell'implementazione, la stringa di versione e un suggerimento sul SO. Incrocia i riferimenti
con un registro CVE locale. Una versione come `OpenSSH_8.9p1 Ubuntu-3ubuntu0.6` rivela
l'esatto software server — potenzialmente sufficiente per identificare vulnerabilità note prima
che venga tentata qualsiasi autenticazione.
**`HydraAutomation`** — Wrapper per sottoprocesso attorno a Hydra. Analizza stdout per estrarre
login riusciti, messaggi di errore e il verdetto di enumerazione di Hydra stesso
(`does not support user enumeration`).
**`MetasploitScanner`** — Scrive uno script di risorse temporaneo e guida `msfconsole`
tramite sottoprocesso. Analizza l'output per il rilevamento di hardening e eventuali nomi utente trovati.
### Strumenti di Rilevamento (`src/detection_tools/`)
**`LogParser`** — Analizzatore di auth.log basato su espressioni regolari che supporta cinque tipi di eventi SSH:
`failed_invalid_user`, `failed_valid_user`, `pre_auth_reject`, `accepted`,
`disconnected`. Restituisce dizionari di eventi strutturati con timestamp, tipo di evento, nome utente,
IP sorgente e porta.