
El Sandbox Linux Multiplataforma
Detux es un sandbox desarrollado para realizar análisis de tráfico de malware Linux y capturar los IOCs mediante dicho análisis. Se utiliza el hipervisor QEMU para emular Linux (Debian) para varias arquitecturas de CPU.
Actualmente se soportan las siguientes CPUs:
Use la versión en vivo ahora: http://detux.org
Esta versión de Detux contiene el script para ejecutar un binario/script de Linux en una arquitectura de CPU específica. No se preocupe si no sabe qué plataforma es, está en el script, el paquete Magic ayuda a detectar la arquitectura de la CPU de forma automatizada. x86 es la versión de CPU por defecto, esto se puede ajustar a una diferente en el archivo de configuración.
Esta versión proporciona el informe de análisis en un formato DICT, que se puede personalizar fácilmente para insertarlo en bases de datos NOSQL.
Se ha proporcionado un script de ejemplo que demuestra el uso de la librería del sandbox.
- Análisis Estático
-- Cadenas básicas extraídas del binario
-- Información ELF generada por los comandos readelf
-- report.py se puede modificar para añadir más comandos de terceros para analizar el binario y añadir el resultado al DICT.
- Análisis Dinámico
-- Los pcaps capturados se analizan con DPKT para extraer los IOCs e información legible de los paquetes.
Paquetes del sistema
Librerías Python (Preferible usar un entorno virtual)
Asegúrese de cumplir con los requisitos anteriores antes de usar Detux. Algunas dependencias pueden variar de un sistema operativo a otro.
- NIC1 : Esta interfaz es para acceder al Anfitrión
- NIC2 : Interfaz puenteada con las VMs del Sandbox QEMU. Se puede redirigir el tráfico de la interfaz a WHONIX, REMNUX o una Puerta de Enlace personalizada para filtrar/permitir el acceso a Internet para las VMs del Sandbox.
Agradecimientos especiales a aurel quien ha subido imágenes preconstruidas de VM QEMU Debian para todas las arquitecturas de CPU posibles. Las imágenes de VM se encuentran en: https://people.debian.org/~aurel32/qemu/, el mismo enlace contiene ejemplos de comandos para invocar las imágenes de VM.
Puede usar el siguiente script para descargar automáticamente las imágenes de VM a la carpeta "qemu" de Detux.
#x86
wget https://people.debian.org/~aurel32/qemu/i386/debian_wheezy_i386_standard.qcow2 -P qemu/x86/1/
#x86-64
wget https://people.debian.org/~aurel32/qemu/amd64/debian_wheezy_amd64_standard.qcow2 -P qemu/x86-64/1/
#arm
wget https://people.debian.org/~aurel32/qemu/armel/debian_wheezy_armel_standard.qcow2 -P qemu/arm/1/
wget https://people.debian.org/~aurel32/qemu/armel/initrd.img-3.2.0-4-versatile -P qemu/arm/1/
wget https://people.debian.org/~aurel32/qemu/armel/vmlinuz-3.2.0-4-versatile -P qemu/arm/1/
#mips
wget https://people.debian.org/~aurel32/qemu/mips/vmlinux-3.2.0-4-4kc-malta -P qemu/mips/1/
wget https://people.debian.org/~aurel32/qemu/mips/debian_wheezy_mips_standard.qcow2 -P qemu/mips/1/
#mipsel
wget https://people.debian.org/~aurel32/qemu/mipsel/vmlinux-3.2.0-4-4kc-malta -P qemu/mipsel/1/
wget https://people.debian.org/~aurel32/qemu/mipsel/debian_wheezy_mipsel_standard.qcow2 -P qemu/mipsel/1/
Detux usa SSH para comunicarse con las VMs, por lo tanto, esto es necesario actualmente para que las VMs tengan capacidad de red. Considerando que los binarios listados están en la misma ruta, puede añadir las siguientes líneas a /etc/sudoers (solo si es un usuario no root):
Cmnd_Alias QEMU_CMD = /usr/bin/qemu-*, /sbin/ip, /sbin/ifconfig, /sbin/brctl
<nombre de usuario de detux aquí> ALL = (ALL) NOPASSWD: QEMU_CMD
Cambie las rutas a los binarios si difieren para usted.
Añada la siguiente configuración a /etc/qemu-ifup, haga una copia de seguridad del original si ya tiene uno:
#! /bin/sh
# Script to bring a network (tap) device for qemu up.
# The idea is to add the tap device to the same bridge
# as we have default routing to.
# in order to be able to find brctl
PATH=$PATH:/sbin:/usr/sbin
ip=$(which ip)
ifconfig=$(which ifconfig)
echo "Starting" $1
if [ -n "$ip" ]; then
ip link set "$1" up
else
brctl=$(which brctl)
if [ ! "$ip" -o ! "$brctl" ]; then
echo "W: $0: not doing any bridge processing: neither ip nor brctl utility not found" >&2
exit 0
fi
ifconfig "$1" 0.0.0.0 up
fi
switch=$(ip route ls | \
awk '/^default / {
for(i=0;i<NF;i++) { if ($i == "dev") { print $(i+1); next; } }
}'
)
if [ -d /sys/class/net/br0/bridge/. ]; then
if [ -n "$ip" ]; then
ip link set "$1" master br0
else
brctl addif br0 "$1"
fi
exit # exit with status of the previous command
fi
echo "W: $0: no bridge for guest interface found" >&2
Considerando que eth0 es la interfaz con la que desea puentear sus VMs, puede eliminar las configuraciones para eth0 y usar las siguientes configuraciones en /etc/network/interfaces:
auto br0
iface br0 inet dhcp
bridge_ports eth0
bridge_maxwait 0
También puede especificar una dirección estática que usaba para eth0.
Navegue hasta la carpeta donde se encuentran las imágenes de su VM para cada Imagen QEMU, por ejemplo, para ARM es:
<su carpeta detux>/qemu/arm/1/
Para cada imagen, siga las instrucciones de arranque de VM dadas en "https://people.debian.org/~aurel32/", para iniciar la VM. Sin embargo, si es un usuario no root, deberá usar sudo.
Comandos para Arrancar las VMs (Reemplace con la MAC que desee):
#x86
sudo qemu-system-i386 -hda qemu/x86/1/debian_wheezy_i386_standard.qcow2 -vnc 127.0.0.1:5901 -net nic,macaddr=<MACADDR> -net tap -monitor stdio
#x86-64
sudo qemu-system-x86_64 -hda qemu/x86-64/1/debian_wheezy_amd64_standard.qcow2 -vnc 127.0.0.1:5901 -net nic,macaddr=<MACADDR> -net tap -monitor stdio
#arm
sudo qemu-system-arm -M versatilepb -kernel qemu/arm/1/vmlinuz-3.2.0-4-versatile -initrd qemu/arm/1/initrd.img-3.2.0-4-versatile -hda qemu/arm/1/debian_wheezy_armel_standard.qcow2 -append "root=/dev/sda1" -vnc 127.0.0.1:5901 -net nic,macaddr=<MACADDR> -net tap -monitor stdio
#mips
sudo qemu-system-mips -M malta -kernel qemu/mips/1/vmlinux-3.2.0-4-4kc-malta -hda qemu/mips/1/debian_wheezy_mips_standard.qcow2 -append "root=/dev/sda1 console=tty0" -vnc 127.0.0.1:5901 -net nic,macaddr=<MACADDR> -net tap -monitor stdio
#mipsel
sudo qemu-system-mipsel -M malta -kernel qemu/mipsel/1/vmlinux-3.2.0-4-4kc-malta -hda qemu/mipsel/1/debian_wheezy_mipsel_standard.qcow2 -append "root=/dev/sda1 console=tty0" -vnc 127.0.0.1:5901 -net nic,macaddr=<MACADDR> -net tap -monitor stdio
Detux requiere una instantánea de VM preconfigurada con direcciones IP y configuración SSH.
(qemu)
(qemu) savevm init
(qemu) q
Para que un usuario no root pueda capturar paquetes, Dumpcap necesita privilegios de captura. (https://wiki.wireshark.org/CaptureSetup/CapturePrivileges).
El siguiente comando puede habilitar esto para usted:
sudo groupadd -g wireshark
sudo usermod -a -G wireshark <su nombre de usuario>
sudo chmod 750 /usr/bin/dumpcap
sudo setcap cap_net_raw,cap_net_admin=eip /usr/bin/dumpcap
Tenga en cuenta que es posible que tenga que cerrar sesión y volver a iniciarla o reiniciar el anfitrión para aplicar los permisos. Si no puede capturar paquetes o recibe errores relacionados con dumpcap, debe verificar que los permisos para sus usuarios estén configurados correctamente y que la ruta de dumpcap sea la correcta.
El archivo detux.cfg en el directorio principal debe configurarse. Cada sección de VM debe configurarse con los Parámetros de Red y las credenciales SSH correctos. Puede elegir usuario root/no root según su necesidad.
La librería Detux ubicada en el directorio "core" se puede utilizar para adaptarse a su necesidad de análisis. El repositorio contiene "detux.py" que analiza el binario dado, guarda el pcap en la carpeta pcap y escribe la salida JSON en una ruta de archivo especificada.
usage: detux.py [-h] --sample SAMPLE [--cpu {x86,x86-64,arm,mips,mipsel}]
[--int {python,perl,sh,bash}] --report REPORT
optional arguments:
-h, --help show this help message and exit
--sample SAMPLE Sample path (default: None)
--cpu {x86,x86-64,arm,mips,mipsel}
CPU type (default: auto)
--int {python,perl,sh,bash}
Architecture type (default: None)
--report REPORT JSON report output path (default: None)
Ejemplo:
python detux.py --sample test_script/example_binary1 --report reports/example_report1.json
Gracias a Aurélien Jarno (@aurel32) (https://www.aurel32.net/) por las imágenes de VM preconstruidas.