Crack

Crack, desarrollado por el experto en seguridad Alec Muffet, es el `adivinador' de contraseñas más utilizado en entornos Unix; actualmente se encuentra en su versión 522.5, que funciona correctamente en la mayoría de clones del sistema operativo (Linux, Solaris, OSF...). Ejecutar periódicamente Crack sobre el fichero de contraseñas de sus sistemas es algo muy recomendable para cualquier administrador mínimamente preocupado por la seguridad, sin importar que se utilicen mecanismos para obligar a los usuarios a elegir passwords aceptables.

Este adivinador realiza una primera pasada sobre el fichero de claves intentando romper contraseñas en base a la información de cada usuario almacenada en el archivo; se trata de unas comprobaciones rápidas pero efectivas, ya que aunque la cantidad de datos del fichero no es muy grande, se trata de información frecuentemente utilizada como password. Tras esta pasada, entran en juego los diccionarios para seguir adivinando contraseñas (un diccionario no es más que un fichero con posibles passwords en él, generalmente uno por línea). El propio programa se distribuye con algunos de estos ficheros, pero es recomendable que se complementen con más diccionarios (existen multitud de ellos disponibles a través de Internet), especialmente con aquellos que contengan palabras que por las características del sistema sean susceptibles de ser usadas como claves; por ejemplo, si estamos en España seguramente nos convendrá utilizar un diccionario con palabras en castellano; si administramos una máquina de un departamento de biología, otro con términos de esta ciencia...incluso si sospechamos que nuestros usuarios son aficionados al deporte, o a la literatura griega antigua, podemos encontrar diccionarios adecuados a estos campos.

Con todos estos diccionarios - los propios y los que cada administrador puede añadir - Crack construye una base de datos con la que empieza a trabajar; la primera pasada utilizando diccionarios consiste simplemente en probar palabras con todas las letras en minúsculas. Posteriormente, se mezclan mayúsculas y minúsculas, y de esta forma se van combinando caracteres hasta añadir números y caracteres alfanuméricos a cada palabra de los diccionarios para comprobar que dicha combinación no es utilizada como contraseña en el sistema. Habitualmente las primeras pasadas son las que más claves son capaces de romper, pero una vez adivinados los passwords más débiles quizás nos interese seguir ejecutando Crack para obtener contraseñas más elaboradas: recordemos que un atacante puede aprovechar la potencia de servidores en los que ha penetrado para ejecutar Crack sobre nuestro fichero de contraseñas durante mucho tiempo, por lo que es posible que `adivine' claves que a priori no son débiles.

Tal y como se explica en su documentación, la forma en que Crack trata de adivinar contraseñas es seguramente la que consigue mayor velocidad; en primer lugar se ordenan y se agrupan las entradas del fichero de passwords en base a su salt (ya comentamos el mecanismo de cifrado a la hora de hablar de autenticación de usuarios). Una vez clasificadas, para cada grupo de salts diferente se selecciona una entrada de diccionario convenientemente tratada (mayúsculas, números...), se cifra utilizando el salt (esto es lo que consume mayor tiempo de CPU) y se compara con la contraseña cifrada de cada miembro del grupo; si coinciden, se ha adivinado un nuevo password.

Para invocar a Crack utilizamos como argumento el fichero de claves a atacar; por ejemplo, imaginemos que en lugar de nuestro /etc/passwd vamos a romper las contraseñas de otra de las máquinas, guardadas en el fichero `maquina':
luisa:/usr/local/c50a# ./Crack maquina
Crack 5.0a: The Password Cracker.
(c) Alec Muffett, 1991, 1992, 1993, 1994, 1995, 1996
System: Linux luisa 2.2.13 #6 Tue Apr 25 03:58:00 CEST 2000 i686 unknown
Home: /usr/local/c50a
Invoked: ./Crack maquina
Stamp: linux-2-unknown

Crack: making utilities in run/bin/linux-2-unknown
find . -name "*~" -print | xargs -n50 rm -f
( cd src; for dir in * ; do ( cd $dir ; make clean ) ; done )
make[1]: Entering directory `/usr/local/c50a/src/lib'
rm -f dawglib.o debug.o rules.o stringlib.o *~
make[1]: Leaving directory `/usr/local/c50a/src/lib'
make[1]: Entering directory `/usr/local/c50a/src/libdes'
/bin/rm -f *.o tags core rpw destest des speed libdes.a .nfs* *.old \
*.bak destest rpw des speed
make[1]: Leaving directory `/usr/local/c50a/src/libdes'
make[1]: Entering directory `/usr/local/c50a/src/util'
rm -f *.o *~
make[1]: Leaving directory `/usr/local/c50a/src/util'
make[1]: Entering directory `/usr/local/c50a/src/lib'
make[1]: `../../run/bin/linux-2-unknown/libc5.a' is up to date.
make[1]: Leaving directory `/usr/local/c50a/src/lib'
make[1]: Entering directory `/usr/local/c50a/src/util'
all made in util
make[1]: Leaving directory `/usr/local/c50a/src/util'
Crack: The dictionaries seem up to date...
Crack: Sorting out and merging feedback, please be patient...
Crack: Merging password files...
Crack: Creating gecos-derived dictionaries
mkgecosd: making non-permuted words dictionary
mkgecosd: making permuted words dictionary
Crack: launching: cracker -kill run/Kluisa.11110   
Done
luisa:/usr/local/c50a#
Tras devolver el control al shell el adivinador estará trabajando en segundo plano:
luisa:/usr/local/c50a# ps   
  PID TTY          TIME CMD
10809 ttyp3    00:00:00 bash
11327 ttyp3    00:00:07 cracker
11330 ttyp3    00:00:00 kickdict <defunct>
11333 ttyp3    00:00:00 ps
luisa:/usr/local/c50a#
Podemos comprobar el estado del ataque en todo momento utilizando la utilidad Reporter:
luisa:/usr/local/c50a# ./Reporter
---- passwords cracked as of Thu May  4 08:05:35 CEST 2000 ----

Guessed josel [beatriz]  Jose Luis,,0, [maquina /bin/ksh]

---- done ----
luisa:/usr/local/c50a#
Y para finalizar la ejecución del adivinador utilizaremos el shellscript plaster:
luisa:/usr/local/c50a# ./scripts/plaster 
+ kill -TERM 11327
+ rm -f run/Kluisa.11110
+ exit 0
luisa:/usr/local/c50a#
Para finalizar el punto, hay que volver a insistir sobre el uso regular de Crack en cada una de las máquinas bajo nuestra responsabilidad; aunque muchos administradores consideran el utilizar este tipo de programas equipararse a un pirata, hemos de pensar siempre que es mejor que las contraseñas débiles las encuentre el root antes que un atacante. Y si el administrador no utiliza un adivinador de este estilo, puede dar por seguro que un pirata no dudará en hacerlo.
© 2002 Antonio Villalón Huerta