martes, 30 de abril de 2019

Ataques por fuerza bruta ¡tu contraseña será mía!


En criptografía, un ataque por fuerza bruta es la forma de recuperar una clave probando todas las combinaciones posibles hasta encontrar aquella que permite el acceso a un sistema informático o a unos datos encriptados.

El concepto más a detalle:
Es el procedimiento por el cual a partir del conocimiento del algoritmo de cifrado empleado y de un par texto claro/texto cifrado, se realiza el cifrado (respectivamente, descifrado) de uno de los miembros del par con cada una de las posibles combinaciones de clave, hasta obtener el otro miembro del par. El esfuerzo requerido para que la búsqueda sea exitosa con probabilidad mejor que la par será   operaciones, donde n es la longitud de la clave (también conocido como el espacio de claves). Fuente: Wikipedia.
¿Qué tan efectivos son los Ataques de Fuerza Bruta?.

Su efectividad varía dependiendo de dos de factores; Tiempo y tenacidad, el proceso para lograr descifrar una contraseña puede llevar una extensa cantidad de tiempo para que llegue a ser exitoso.

Esto quiere decir que un hacker puede durar desde unos minutos hasta posiblemente años para lograr descifrar una contraseña todo esto depende de la longitud y complejidad de la misma. Sin embargo un ataque de fuerza bruta tiene diferentes extrategías para ser ejecutado.

¿Cómo puedo evitar que descifren mi contraseña?.

Para evitar o mitigar un posible acceso a nuestros datos debemos tener una contraseña que sobrepase los 8 digitos y que incluya caracteres alfanuméricos y signos especiales, la misma cambiarla cada cierto tiempo pro ejemplo cada 90 días máximo y que no incluya parcialmente informaciones personales en la construcción de la misma ya que es lo primero que un hacker probaría.

Ataque de Fuerza Bruta, Ataque de Diccionario y Ataque de Tabla Arcoiris.
  1. Ataque diccionario: Por una parte, encontramos los ataques de diccionario. Su lógica es sencilla: Consiste en probar todas las palabras del diccionario. Aunque pareciera mucho trabajo por hacer, la verdad es que suele ser más eficaz que un ataque de fuerza bruta porque muchos usuarios emplean una palabra en su idioma que puedan recordar con más facilidad.
  2. Ataque tabla arcoiris: Parten del valor hash para reproducir los pasos de la cadena hasta obtener la contraseña. Sin embargo, muchas veces el valor no se encuentra en la tabla; por lo que se recrea al reducir el valor con la misma función con la cual se creó la cadena. Este procedimiento se repite hasta conseguir el valor resumen en un punto final. Ahora bien, eso no significa que se ha encontrado la contraseña, sino la cadena de caracteres que al final; terminará revelando el texto plano que compone la contraseña. Se les llaman Tablas Arcoiris porque se asigna un color distinto a cada reducción para evitar confusiones. Al final son tantas las reducciones con sus respectivos colores, que termina por parecer un arcoiris.
  3. Ataque por fuerza bruta: Que consiste en probar todas las combinaciones posibles.
¿Los 3 tipos de ataques se pueden combinar?.

La respuesta es si los ataques de diccionario y arcoiriris pueden complementar el ataque por fuerza bruta para tener mejores resultados en el menor tiempo posible.

Protección en los mecanismos de contraseña contra Ataques de Fuerza Bruta.

Esta protección se realiza con miras a dificultar los ataques de fuerza bruta. Por ejemplo, si el usuario introduce una clave equivocada deberá esperar un corto tiempo antes de intentarlo de nuevo. Esta medida es exponencial, es decir, se va incrementando el lapso de tiempo de espera a medida que se repiten los intentos fallidos. Otra medida drástica es bloquear la cuenta al X número de intentos fallidos, y lanzar una alarma vía inbox en la cuenta asociada.

- Autenticación multifactor.

Muchos sistemas u proveedores de servicio implementan esto para aumentar la dificultad que puedan descifrar o acceder a los datos del usuario o persona.

¿Es necesario hardware especial para ello?.

No necesariamente pero disminuye el tiempo empleado para el ataque en gran medida si se dispone de gran cantidad de recursos de hardware para ello.

Software (Herramientas) para el ataque por fuerza bruta:


