
Ce projet explore si OpenSSH moderne révèle des noms d'utilisateur valides via des différences subtiles de réponse ou de temporisation. Enquête sur l'énumération d'utilisateurs CVE-2016-6210 ( test t de Welch, d de Cohen et ingénierie de détection ) dans un laboratoire contrôlé sous Ubuntu 22.04.5 LTS ; il examine également les traces que de telles tentatives laissent derrière elles et comment elles peuvent être détectées.
Une réinvestigation reproductible de l'énumération de noms d'utilisateur OpenSSH par analyse statistique.
Ce projet réinvestit CVE-2016-6210, un canal auxiliaire temporel documenté d'OpenSSH, afin de déterminer s'il reste observable sur un serveur Ubuntu moderne avec la configuration PAM par défaut.
Plutôt que de supposer que le comportement publié s'applique toujours, le projet évalue les mesures de temps d'authentification collectées via des sondages manuels, Hydra et Metasploit en utilisant le test t de Welch et le d de Cohen pour distinguer les signaux temporels réels du bruit de mesure.
L'étude n'a révélé aucune différence temporelle statistiquement significative sur la configuration par défaut testée, démontrant l'importance de l'expérimentation reproductible et de la validation fondée sur des preuves des affirmations de sécurité publiées.
⚠️ Avis légal
Ce projet a été entièrement mené dans un environnement de laboratoire isolé et dont vous êtes propriétaire. Tous les résultats ne s'appliquent qu'à la configuration testée. Ne testez jamais des systèmes que vous ne possédez pas ou pour lesquels vous n'avez pas d'autorisation écrite explicite.
L'énumération d'utilisateurs – la capacité de déterminer si un nom d'utilisateur spécifique existe sur un système distant sans informations d'identification valides. Il s'agit d'une première étape cruciale dans la chaîne d'attaque menant à la compromission du compte :``` Reconnaissance → [User Enumeration] → Password Attack → Access ↑ This project investigates here
Si un attaquant peut distinguer « cet utilisateur existe » de « cet utilisateur n’existe pas » en analysant les réponses du serveur, il peut réduire considérablement l’espace de clés pour les attaques ultérieures par force brute ou par bourrage d’identifiants.
SSH est une cible fréquente car il est quasi universellement exposé, gère l’authentification par mot de passe, et les implémentations plus anciennes présentaient des différences de temps mesurables entre les noms d’utilisateur valides et invalides (CVE-2016-6210).
**Cette investigation pose deux questions :**
1. L’OpenSSH moderne sur Ubuntu 22.04.5 LTS avec la configuration par défaut divulgue-t-il l’existence d’un utilisateur
via les messages de réponse, le temps de réponse ou les signaux rapportés par les outils ?
2. Si un attaquant tente quand même l’attaque, quels artefacts laisse-t-il ? et avec quelle fiabilité
peuvent-ils être détectés ?
---
## 🖥️ Configuration du laboratoire
Tous les tests ont été réalisés dans un réseau virtuel isolé, sans accès à Internet.
| Machine | Système d’exploitation | Rôle | IP | Version SSH |
|-----------|----------------------------|----------------------------------|------------------|------------------|
| Attaquant | Kali Linux 2024.1 | Outils offensifs, scripts d’analyse | 192.168.56.5 | — |
| Cible | Ubuntu Server 22.04.5 LTS | Exécute OpenSSH avec configuration **par défaut** | 192.168.56.10 | OpenSSH 8.9p1 |
**Configuration SSH cible (`/etc/ssh/sshd_config` par défaut) :**```
PasswordAuthentication yes
UsePAM yes # Key setting — normalises timing via dummy hash
PermitRootLogin prohibit-password
MaxAuthTries 6
LogLevel INFO
UsePAM yes est le paramètre de durcissement critique. Il force OpenSSH à exécuter un calcul bcrypt factice pour les utilisateurs inexistants, correspondant au timing d'une vérification de mot de passe réelle. Cela a été introduit spécifiquement comme contre-mesure à CVE-2016-6210.
Chaque méthode d'attaque a été exécutée comme un essai indépendant avec un état de journal propre :```bash
sudo truncate -s 0 /var/log/auth.log
sudo cp /var/log/auth.log ~/evidence/trial-N-auth.log
Preuves collectées par essai :
- Sortie standard/erreur de l'outil (sauvegardée textuellement)
- `/var/log/auth.log` de la cible
- Échantillons de synchronisation des réponses via `time.perf_counter()` dans `manual_ssh.py`
- Bannière SSH récupérée avant toute tentative d'authentification
### Méthodes d'attaque
| Méthode | Outil | Liste de mots | Objectif |
|-----------------------|-------------------------------------|--------------------------|--------------------------------------------------|
| SSH manuel | `ssh` CLI + Paramiko | 50 noms d'utilisateur courants | Référence ; inspecter les réponses brutes |
| Bruteforce Hydra | `hydra` | les mêmes 50 | Automatisé ; exploite le mode d'énumération intégré de Hydra |
| Module Metasploit | `auxiliary/scanner/ssh/ssh_enumuser`| les mêmes 50 | Module d'énumération dédié du framework |
| Empreinte de bannière | custom `BannerFingerprinter` | N/A | Fuite de version sans authentification, vérification CVE |
| Analyse temporelle | custom `ResponseAnalyzer` | sous-ensemble valide vs invalide | Vérification statistique par canal auxiliaire |
---
## Ce qui a été construit
Ce projet va au-delà de l'exécution d'outils — il encapsule chaque attaque et toute la logique de détection dans une base de code Python structurée et fournit un orchestrateur qui exécute l'ensemble du pipeline de bout en bout.
### Outils d'attaque (`src/attack_tools/`)
**`ManualSSHEnumerator`** — Teste chaque nom d'utilisateur N fois avec `paramiko`, en enregistrant le timing précis, le type de résultat et la bannière SSH. Calcule la moyenne/écart type par nom d'utilisateur. Il est crucial qu'il ne **réutilise pas** les connexions entre les tentatives, ce qui garantit que chaque échantillon capture le temps de traitement complet du côté serveur.
**`BannerFingerprinter`** — Récupère la bannière SSH via une socket TCP brute (aucune information d'identification nécessaire). Analyse le nom de l'implémentation, la chaîne de version et l'indice du système d'exploitation. Recoupe avec un registre CVE local. Une version comme `OpenSSH_8.9p1 Ubuntu-3ubuntu0.6` révèle le logiciel serveur exact — potentiellement suffisant pour identifier les vulnérabilités connues avant toute tentative d'authentification.
**`HydraAutomation`** — Wrapper de sous-processus autour de Hydra. Analyse la sortie standard pour extraire les connexions réussies, les messages d'erreur et le verdict d'énumération propre à Hydra (`does not support user enumeration`).
**`MetasploitScanner`** — Écrit un script de ressource temporaire et pilote `msfconsole` via un sous-processus. Analyse la sortie pour la détection de durcissement et les noms d'utilisateur trouvés.
### Outils de détection (`src/detection_tools/`)
**`LogParser`** — Analyseur basé sur des expressions régulières pour auth.log supportant cinq types d'événements SSH : `failed_invalid_user`, `failed_valid_user`, `pre_auth_reject`, `accepted`, `disconnected`. Retourne des dictionnaires d'événements structurés avec horodatage, type d'événement, nom d'utilisateur, IP source et port.