
Este proyecto explora si OpenSSH moderno revela nombres de usuario válidos a través de diferencias sutiles en la respuesta o el tiempo. Investigación de enumeración de usuarios CVE-2016-6210 (prueba t de Welch, d de Cohen e ingeniería de detección) en un laboratorio controlado en Ubuntu 22.04.5 LTS; también examina los rastros que dejan tales intentos y cómo se pueden detectar.
Una reinvestigación reproducible de la enumeración de nombres de usuario de OpenSSH mediante análisis estadístico.
Este proyecto reinvestiga CVE-2016-6210, un canal lateral de temporización documentado de OpenSSH, para determinar si sigue siendo observable en un servidor Ubuntu moderno usando la configuración PAM predeterminada.
En lugar de asumir que el comportamiento publicado aún aplica, el proyecto evalúa las mediciones de temporización de autenticación recolectadas mediante sondas manuales, Hydra y Metasploit usando la prueba t de Welch y la d de Cohen para distinguir señales de temporización genuinas del ruido de medición.
El estudio no encontró diferencias de temporización estadísticamente significativas en la configuración predeterminada probada, demostrando el valor de la experimentación reproducible y la validación basada en evidencia de las afirmaciones de seguridad publicadas.
⚠️ Aviso Legal
Este proyecto se realizó completamente dentro de un entorno de laboratorio aislado y de propiedad propia. Todos los hallazgos se aplican solo a la configuración probada. Nunca pruebe sistemas que no posea o para los que no tenga autorización explícita por escrito.
Enumeración de usuarios - la capacidad de determinar si un nombre de usuario específico existe en un sistema remoto sin credenciales válidas. Es un primer paso crítico en la cadena de ataque que lleva al compromiso de la cuenta:``` Reconnaissance → [User Enumeration] → Password Attack → Access ↑ This project investigates here
Si un atacante puede distinguir "este usuario existe" de "este usuario no existe" analizando las respuestas del servidor, puede reducir drásticamente el espacio de claves para posteriores ataques de fuerza bruta o de relleno de credenciales.
SSH es un objetivo frecuente porque está expuesto casi universalmente, maneja la autenticación por contraseña y las implementaciones antiguas tenían diferencias de tiempo medibles entre nombres de usuario válidos e inválidos (CVE-2016-6210).
**Esta investigación plantea dos preguntas:**
1. ¿El OpenSSH moderno en Ubuntu 22.04.5 LTS con configuración predeterminada filtra la existencia de usuarios
a través de mensajes de respuesta, tiempos o señales reportadas por herramientas?
2. Si un atacante lo intenta de todos modos, ¿qué artefactos deja? y ¿con qué
fiabilidad pueden ser detectados?
---
## 🖥️ Configuración del Laboratorio
Todas las pruebas se realizaron en una red virtual totalmente aislada de solo anfitrión, sin exposición a internet.
| Máquina | SO | Rol | IP | Versión SSH |
|----------|---------------------------|-----------------------------------------|------------------|------------------|
| Atacante | Kali Linux 2024.1 | Herramientas ofensivas, scripts de análisis | 192.168.56.5 | — |
| Objetivo | Ubuntu Server 22.04.5 LTS | Ejecutando OpenSSH con configuración **predeterminada** | 192.168.56.10 | OpenSSH 8.9p1 |
**Configuración SSH objetivo (valores predeterminados de `/etc/ssh/sshd_config`):**```
PasswordAuthentication yes
UsePAM yes # Key setting — normalises timing via dummy hash
PermitRootLogin prohibit-password
MaxAuthTries 6
LogLevel INFO
UsePAM yes es la configuración crítica de endurecimiento. Fuerza a OpenSSH a ejecutar un cálculo bcrypt ficticio para usuarios inexistentes, igualando el tiempo de una verificación de contraseña real.
Esto se introdujo específicamente como una contramedida para CVE-2016-6210.
Cada método de ataque se ejecutó como un ensayo independiente con un estado de registro limpio:```bash
sudo truncate -s 0 /var/log/auth.log
sudo cp /var/log/auth.log ~/evidence/trial-N-auth.log
Evidencia recopilada por intento:
- Salida estándar/error de la herramienta (guardado textualmente)
- `/var/log/auth.log` del objetivo
- Muestras de temporización de respuesta mediante `time.perf_counter()` en `manual_ssh.py`
- Banner SSH obtenido antes de cualquier intento de autenticación
### Métodos de ataque
| Método | Herramienta | Lista de palabras | Propósito |
|-----------------------|--------------------------------------|--------------------------|--------------------------------------------------|
| SSH Manual | `ssh` CLI + Paramiko | 50 nombres de usuario comunes | Línea base; inspeccionar respuestas brutas |
| Hydra fuerza bruta | `hydra` | mismos 50 | Automatizado; aprovecha el modo de enumeración integrado de Hydra |
| Módulo de Metasploit | `auxiliary/scanner/ssh/ssh_enumuser` | mismos 50 | Módulo de enumeración dedicado del framework |
| Huella digital del banner | personalizado `BannerFingerprinter` | N/A | Filtración de versión sin autenticación, verificación de CVE |
| Análisis de temporización | personalizado `ResponseAnalyzer` | subconjunto válido vs inválido | Verificación estadística de canal lateral |
---
## Lo que se Construyó
Este proyecto va más allá de ejecutar herramientas — envuelve cada ataque y toda la lógica de detección en una base de código Python estructurada y proporciona un orquestador que ejecuta todo el pipeline de principio a fin.
### Herramientas de ataque (`src/attack_tools/`)
**`ManualSSHEnumerator`** — Prueba cada nombre de usuario N veces con `paramiko`, registrando la temporización precisa, el tipo de resultado y el banner SSH. Calcula la media/desviación estándar por usuario. Críticamente, **no** reutiliza conexiones entre intentos, asegurando que cada muestra capture el tiempo completo de procesamiento del servidor.
**`BannerFingerprinter`** — Obtiene el banner SSH a través de un socket TCP bruto (sin necesidad de credenciales). Analiza el nombre de implementación, la cadena de versión y la pista del SO. Contrasta con un registro local de CVE. Una versión como `OpenSSH_8.9p1 Ubuntu-3ubuntu0.6` revela el software exacto del servidor — potencialmente suficiente para identificar vulnerabilidades conocidas antes de intentar cualquier autenticación.
**`HydraAutomation`** — Envoltorio de subproceso alrededor de Hydra. Analiza la salida estándar para extraer inicios de sesión exitosos, mensajes de error y el veredicto de enumeración propio de Hydra (`does not support user enumeration`).
**`MetasploitScanner`** — Escribe un script de recurso temporal y maneja `msfconsole` mediante subproceso. Analiza la salida para detección de endurecimiento y cualquier nombre de usuario encontrado.
### Herramientas de detección (`src/detection_tools/`)
**`LogParser`** — Analizador de auth.log basado en expresiones regulares que soporta cinco tipos de eventos SSH: `failed_invalid_user`, `failed_valid_user`, `pre_auth_reject`, `accepted`, `disconnected`. Devuelve diccionarios estructurados de eventos con marca de tiempo, tipo de evento, nombre de usuario, IP de origen y puerto.