Hola otra vez! Estaba esperando que se logueen...
En esta entrada me gustaría hablar un poco de esas palabras secretas que mantienen nuestra información (in)segura. Esas palabras que permiten que los sistemas nos reconozcan, que digan, si! es ese usuario. Esas palabras que nos generan dolor de cabeza cuando las olvidamos (y mas con todas las cuentas en diferentes servicios que tenemos). Esas palabras secretas que algunos llaman password, otros clave y otros, "algo que averiguar". Vamos a ver como construir un password fuerte, algo sencillo de recordar pero dificil de obtener mediante fuerza bruta o diccionarios. Luego, en la segunda parte nos pondremos del lado del atacante y probaremos con toda la artilleria para ver si conseguimos algo. Bienvenidos, esto es..."Password 101"
Es muy comun a la hora de realizar una auditoría de sistemas encontrar passwords como "12345678" o "rosa23". Utilizar una secuencia numérica o nuestro nombre, o nuestro nombre y la edad son las primeras cosas que debemos evitar a la hora de elegir una clave. Una vez mas vemos que el usuario es el eslabón mas débil en la cadena de la seguridad de la informática. Debemos capacitar a los usuarios de la organización para que eviten cosas como las vistas arriba, para que no dejen sus claves en archivos sin cifrar o pegadas con post-it en los monitores, para que eviten el shoulder surfing , para que no divulguen sus claves y mucho menos que lo hagan a los gritos (como mi vecino).
Que hace que un password sea fuerte?
La longitud
La elección de los caracteres
La relación del password conmigo (si elijo palabras relacionadas con mis datos, gustos o con gente cercana será mas sencillo para otro adivinarla).
Como ya todos sabemos, mientras mas larga sea la contraseña mas largo va a ser el tiempo de procesamiento para una máquina que quiera obtener nuestra clave por fuerza bruta.
Que siginifica obtener claves por fuerza bruta?
La fuerza bruta, informáticamente hablando, consiste en probar claves al azar mediante software. Al realizar fuerza bruta hay programas que nos dejan elegir a partir de que longitud de clave queremos comenzar. Todo esto lo veremos mas adelante con ejemplos para comprenderlo mejor.
La elección de los caracteres es muy importante, puede parecer algo obvio pero vale la pena resaltarlo. Por que es mejor elegir un ! antes que una A?.
En el idioma Español se ha comprobado que las letras tienen la siguiente probabilidad de aparición:
Letra Porcentaje
A 12,53
B 1,42
C 4,68
D 5,86
E 13,68
F 0,69
G 1,01
H 0,70
I 6,25
J 0,44
K 0,01
L 4,97
M 3,15
N 6,71
Ñ 0,31
O 8,68
P 2,51
Q 0,88
R 6,87
S 7,98
T 4,63
U 3,93
V 0,90
W 0,02
X 0,22
Y 0,90
Z 0,52
Ordenadas de mayor a menor frecuencia de aparición obtenemos: E A O S R N I D L C T U M P B G V Y Q H F Z J Ñ X W K
A partir de los datos anteriores, se puede decir que:
- Las vocales ocuparán alrededor del 45% del texto.
- La E y la A son identificables fácilmente dado su porcentaje de aparición.
- Las consonantes más frecuentes son: S,R,N,D,L,C (aparecen con una frecuencia de un 37%)
- Las seis letras menos frecuentes son: Z,J,Ñ,X,W,K (sumadas tienen una frecuencia que apenas supera el 1,5%)
Esto nos lleva directamente al concepto de "ENTROPÍA"
Recordando lo que contaba mi profesor de COMUNICACIONES hablando sobre TEORÍA DE LA INFORMACIÓN puedo decir que la ENTROPIA nos mide la incertidumbre de una fuente de información. Nos dice la cantidad de información promedio que contienen los simbolos utilizados. Con la entropía podemos determinar la cantidad de información que nos aporta una fuente. Así por ejemplo, una palabra como "de" o "es" que aparece muy seguido en un texto (mas probabilidad de aparición) nos da una entropía mayor, y por ende no nos aporta mucha información.
Claude E. Shannon definió la entropía como:
Donde H es la entropía, p es la probabilidad de aparición de un simbolo y n la cantidad de simbolos.
Entonces, supongamos que tomamos la clave AAA, nos da una entropía de 137,10
La palabra ALE nos da una entropía de 108,81
La palabra ALE nos da una entropía de 108,81
Ahora probemos con XXX, esto nos arroja un valor de 1,44 (ojo, que elijamos XXX nos da una entropía baja pero estamos repitiendo los caracteres)
Con esto deducimos que a menor probabilidad de aparición de un simbolo dado, menor es la entropía.
Con esto deducimos que a menor probabilidad de aparición de un simbolo dado, menor es la entropía.
Si lo aplicamos a un password vamos a querer que la entropia sea baja (osea que la palabra elegida sea poco frecuente). Esto lo logramos eligiendo por ejemplo letras con menor probabilidad de aparición en el idioma (para el caso que alguien quiera adivinar nuestra clave) o caracteres especiales.
Esto nos puede ayudar a evitar que alguien obtenga nuestro password mediante el uso de diccionarios. Los diccionarios son archivos que contienen palabras (mas que nada comunes) que se pueden utilizar para probar claves. Tambien veremos un ejemplo de esto en la parte II.
Al momento de generar una clave debemos tener en cuenta estos factores, pero además necesitamos algo que podamos recordar facilmente, ya que de nada me sirve si utilizo por ejemplo: KD3RxE5!E$%P$+R. Probablemente sea dificil de "adivinar", pero muy dificil de recordar.
Según las buenas prácticas y teniendo en cuenta todo lo visto, la clave se debe armar de la siguiente forma:
1. Elegir una frase facil de recordar (si la frase contiene palabras raras mejor):
Por ejemplo, "Un gran poder conlleva una gran responsabilidad"
Si elegimos una frase en otro idioma tambien estamos contribuyendo a bajar la entropia dado que un atacante primero buscará, en la mayoría de los casos, con palabras que esten en nuestro idioma.
2. Tomar la primera letra de cada palabra:
ugpcugr
3. Cambiar algunas letras a mayúscula (esta opción no es muy recomendable porque corremos el riesgo de olvidar que caracteres estaban en mayúscula, lo ideal sería cambiar uno o dos caracteres):
uGpcUgr
4. Cambiar vocales por numeros o agregarlos al final:
uGpcUgr182
5. Sustituir algunas letras por caracteres especiales o agregarlos al principio o fin:
$uGpcUgr182
Bastante fuerte no?
Consejos:
-No utilizar la misma clave para todos los servicios, dado que si un atacante consigue descubrir nuestro password para un servicio, luego podrá tener acceso al resto de ellos.
-Para que un usuario acceda por primera vez a su cuenta, se debe generar una clave aleatoria (que nadie debe ver, n siquiera los administradores) la cual debe ser cambiada obligatoriamente por el usuario luego del primer acceso.
-Los administradores del sistema deben programar el mismo para que las claves deban ser modificadas por los usuarios cada 60 o 90 dias, obligando a generar claves nuevas, evitando el acceso de algun atacante que ya posea una clave (lo haremos que trabaje otra vez jeje).
Bueno, hasta acá llegamos con la construcción de passwords. En la próxima entrada vamos a ver la parte interesante, tratar de encontrarlos! Veremos un poco de fuerza bruta con Bruter para Windows, el uso de Diccionarios con Hydra en Linux y crearemos nuestros propios diccionarios basandonos en información obtenida de los usuarios.
Y vos, ya comprobaste la fuerza de tu password?
https://howsecureismypassword.net/
WARNING! Si lo van a probar, no ingresen con su clave, prueben con una similar (Gracias Agus por hacerme recordar). Incluso en la misma página de howsecureismypassword nos recomiendan no andar ingresando nuestro pass en cualquier lado.
Hasta la próxima,
HAPPY HACKING!!!