Ejecución de Código Oculto
Hunt & Hackett presenta un conjunto de herramientas y documentos técnicos que describen técnicas de ataque que se basan en ocultar la ejecución de código en Windows. Aquí encontrará explicaciones de cómo funcionan estas técnicas, consejos sobre detección y código fuente de ejemplo para probar su cobertura de detección.
Contenido
Este repositorio cubre dos clases de técnicas de ataque que utilizan ampliamente los mecanismos internos de Windows y además proporciona sugerencias y herramientas para detectarlas:
- Manipulación de Procesos - un conjunto de técnicas que ocultan el código a nivel de todo un proceso.
- Inyección de Código - una colección de trucos que permiten ejecutar código como parte de otros procesos sin interferir con su funcionalidad.
- Detección - una recopilación de recomendaciones para defenderse contra varias técnicas de ocultación de ejecución de código.
Los valores fundamentales del proyecto:
- El enfoque sistemático. Este repositorio incluye más que solo una colección de herramientas o enlaces a recursos externos. Cada tema recibe una explicación detallada de los conceptos subyacentes; cada caso específico se clasifica en categorías genéricas.
- Herramientas de prueba de concepto. Los documentos técnicos van acompañados de proyectos de ejemplo en C que demuestran el uso de las instalaciones descritas en la práctica.
- De principiante a profesional. No es necesario ser un experto en ciberseguridad para entender los conceptos que describimos. Sin embargo, incluso los profesionales del dominio correspondiente deberían encontrar el contenido valioso y educativo debido a la atención al detalle y las dificultades.
Implementación
Una característica distintiva final de este proyecto es el uso extensivo de la API nativa en todos los ejemplos. Aquí está la motivación de esta elección:
- Funcionalidad. Algunas operaciones requeridas para las técnicas más avanzadas (como la Manipulación de Procesos) no están expuestas a través de otras API.
- Control. Al ser el nivel más bajo de interacción con el sistema operativo, proporciona el mayor control sobre su comportamiento. La API Win32 se implementa sobre la API nativa, por lo que todo lo que se puede lograr con la primera también es posible con la segunda.
- Disponibilidad. Al estar expuesta por ntdll.dll, la API nativa está disponible en todos los procesos, incluidos los del sistema.
- Consistencia. Las interfaces expuestas por esta API son notablemente consistentes. Después de aprender las decisiones de diseño fundamentales, es posible predecir correctamente la mayoría de los prototipos de funciones solo con el nombre de la API.
- Resistencia al hooking. Es sustancialmente más fácil eliminar o evitar los hooks en modo usuario al usar la API nativa, cegando parcialmente al software de seguridad. No hay bibliotecas de nivel inferior que puedan ser parcheadas, por lo que desengancharse se vuelve tan simple como cargar una segunda instancia de ntdll.dll y redirigir las llamadas allí.
Notas de Compilación
El código de ejemplo utiliza los encabezados de la API nativa proporcionados por el proyecto PHNT. Asegúrese de clonar el repositorio usando el comando git clone --recurse-submodules para obtener esta dependencia. Alternativamente, puede usar git submodule update --init después de clonar el repositorio.
Para compilar los proyectos incluidos en el repositorio, necesitará una versión reciente de Windows SDK. Si usa Visual Studio, consulte la instalación integrada del SDK. Alternativamente, también puede usar el entorno de compilación independiente de EWDK. Para compilar todas las herramientas a la vez, use MSBuild AllTools.sln /t:build /p:configuration=Release /p:platform=x64.