
Dieses Projekt untersucht, ob modernes OpenSSH gültige Benutzernamen durch subtile Antwort- oder Timing-Unterschiede preisgibt. Untersuchung der Benutzeraufzählung gemäß CVE-2016-6210 ( Welch's t-Test, Cohen's d und Detection Engineering ) in einem kontrollierten Labor unter Ubuntu 22.04.5 LTS; außerdem werden die Spuren untersucht, die solche Versuche hinterlassen, und wie sie erkannt werden können.
Eine reproduzierbare Neuuntersuchung der OpenSSH-Benutzernamensaufzählung mittels statistischer Analyse.
Dieses Projekt untersucht CVE-2016-6210, einen dokumentierten OpenSSH-Zeit-Seitenkanal, erneut, um festzustellen, ob er auf einem modernen Ubuntu-Server mit Standard-PAM-Konfiguration weiterhin beobachtbar ist.
Anstatt davon auszugehen, dass das veröffentlichte Verhalten noch zutrifft, bewertet das Projekt Authentifizierungszeitmessungen, die durch manuelles Probing, Hydra und Metasploit gesammelt wurden, mithilfe des Welch-t-Tests und Cohen's d, um echte Zeitsignale von Messrauschen zu unterscheiden.
Die Studie ergab keinen statistisch signifikanten Zeitunterschied bei der getesteten Standardkonfiguration, was den Wert reproduzierbarer Experimente und evidenzbasierter Validierung veröffentlichter Sicherheitsbehauptungen demonstriert.
⚠️ Rechtlicher Hinweis
Dieses Projekt wurde vollständig in einer selbst betriebenen, isolierten Laborumgebung durchgeführt. Alle Ergebnisse gelten ausschließlich für die getestete Konfiguration. Testen Sie niemals Systeme, die Ihnen nicht gehören oder für die Sie keine ausdrückliche schriftliche Genehmigung zum Testen haben.
Benutzernamensaufzählung - die Fähigkeit festzustellen, ob ein bestimmter Benutzername auf einem entfernten System existiert, ohne gültige Anmeldedaten. Es ist ein kritischer erster Schritt in der Angriffskette, der zur Kompromittierung von Konten führt:``` Reconnaissance → [User Enumeration] → Password Attack → Access ↑ This project investigates here
Wenn ein Angreifer durch Analyse der Serverantworten zwischen „dieser Benutzer existiert“ und „dieser Benutzer existiert nicht“ unterscheiden kann, kann er den Schlüsselraum für anschließende
Brute-Force- oder Credential-Stuffing-Angriffe drastisch reduzieren.
SSH ist ein häufiges Ziel, weil es nahezu universell exponiert ist, Passwortauthentifizierung unterstützt und ältere Implementierungen messbare Zeitunterschiede zwischen gültigen und ungültigen Benutzernamen aufwiesen (CVE-2016-6210).
**Diese Untersuchung stellt zwei Fragen:**
1. Gibt modernes OpenSSH auf Ubuntu 22.04.5 LTS mit Standardkonfiguration die Existenz von Benutzernamen über Antwortnachrichten, Zeitmessungen oder von Werkzeugen gemeldete Signale preis?
2. Wenn ein Angreifer den Versuch dennoch unternimmt, welche Artefakte hinterlässt er? und wie zuverlässig können diese erkannt werden?
---
## 🖥️ Laboraufbau
Alle Tests wurden in einem vollständig isolierten host-only virtuellen Netzwerk ohne Internetverbindung durchgeführt.
| Rechner | Betriebssystem | Rolle | IP | SSH-Version |
|----------|----------------|-------|------------------|-------------|
| Angreifer | Kali Linux 2024.1 | Offensive Werkzeuge, Analyse-Skripte | 192.168.56.5 | — |
| Ziel | Ubuntu Server 22.04.5 LTS | Ausführung von OpenSSH mit **Standard**-Konfiguration | 192.168.56.10 | OpenSSH 8.9p1 |
**SSH-Konfiguration des Ziels (`/etc/ssh/sshd_config` Standardwerte):**```
PasswordAuthentication yes
UsePAM yes # Key setting — normalises timing via dummy hash
PermitRootLogin prohibit-password
MaxAuthTries 6
LogLevel INFO
UsePAM yes ist die kritische Härtungseinstellung. Sie zwingt OpenSSH, für nicht existierende Benutzer eine Dummy-bcrypt-Berechnung durchzuführen, die dem Zeitverhalten einer echten Passwortprüfung entspricht.
Dies wurde speziell als Gegenmaßnahme für CVE-2016-6210 eingeführt.
Jede Angriffsmethode wurde als unabhängiger Test mit einem sauberen Log-Status ausgeführt:```bash
sudo truncate -s 0 /var/log/auth.log
sudo cp /var/log/auth.log ~/evidence/trial-N-auth.log
Erhobene Beweise pro Testlauf:
- Tool stdout/stderr (wörtlich gespeichert)
- `/var/log/auth.log` vom Ziel
- Antwortzeitmessungen über `time.perf_counter()` in `manual_ssh.py`
- SSH-Banner, das vor jedem Authentifizierungsversuch abgegriffen wurde
### Angriffsmethoden
| Methode | Werkzeug | Wortliste | Zweck |
|------------------------------|---------------------------------------|-------------------------|------------------------------------------------------|
| Manuelles SSH | `ssh` CLI + Paramiko | 50 gebräuchliche Benutzernamen | Basislinie; Rohantworten prüfen |
| Hydra-Brute-Force | `hydra` | gleiche 50 | Automatisiert; nutzt Hydras eingebauten Enum-Modus |
| Metasploit-Modul | `auxiliary/scanner/ssh/ssh_enumuser` | gleiche 50 | Dediziertes Enumerationsmodul des Frameworks |
| Banner-Fingerprinting | benutzerdefinierter `BannerFingerprinter` | N/A | Version-Leck ohne Authentifizierung, CVE-Prüfung |
| Timing-Analyse | benutzerdefinierter `ResponseAnalyzer` | gültige vs. ungültige Teilmenge | Statistische Seitenkanalprüfung |
---
## Was gebaut wurde
Dieses Projekt geht über das reine Ausführen von Werkzeugen hinaus – es kapselt jeden Angriff und die gesamte Erkennungslogik in einer strukturierten Python-Codebasis und bietet einen Orchestrator, der die gesamte Pipeline Ende-zu-Ende ausführt.
### Angriffswerkzeuge (`src/attack_tools/`)
**`ManualSSHEnumerator`** — Testet jeden Benutzernamen N-mal mit `paramiko` und zeichnet präzises Timing, Ergebnistyp und SSH-Banner auf. Berechnet Mittelwert/Standardabweichung pro Benutzername. Entscheidend ist, dass es die Verbindungen zwischen den Versuchen **nicht** wiederverwendet, sodass jede Stichprobe die vollständige serverseitige Verarbeitungszeit erfasst.
**`BannerFingerprinter`** — Holt das SSH-Banner über einen rohen TCP-Socket (keine Anmeldedaten erforderlich). Analysiert Implementierungsname, Versionszeichenfolge und OS-Hinweis. Kreuzverweise mit einem lokalen CVE-Register. Eine Version wie `OpenSSH_8.9p1 Ubuntu-3ubuntu0.6` zeigt die genaue Serversoftware an – möglicherweise ausreichend, um bekannte Schwachstellen zu identifizieren, bevor eine Authentifizierung versucht wird.
**`HydraAutomation`** — Subprocess-Wrapper um Hydra. Analysiert stdout, um erfolgreiche Anmeldungen, Fehlermeldungen und Hydras eigenes Enumerationsurteil (`does not support user enumeration`) zu extrahieren.
**`MetasploitScanner`** — Schreibt ein temporäres Ressourcenskript und steuert `msfconsole` über Subprocess. Analysiert Ausgabe auf Härtungserkennung und gefundene Benutzernamen.
### Erkennungswerkzeuge (`src/detection_tools/`)
**`LogParser`** — Regex-basierter auth.log-Parser, der fünf SSH-Ereignistypen unterstützt: `failed_invalid_user`, `failed_valid_user`, `pre_auth_reject`, `accepted`, `disconnected`. Gibt strukturierte Ereignis-Dicts mit Zeitstempel, Ereignistyp, Benutzername, Quell-IP und Port zurück.
**`ResponseAnalyzer`** — Führt Welch's t-Test auf Zeitverteilungen von gültigen vs. ungültigen Benutzernamen durch. Berechnet Zeitdifferenz (ms), p-Wert, Cohen's d Effektstärke und eine Schlussfolgerung in einfacher Sprache. Schwelle: Delta ≥ 5ms UND p < 0.05 löst eine Seitenkanalwarnung aus.