Crackear Passwords en Unix

Por Zebal



Introducción.

Para entrar en sistemas Unix se necesita un username y un password, y qué mejor lugar para conseguirlos que en un /etc/password :-) Este es el fichero que en Unix contiene la lista de los usernames y los passwords, asi como otra información asociada a cada username... El problema es que los passwords están ecriptados. Veamos la pinta que tiene un fichero de estos: Como veis, cada linea del fichero corresponde a un usuario, y contiene, por orden, el username, el password encriptado, el user_id, el group_id, el nombre real, el directorio en el que está su cuenta y el shell que se carga al inicio... El formato puede variar un poco, pero básicamente es éste. Como veis, cada campo está separado por ":" del anterior y del siguiente. En algunas líneas, el campo password es "*". Este password encriptado es inválido, o sea, no se corresponde con ningún password; por tanto, las cuentas que tienen alguna "*" en el campo password son cuentas a las que no podreis entrar. Otro detalle a considerar son los usuarios cuyo user_id es "0", como el ROOT. Estos usuarios son ROOT a todos los efectos, o sea, tienen los mismos derechos que el ROOT. Como podeis ver, "user3" tiene user_id=0, o sea, es ROOT. Los usuarios que sin tener el user_id=0 tienen el mismo group_id que el ROOT, también tienen algunos privilegios por el hecho de pertenecer al grupo del ROOT.

Bien, ahora hay que desencriptar los passwords. El problema es que el mecanismo de encriptación de Unix no es reversible, esto es, no se puede desencriptar. Entonces... ¿cómo lo hace el LOGIN para comprobar si el password que le pones es el correcto? Pues lo que hace es encriptarlo y comparar el password encriptado con lo que hay en el fichero... Si coincide es que el password que has puesto es el password del fichero desencriptado. La forma de atacar un fichero de passwords de Unix es precisamente la misma que usa el LOGIN para verificar un password. Lo que se hace es encriptar muuuuchas palabras y comprobar cada una de ellas si coincide con el password encriptado. Si coincide, ya tenemos un password, y si no, probamos la siguiente palabra. Para hacer esto necesitamos tres cosas: una lista de palabras a probar, una lista con los passwords encriptados y un programa que haga las pruebas.


Paso 1: Conseguir listas de palabras.

Se imaginativo. Puedes hacerte tus propias listas de palabras con nombres, apellidos, deportistas, colores, números, meses, dias de la semana, insultos, empresas, nombres de servidores, y cualquier otra cosa que se te ocurra que alguien puede haber puesto como password en el sistema que estas intentando hackear. Además, puedes encontrar en internet listas de palabras a punto para que pruebes. Uno de los sitios más interesantes para obtener listas de palabras es ftp://sable.ox.ac.uk/pub/wordlists/. Hay montones de listas de palabras, pero es un poco lento. Afortunadamente hay un mirror de este servidor en España, en ftp://sun.rediris.es/mirror/sable/wordlists/, y éste va mucho más rápido, sobretodo si tu conexión a Internet es desde dentro de la red española. De todas formas, siempre puedes buscar en el Yahoo o en el Lycos por "dictionar" o por "wordlist" y aparecerán montones de sites con las mismas listas. Un buen truco es probar con los nombres y apellidos de los usuarios del sistema que estais intentado crackear... Hay muchííííísima gente que se pone de password el apellido, el nombre, o el nombre de la novia, así que una lista con los nombres y apellidos de los usuarios es una buena garantía de obtener passwords. Otra cosa que suele ser habitual como password es el username. También mucha gente se pone el username de password. Así que una buena recomendación es que extraigais todas las palabras del fichero de passwords que vais a crackear y las probeis como password. Para extraer todas las palabras de un fichero hay bastantes utilidades, algunas de las cuales incluso se distribuyen en el mismo paquete que el crackeador. No creo que os cueste demasiado localizar alguna utilidad para extraer los nombres, los apellidos y los usernames de los usuarios en un fichero /etc/passwd. Incluso hay utilidades sueltas cuya única función es la de tratar listas de palabras...


Paso 2: Conseguir la lista de passwords.

