
Framework de Evasão AV/EDR Baseado em Modelos
🚩 Este é o repositório público do Inceptor, para a versão mais recente e atualizações, considere nos apoiar através de https://porchetta.industries/
Se você deseja patrocinar este projeto e ter as últimas atualizações do Inceptor, correções de problemas mais recentes, funcionalidades mais recentes, apoie-nos em https://porchetta.industries/
Venha se juntar a nós no Discord!
NW: Atualmente estamos trabalhando para melhorar a engine de templates! Assim que lançarmos a próxima versão, instruções sobre como usar, personalizar e estender a ferramenta estarão disponíveis na Wiki.
Testes de penetração modernos e Red Teaming frequentemente exigem contornar appliances comuns de AV/EDR para executar código em um alvo. Com o tempo, as defesas estão se tornando mais complexas e inerentemente mais difíceis de contornar de forma consistente.
Inceptor é uma ferramenta que pode ajudar a automatizar grande parte desse processo, esperançosamente sem exigir esforço adicional.
Inceptor é um empacotador de PE baseado em templates para Windows, projetado para ajudar testadores de penetração e red teamers a contornar soluções comuns de AV e EDR. O Inceptor foi projetado com foco na usabilidade e para permitir uma extensa personalização pelo usuário.
Para ter uma boa visão geral do que foi implementado e por quê, pode ser útil dar uma olhada nos seguintes recursos:
Inceptor é capaz de converter EXE/DLL existentes em shellcode usando vários conversores de código aberto:
Inceptor pode codificar, compactar ou criptografar shellcode usando diferentes meios. Durante o desenvolvimento da ferramenta, comecei a diferenciar entre o que chamo de codificação independente de loader (LI) e codificação dependente de loader (LD).
A codificação independente de loader é um tipo de codificação não gerenciada pelo template escolhido pelo usuário (loader). Isso geralmente significa que o stub de decodificação não faz parte do template, mas está embutido no próprio shellcode. O Inceptor oferece esse tipo de recurso usando a ferramenta de código aberto sgn, que é usada para tornar o payload polimórfico e indetectável por detecção de assinatura comum.
Embora seja forte, Shikata-Ga-Nai não é realmente adequado para certos templates. Por esse motivo, o Inceptor também implementa codificadores dependentes de loader, que são projetados para deixar o loader cuidar da decodificação. Dessa forma, os codificadores LD instalam o stub de decodificação diretamente no template. Esse tipo de codificador, como implementado no Inceptor, também são "encadeáveis", ou seja, podem ser encadeados para codificar um payload.
Embora usar uma cadeia de codificadores possa às vezes melhorar a ofuscação de um determinado payload, essa técnica também pode expor múltiplas rotinas de decodificação, o que pode ajudar os Defensores a projetar assinaturas contra elas. Por esse motivo, o Inceptor oferece várias maneiras de ofuscar os artefatos finais, endurecendo o processo de RE (engenharia reversa).
No momento da escrita, a versão pública do Inceptor foi fornecida com os seguintes codificadores/compactadores/criptografadores:
Inceptor pode validar uma cadeia de codificação tanto estaticamente quanto dinamicamente, verificando estaticamente os tipos de entrada/saída dos decodificadores e também verificando dinamicamente a implementação com uma implementação independente.
A qualquer momento, um usuário pode validar facilmente uma cadeia usando o utilitário chain-validate.py.
Inceptor também implementa nativamente mecanismos de evasão de AV e, como tal, oferece a possibilidade de incluir recursos de evasão de AV no payload na forma de "módulos" (plugins).
Os plugins que podem ser incorporados são:
Inceptor também implementa mecanismos de evasão de EDR, como total unhooking, invocação direta de syscall e mapeamento manual de DLL. Syscalls diretos são implementados em C# usando o excelente projeto "DInvoke", novamente por TheWover. Em C/C++, Syscalls são implementados usando os projetos SysWhispers e SysWhispers2, por Jackson_T. Além disso, o Inceptor tem suporte nativo para Syscalls x86 também.
Assim como os recursos de bypass de AV, esses recursos podem ser habilitados como módulos, com a única diferença de que exigem operação em um template que os suporte. As técnicas implementadas até agora são:
Inceptor suporta ofuscação de payload usando utilitários externos, como ConfuserEx e Chameleon, e fornece suporte para ofuscação C/C++ usando LLVM-Obfuscator, que é um ofuscador baseado em IR usando a plataforma de compilação LLVM.
Outra funcionalidade do Inceptor é que ele pode assinar código do binário/dll resultante usando a ferramenta CarbonCopy Geralmente, arquivos assinados com certificados de assinatura de código são analisados de forma menos rigorosa. Muitos produtos antimalware não validam/verificam esses certificados.
O fluxo de trabalho completo pode ser resumido no seguinte esquema de alto nível e simplificado:

Inceptor foi projetado para funcionar no Windows. O utilitário update-config.py pode localizar os binários Microsoft necessários e atualizar a configuração de acordo. Pode ser necessário instalar o Microsoft Build Tools, o Windows SDK e o Visual Studio; o update-config.py guiará o usuário sobre como instalar as dependências necessárias.
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
A versão atual do Inceptor localiza um template específico usando uma convenção de nomenclatura simples (não altere os nomes dos templates) e o conjunto de argumentos fornecidos pelo usuário. Entre os argumentos, também há o loader (-t). Se não for especificado, o loader será selecionado em função do arquivo a ser empacotado, seguindo este esquema simples:
$ 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
Também é muito importante entender a convenção de nomes de templates para evitar interpretar erroneamente o comportamento de um artefato.
$ 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