Si te gusto esta entrada no dudes en realizar un donativo entrando en la sección de Ayúdame

domingo, 28 de abril de 2019

Cómo crear un disco ó partición encriptada con dm-crypt ¡A prueba de tanques!


¿Qué es dm-crypt?.
 Es un subsistema de cifrado de discos que provee cifrado transparente de dispositivos de bloque utilizando la utilidad cryptoapi del kernel de Linux 2.6. Las escrituras a este dispositivo serán cifradas y las lecturas descifradas. Se podrá montar un sistema de archivos en el mismo de la manera habitual, pero no se podrán acceder los datos sin la clave.
Básicamente realiza lo mismo que cryptoloop, pero posee modos más avanzados de operación, es más adecuado para satisfacer la necesidad de un dispositivo de bloque, y tiene una interfaz de configuración más flexible. El formato on-disk también es compatible.
En Microsoft Windows, los discos cifrados con dm-crypt pueden ser utilizados con FreeOTFE.
     Fuente: Wikipedia.
Creando la unidad o disco encriptado:

Para el ejemplo de como crear una unidad o disco encriptado se usará como base el sistema Operativo Universal Debian GNU/Linux en su versión 8.x aplicable a versiones posteriores.

Lo es verificar si esta disponible en los repositorios con el siguiente comando:

apt-cache search cryptsetup
   
Mostrará lo siguiente:

cryptmount - Management of encrypted file systems
cryptsetup - disk encryption support - startup scripts
cryptsetup-bin - disk encryption support - command line tools
libcryptsetup-dev - disk encryption support - development files
libcryptsetup4 - disk encryption support - shared library
udisks - storage media interface
udisks2 - D-Bus service to access and manipulate storage devices

Como vemos que el paquete esta disponible procedemos a instalarlo con:

apt-get install cryptsetup

Para crear la partición cifrada, se deben ejecutar los siguientes pasos:

Ejecutar cryptsetup en la partición, lo cual crea un dispositivo de mapeo con target crypt.

Crear el sistema de archivos en el nuevo dispositivo.

Montar del nuevo dispositivo.

En el siguiente ejemplo se transformará el volumen físico /dev/sda3z en el volumen lógico (cifrado) en /dev/mapper/privado (en este caso "privado" es la etiqueta del dispositivo descifrado) y se montará en /var/privado.

Para crear el volumen lógico con la librería cryptsetup:

cryptsetup -y create privado /dev/sda3

El parámetro "-y" fuerza al usuario a ingresar dos veces la clave a utilizar.

O crear el volumen lógico con el script cryptsetup que incluye en Debian el paquete hashalot http://packages.debian.org/unstable/utils/hashalot.

cryptsetup -c aes -h ripemd160 -s 32 create privado /dev/sda3

Para confirmar que se haya ejecutado correctamente:

dmsetup ls privado (254, 0)

Crear el sistema de archivos:

mkfs.ext3 /dev/mapper/privado

Montar el sistema de archivos:

mount /dev/mapper/privado /var/privado

Esto es aplicable a una partición que ocupe todo el disco.


Si te gusto esta entrada no dudes en realizar un donativo entrando en la sección de Ayúdame.

viernes, 19 de abril de 2019

Recuperando contraseña con HashCat ¡El gato maligno!


¿Qué es hashcat?.

Es una aplicación o software creado para recuperar contraseñas a partir del hash.

¿Cómo funciona?.

No es más que un una aplicación que usa diferentes tipos de ataques para lograr descifrar una contraseña los cuales son:
  1. Diccionario de claves.
  2. Ataque combinado.
  3. Fuerza bruta.
  4. Ataque Híbrido.
Ejemplo de como usarlo tomado de (www.securityartwork.es):

Siendo hashcat la herramienta más efectiva para el cracking de contraseñas se aplicarán una serie de métodos para este fin.

Algo que debemos tomar en cuenta es el tiempo que tenemos disponible para ello ya que estos ataques suelen durar bastante tiempo por eso de debe tomar el ataque que más se amolde a ello, una de las cosas que se debe hacer es planificar en base al tiempo que disponemos, la tipología de las contraseñas en esto incide mucho el idioma y el país haspectos como edad promedio de la población todo esta información nos ayudará mucho para saber el contexto sobre el cual se hará el ataque.