Esto es algo más complicado. Si teneis una cuenta en el sistema que vais a hackear siempre podeis hacer un "cat /etc/passwd". Si no tienen Shadow Passwords o NIS aparecerá una lista como la que habeis visto al principio. Sino, aparecerá algo similar a esto: donde el password será algo como "*", o "x" o cualquier cosa que contenga un "*" como "*NOPASSWORD*". En este caso el fichero "/etc/passwd" no contiene nada útil, ya que está instalado Shadow Passwords o NIS. Entonces, podeis provar de hacer un "ypcat /etc/passwd". Con esto probablemente obtendreis por pantalla la lista real de passwords. En caso de que no tengais privilegios para ejecutar el "ypcat", o en caso de que el "ypcat" no esté o por si acaso lo que aparece al ejecutar el "ypcat" vuelve a ser basura otra vez, tendreis que recurrir a otros programas para obtener los passwords. Os recomiendo el PWGET. Lo podreis encontrar en muchos sitios de internet. Buscad PWGET.TAR.GZ o PWGET.TGZ en cualquier archie, o en el lycos, o en el yahoo. Seguro que lo encontrais. Una vez lo teneis, solo hay que subirlo al servidor que quereis hackear, descomprimirlo ("gzip -d -f PWGET.TGZ"), desarquearlo ("tar -x -f PWGET.TAR"), compilarlo ("cc -o pwget pwget.c"), y ejecutarlo ("./pwget"), con lo que obtendreis por pantalla la lista de passwords. Si quereis la lista en un fichero, solo teneis que redireccionar la salida de la pantalla a un fichero: es decir, como redireccionariais la salida bajo DOS... Ahora para bajaros el fichero podeis usar el FTP o el Kermit o el ZModem/Ymodem/Xmodem. Para bajar el fichero vía Kermit o Zmodem necesitareis que vuestro programa de telnet soporte esos protocolos (como el NetTerm), y que la máquina Unix en la que estais también los soporte (o sea, tenga los programas instalados). El programa de Kermit suele estar en casi todos los sitios: aunque podeis usar el ZModem, si es que está instalado:

Paso 3: Petar la lista de passwords.

Ahora que ya teneis la lista de passwords y unas cuantas listas de palabras falta un programa que encripte las palabras y las compare con los passwords encriptados del fichero de passwords. Para ello hay muchos programas que podeis usar. Ahora comentaré brevemente las características de los programas (y sus nombres, para que los podais buscar por la red), pero antes quiero dar algunos truquillos para que consigais passwords en menos tiempo. Petadores: Aquí teneis una comparativa de estos petadores, en la misma máquina y con los mismos ficheros de passwords y de palabras. Algunos de ellos tardaban demasiado, y aborté el proceso de petar passwords. En estos casos, calculé el tiempo estimado que tardarían en acabar en función del tiempo que llevaban (1 hora) y las palabras que habían provado hasta el momento. Estos son los resultados, ordenados por velocidad:
 
Cracker Tiempo Comparaciones
por Segundo
Observaciones
John the ripper 1.4 6'15'' 26667c/s .
John the ripper 1.31 6'30'' 25641c/s .
John the ripper 1.0 8'05'' 20619c/s .
Star Crack 0.64ß 9'15'' 18018c/s .
Star Crack 0.51ß 11'25'' 14599c/s .
Cracker Jack 1.4 13'33'' 12300c/s .
Cracker Jack 1.3 386 14'55'' 11173c/s .
Cracker Jack 1.3 8086 22'22'' 7452c/s .
Hades 1.00a 47'05'' 3540c/s .
Brute 2.00 (est)59'54'' 2782c/s .
PCUPC 2.01 (est)135'37'' 1229c/s Sólo soporta ficheros de passwords
de menos de 500 linias.
Guess 2.1 (est)141'58'' 1174c/s Sólo soporta ficheros de passwords de menos
de 1000 linias.
Killer Cracker 9.5 (est)151'12'' 1105c/s Sólo soporta ficheros de passwords
de menos de 1000 linias.
Xit 2.0 (est)195'37'' 852c/s .
Hellfire Cracker 1.3 infinito 0c/s Se colgó y no pudo ser provado.

Este test fue realizado en un Pentium 133, con 16 Mb de RAM, con los datos en el disco duro, con una cache de lectura de 2 Mb y sin hacer ningún preprocesado en el fichero de passwords ni en el de palabras. El fichero de palabras contenia 10000 palabras y el de passwords 1000 passwords. Tenian que encontrar 554 passwords.
Algunos de ellos no los dejé acabar ya que tardaban demasiado y estimé el tiempo en función de lo que habían crackeado hasta el momento de pararlos, por lo tanto no sé si hubieran encontrado todos los passwords. Sólo los he incluido en la comparativa por si alguno de vosotros los usa, para que vea que hay cosas mejores.

Como se puede ver, el John the ripper encripta casi el doble de passwords por segundo que el Cracker Jack. He de reconocer que el fichero con el que hize la prueba parece ser especialmente adecuado para el John the ripper, ya que 20000c/s no se consiguen habitualmente. De todas formas, la comparativa es significativa de la velocidad a la que se petan passwords con cada uno de los programas.


Espero que con esta mini-introducción al arte de petar passwords en Unix podais pasar un buen rato; y espero no haberos aburrido demasiado. Si teneis alguna duda/comentario/sugerencia/crítica-destructiva, podeis enviar un e-mail a z3b4l@iname.com. Saludos! ;-)
 
 



(C) 1997-2001 by !Hispahack
Para ver el web en las mejores condiciones, usa una resolución de 800x600 y Netscape Navigator