GoAround
Uno strumento che permette la generazione di bypass AMSI e l'offuscamento automatico di script PowerShell utilizzando tre diversi metodi di offuscamento. GoAround è concesso in licenza MIT. Fare riferimento a LICENSE per maggiori informazioni.
Disclaimer di responsabilità
Questo strumento è stato sviluppato per aiutare i pentester nelle loro attività quotidiane di post-exploitation e come progetto di ricerca. Qualsiasi uso dannoso di questo strumento o il suo utilizzo in sistemi di terze parti senza la dovuta autorizzazione sarà sotto l'esclusiva responsabilità dell'utente.
Installazione
Basta scaricare il codice da Github ed eseguire lo strumento dalla riga di comando di Windows o dalla console PowerShell.
Guida per l'utente
Con GoAround puoi fare due cose diverse:
- Generare script PowerShell con il codice necessario per creare un bypass AMSI. Il codice generato può essere offuscato automaticamente.
- Offuscamento automatico di script PowerShell, utilizzando diverse tecniche.
L'utente può scegliere tra due diversi bypass AMSI e tre diverse tecniche di offuscamento.
Come usarlo
Per poter utilizzare questo strumento è necessario avere Python installato sulla macchina. I seguenti percorsi devono essere aggiunti alla variabile d'ambiente PATH:
- C:\Users{Usuario}\AppData\Local\Programs\Python\Python39
- C:\Users{Usuario}\AppData\Local\Programs\Python\Python39\Scripts
Una volta fatto ciò, potrai eseguire lo strumento dalla riga di comando, in uno di questi due modi:
- Dalla cartella dello strumento: python goaround.py {options}
- Da qualsiasi altra cartella: python {percorso completo della cartella di GoAround} {options}
La struttura del comando è la seguente:
python goaround.py -m [mode] (-t [type]) (-f [type_obfuscation]) (-i [input_file]) (-o [output_file])
Dove tutte le opzioni tra parentesi sono opzionali. I valori per queste opzioni sono:
- -m o --mode: l'unica opzione obbligatoria. Indica la modalità operativa in cui lo strumento deve funzionare. Vai alla sezione Modalità operative per maggiori informazioni.
- -t o --type: indica il tipo di bypass da utilizzare quando la modalità è bypass o il tipo di metodo di offuscamento quando la modalità è obfuscate. Vedi la sezione Tipi di bypass per conoscere i diversi tipi di bypass e la sezione Metodi di offuscamento per conoscere i metodi di offuscamento disponibili.
- -f o --obfuscation: quando la modalità operativa è bypass, questa opzione viene utilizzata per selezionare il tipo di offuscamento per il bypass. Questa opzione non è disponibile nella modalità obfuscate, utilizza "-t" o "--type". Per conoscere i diversi metodi di offuscamento, leggi la sezione Metodi di offuscamento.
- -i o --input: utilizzato solo in modalità obfuscate. Permette all'utente di selezionare il file da offuscare.
- -o o --output: questa opzione permette all'utente di selezionare il nome dello script generato. Il nome deve terminare con ".ps1". Di default, il nome del file di output sarà "output.ps1".
Inoltre, sono supportate anche le seguenti opzioni e devono essere eseguite da sole (senza altre opzioni):
- -h o --help: mostra all'utente la guida all'uso dello strumento.
- -v o --version: mostra il numero di versione dello strumento.
Modalità operative
Ci sono due modalità operative, bypass e obfuscate, e vengono selezionate con l'opzione "-m" o "--mode":
- bypass: per indicare che lo strumento deve funzionare in modalità bypass. In questo caso, verrà generato un file PS1 con il codice del bypass AMSI.
- obfuscate: per indicare che lo strumento deve funzionare in modalità offuscamento. In questo caso, lo strumento offuscherà il file fornito dall'utente con l'opzione "-i" o "--input" (obbligatoria in questa modalità operativa). Verrà generato un file PS1 con il codice offuscato. L'offuscamento è funzionale solo per script PowerShell.
Tipi di bypass
In modalità bypass (-m bypass), il tipo di bypass può essere indicato con l'opzione "-t" o "--type".
Al momento, questi sono i tipi di bypass supportati:
- reflection: il bypass di reflection di Matt Graeber.
- scan_buffer_laine: il bypass tramite patch di AmsiScanBuffer di Paul Laîné.
Se non viene specificato alcun tipo, verrà utilizzato quello di reflection per impostazione predefinita.
Metodi di offuscamento
Al momento, lo strumento supporta tre diverse tecniche di offuscamento PowerShell.
Per selezionare il tipo di offuscamento in modalità bypass, si utilizza l'opzione "-f" o "--obfuscation" (se non viene specificato, il bypass non verrà offuscato). Per selezionare il tipo di offuscamento in modalità obfuscate, si utilizza l'opzione "-t" o "--type" (se non viene specificato, verrà utilizzata la tecnica di concatenamento).
I nomi dei tipi di offuscamento sono i seguenti:
- mayus: cambierà il codice PowerShell usando la tecnica randomcase. Questo non influenzerà le stringhe presenti nel codice. Questo metodo cambierà l'hash del file.
- concatenation: metodo utilizzato di default in modalità obfuscate. Cambierà le stringhe presenti nel codice in concatenazione di stringhe più piccole. Le stringhe verranno suddivise casualmente, quindi ogni volta il codice sarà diverso per lo stesso file di input.
- insertion: cambierà le stringhe presenti nel codice in combinazioni di stringa e variabile. Ad esempio, se il codice ha la stringa “amsiutils”, potrebbe essere sostituita da “am$var_tfm0”, dove var_tfm0 = “siutils”. Le stringhe vengono suddivise casualmente, quindi ogni volta il codice sarà diverso per lo stesso file di input. Le variabili avranno un nome del formato “var_tfm{número}”, quindi, se il codice originale ha variabili con questi nomi, dovrebbero essere cambiate prima della fase di offuscamento.
Esempi
Qui puoi vedere alcuni esempi di utilizzo:
Mostra il menu di aiuto
python main.py -h
python main.py --help
Mostra il numero di versione dello strumento
python main.py -v
python main.py --version
Genera bypass reflection offuscato con inserimento di variabili
python main.py -m bypass -t reflection -f insertion
Genera il bypass di Paul Laîné cambiando il nome del file di output
python main.py -m bypass -t scan_buffer_laine -o "output_name.ps1"
Offusca il file usando il metodo di concatenamento delle stringhe
python main.py -m obfuscate -t concatenation -i "input_required.ps1"