Para este ejemplo se buscará contraseñas de hasta un máximo de 12 caracteres que empiecen por nombre seguido de la fecha de nacimiento, usando distintas opciones disponibles en hashcat.

Comenzaremos obviamente teniendo en cuenta de que ya se tiene hashcat instalado en nuestro equipo y que se tiene un hashdump.txt resultado de una auditoria de equipos windows X obtenidas  mediante la herramienta hashdump el cual tiene el siguiente formato:

user1:7362:aad3b435b51404eeaad3b435b51404ee:b562d5031359813a06914d562d421acd:::
user2:7787:aad3b435b51404eeaad3b435b51404ee:3b7a5bb9f8a12f74dadb7adf740cf7c1:::
user3:7788:aad3b435b51404eeaad3b435b51404ee:2501dd5aa075d4854559a5ee023df798:::
user4:7789:aad3b435b51404eeaad3b435b51404ee:11cdb1cb2b21aba701d1113fcf6e3c4f:::
user5:7790:aad3b435b51404eeaad3b435b51404ee:722ab3c822cb6a49bf89830bb5ffaea9:::
user6:7800:aad3b435b51404eeaad3b435b51404ee:79aff34e34c1fa16fffc7c6765e23636:::
user7:7801:aad3b435b51404eeaad3b435b51404ee:73366d77424b259794cac80f4e3fc8c9:::
user8:7803:aad3b435b51404eeaad3b435b51404ee:e2ad4eff06322cf9240ab93288fda61c:::

El formato de cada línea por campos separados por ':'.

(Usuario):(SID):(hash LM):(hashNTLM):::

Como  se puede observar, el tercer campo (hash en formato LM) es siempre el mismo para todas las entradas (aad3b435b51404eeaad3b435b51404ee). Este hash corresponde con el hash LM de la cadena vacía, e indica que el sistema de donde hemos obtenido la tiene deshabilitado los hashes LM (deshabilitado por defecto a partir del Windows Vista), por lo que nos centraremos en el cuarto campo (hash NTLM).

- Fuerza bruta:

Lo primero que haremos crear un archivo ntlm.hp que contenga únicamente ese campo, mediante cualquier herramienta que nos lo permita, por ejemplo AWK:

awk –F’:’ ‘{print $4 >> ntlm.hp}’ hashdump.txt

Ahora necesitamos indicarle a hashcat el tipo de hash que le estamos proporcionando, y lo haremos utilizando el parámetro –m (hash mode). Observando el apartado [ Hash modes ] con el comando:

./hashcat64.bin -h

Podemos obtener este valor (1000) en la imagen más abajo:



Con todo esto, lo siguiente será elegir entre los distintos tipos de ataques que nos proporciona Hashcat, los cuales los podemos ver en el apartado [ Attack Modes ] de la misma ayuda.


En los modos de ataque (Attack Modes) se puede observar los tipos de ataques disponibles, como ya se mencionó antes se va a tratar de obtener las contraseñas en el formato nombre mas fecha de nacimiento.

hashcat64.bin –m 1000 –a 3 ntlm.hp

Si ejecutamos este comando, hashcat generará y comprobará contraseñas a partir de una serie de máscaras predefinidas por defecto, pero para el objetivo de este artículo, crearemos nuestras propias máscaras.

¿Pero que es una máscara? Una máscara es un conjunto de reglas que indican como están formadas las contraseñas que queremos generar. Más concretamente, una máscara especificará, para cada posición de la contraseña, el conjunto de caracteres que puede tener.

Cada posición de nuestra máscara puede contener un carácter fijo o un charset, que no es más que un conjunto caracteres.

Al contrario de los caracteres fijos, los charsets irán precedidos del signo de interrogación.

En la propia ayuda de hashcat podemos observar los charsets predefinidos de hashcat:



Como se puede observar, todos los charsets son una serie de caracteres definidos, excepto el charset ?a, que está formado por la combinación de los charsets ?l,?u,?d y ?s.

La razón de esto es que hashcat permite definir un charset como la combinación de otros charsets, por ejemplo, si quisiéramos definir un charset que contuviera tanto mayúsculas como minúsculas podríamos definirlo de la siguiente manera: ?l?u

