Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Practica Crack Contrasenas S O
Practica Crack Contrasenas S O
Noviembre 2014
Práctica Crack de Contraseñas de Sistemas Operativos
Objetivo
Demostrar que una mala implementación de las contraseñas de usuarios pueden poner en
peligro los recursos de una organización.
Objetivos específicos
Analizar el funcionamiento de los servicios de gestión de contraseñas en sistemas
operativos LINUX y Windows, documentar sus fortalezas y sus debilidades.
Investigar sobre los algoritmos de cifrado usados en los gestores de contraseñas.
Llevar a cabo un ataque usando una aplicación de crack (pwdump, cain & Abel, Ophcrack,
etc.), mediante las técnicas de fuerza bruta, diccionario, ataque hibrido, etc.
Realizar un reporte técnico de los experimentos.
Condiciones de la práctica
Dar de alta a los siguientes usuarios y contraseñas, llenar la tabla de resultados:
Datos adjuntos
Tiempo total de las corridas dedicadas al ataque en Windows:
Tiempo total de las corridas dedicadas al ataque en Linux:
Procesador y memoria dedicada en la máquina que realizó el ataque:
Tamaño del diccionario empleado:
2. Marco teórico..............................................................................4
3. Desarrollo..................................................................................12
3.1 Desarrollo crack contraseñas Windows...................................12
3.2 Desarrollo crack contraseñas de Linux....................................21
4. Conclusión.................................................................................30
5. Bibliografía................................................................................30
1. Introducción
En informática una contraseña es una clave que permite el acceso a algún recurso
y que brinda seguridad en las comunicaciones. La contraseña evita el acceso de
usuarios sin autorización y normalmente debe mantenerse en secreto ante
aquellos a quien no se les permite el acceso. En los sistemas informáticos
actuales cada contraseña está ligada a un único usuario por lo que la contraseña
puede ser cambiada o se puede negar el acceso a un usuario sin afectar a los
demás
Anteriormente las contraseñas eran guardadas tal cual en algún archivo de texto
escondido en el sistema. Este método era sumamente inseguro ya que si alguien
averiguaba o encontraba dicho archivo, las contraseñas podían ser vistas
inmediatamente y el equipo así como la información sensible eran vulnerables.
Actualmente, antes de guardar una contraseña, el sistema le aplica una serie de
operaciones matemáticas para convertirla en información imposible de interpretar
a simple vista, es decir codifica o cifra la contraseña.
Formas de almacenar contraseñas
Algunos sistemas almacenan contraseñas como archivos de texto. Si algún
atacante gana acceso al archivo que contienen las contraseñas, entonces todas
estas se encontrarán comprometidas. Si algunos usuarios emplean l diferentes
cuentas, éstas estarán comprometidas de igual manera. Los mejores sistemas
almacenan las contraseñas en una forma de protección criptográfica, así, el
acceso a la contraseña será más difícil para algún espía que haya ganado el
acceso interno al sistema, aunque la validación todavía sigue siendo posible.
Un esquema criptográfico común almacena solamente el texto de la contraseña
codificado, conocido como hash. Cuando un usuario teclea la contraseña en este
tipo de sistema, se genera a partir de la contraseña y mediante un algoritmo el
código hash equivalente para esa contraseña, y si el resultante (hash) coincide
con el valor almacenado, se permite el acceso al usuario.
El texto codificado de la contraseña se crea al aplicar una función criptográfica
usando la contraseña y normalmente, otro valor conocido como salt en inglés.
El salt previene que los atacantes construyan una lista de valores para
contraseñas comunes. Las funciones criptográficas más comunes son
la MD5 y SHA1. Una versión modificada de DESfue utilizada en los primeros
sistemas Unix.
Si la función que almacena la contraseña está bien diseñada, no es
computacionalmente factible revertirla para encontrar el texto directamente. Sin
embargo, si algún atacante gana acceso a los valores (y muchos sistemas no los
protegen adecuadamente), puede usar gran cantidad de herramientas disponibles
para comparar los resultados cifrados de cada palabra dentro de una colección,
como un diccionario. Están ampliamente disponibles largas listas de contraseñas
posibles en muchos lenguajes y las herramientas intentarán diferentes
variaciones, muestran con su existencia la relativa fortaleza de las diferentes
opciones de contraseña en contra de ataques.
Si bien las contraseñas están pensadas para proteger datos y recursos, al mismo
tiempo son la parte más débil de cualquier sistema de seguridad puesto que
deben ser recordadas por humanos y los humanos no somos perfectos. Hay
muchas maneras de averiguar la contraseña de un usuario.
Ataque de fuerza bruta: Consiste en obtener un hash y probar una a una todas
las posibles contraseñas. Imaginemos que tenemos un candado de esos de
bicicletas con una combinación de tres dígitos. Probaremos todas las
combinaciones, una a una, hasta que encontremos la correcta. Pero las
contraseñas informáticas pueden tener letras, números y símbolos, y pueden
contener un gran número de elementos que permiten infinidad de combinaciones,
por lo cual debemos establecer un límite de longitud y los caracteres que
queremos probar (por ejemplo intentar sólo con letras minúsculas y números).
Entre más caracteres y más longitud seleccionemos el proceso será más tardado
porque el número de combinaciones posibles crece exponencialmente, a veces
puede llegar a durar años. Pero si la contraseña es corta y no contiene caracteres
extraños el proceso puede acortarse considerablemente. Es como si la clave del
candado de la bicicleta fuera 001 sólo debemos hacer un intento antes de poder
abrirlo.
Todos conocemos las cuentas de usuario de Windows XP, que nos permiten tener
nuestro escritorio y documentos separados del de los otros usuarios. El problema
de las contraseñas de usuario en Windows XP y versiones anteriores es que por
cada contraseña almacena dos hashes; uno generado por el algoritmo LM y otro
por el NTLM.
Estos algoritmos de cifrado se dice que son unidireccionales ya que una vez
cifrada la contraseña no puede realizarse el proceso inverso, es decir, a partir de
un hash no puede obtenerse la contraseña original.
Es lógico pensar que si se comparan dos hashes en vez de uno, el sistema debe
ser por lo menos el doble de seguro, pero enseguida veremos que no es ni la
mitad de seguro, puesto que el algoritmo LM tiene muchas debilidades. Veamos
de manera general cuál es su algoritmo:
Figura 7: Algoritmo LM
¿Y bien? ¿De qué nos sirve saber todo esto? Hagamos unos cálculos. Hay 26
letras en el abecedario anglosajón, cada letra se puede escribir en mayúscula o
minúscula, además de haber 10 dígitos (del 0 al 9), y digamos 32 símbolos (!@#$
%^&*()-_+=~`[]{}|\:;"'<>,.?/). Si quisiéramos tener una contraseña de un solo
carácter tendríamos 94 posibles contraseñas (26 mayúsculas + 26 minúsculas +
10 dígitos +32 símbolos). Para una contraseña de 14 caracteres tendríamos que
elevar 94 a la 14, con la ayuda de una calculadora obtenemos un numerote de
más de ¡4 mil cuatrillones de posibles contraseñas! Una PC casera
moderadamente rápida puede codificar 4 millones de contraseñas por segundo. Si
hiciéramos un ataque de fuerza bruta, ayudándonos de nuestra calculadora (y si
no fallan mis cálculos), podríamos tardar hasta ¡33 billones de años! es decir 33
millones de millones de años, lo cual es una eternidad.
¿Pero qué pasa con el algoritmo LM? Que sólo permite 26 letras posibles (porque
no hay minúsculas) más los números y símbolos. Además de que divide la
contraseña en dos partes de 7 caracteres, así que no importa que tu contraseña
sea de 14 caracteres porque es como si tuvieras dos contraseñas de 7. Si
quisiéramos tener una contraseña de un solo carácter tendríamos tan solo 68
opciones posibles. Con una contraseña de 7 caracteres tenemos tan solo 6
billones de posibles contraseñas, lo cual se queda corto contra los 4 mil
cuatrillones. Si calculamos el tiempo máximo que nos llevaría encontrar la
contraseña por fuerza bruta serían más o menos 20 días, lo cual comparado con
33 mil millones de años, no es nada.
Al poner una contraseña a un usuario, una función hash la cifra con el algoritmo
determinado según sea el cifrado. Toma un bloque arbitrario de datos y devuelve una
cadena con una determinada longitud (valor hash). Los datos para ser codificados son
denominados “el mensaje” y el valor hash se le denomina “message digest” o
simplemente “digest”.
En términos de cifrado hay varios algoritmos (de cifrado seguro) hash usados, $6$
indica en qué tipo de hash está mi contraseña cifrada, en este caso se trata de
SHA-512, (Secure Hash Algorithm) y por lo tanto tiene 86 caracteres en total.
RC4
RC5
SKIPJACK
El algoritmo DES usa una clave simétrica de 64bits, los 56 primeros bits son
empleados para el cifrado, y los 8 bits restantes se usan para comprobación de
errores durante el proceso. La clave efectiva es de 56 bits, por lo que la fuerza
bruta se hace casi imposible.
Se basa en aplicar el algoritmo DES tres veces, la clave tiene una longitud de 128
bits. Si se cifra el mismo bloque de datos dos veces con dos llaves diferentes (de
64 bits), aumenta el tamaño de la clave.
El 3DES parte de una llave de 128 bits, que es divida en dos llaves, A y B.
Los más conocidos y usados son MD5 y el SHA-1. Son algoritmos que a partir de
un bloque de entrada, generan otro bloque de salida de una longitud fija
determinada.
MD4
MD4 es un algoritmo de resumen del mensaje (el cuarto en la serie) diseñado por
el profesor Ronald Rivest del MIT. Implementa una función criptográfica de hash
para el uso en comprobaciones de integridad de mensajes. La longitud del
resumen es de 128 bits.
- Características del Equipo: Toshiba Satellite c845 Core I3, 4GB RAM,
HDD 500GB.
- Sistema operativo instalado: Windows XP SP3
- Herramienta Livecd: Distribución Kali Linux 64bits
- Herramientas para crackear la base de datos SAM: Bkhive, samdump2 y
John the ripper
- Diccionario rockyou.txt de tamaño 130 MB, diccionario que trae por default
kali linux
Contamos con nuestro sistema operativo Windows en el cual crearemos las ocho
cuentas de usuario con su respectiva contraseña que ha sido establecida al inicio
del documento.
Para saltar el cifrado Syskey, primero debemos extraer el syskey del registro y
luego usar esa misma clave para descifrar el archivo SAM. Para realizar este
primer paso vamos utilizar una herramienta llamada Bkhive. Y continuación
extraeremos el hash del archivo SAM, para esto utilizaremos Samdump2
10.- cd /root // Cambiamos el directorio a root porque ahí pusimos los archivos
hive y hash
11.- ls –l *.txt //Listamos los archivos que terminen en txt de ese directorio
12.- file *.txt // Determinamos el tipo de archivo de cada uno de los .txt
encontrados vemos que hash es ASCII y hive es (DoS Executable ROM)
13.- cat hash.txt // Vemos los contenidos del archivo hash.txt donde podemos
evidenciar nuestros usuarios con su hash correspondiente a la derecha.
Ahora tenemos que utilizar la herramienta que nos falta john the ripper para
conseguir la clave, por defecto utiliza el método por fuerza bruta.
Figura 5: Obtención de las primeras cuatro contraseñas del sistema operativo windows
Figura 6: Obtención de contraseña cinco e inicio de seis
Para la última contraseña haremos uso del diccionario editamos el diccionario que
se encuentra en la ruta /home/usr/share/wordlist y editaremos el diccionario que
utiliza por defecto “rockyou”. Agregamos la contraseña que hemos adquirido por
ingeniería social “airAd” y comenzamos a ejecutar John en la terminal.
Figura 9: Anexo a nuestro diccionario de la contraseña airAd obtenida por ingeniería social
Figura 10: obtención de contraseña ocho por diccionario
Resultados
Experimento
Cuando nos sale eso, quiere decir que nuestra versión de John the Ripper se
encuentra instalada, procedemos a lo siguiente. Linux guarda sus usuarios y
contraseñas en dos únicos archivos, que se encuentran ubicados en /etc, estos
archivos son llamado shadow y passwd, en el primero están los usuarios y en el
segundo archivo estan las contraseñas, lo primero que vamos a hacer es extraer
estos dos archivos y guardarlos en el directorio donde los vamos a ocupar, para
este caso en /home, en la siguiente imagen podemos ver estos archivos.
Figura 7 ejecutando John the ripper con el archivo que generamos del comando unshadow
Figura 10 Utilizando Diccionario rockyou.txt, después de haber utilizado lower unido con passwords sin
haber encontrado ninguna contraseña
Figura 13 Intentos para encontrar las contraseñas de los usuarios seis y siete, no obteniendo éxito
El uso de jonh the ripper no siempre encuentra las contraseñas, como podemos
ver dos contraseñas son las que no fue capaz de encontrarlas, ni por fuerza bruta
ni por diccionario, de esta manera terminamos la práctica y con los siguientes
tiempos, tomando en cuenta que fueron 5 corridas del programa, en donde 3 son
con fuerza bruta, en dos de ellas termino en menor tiempo con un error fatal y en
la última más tardada de 18 horas, no encontró las contraseñas de alto nivel.
Resultados
5. Bibliografía
http://www.seguridad.unam.mx/usuario-casero/eduteca/main.dsc?id=185
http://www.academiaslinux.com/2013/10/la-base-de-datos-de-usuarios-de-gnulinux.html
http://www.nexolinux.com/ficheros-de-usuarios-etcpasswd-y-etcshadow/
http://www.dragonjar.org/como-funcionan-y-se-crackean-las-claves-en-sistemas-windows.xhtml
http://ns2.elhacker.net/Contrasenas-Windows-XP.pdf
https://www.academia.edu/9007927/Hands_on_Lab_de_Password_Cracking
http://www.binarytides.com/cracking-linux-password-with-john-the-ripper-tutorial/
http://www.openwall.com/john/doc/EXAMPLES.shtml