Una característica no tan conocida de OpenIndiana y Solaris, es el uso de diccionarios de contraseñas dentro de las opciones de la política de contraseñas.
Por defecto, Solaris no establece ninguna política de contraseñas fuertes, es decir, longitudes mínimas, formato, que no sean igual que el login, etc. Sin embargo, todo esto es configurable.
En esta ocasión, veremos cómo podemos mejorar la seguridad modificando los parámetros de longitud, duración y, por último, utilizaremos un diccionario para que Solaris evalúe la contraseña antes de asignarla.
Algoritmo de Encriptación
En Solaris, el algoritmo de encriptación asignado por defecto era el original de UNIX, que se mantenía por compatibilidad, sin embargo, este algoritmo tenía muchas limitaciones, y a día de hoy, no es nada seguro.
En OpenIndiana, sin embargo, se utiliza el algoritmo SHA256 por defecto para hacer el "hashing" de las contraseñas mucho más seguro.
Asignar un Algoritmo Nuevo
La definición del algoritmo que Solaris u OpenIndiana utilizará para "crypt", se encuentra definido en el archivo </etc/security/policy.conf>, para ello, modificaremos el valor de la propiedad <CRYPT_DEFAULT> y pondremos un valor definido en el archivo de configuración </etc/security/crypt.conf>, veamos un ejemplo.
Vamos a definir que Solaris/OpenIndiana utilice como algoritmo SHA512, que, según el archivo </etc/security/crypt.conf> corresponde con el valor "6", por lo tanto,
root@openzooey:/# cat /etc/security/crypt.confPor último, cambiamos la contraseña de nuestro usuario, en mi caso <webope>
# The algorithm name __unix__ is reserved.
1 crypt_bsdmd5.so.1
2a crypt_bsdbf.so.1
md5 crypt_sunmd5.so.1
5 crypt_sha256.so.1
6 crypt_sha512.so.1
root@openzooey:/# vi /etc/security/policy.conf
...
CRYPT_DEFAULT=6
...
:wq
root@openzooey:/# passwd webope
New Password:
Re-enter new Password:
passwd: password successfully changed for webope
root@openzooey:/# cat /etc/shadow |grep webope
webope:$5$5TGOqra.$WjEbK0J.v.9SjU61cYUrJmtaz3UuHS/FoE.CXApNF05:14920::::::
Longitud Mínima, Historial y Formato de contraseñas
La definición de las propiedades de la contraseña, es decir, longitud, formato, historial, etc. se encuentra definida en el archivo < /etc/default/passwd>.
Vamos a ver cómo podemos hacer nuestra política de contraseñas más segura incluyendo:
- PASSLENGTH. Longitud Mínima, 8
- MINALPHA. Letras, 2
- MINDIGIT. Números, 2
- MINSPECIAL. Caracteres Espaciales, 1
Una cosa importante a tener en cuenta, es que, como en muchas situaciones en Solaris, el usuario <root> puede hacer lo que quiera, y esta es una de ellas.root@openzooey:/# vi /etc/default/passwd:wq
MINALPHA=2
MINDIGIT=2
MINSPECIAL=1
NAMECHECK=YES
PASSLENGTH=8
Me explico, por ejemplo, si he cambiado la política de contraseñas con los valores anteriores, teóricamente no puedo asignar la password <1234> -ya que incumple todas: longitud, digitos, caracteres especiales, etc.
Sin embargo, si yo lo hago con <root> no tendré ningún problema, por ejemplo:
root@openzooey:/# passwd testPero si lo intento con el usuario
New Password: test
Re-enter new Password: test
passwd: password successfully changed for test
root@openzooey:/# su - testUtilizar un Diccionario
OpenIndiana SunOS 5.11 oi_147 September 2010
test@openzooey:~$ passwd test
Enter existing login password: testNew Password: hola
passwd: Password too short - must be at least 8 characters.
Please try again
New Password: ^C
Por último, tenemos la posibilidad de utilizar un diccionario de contraseña para evitar que nuestros usuarios no sean creativos con sus contraseñas, :D.
Deberemos descomentar la opción <DICTIONDBDIR=/var/passwd> del archivo de configuración </etc/default/passwd> para indicarle al comando <passwd> que su diccionario está en </var/passwd>.
Este path es configurable, es decir, podemos asignar el que queramos, sin embargo, </var/passwd> es el path que Solaris utiliza por defecto
Para ello, utilizaremos el comando <mkpwdict> que tiene el siguiente formato:
# mkpwdict -s file1,file2,filen -d destinoDonde file1, file2, filen serán archivos que contienen la lista de palabras sobre las cuales vamos a crear el diccionario, y <destino> el lugar donde lo almacenaremos. Si no ponemos ningún destino, se utilizará el asignado en <DICTIONDBDIR>.
Comprobamos que está descomentada la opción DICTIONDBDIR del archivo </etc/default/passwd>, si no fuese así deberíamos descomentarla.
root@openzooey:/# cat /etc/default/passwd |grep DICTIONDBDIR|grep -v ^#A continuación nos creamos un archivo con las palabras sobre las cuales queremos crear el diccionario, por ejemplo:
DICTIONDBDIR=/var/passwd
root@openzooey:/# vi /tmp/wordsCreamos el diccionario y probamos
rootROOT
testTEST
12345678
qwerty12
abcdefgh
1234abcd
1234ABCD
root@openzooey:/# mkpwdict -s /tmp/words
mkpwdict: using default database location: /var/passwd.
root@openzooey:/# passwd test
New Password: test
Re-enter new Password: test
passwd: password successfully changed for test
root@openzooey:/# su - test
OpenIndiana SunOS 5.11 oi_147 September 2010
test@openzooey:~$ passwd test
Enter existing login password: test
New Password: 1234ABCD
passwd: password is based on a dictionary word.
Please try again
New Password: ^C
Conclusiones
Aunque las versiones de Solaris 10, 9, 8 venían con una configuración muy baja en cuanto a temas de seguridad, en OpenIndiana, y, recientemente en Solaris 11 han mejorado mucho este tema.
Principalmente el algoritmo UNIX ya no es el usado por defecto, además de incluir una longitud mínima, aunque todavía no incluyen un diccionario por defecto.
Espero que con estas pequeñas aclaraciones, podamos mejorar la seguridad de nuestros sistemas Solaris y así hacerlo más "Rock Solid" todavía,
Referencias
No hay comentarios:
Publicar un comentario