Ejemplos de ataques utilizando máscaras:

hashcat64.bin –m 1000 –a 3 ntlm.hp pass1234

Comprobaría únicamente la contraseña (pass1234), mientras que el comando:

hashcat64.bin –m 1000 –a 3 ntlm.hp pass?d?d?d?d

Comprobaría todo el espectro de contraseñas que empezaran por “pass” y cuyos cuatro siguientes caracteres fueran dígitos decimales (pass0000-pass9999)

Mediante la máscara ?a?a?a?a?a?a?a?a?a?a?a?a, podemos simular un típico ataque por fuerza bruta para comprobar todas las contraseñas de 12 caracteres de cualquier combinación de dígitos decimales, signos, mayúsculas y minúsculas.



Además, para no tener que crear una máscara para cada longitud de contraseña que queramos probar, hashcat nos proporciona el argumento –i (–increment), con el que hashcat irá probando iterativamente las n primeras posiciones de la máscara para cada iteración hasta el máximo de caracteres que hayamos especificado con el argumento –increment-max o el tamaño de la máscara en caso de que no se lo hayamos especificado.

Por ejemplo para el comando:

./hashcat64.bin –m 1000 –a 3 ntlm.ph ?a?a?a?a?a –i –increment—min 2 increment—max 4

Se probarán secuencialmente las máscaras:

?a?a

?a?a?a

?a?a?a?a

Como podemos observar en la línea Progres y Time.estimated de la imagen, al ejecutar el ataque mediante la máscara ?a?a?a?a?a?a?a?a?a?a?a?a, se generarán y se comprobarán un total de 180602555536776954753 combinaciones, que en nuestra máquina, que dispone de 2 potentes tarjetas gráficas, tardaría más de 10 años en completarse.

Con el fin de reducir las combinaciones posibles para nuestro objetivo, podríamos utilizar la máscara ¿u?l?l?l?l?l?l?l?ld?d?d?d que comprendería todo el espectro de contraseñas desde Aaaaaaaa0000 hasta Zzzzzzzz9999.



Esto incluiría prácticamente todos los nombres posibles de hasta 8 letras seguidos de todas las fechas de nacimiento desde el año 0 hasta el 9999 D.C.

Aunque hemos reducido considerablemente el tiempo necesario para probar todas las posibles combinaciones de nuestro objetivo de más de 10 años a menos de 2 días, todavía estamos probando muchas contraseñas que no se ajustan a nuestro objetivo, como por ejemplo todas aquellas que contengan una fecha de nacimiento anterior a 1900 o posterior a 2017, por lo que todavía podemos intentar reducir este tiempo creando una máscara que descarte las mismas, y para ello, será necesario definir nuestros propios charsets.

Hashcat permite utilizar para cada ataque 4 charsets (custom-charsets) personalizables por el usuario, mediante los argumentos -1, -2, -3 y -4.

En este caso, necesitaremos crear 2 máscaras, una para aquellas contraseñas que contengan la fecha de nacimiento desde 1900 hasta 1999:

./hashcat64.bin -m 1000 -a 3 ntlm.hp ?u?l?l?l?l?l?l?l19?d?d

Y otra para aquellas del 2000 al 2017.

./hashcat64.bin -m 1000 -a 3 ntlm.hp -1 01 -2 012345678 ?u?l?l?l?l?l?l?l20?1?2

Para esta última, hemos definidos 2 charsets propios:

-1 01, que utilizaremos para decirle a la máscara que el carácter que representa las decenas de la fecha de nacimiento solo podrá contener el valor 0 o 1, y así evitar que genere aquellas fechas desde 2020.

-2 012345678, que utilizaremos para evitar que genere la contraseña 2019.

EDIT: También elimina la 2009


Con esto, habremos reducido el tiempo de cerca de 2 días a menos de 30 minutos.

Hay que tener en cuenta que para nuestro objetivo, no podemos utilizar la opción –incremental, ya que esta opción no cumpliría nuestros requisitos al ir eliminando las últimas posiciones de la máscara, por lo que tendremos que crear una máscara distinta para cada longitud de contraseña de la siguiente manera:

¿u?l?l?l?l?l?l?l?ld?d?d?d

¿u?l?l?l?l?l?l?ld?d?d?d

