Entorno Avanzado: QEMU/KVM para Análisis de Malware a Nivel de Kernel
Configuración de QEMU/KVM para análisis de malware a nivel de kernel. Debugging de kernel con GDB, análisis de rootkits y drivers maliciosos, emulación de IoT (ARM/MIPS), y ventajas sobre VMware/VirtualBox para análisis avanzado.
Cuando VMware no es suficiente
VMware y VirtualBox son excelentes para análisis de malware user-mode. Pero cuando necesitas analizar rootkits de kernel, debuggear drivers maliciosos, emular firmware IoT, o hacer introspección de VM sin agente, QEMU/KVM es la herramienta correcta.
Configuraciones de QEMU para malware analysis
Windows guest con kernel debugging
# Crear disco
qemu-img create -f qcow2 win10.qcow2 60G
# Instalar Windows
qemu-system-x86_64 \
-enable-kvm \
-m 8G \
-smp 4 \
-cpu host \
-hda win10.qcow2 \
-cdrom Win10.iso \
-net nic -net user \
-vga std
# Ejecutar con GDB stub para kernel debugging
qemu-system-x86_64 \
-enable-kvm \
-m 8G \
-smp 4 \
-cpu host \
-hda win10.qcow2 \
-net nic,model=e1000 -net user,restrict=yes \
-s -S \
-monitor stdio
# -s: abre GDB server en puerto 1234
# -S: pausa la VM al inicio (espera GDB)
# -net user,restrict=yes: red NAT restringida
Kernel debugging con GDB
# En otra terminal: conectar GDB
gdb
(gdb) target remote :1234
(gdb) continue
# Poner breakpoint en funcion del kernel
(gdb) break NtCreateFile
(gdb) continue
# Cuando se ejecuta NtCreateFile, la VM se pausa
# Inspeccionar registros
(gdb) info registers
(gdb) x/10i $rip # Ver instrucciones actuales
# Para Windows: cargar simbolos
# (requiere descargar PDB symbols de Microsoft)
Linux guest para rootkit analysis
# Linux con kernel debugging habilitado
qemu-system-x86_64 \
-enable-kvm \
-m 4G \
-smp 2 \
-kernel /path/to/vmlinuz \
-initrd /path/to/initrd.img \
-append "root=/dev/sda1 console=ttyS0 nokaslr" \
-hda linux.qcow2 \
-net nic -net user,restrict=yes \
-s -S \
-nographic
# nokaslr: deshabilitar KASLR para que las direcciones del kernel
# sean predecibles (facilita debugging)
Emulación ARM para malware IoT
# User-mode: ejecutar un binario ARM en x86
qemu-arm-static ./mirai_arm_sample
# Con strace
qemu-arm-static -strace ./mirai_arm_sample 2> trace.txt
# Con GDB
qemu-arm-static -g 1234 ./mirai_arm_sample &
gdb-multiarch -ex "target remote :1234" ./mirai_arm_sample
# System emulation: Linux ARM completo
qemu-system-arm \
-M versatilepb \
-kernel zImage \
-dtb versatile-pb.dtb \
-drive file=rootfs.ext2,if=scsi,format=raw \
-append "root=/dev/sda console=ttyAMA0" \
-net nic -net user \
-nographic
Emulación MIPS para routers
# MIPS big-endian (routers TP-Link, Huawei)
qemu-mips-static ./sample_mips
# MIPS little-endian (routers Atheros)
qemu-mipsel-static ./sample_mipsel
# System emulation MIPS
qemu-system-mips \
-M malta \
-kernel vmlinux-malta \
-hda rootfs-malta.qcow2 \
-append "root=/dev/sda1 console=ttyS0" \
-net nic -net user \
-nographic
Introspección de VM (VMI)
Concepto
La introspección de VM permite examinar el estado de la VM (memoria, registros, disco) desde el host sin necesidad de un agente dentro de la VM. El malware/rootkit no puede detectar la introspección porque ocurre a un nivel inferior (hypervisor).
LibVMI
# LibVMI: introspeccion de VM desde Python
from libvmi import LibVMI
vmi = LibVMI("win10-analysis")
# Leer memoria del kernel
kernel_base = vmi.translate_ksym2v("ntoskrnl.exe")
data = vmi.read_va(kernel_base, 0, 4096)
# Listar procesos (recorriendo EPROCESS list)
# Sin agente dentro de la VM
Drakvuf (sandbox basado en VMI)
Drakvuf es un sandbox que usa introspección de VM en vez de agentes:
# Drakvuf: analisis via hypervisor introspection
drakvuf -r snapshot.raw -d win10 \
-x syscall \
-x filedelete \
-x regmon \
-x cpuidmon \
-w sample.exe
# Ventaja: el malware NO puede detectar el monitoring
# porque no hay agente, no hay hooks, no hay driver
# La introspección ocurre a nivel del hypervisor Xen
Snapshots y análisis forense
# Crear snapshot
qemu-img snapshot -c "clean" win10.qcow2
# Listar snapshots
qemu-img snapshot -l win10.qcow2
# Revertir a snapshot
qemu-img snapshot -a "clean" win10.qcow2
# Dump de memoria de la VM (para Volatility)
# Desde monitor QEMU:
(qemu) dump-guest-memory /tmp/memory.raw
# O via virsh (si usas libvirt):
virsh dump win10 /tmp/memory.raw --memory-only
Comparativa: QEMU vs VMware vs VirtualBox
| Aspecto | QEMU/KVM | VMware Workstation | VirtualBox |
|---|---|---|---|
| Kernel debugging nativo | Sí (GDB stub) | No (requiere kdnet) | No |
| Multi-arch (ARM, MIPS) | Sí | No | No |
| VMI (introspección) | Sí (LibVMI, Drakvuf) | Limitado | No |
| Rendimiento | Excelente (KVM) | Excelente | Bueno |
| GUI | Limitada (virt-manager) | Excelente | Buena |
| Uso en CAPE sandbox | Nativo | No | Parcial |
| Coste | Gratuito | Gratuito (2024+) | Gratuito |
| Curva aprendizaje | Alta | Baja | Baja |
| User-mode emulation | Sí (qemu-*-static) | No | No |
Recomendación: VMware/VirtualBox para análisis user-mode diario. QEMU/KVM para análisis de kernel, rootkits, drivers, IoT, y sandbox automatizado (CAPE).
Fuentes y referencias
- QEMU. "QEMU Documentation." https://www.qemu.org/docs/master/
- KVM. "Kernel-based Virtual Machine." https://www.linux-kvm.org/
- LibVMI. "Virtual Machine Introspection Library." https://github.com/libvmi/libvmi
- Drakvuf. "Dynamic Malware Analysis System." https://github.com/tklengyel/drakvuf
- Yosifovich, P. "Windows Kernel Programming." 2023.
- Love, R. "Linux Kernel Development." Addison-Wesley, 2010.
Preguntas frecuentes
Libros recomendados
Artículos relacionados
Este contenido tiene fines exclusivamente educativos y de investigación en ciberseguridad defensiva. No se proporcionan binarios maliciosos ni payloads ejecutables. El uso indebido de esta información es responsabilidad exclusiva del usuario. Leer disclaimer completo.