Teoria del Crackeo de Contrasenas
Teoria del Crackeo de Contrasenas
1. Fundamentos del Crackeo de Contrasenas
1. Que es el Crackeo de Contrasenas
El crackeo de contrasenas (password cracking) es el proceso de recuperar contrasenas a partir de sus versiones hash almacenadas. Se utiliza en penetration testing para evaluar la fortaleza de las politicas de contrasenas de una organizacion y en复原 de contrasenas olvidadas.
1. Por Que Se Usan Hashes
Las contrasenas nunca se almacenan en texto plano por razones de seguridad. En su lugar, se almacenan hash criptograficos:
Contraseña plaintext: "password123"
|
v
Funcion hash
|
v
Hash: ef92b778baafe38920b0a0e6f8a8d0a0e6f8a8d0a0e6f8a8d0a
Cuando un usuario intenta autenticarse, el sistema:
- Aplica la misma funcion hash a la contrasena ingresada
- Compara el resultado con el hash almacenado
- Si coinciden, la autenticacion es exitosa
2. Tipos de Ataques
2.1. Fuerza Bruta (Brute Force)
Prueba todas las combinaciones posibles de caracteres hasta encontrar la contrasena.
Ventajas:
- Garantiza encontrar la contrasena (si hay tiempo suficiente)
- No requiere diccionario previo
Desventajas:
- Extremadamente lento para contrasenas largas
- Impracticable para contrasenas de mas de 8 caracteres
Ejemplo de complejidad:
| Longitud | Caracteres | Combinaciones | Tiempo (10M/seg) |
|---|---|---|---|
| 4 | minusculas | 456,976 | Instantaneo |
| 6 | minusculas | 308 millones | 30 seg |
| 8 | minusculas | 208 mil millones | 6 horas |
| 10 | minusculas | 141 billones | 162 dias |
2.2. Diccionario (Dictionary Attack)
Utiliza una lista predefinida de palabras comunes como contrasenas.
Ventajas:
- Mucho mas rapido que fuerza bruta
- Alta efectividad (mayoria usa contrasenas debiles)
Desventajas:
- No encuentra contrasenas complejas o unikas
Fuentes de diccionarios:
- RockYou (14M contrasenas leaks)
- SecLists (diccionarios especializados)
- Dumps de breaches conocidos
2.3. Hibrido (Hybrid Attack)
Combina diccionario con variaciones (numeros, simbolos, mayusculas).
Ejemplos:
- “password” -> “password1”, “password12”, “PASSWORD”
- “admin” -> “Admin2024”, “adm1n”
2.4. Rainbow Table
Precomputa hash para todas las combinaciones y los guarda en tablas.
Ventajas:
- extremadamente rapido (solo busqueda)
- Reutilizable
Desventajas:
- Requiere mucho almacenamiento
- Vulnerable a salt
3. Funciones Hash
3.1. Propiedades de una Funcion Hash Segura
| Propiedad | Descripcion |
|---|---|
| One-way | No se puede revertir |
| Determinista | Misma entrada = misma salida |
| Disersion | Salidas diferentes para entradas similares |
| Resistente a colisiones | Dificil encontrar dos entradas con mismo hash |
3.2. Funciones Legacy (Debiles)
| Funcion | Problema |
|---|---|
| MD5 | Rupturable (colisiones practicas) |
| SHA-1 | Rupturable (colisiones) |
| LM | Division en mitades, case-insensitive |
| NTLM | Case-insensitive, sin salt |
3.3. Funciones Moderas (Seguras)
| Funcion | Caracteristicas |
|---|---|
| bcrypt | Factor de trabajo adaptativo |
| scrypt | Resistente a GPU/ASIC |
| Argon2 | Memoria intensiva |
| PBKDF2 | Estandar NIST |
3.4. Salt
Un salt es un valor aleatorio unico anadido a cada contraseña antes de hashear:
Sin salt:
password: hash1 = H("password")
password: hash1 = H("password") <- Mismo hash!
Con salt:
password + "x7z": hash1 = H("password" + "x7z")
password + "k9m": hash2 = H("password" + "k9m") <- Diferente!
Por que usar salt:
- Previene rainbow tables
- Evita que contrasenas identicas tengan el mismo hash
- fuerza a calcular hashes para cada usuario
4. Tipos de Hash
4.1. Hashes Unix/Linux
| Tipo | Formato | Descripcion |
|---|---|---|
| DES | xx... |
Legacy, 8 caracteres max |
| MD5 | $1$... |
Legacy Linux |
| SHA-256 | $5$... |
SHA-256 crypt |
| SHA-512 | $6$... |
SHA-512 crypt |
| bcrypt | $2a$... |
bcrypt |
| Argon2 | $argon2i$... |
Argon2 |
4.2. Hashes Windows
| Tipo | Longitud | Descripcion |
|---|---|---|
| LM | 32 chars | Legacy (no usar) |
| NTLM | 32 chars | NT Hash |
Ejemplo LM: e38ad4149434383f6c0c5f2ceaf5c0c5
Ejemplo NTLM: 209c6174da490caeb422f0d7ec7e85a1b
4.3. Hashes de Aplicaciones
| Tipo | Formato ejemplo | Aplicacion |
|---|---|---|
| MD5 | 5f4dcc3b5aa765d61d8327deb882cf99 |
MySQL antiguo |
| MySQL | *c4caa... |
MySQL newer |
| PostgreSQL | md5... |
PostgreSQL |
| Oracle | S:... |
Oracle |
| MSSQL | 0x0100... |
SQL Server |
5. Ataques Especificos
5.1. LM Hash (Windows Legacy)
El hash LM divide la contrasena en dos partes de 7 caracteres:
Contraseña: "PASSWORD"
|
v
Partea 1: "PASSWOR" -> HASH1: 1C3C7A3B5E7...
Partea 2: "D" + padding -> HASH2: 9FFD9E3D4F...
Debilidades:
- Case-insensitive
- Division en mitades permite ataque separado
- Padding debil
5.2. NTLM
Mejora sobre LM:
- Case-sensitive
- No se divide
- Pero sigue sin salt (mismo problema que LM)
5.3. NetNTLM
Usado en red:
- Relay attacks posibles
- Responder/Impacket
5.4. JWT (JSON Web Token)
header.payload.signature
Header: {"alg": "HS256", "typ": "JWT"}
Payload: {"user": "admin", "exp": 1234567890}
Signature: HMAC-SHA256(header.payload, secret)
Ataques:
- None algorithm
- Weak secret (crackear signature)
- Key confusion (RS to HS)
6.wordlists y su Generacion
6.1. Wordlists Populares
| Archivo | Tamano | Descripcion |
|---|---|---|
| rockyou.txt | 14M | Leak de RockYou |
| passwords.txt | 600K | /passwords comunes |
| seclists | Varios | Diccionarios especializados |
6.2. Generacion con Crunch
Crunch genera wordlists basadas en patrones:
# Generar fechas
crunch 8 8 -t "%%%%0102" # Birthday: 0102XXXX
# Generar patrones de empresa
crunch 10 10 -t "Empresa@%" -p "Empresa"
6.3. Reglas
Las reglas transforman palabras base:
# Agregar año al final
$1999$2000$2001
# Mayusculas
u
# Prefijo y sufijo
^test$
7. GPU vs CPU
7.1. Rendimiento Comparativo
| Metodo | Hash/s (MD5) |
|---|---|
| CPU (i7) | 50M |
| GPU (RTX 4090) | 5000M+ |
| GPU Cluster | 10000M+ |
7.2. Hashcat vs John
| Caracteristica | Hashcat | John |
|---|---|---|
| Velocidad GPU | Excelente | Buena |
| Formatos | Muchos | Muchos |
| Reglas | Completas | Simples |
| Facilidad | Media | Alta |
| GPU | Si | Limitado |
Recomendacion:
- GPU: Hashcat
- CPU/legacy: John
- Lo mejor: Combinar ambos
8. Contramedidas
8.1. Para Administradores
- Usar funciones modernas (bcrypt, Argon2)
- Usar salt unico por usuario
- Longitud minima de 12 caracteres
- Politica de bloqueo
- No permitir reuse de contrasenas anteriores
- Autenticacion multifactor
8.2. Detectar Ataques
- Monitorear intentos fallidos
- Rate limiting
- Alertas de actividad suspecta
- No bloquear cuentas (ataque de denegacion)
9. Referencias
- Hashcat Wiki: https://hashcat.net/wiki/
- John the Ripper: https://www.openwall.com/john/
- CrackStation: https://crackstation.net/
- SecLists: https://github.com/danielmiessler/SecLists