¿u?l?l?l?l?l?ld?d?d?d

….

¿u?l?d?d?d?d

Para complicar algo más la cosa, algunos administradores, han tenido la valentía enfrentarse a la furia de los usuarios y les han obligado a crear contraseñas que contengan al menos, un signo de puntuación.

Para contemplar esta opción, podríamos añadir a nuestra máscara la opción de que se los nombres también contuvieran signos de puntuación.

Para ello añadiremos los customs-charsets:

     -3 ?u?s : Donde antes habían mayúsculas ahora también pueden haber símbolos

     -4 ?l?s : Donde antes habían minúsculas ahora también pueden haber símbolos



Como podemos observar, al añadir estas opciones volveremos a aumentar el tiempo estimado en 2 días, ¿podríamos optimizar esto un poquito más?

Una de las cosas a tener en cuenta con este ataque, es que obtendríamos aquellas contraseñas como Paquito. 2010, pero también cosas como ##_*#.-##2010.

Aunque en algunos contextos puede valer la pena comprobar este tipo de contraseñas, Según nuestra teoría del pensamiento universal, la mayoría de gente intentará realizar el mínimo esfuerzo para cumplir con las políticas de contraseña, por lo que optarán con poner un solo símbolo de puntuación.

Con esta premisa, crearemos una máscara para cada posición en la que pueda estar el signo de puntuación, evitando así la generación de contraseñas en las que haya más de un signo de puntuación.



Con una media de 5 minutos y 30 segundos para cada máscara con un signo de puntuación, necesitaremos cerca de 60 minutos para comprobar todas las posibles posiciones del signo de puntuación.

Como hemos observado, para optimizar nuestra búsqueda, ha sido necesario crear distintas máscaras, lo que genera el inconveniente de tener que estar pendientes de que acabe un ataque con una máscara para ejecutar la otra.

Para evitar esta situación, hashcat permite pasarle como argumento un archivo de máscaras (una por línea), que ejecutara secuencialmente, para ello dispone del directorio masks, donde podemos encontrar ejemplos de máscaras. Además, esto nos permitirá tener almacenadas las diferentes estrategias de ataque que vayamos creando para utilizarlas cuando más nos convenga. En nuestro caso, el archivo con las máscaras tendría esta forma.




Como podemos observar en las últimas máscaras de la imagen, cuando especificamos nuestros propios charsets para cada máscara en un fichero, no lo haremos de la misma manera que en la línea de comandos. Sino que separaremos cada uno de los custom-charsets por comas.

Por ejemplo, donde antes teníamos los ataques:

./hashcat64.bin –m 1000 –a 3 -1 ABC -2 aeiou ?1?1?1?1?2?2?2?2

./hashcat64.bin –m 1000 –a 3 -1 ?l?u ?a?a?a?a?1?1?1?1

Ahora tendremos un fichero ejemplo.hcmask que contendrá las líneas:

     ABC,aeiou,?1?1?1?1?2?2?2?2

     ?l?u,?a?a?a?a?1?1?1?1

Y ejecutaremos el ataque con el siguiente comando.

./hashcat64.bin –m 1000 –a 3 ejemplo.hcmask

Los charsets que definamos, también puedes que pueden ser almacenados en ficheros .hcchr para poder utilizarlos posteriormente. Encontraremos ejemplos de estos ficheros en el directorio charsets.

Straight (Ataque por diccionario):

Aunque hemos conseguido optimizar bastante nuestra búsqueda mediante ataques basados en máscaras, las probabilidades de que exista alguna persona que se llame Aaaaaaaaa o Zxcfdcvilio son bastante bajas, así que todavía tenemos opciones de optimizar nuestro ataque.

Cuando tenemos una lista de palabras que puedan ser candidatas a formar parte de las contraseñas que estamos buscando, existe la opción de realizar un ataque por diccionario. Para nuestro ejercicio, por ejemplo, podemos utilizar los datos que nos proporciona el instituto nacional de estadística en su página web www.ine.es/daco/daco42/nombyapel/nombyapel.htm, donde tenemos un listado con todos los nombres femeninos y masculinos junto con datos estadísticos, lo que nos permitirá además, crear un diccionario ordenado con los nombres de mayor a menor frecuencia, aumentando así la probabilidad de encontrar más contraseñas en un tiempo menor.

