EvilVM
Compilador EvilVM para herramientas de investigación en seguridad de la información. El proyecto está construido en torno a un compilador Forth de código nativo que se despliega como shellcode independiente de la posición. Proporciona una plataforma para la ejecución remota de código, útil en contextos de seguridad de la información.
Presentación en NolaCon 2019
Presenté la versión Alpha de EvilVM en NolaCon, 2019. Puedes ver la grabación en vídeo de Irongeek en YouTube, para una buena introducción al proyecto y algunas demos:
Grabación en YouTube
Documentación
Encuentra la documentación de EvilVM en el sitio de documentación.
El caso de uso principal de EvilVM es desplegar el agente en un sistema remoto e interactuar con él. El intérprete externo del lenguaje se presenta como un shell interactivo o REPL, y el sistema proporciona la capacidad de entregar código al agente, que se compila y se añade al entorno global hiperestático.
Las decisiones tecnológicas se toman teniendo en cuenta los objetivos del proyecto:
- Payload pequeño y fácil de desplegar: el agente EvilVM es un shellcode x86_64 independiente de la posición que pesa entre 5 y 10 KB, dependiendo de las opciones y la encapsulación.
- Flujos de E/S remotos: el paradigma de E/S estándar para interactuar con el lenguaje es a través de flujos abstractos con capacidad de red, lo que permite el transporte sobre descriptores de archivo, TCP (bind y reverse), HTTP, memoria compartida, ICMP y tuberías con nombre SMB.
- Acceso de bajo nivel: el entorno de ejecución proporciona acceso directo a las interioridades del compilador, al código máquina y a la interacción directa con la memoria.
- Interoperabilidad nativa: se proporciona una FFI de C simple, que facilita la importación de DLLs, la búsqueda de exportaciones y su envoltura con definiciones de funciones Forth.
- Lenguaje expresivo: aunque Forth proporciona un 'suelo bajo', funcionando cerca del nivel del lenguaje ensamblador, también ofrece un 'techo alto', permitiendo la extensión sintáctica del lenguaje en tiempo de ejecución, y es adecuado para técnicas de metaprogramación.
- Consideraciones de infosec: la generación de payloads admite diferentes esquemas de codificación y encapsulación para encajar bien con los escenarios típicos de entrega maliciosa (exploits, inyección, etc.).