
Generatore di macro Excel 4.0 (XLM) per iniettare DLL ed EXE in memoria.
| \ / / | | | _ __ | || _ \ ___ _ __ _ | | | | \ / | | | | | | ' | | | | |/ _ | ' | | | | | | | / \ || || |__| | | | || || | () | | | | || | | |_____//__|||| ||_|____/ _/|| ||_,|__| di @JoeLeonJr (@FortyNorthSec)
EXCELntDonut è un generatore di macro XLM (Excel 4.0). Partendo da codice sorgente C# (EXE) si ottiene una macro XLM (Excel 4.0) che eseguirà il codice in memoria. Le macro XLM (Excel 4.0) possono essere salvate in file .XLS.
chmod +x install.sh
./install.sh
Cosa viene installato?
Se preferisci eseguire EXCELntDonut come semplice script Python, dovrai configurare un ambiente virtuale con due pacchetti "pandas" e "donut-shellcode". Inoltre, dovrai installare mono-complete tramite apt-get e chiamare lo script drive.py usando python3. Raccomandiamo di usare lo script bash ./install.sh, ma la scelta è tua.
Utilizzo:
$ EXCELntDonut -f exe_source.cs -r System.Windows.Forms.dll --sandbox --obfuscate
Flag:
(obbligatori)
-f percorso del file contenente il codice sorgente C# (solo exe)
-r Reference necessarie per compilare il codice C# (le stesse usate con mcs per compilare su Linux)
(es: -r 'System.Management')
(opzionali)
-o nome file di output
--sandbox
Esegue controlli sandbox di base. Verrà aggiornato man mano che si scoprono nuovi approcci.
--obfuscate
Esegue una offuscazione di base della macro.
Fornisci un file C# contenente il tuo payload (ad esempio un EXE con un metodo main che esegue un beacon Cobalt Strike). Quel file C# viene compilato usando MCS in due assembly .NET: x86 e x64. Dopo la compilazione, i fantastici strumenti Donut (per x86) e CLRvoyance (per x64) convertono ogni assembly in shellcode position independent. Successivamente, vengono rimossi tutti i byte null, poiché le macro XLM (Excel 4.0) non interagiscono bene con i byte null, e il payload viene suddiviso in righe con non più di 255 caratteri (per x86) o 10 caratteri (per x64).
Una volta preparato lo shellcode, viene combinato con funzioni di base per l'iniezione di processo (VirtualAlloc, WriteProcessMemory e CreateThread) oltre a una funzione di controllo dell'architettura per determinare quale payload (x86 o x64) eseguire sul sistema di destinazione. Se scegli di eseguire controlli sandbox o offuscazione di base, quelle funzioni aggiorneranno la tua macro. Infine, l'output viene inserito in un file CSV (salvato come .txt).
Una volta ottenuto il file di output da EXCELntDonut, apri il file di output in un editor di testo e copia tutto il contenuto (Ctrl-A, Ctrl-C). Apri Excel su una macchina virtuale Windows, fai clic con il pulsante destro del mouse su "Foglio1" e seleziona "Inserisci". Scegli "Macro MS Excel 4.0". Vai alla cella A1 e incolla l'output di EXCELntDonut. Tutti i dati verranno probabilmente incollati in una singola colonna. I dati sono separati da punto e virgola ";". Vai alla scheda "Dati" e fai clic su "Testo in colonne". Seleziona "Delimitato" e nella schermata successiva seleziona "Punto e virgola", quindi fai clic su "Fine". La macro si distribuirà tra le colonne e le righe appropriate.
(Nota: se hai selezionato il flag "--obfuscate", dovrai scorrere orizzontalmente parecchio per trovare il codice vero e proprio, poiché parte della logica di offuscazione sposta la macro in una sezione casuale del foglio di lavoro).
A questo punto raccomandiamo due cose:
Salva il file (.xls) e prova ad aprirlo. Dovrebbe eseguire automaticamente il tuo payload.
Questi controlli si basano su ciò che gli attaccanti reali utilizzano nei loro malware.
=FORMULA(D3&D23&D54&D23&D44,E45)
La funzione FORMULA ci permette di inserire una formula, che può essere successivamente eseguita, in un'altra cella. Quindi, in questo caso, inseriamo le istruzioni di iniezione del processo e poi usiamo la funzione FORMULA per posizionare la funzione effettiva in un'altra cella da eseguire. Questo evita che i difensori, eseguendo analisi statiche, vedano cose come "VirtualAlloc".
root@excelntdonut-test:/opt# EXCELntDonut -f test.cs
_______ ______ _____ _ _ ____ _
| ____\ \/ / ___| ____| | _ __ | |_| _ \ ___ _ __ _ _| |_
| _| \ / | | _| | | | '_ \| __| | | |/ _ \| '_ \| | | | __|
| |___ / \ |___| |___| |___| | | | |_| |_| | (_) | | | | |_| | |_
|_____/_/\_\____|_____|_____|_| |_|\__|____/ \___/|_| |_|\__,_|\__|
di @JoeLeonJr (@FortyNorthSec)
[i] Generazione dell'assembly .NET x86.
warning CS8001: impossibile risolvere il percorso SDK
test.cs(2,14): error CS0234: Il tipo o il namespace `Management' non esiste nel namespace `System'. Manca un riferimento all'assembly?
Questo errore molto probabilmente significa che ti manca un assembly di riferimento durante la compilazione con mono. Per risolvere, passa semplicemente il namespace menzionato nel flag -r. In questo caso, aggiungeremmo -r 'System.Management' alla riga di comando. Il nuovo comando sarebbe:
root@excelntdonut-test:/opt# EXCELntDonut -f test.cs -r 'System.Management'
root@excelntdonut-test:/opt# EXCELntDonut -f test.cs -r System.Management
_______ ______ _____ _ _ ____ _
| ____\ \/ / ___| ____| | _ __ | |_| _ \ ___ _ __ _ _| |_
| _| \ / | | _| | | | '_ \| __| | | |/ _ \| '_ \| | | | __|
| |___ / \ |___| |___| |___| | | | |_| |_| | (_) | | | | |_| | |_
|_____/_/\_\____|_____|_____|_| |_|\__|____/ \___/|_| |_|\__,_|\__|
di @JoeLeonJr (@FortyNorthSec)
[i] Generazione dell'assembly .NET x86.
warning CS8001: impossibile risolvere il percorso SDK
error CS0006: File di metadati `System.Management' non trovato
[x] Errore nella generazione dell'assembly .NET x86 usando MCS. Vedi il messaggio di errore sopra.
Questo errore non dovrebbe apparire a meno che tu non esegua EXCELntDonut senza usare lo script bash install.sh. In tal caso, dovrai installare manualmente mono-complete. Questo scaricherà le dipendenze necessarie. Puoi installarlo usando apt in questo modo:
apt-get install mono-complete
root@kali:~/Desktop# EXCELntDonut -f test.cs
_______ ______ _____ _ _ ____ _
| ____\ \/ / ___| ____| | _ __ | |_| _ \ ___ _ __ _ _| |_
| _| \ / | | _| | | | '_ \| __| | | |/ _ \| '_ \| | | | __|
| |___ / \ |___| |___| |___| | | | |_| |_| | (_) | | | | |_| | |_
|_____/_/\_\____|_____|_____|_| |_|\__|____/ \___/|_| |_|\__,_|\__|
di @JoeLeonJr (@FortyNorthSec)
[i] Generazione dell'assembly .NET x86.
error CS5001: Il programma `_excelntdonut_GJAoNuVPMcX.exe' non contiene un metodo `Main' statico adatto come punto di ingresso
[x] Errore nella generazione dell'assembly .NET x86 usando MCS. Vedi il messaggio di errore sopra.
Al momento, EXCELntDonut accetta solo file C# con payload nella funzione Main.
Ecco alcune regole Yara per iniziare, di @InQuest:
Cerca un foglio molto nascosto
https://github.com/InQuest/yara-rules/blob/master/Excel_Hidden_Macro_Sheet.rule
Cerca la stringa Auto_Open
https://github.com/Neo23x0/signature-base/blob/master/yara/general_officemacros.yar
Ci sono molti articoli sull'uso di OLEDUMP.py per analizzare file XLM. Considera questo:
https://clickallthethings.wordpress.com/2020/04/06/covid-19-excel-4-0-macros-and-sandbox-detection/
Questo non sarebbe nemmeno sul nostro radar senza l'eccezionale lavoro del team di Outflank (@outflanknl). Un ringraziamento speciale a @StanHacked per la sua intuizione durante questo progetto. Inoltre, ugualmente, questo progetto non sarebbe possibile senza Donut (di @TheWover e @odzhan) e la relativa libreria Python (di @byt3bl33d3r). Correlato, il team di Accenture ha creato CLRvoyance, che ha risolto alcuni problemi x64 che non riuscivamo a risolvere con Donut + macro XLM 4.0. Infine, grazie a Philip Tsukerman di Cybereason per l'eccezionale ricerca sulla compatibilità delle macro XLM con le versioni a 64 bit di Excel.
Non siamo responsabili per l'uso improprio di questo strumento. Questo strumento è stato creato per scopi educativi e di test autorizzati per dimostrare come il codice sorgente C# possa essere iniettato in memoria utilizzando una macro XLM (Excel 4.0). L'obiettivo finale di questo progetto è (1) fornire ai red team un'altra opzione di payload per phishing per emulare ciò che gli avversari reali stanno attualmente utilizzando, e (2) fornire ai difensori un punto di riferimento per costruire analisi e mitigazioni. Senza uno strumento per generare rapidamente questo tipo di payload, riteniamo che i difensori non saranno adeguatamente preparati per ciò che sta effettivamente arrivando. Agisci responsabilmente.
Consulta il file di licenza in questa cartella. Si prega di notare che questo strumento incorpora altri due strumenti open source: Donut e CLRvoyance.