
Marco de evasión de AV/EDR basado en plantillas
🚩 Este es el repositorio público de Inceptor. Para la versión más reciente y actualizaciones, considere apoyarnos a través de https://porchetta.industries/
Si desea patrocinar este proyecto y tener las últimas actualizaciones de Inceptor, los últimos errores corregidos, las últimas funciones, apóyenos en https://porchetta.industries/
¡Ven a pasar el rato en Discord!
NW: ¡Actualmente estamos trabajando para mejorar el motor de plantillas! Tan pronto como lancemos la próxima versión, las instrucciones sobre cómo usar, personalizar y extender la herramienta estarán disponibles en la Wiki.
Las pruebas de penetración modernas y el Red Teaming a menudo requieren evadir dispositivos AV/EDR comunes para ejecutar código en un objetivo. Con el tiempo, las defensas se vuelven más complejas e inherentemente más difíciles de evadir de manera consistente.
Inceptor es una herramienta que puede ayudar a automatizar gran parte de este proceso, con suerte sin requerir esfuerzo adicional.
Inceptor es un empaquetador de PE basado en plantillas para Windows, diseñado para ayudar a los probadores de penetración y red teamers a evadir soluciones AV y EDR comunes. Inceptor ha sido diseñado con un enfoque en la usabilidad y para permitir una amplia personalización por parte del usuario.
Para tener una buena visión general de lo que se implementó y por qué, puede ser útil echar un vistazo a los siguientes recursos:
Inceptor es capaz de convertir EXE/DLL existentes en shellcode utilizando varios convertidores de código abierto:
Inceptor puede codificar, comprimir o cifrar shellcode utilizando diferentes medios. Al desarrollar la herramienta, comencé a diferenciar entre lo que llamo codificación independiente del cargador (LI) y codificación dependiente del cargador (LD).
La codificación independiente del cargador es un tipo de codificación no gestionada por la plantilla elegida por el usuario (cargador). Esto generalmente significa que el stub de decodificación no es parte de la plantilla, sino que está incrustado en el propio shellcode. Inceptor ofrece este tipo de característica utilizando la herramienta de código abierto sgn, que se utiliza para hacer que el payload sea polimórfico e indetectable mediante la detección de firmas común.
Por muy potente que sea, Shikata-Ga-Nai no es realmente adecuado para ciertas plantillas. Por esta razón, Inceptor también implementa codificadores dependientes del cargador, que están diseñados para permitir que el cargador se encargue de la decodificación. Como tal, los codificadores LD instalan el stub de decodificación directamente en la plantilla. Este tipo de codificadores, tal como se implementan en Inceptor, también son 'encadenables', lo que significa que se pueden encadenar para codificar un payload.
Si bien el uso de una cadena de codificadores a veces puede mejorar la ofuscación de un payload dado, esta técnica también puede exponer múltiples rutinas de decodificación, lo que puede ayudar a los Defensores a diseñar firmas contra ellas. Por esta razón, Inceptor ofrece múltiples formas de ofuscar los artefactos finales, endureciendo el proceso de RE.
En el momento de redactar este documento, la versión pública de Inceptor se ha proporcionado con los siguientes codificadores/compresores/cifradores:
Inceptor puede validar una cadena de codificación tanto estática como dinámicamente, verificando estáticamente los tipos de entrada/salida de los decodificadores, y también verificando dinámicamente la implementación con una implementación independiente.
En cualquier momento, un usuario puede validar fácilmente una cadena utilizando la utilidad chain-validate.py.
Inceptor también implementa de forma nativa mecanismos de evasión de AV y, como tal, ofrece la posibilidad de incluir características de evasión de AV en el payload en forma de 'módulos' (plugins).
Los plugins que se pueden incrustar son:
Inceptor también implementa mecanismos de evasión de EDR, como el desenganche completo, la invocación directa de syscalls y el mapeo manual de DLL. Las syscalls directas se implementan en C# utilizando el destacado proyecto 'DInvoke', nuevamente por TheWover. En C/C++, las syscalls se implementan utilizando los proyectos SysWhispers y SysWhispers2, por Jackson_T. Además, Inceptor tiene soporte integrado para syscalls x86 también.
Al igual que las características de bypass de AV, estas características se pueden habilitar como módulos, con la única diferencia de que requieren operar en una plantilla que las soporte. Las técnicas implementadas hasta ahora son:
Inceptor soporta la ofuscación de payloads mediante el uso de utilidades externas, como ConfuserEx y Chameleon, y proporciona soporte para ofuscación de C/C++ usando LLVM-Obfuscator, que es un ofuscador basado en IR que utiliza la plataforma de compilación LLVM.
Otra característica de Inceptor es que puede firmar digitalmente el binario/dll resultante utilizando la herramienta CarbonCopy Por lo general, los archivos firmados con certificados de firma de código se analizan de manera menos estricta. Muchos productos antimalware no validan/verifican estos certificados.
El flujo de trabajo completo se puede resumir en el siguiente esquema simplificado de alto nivel:

Inceptor ha sido diseñado para funcionar en Windows. La utilidad update-config.py puede localizar los binarios de Microsoft requeridos y actualizar la configuración en consecuencia. Podría ser necesario instalar Microsoft Build Tools, el SDK de Windows y Visual Studio; update-config.py guiará al usuario sobre cómo instalar las dependencias requeridas.
git clone --recursive https://github.com/klezVirus/inceptor.git
cd inceptor
virtualenv venv
venv\Scripts\activate.bat
pip install -r requirements.txt
cd inceptor
python update-config.py
La versión actual de Inceptor localiza una plantilla específica utilizando una convención de nomenclatura simple (no cambie los nombres de las plantillas) y el conjunto de argumentos proporcionados por el usuario. Entre los argumentos, también se encuentra el cargador (-t). Si no se especifica, el cargador se seleccionará en función del archivo a empaquetar, siguiendo este esquema simple:
$ python inceptor.py -hh
[*] Default Loaders
Input File Extension SpecialCondition Guessed Filetype Default Loader Default Template
0 .raw NaN Shellcode Simple Loader Classic
1 .exe .NET Dotnet Executable Donut Classic
2 .exe NaN Native Executable Pe2Shellcode PE Load
3 .dll NaN Native Library sRDI Classic
También es muy importante entender la convención de nombres de las plantillas para evitar malinterpretar el comportamiento de un artefacto.
$ usage: inceptor.py [-h] [-hh] [-Z] {native,dotnet,powershell} ...
inceptor: A Windows-based PE Packing framework designed to help
Red Team Operators to bypass common AV and EDR solutions
positional arguments:
{native,dotnet,powershell}
native Native Binaries Generator
dotnet .NET Binaries Generator
powershell PowerShell Wrapper Scripts Generator
optional arguments:
-h, --help show this help message and exit
-hh Show functional table
-Z, --check Check file against ThreatCheck