Para ejecutar este ataque únicamente necesitaremos indicarle el tipo de hash seguido del archivo de hashes y el archivo que contenga el diccionario, que en este caso será un archivo que contendrá los 9098 nombres más comunes de España.

./hashcat64.bin -m 1000 -a 0 ntlm.hp nombres.dict



Como podemos observar en la hora de inicio y fin del ataque, la finalización del mismo es casi instantánea.

Pero con este ataque, no estamos cumpliendo con el requisito de que las contraseñas que finalicen con una fecha de nacimiento. Para cumplir con este requisito, tendríamos la opción de modificar el diccionario añadiendo a cada nombre incluido en el todas las fechas posibles, pero hashcat nos facilita esta tarea mediante los ataques híbridos.

- Ataques híbridos ( diccionario + máscara):

Hashcat dispone de dos variantes de ataques híbridos, la opción -6 (dict + mask), en la que generará contraseñas añadiendo la máscara al final de cada término de diccionario, y la opción -7, en los que generará contraseñas añadiendo la máscara al inicio de cada termino.

Para el objetivo que nos traemos entre manos, bastaría ejecutar un ataque hibrido -6 (dict+mask) con el fin de añadir todas las posibles fechas a cada nombre del diccionario. Teniendo en cuenta que la ejecución del ataque por diccionario ha sido instantánea, nos permitiremos el lujo de utilizar como mascara todas las combinaciones de 4 dígitos (d?d?d?d).

./haschat64.bin -m 1000 -a 6 ntlm.hp nombres.dict ?d?d?d?d



Este ataque también finaliza instantáneamente.

Aunque los tiempos obtenidos mediante el ataque por diccionario y los ataques híbridos han sido con diferencia los más bajos de todas las pruebas, estos ataques ofrecen poca flexibilidad para generar contraseñas con patrones más complejos, como por ejemplo, para añadir que la primera letra del nombre sea en mayúscula (habría que añadir todos los nuevos nombres con la inicial en mayúscula al diccionario), o considerar la opción de que haya un signo de puntuación presente en la contraseña.

Para ello, hashcat nos ofrece lo que llama ataques basados en reglas.

Si te gusto esta entrada no dudes en realizar un donativo entrando en la sección de Ayúdame.

martes, 16 de abril de 2019

Baiting ¡Toda unidad extraíble es el enemigo!


El Baiting es una forma de virus informático muy semejante o perteneciente a un grupo de virus que se conocen como "Caballo de Troya", pero..., el mismo se encuentra en unidades de almacenamiento extraíble como pendrives, memorias SD o micro SD, entre otras, este es muy usado en el caso de personas que tienen acceso físico a los equipos computacionales.

¿Cómo logran infectar a las victimas?.

Pues con un poco de ingeniería social y aprovechándose de la codicia o avaricia de las victimas con la promesa de descargas ó copias gratuitas de películas, música, entre otros, suelen infectar a sus victimas, los atacantes suelen llamarse "Baiters" y siempre explotan la curiosidad humana cosa que les permite hacer ataques muy efectivos.

¿Cómo se hace el baiting?.

Pues es muy sencillo demos un Ejemplo: "Esta es una empresa X" que sus oficinas como en todos los casos disponen de estacionamiento simplemente un baiter entra en el estacionamiento de deja pendrives o memorias USB con el virus esparcidas por varios puntos de manera tal que los trabajadores las encuentren y las tomen para su uso personal, es solo cuestión de tiempo que alguno de ellos introduzca la memoria en algún computador u ordenador de la empresa infectándolo y poniendo en riesto la seguridad de la información que se maneja de la empresa, es algo tan sencillo como eso.

¿Cómo protegerse del baiting?.

La única manera de protegerse es formando a los integrantes del grupo familiar o de trabajo incluso a usted mismo de la importancia de la seguridad y de la serie de esquemas de ingeniería social aplicable por los atacantes , aplicando esquemas de de seguridad y responsabilidades entro de la empresa (grupo de trabajo) o grupo familiar, y hacerlos conscientes de los peligros que puede entrañar la falta de precaución.

Si te gusto esta entrada no dudes en realizar un donativo entrando en la sección de Ayúdame.