
Kit de herramientas de sandbox de hardware

Kit de herramientas de sandboxing hardware
El malware emplea con frecuencia técnicas anti-VM, que pueden variar en su dificultad para detectarlas y contrarrestarlas. Si bien integrar medidas anti-detección en nuestros laboratorios es una opción de uso frecuente, también deberíamos considerar el uso de un sandbox de hardware real, aunque suene extraño. Aprovechando el increíble proyecto PCILeech y el acceso DMA por hardware, XenoboxX proporciona un conjunto de herramientas para tareas de análisis, como volcado de memoria asignada dinámicamente y búsqueda de IoC. Estas herramientas nos permiten inyectar código a nivel de kernel mediante DMA, haciendo que la detección sea significativamente más difícil y brindando una nueva perspectiva al análisis.
XenoboxX actualmente se centra en Windows de 64 bits, pero en el futuro podría extenderse también a otras plataformas.
La herramienta se ha presentado en DEFCON 32 Demo Labs: aquí
Obviamente estamos hablando de entornos físicos, así que:
instala la Placa DMA en la PC objetivo. Conecta la placa a tu PC anfitriona.
instala PCILeech en tu PC anfitriona: si no vas a desarrollar o hacer modificaciones, puedes simplemente instalar los binarios (creo que esta es la opción más común) disponibles en la página de lanzamientos
instala XenoboxX en tu PC anfitriona: como en el punto anterior, quizás solo quieras los binarios precompilados (en la carpeta pcileech)
inyecta el módulo de PCILeech:
./pcileech kmdload -kmd WIN10_X64_3
esto devolverá una dirección de memoria que usarás para ejecutar los shellcodes (ej. 0x7ffff000)
ejecuta los shellcodes de XenoboxX:
./pcileech wx64_dumpalloc -0 0xbac -s "\\??\C:\temp\test" -kmd 0x7ffff000
Actualmente XenoboxX tiene 3 shellcodes wx64:
wx64_dumpalloc: se adjunta a un PID específico y vuelca todas las asignaciones de memoria realizadas por el proceso. Si los flags de protección de una memoria existente se cambian, la región se vuelca nuevamente (a veces el malware cambia las protecciones para evitar inspecciones).wx64_memgrep: busca cadenas definidas por el usuario en la memoria asignada por un PID. Puede adjuntarse al proceso durante un tiempo específico.wx64_strings: busca todas las cadenas en la memoria asignada por un PID. Puede adjuntarse al proceso durante un tiempo específico.Nota: como enfoque experimental, Xenobox actualmente evita por completo el hooking, y todas las detecciones se realizan mediante polling. Obviamente, esto tiene algunos inconvenientes, pero es una decisión de diseño por el momento, para ser lo más sigiloso posible.
Ejemplo:
./pcileech wx64_dumpalloc -0 0xbac -s "\\??\C:\temp\test" -kmd 0x7ffff000
-0 PID al que adjuntar en formato hexadecimal (requerido)-1 tiempo de monitoreo del proceso. Por defecto 0x20-s carpeta de salida, donde se guardarán los volcados de memoria y el logEjemplo:
./pcileech wx64_memgrep -0 0x564 -1 0x80 -s "Hello, 123" -2 1 -kmd 0x7ffff000
-0 PID al que adjuntar en formato hexadecimal (requerido)-1 tiempo de monitoreo del proceso. Por defecto 0x20-2 buscar cadena ASCII (0x0) o WIDE (0x1). Por defecto 0x0-3 búsqueda sensible a mayúsculas (0x1) o insensible (0x0). La búsqueda sensible es más rápida. Por defecto 0x0-4 buscar solo páginas de memoria con permiso de escritura (0x0) o todas (0x01). Por defecto 0x0-s cadena de búsqueda (entre comillas dobles)Ejemplo:
./pcileech wx64_strings -0 0x19e0 -1 0x100 -3 0x15 -kmd 0x7ffff000
-0 PID al que adjuntar en formato hexadecimal (requerido)-1 tiempo de monitoreo del proceso. Por defecto 0x20-2 buscar cadena ASCII (0x0) o WIDE (0x1). Por defecto 0x0-3 longitud mínima de la cadena. Por defecto 0xA-4 buscar solo páginas de memoria con permiso de escritura (0x0) o todas (0x01). Por defecto 0x0Si deseas modificar o reconstruir los scripts de XenoboxX, recuerda que necesitas algunos archivos del repositorio de PCILeech, y en particular:
wx64_common.hwx64_common.cshellcode64.exeEn los comentarios de cada archivo .c, encontrarás instrucciones de compilación. Como ejemplo:
cl.exe /O1 /Os /Oy /FD /MT /GS- /J /GR- /FAcs /W4 /Zl /c /TC /kernel wx64_common.c
cl.exe /O1 /Os /Oy /FD /MT /GS- /J /GR- /FAcs /W4 /Zl /c /TC /kernel wx64_dumpalloc.c
ml64.exe wx64_common_a.asm /Fewx64_dumpalloc.exe /link /NODEFAULTLIB /RELEASE /MACHINE:X64 /entry:main wx64_dumpalloc.obj wx64_common.obj
shellcode64.exe -o wx64_dumpalloc.exe "DUMP ALLOCATED MEMORY \n===============================================================\nREQUIRED OPTIONS: \n -0 : Process PID to open. Example '-0 0x0fe0'. \nOPTIONAL OPTIONS: \n -1 : Process monitoring timeout Default: 0x20. Example: '-1 0x100'. \n -s : Specify output folder/file for dumps. Example: \"\\??\C:\temp\test\"\n===== RESULT OF DUMPALLOC OPERATION ======================%s\nNTSTATUS : 0x%08X \n===============================================================\n"
XenoboxX no es la herramienta de análisis definitiva: este es un enfoque muy específico que encuentro útil para análisis muy concretos. No creo que esta herramienta vaya a reemplazar tu flujo de trabajo actual, pero quizás te resulte útil para ese molesto malware en particular.
Las contribuciones y sugerencias son más que bienvenidas. Por favor, abre un issue si tienes preguntas o un pull request si deseas contribuir. ¡Gracias!