AvanzadoQEMUKVMkerneldebuggingemulaciónlaboratorio avanzado

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.

MalwareIntel Research··5 min lectura
Serie: Entornos de Análisis — Parte 16

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

AspectoQEMU/KVMVMware WorkstationVirtualBox
Kernel debugging nativoSí (GDB stub)No (requiere kdnet)No
Multi-arch (ARM, MIPS)NoNo
VMI (introspección)Sí (LibVMI, Drakvuf)LimitadoNo
RendimientoExcelente (KVM)ExcelenteBueno
GUILimitada (virt-manager)ExcelenteBuena
Uso en CAPE sandboxNativoNoParcial
CosteGratuitoGratuito (2024+)Gratuito
Curva aprendizajeAltaBajaBaja
User-mode emulationSí (qemu-*-static)NoNo

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

Preguntas frecuentes

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.