Docker ya lleva entre nosotros algún tiempo. En esta entrada se va a hablar de cómo es posible sacar partido de Docker y su uso en DFIR para un análisis rápido en los equipos de los analistas.
En primer lugar hay que conocer Docker. No hace falta sacarnos un máster, pero al menos conocer los conceptos básicos de la tecnología Docker. Voy a explicar muy brevemente los conceptos de imagen y contenedor, y cómo Docker trabaja con ellos.
- Una imagen Docker es un sistema “congelado”, un sistema pausado o en estado de hibernación, el cual se encuentra en un modo de solo lectura.
- Un contenedor no es más que una imagen en ejecución. Docker “le da al play” y añade una capa sobre la imagen en un modo de lectura-escritura.
Cuando el contenedor se detiene o se borra, Docker automáticamente elimina la capa de lectura-escritura dejando la imagen en su estado original. Esto permite reutilizar un sistema base en varios entornos, o partir siempre del mismo sistema base.
En segundo lugar vamos a analizar brevemente las ventajas hay en utilizar Docker frente a las ya archiconocidas máquinas virtuales. La verdad es que las máquinas virtuales están genial pero para que funcionen mínimamente requieren unos 4Gb de RAM ya que virtualizan el sistema operativo entero, y si queremos o tenemos la necesidad de levantar varias máquinas virtuales nos quedaremos sin RAM rápidamente.
Docker, al contrario, no virtualiza el sistema operativo al completo sino solo, aproximadamente, lo que necesita. De este modo los contenedores tienen menor impacto en el rendimiento del equipo, e incluso hay quien se aventura a decir que cada contenedor es como un proceso más. Realmente se creará un proceso por cada uno de los procesos que haya internamente en el contenedor.
Ahora que ya queda claro qué es Docker y cómo trabaja, vamos a ver qué herramientas podemos utilizar en el día a día en Incident Handling.
Podemos encontrar un gran recopilatorio de herramientas en esta página https://github.com/meirwah/awesome-incident-response de la cual se han extraído alguna de ellas para la elaboración de este post.
Si nos basamos en herramientas que están disponibles en distribuciones como REMnux y SIFT, vemos que hay varias opciones ya “dockerizadas”.
PEScanner es una herramienta para el análisis de binarios PE.
Para lanzar el comando debemos disponer de una carpeta con los binarios que se quieran analizar. Para las pruebas he creado una carpeta en /tmp/evidencias, donde he metido el malware, en este caso ncat.exe, y ejecutado Docker del siguiente modo:
docker run --rm -it -v /tmp/evidencias:/home/nonroot/workdir remnux/pescanner pescanner ncat.exe
Obtengo como resultado (solo un extracto):
########################################################################################## [0] File: ncat.exe ########################################################################################## Meta-data ========================================================================================== Size : 426024 bytes Type : PE32 executable (console) Intel 80386, for MS Windows Architecture : 32 Bits binary MD5 : eb330a7e2e51122976d75853f913d084 SHA1 : 1d8b9a01475fda14c386340ba0a6bd3b1eb015b5 ssdeep : 12288:b4SY4Ngsw+Ve7SUF6QDnomIlUl6xZyTXr+Hq:2L06IlUl6byTXr+Hq imphash : c887c1a15e8fd48ac85bd32f438c5666 Date : 0x580649D1 [Tue Oct 18 16:12:01 2016 UTC] Language : ENGLISH CRC: (Claimed) : 0x74674, (Actual): 0x74674 Entry Point : 0x4444fa .text 0/7 ================ Offset | Instructions ---------------------------------------- 0 call 0x4452ce 5 jmp 0x44434f 10 push ebp 11 mov ebp,esp
JSDetox es una herramienta para el análisis de códigos JavaScript.
En este caso la herramienta dispone de una interfaz web, por lo que en vez de llamar al comando desde la línea de comandos se procede a exponer un puerto para conectar a la interfaz web.
docker run --rm -p 3000:3000 remnux/jsdetox
Docker expone el puerto 3000 para que podamos acceder a la interfaz de JSDetox simplemente navegando a http://localhost:3000. Un ejemplo sería:
SpiderMonkey es otra herramienta para análisis de malware programado en JavaScript que tiene un modo de ejecución parecido a PEScanner.
docker run --rm -it -v /tmp/evidencias:/source nacyot/javascript-spidermonkey:latest js <malicious.js>
En el caso de Malcom es una herramienta que nos ayuda a analizar las comunicaciones generadas por un malware de manera visual. Ya hablamos de esta herramienta hace unos meses aquí.
Para ejecutar Malcom desde Docker utilizaremos el siguiente comando:
docker run -p 8080:8080 -d --name malcom tomchop/malcom-automatic
Al igual que sucedía con JSDetox, Docker expone el puerto 8080 para acceder a través de http://localhost:8080.
ClamAV es el antivirus por excelencia en GNU/Linux.
Ejecutamos Docker tal que:
docker run --rm -v /tmp/evidencias:/malware:ro malice/clamav ncat.exe
Con lo que obtendremos una salida en formato JSON. La salida se puede “enpipar” con jq o python -m json.tool a modo de obtener algo más visual.
Yara es la navaja suiza de las búsquedas de patrones en ficheros, de la que también hemos escrito en distintas ocasiones en este blog.
En este caso se requiere disponer de un repositorio de reglas Yara. Personalmente recomiendo las de Yara-Rules aunque sirven las de cualquier otro repositorio o incluso unas propias. Un vez se tiene un directorio con las reglas solo queda ejecutar el Docker con Yara. El comando a ejecutar es el siguiente:
docker run -it -v /tmp/evidencias:/malware:ro -v /tmp/rules:/rules:ro blacktop/yara /rules/index.yar ncat.exe
La salida del comando anterior sería todas las reglas que hacen “match” con el fichero proporcionado. En este caso ncat.exe.
Hay más herramientas que pueden ser utilizadas con Docker para un uso más eficiente que el que podemos conseguir con una máquina virtual en ejecución. Recuerdo el enlace https://github.com/meirwah/awesome-incident-response donde hay una gran cantidad de herramientas utilizadas en Incident Handling. Por otra parte, si los comandos os parecen largos y difíciles de recordar siempre queda el hacerse un alias o un script que pueda llamar a estos comandos de un modo más sencillo.
Muy interesante el post Jaume,
Precisamente el otro día estuve mirando para montarme un docker para Incident Response y encontré, además de los que comentas:
Las herramientas de SIFT en Docker: https://github.com/kost/docker-sift
Listado de docker con herramientas chulas como radare2, rekall, metasploit, thug, cyberchef, … por los de REMNUX: https://hub.docker.com/r/remnux/
Incluso hay dockers de Suricata (https://github.com/jasonish/docker-suricata) y de la suite SELKS (https://github.com/StamusNetworks/Amsterdam).
Saludos!