
Framework di evasione AV/EDR guidato da template
🚩 Questo è il repository pubblico di Inceptor, per la versione più recente e gli aggiornamenti considera di supportarci su https://porchetta.industries/
Se vuoi sponsorizzare questo progetto e avere gli ultimi aggiornamenti su Inceptor, le ultime issue risolte, le ultime funzionalità, supportaci su https://porchetta.industries/
Vieni a chiacchierare su Discord!
NW: Stiamo attualmente lavorando per migliorare il motore dei template! Non appena rilasceremo la prossima versione, le istruzioni su come utilizzare, personalizzare ed estendere lo strumento saranno disponibili nella Wiki.
Il Penetration Testing moderno e il Red Teaming spesso richiedono di bypassare i comuni apparati AV/EDR per eseguire codice su un target. Con il tempo, le difese diventano più complesse e intrinsecamente più difficili da bypassare in modo consistente.
Inceptor è uno strumento che può aiutare ad automatizzare gran parte di questo processo, auspicabilmente senza richiedere ulteriori sforzi.
Inceptor è un packer PE basato su template per Windows, progettato per aiutare penetration tester e red teamer a bypassare le comuni soluzioni AV e EDR. Inceptor è stato progettato con un focus sull'usabilità e per permettere un'ampia personalizzazione da parte dell'utente.
Per avere una buona panoramica di ciò che è stato implementato e perché, potrebbe essere utile dare un'occhiata alle seguenti risorse:
Inceptor è in grado di convertire EXE/DLL esistenti in shellcode utilizzando vari convertitori open-source:
Inceptor può codificare, comprimere o crittografare lo shellcode utilizzando diversi mezzi. Durante lo sviluppo dello strumento, ho iniziato a distinguere tra ciò che chiamo codifica indipendente dal loader (LI) e codifica dipendente dal loader (LD).
La codifica indipendente dal loader è un tipo di codifica non gestita dal template scelto dall'utente (loader). Questo di solito significa che lo stub di decodifica non fa parte del template, ma è incorporato nello shellcode stesso. Inceptor offre questo tipo di funzionalità utilizzando lo strumento open-source sgn, che viene utilizzato per rendere il payload polimorfico e non rilevabile mediante la comune rilevazione delle firme.
Per quanto potente, Shikata-Ga-Nai non è realmente adatto per certi template. Per questo motivo, Inceptor implementa anche encoder dipendenti dal loader, progettati per far sì che il loader si occupi della decodifica. In quanto tali, gli encoder LD installano lo stub di decodifica direttamente nel template. Questo tipo di encoder, come implementato in Inceptor, sono anche 'Concatenabili', il che significa che possono essere concatenati insieme per codificare un payload.
Sebbene l'uso di una catena di encoder possa talvolta migliorare l'offuscamento di un dato payload, questa tecnica può anche esporre molteplici routine di decodifica, che possono aiutare i Difensori a progettare firme contro di esse. Per questo motivo, Inceptor offre molteplici modi per offuscare gli artefatti finali, indurendo il processo di reverse engineering.
Al momento della scrittura, la versione pubblica di Inceptor è stata fornita con i seguenti encoder/compressori/crittografi:
Inceptor può validare una catena di codifica sia staticamente che dinamicamente, controllando staticamente i tipi di input/output dei decoder, e verificando anche dinamicamente l'implementazione con un'implementazione indipendente.
In qualsiasi momento, un utente può facilmente validare una catena utilizzando l'utility chain-validate.py.
Inceptor implementa anche nativamente meccanismi di evasione AV, e come tale offre la possibilità di includere funzionalità di evasione AV nel payload sotto forma di 'moduli' (plugin).
I plugin che possono essere incorporati sono:
Inceptor implementa anche meccanismi di evasione EDR, come full unhooking, invocazione diretta di syscall e mapping manuale di DLL. Le Direct Syscall sono implementate in C# utilizzando l'eccezionale progetto "DInvoke", sempre di TheWover. In C/C++, le Syscall sono implementate utilizzando i progetti SysWhispers e SysWhispers2, di Jackson_T. Inoltre, Inceptor ha il supporto nativo anche per Syscall x86.
Come le funzionalità di bypass AV, queste possono essere abilitate come moduli, con l'unica differenza che richiedono di operare su un template che le supporti. Le tecniche implementate finora sono:
Inceptor supporta l'offuscamento del payload utilizzando utility esterne, come ConfuserEx e Chameleon, e fornisce supporto per l'offuscamento di C/C++ utilizzando LLVM-Obfuscator, che è un offuscatore basato su IR utilizzando la piattaforma di compilazione LLVM.
Un'altra caratteristica di Inceptor è che può firmare il binario/dll risultante utilizzando lo strumento CarbonCopy Di solito, i file firmati con certificati di firma del codice sono analizzati meno rigorosamente. Molti prodotti anti-malware non convalidano/verificano questi certificati.
L'intero flusso di lavoro può essere riassunto nel seguente schema di alto livello e semplificato:

Inceptor è stato progettato per funzionare su Windows. L'utility update-config.py può individuare i binari Microsoft richiesti e aggiornare la configurazione di conseguenza. Potrebbe essere necessario installare Microsoft Build Tools, Windows SDK e Visual Studio; update-config.py guiderà l'utente su come installare le dipendenze richieste.
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 versione corrente di Inceptor individua un template specifico usando una semplice convenzione di denominazione (non cambiare i nomi dei template) e l'insieme di argomenti forniti dall'utente. Tra gli argomenti c'è anche il loader (-t). Se non specificato, il loader verrà selezionato in funzione del file da impacchettare, seguendo questo semplice schema:
$ python inceptor.py -hh
[*] Loader Predefiniti
Input File Extension SpecialCondition Guessed Filetype Default Loader Default Template
0 .raw NaN Shellcode Simple Loader Classic
1 .exe .NET Eseguibile .NET Donut Classic
2 .exe NaN Eseguibile Nativo Pe2Shellcode PE Load
3 .dll NaN Libreria Nativa sRDI Classic
È molto importante comprendere anche la convenzione di denominazione dei template, per evitare di interpretare erroneamente il comportamento di un artefatto.
$ 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