GoAround
Uma ferramenta que permite a geração de bypasses AMSI e a ofuscação automática de scripts PowerShell usando três métodos diferentes de ofuscação. GoAround está licenciado sob a licença MIT. Consulte LICENSE para mais informações.
Isenção de responsabilidade
Esta ferramenta foi desenvolvida para ajudar pentesters nas suas tarefas diárias de pós-exploração e como um projeto de pesquisa. Qualquer uso malicioso desta ferramenta ou a sua utilização em sistemas de terceiros sem a devida permissão será de total responsabilidade do utilizador.
Instalação
Você só precisa baixar o código do Github e executar a ferramenta a partir da linha de comando do Windows ou do console do PowerShell.
Guia do utilizador
Com o GoAround você pode fazer duas coisas diferentes:
- Gerar scripts PowerShell com o código necessário para fazer um bypass AMSI. O código gerado pode ser ofuscado automaticamente.
- Ofuscação automática de scripts PowerShell, usando diferentes técnicas.
O utilizador pode escolher entre dois tipos diferentes de bypass AMSI e três técnicas diferentes de ofuscação.
Como usar
Para poder usar esta ferramenta é necessário ter Python instalado na máquina. Os seguintes caminhos devem ser adicionados à variável de ambiente PATH:
- C:\Users{Usuario}\AppData\Local\Programs\Python\Python39
- C:\Users{Usuario}\AppData\Local\Programs\Python\Python39\Scripts
Feito isso, você poderá executar a ferramenta a partir da linha de comando, de uma das seguintes formas:
- A partir da pasta da ferramenta: python goaround.py {opções}
- A partir de qualquer outra pasta: python {caminho completo para a pasta do GoAround} {opções}
A estrutura do comando é a seguinte:
python goaround.py -m [mode] (-t [type]) (-f [type_obfuscation]) (-i [input_file]) (-o [output_file])
Onde todas as opções entre colchetes são opcionais. Os valores para estas opções são:
- -m ou --mode: a única opção obrigatória. Indica o modo de operação no qual a ferramenta deve executar. Vá para a secção Modos de operação para mais informações.
- -t ou --type: indica o tipo de bypass a ser usado quando o modo é bypass ou o tipo de método de ofuscação quando o modo é obfuscate. Veja a secção Tipos de bypass para conhecer os diferentes tipos de bypass e a secção Métodos de ofuscação para conhecer os métodos de ofuscação disponíveis.
- -f ou --obfuscation: quando o modo de operação é bypass, esta opção é usada para selecionar o tipo de ofuscação para o bypass. Esta opção não está disponível no modo obfuscate, use "-t" ou "--type" em vez disso. Para conhecer os diferentes métodos de ofuscação, por favor leia a secção Métodos de ofuscação.
- -i ou --input: usado apenas no modo obfuscate. Permite ao utilizador selecionar o ficheiro a ofuscar.
- -o ou --output: esta opção permite ao utilizador selecionar o nome do script gerado. O nome deve terminar em ".ps1". Por predefinição, o nome do ficheiro de saída será "output.ps1".
Além disso, as seguintes opções também são suportadas e devem ser executadas sozinhas (sem qualquer outra opção):
- -h ou --help: mostra ao utilizador o guia de uso da ferramenta.
- -v ou --version: mostra o número da versão da ferramenta.
Modos de operação
Existem dois modos de operação, bypass e obfuscate, e são selecionados com a opção "-m" ou "--mode":
- bypass: para indicar que a ferramenta deve executar no modo bypass. Neste caso, será gerado um ficheiro PS1 com o código do bypass AMSI.
- obfuscate: para indicar que a ferramenta deve executar no modo de ofuscação. Neste caso, a ferramenta ofuscará o ficheiro fornecido pelo utilizador com a opção "-i" ou "--input" (obrigatório neste modo de operação). Será gerado um ficheiro PS1 com o código ofuscado. A ofuscação é funcional apenas para scripts PowerShell.
Tipos de bypass
No modo bypass (-m bypass), o tipo de bypass pode ser indicado com a opção "-t" ou "--type".
Neste momento, estes são os tipos de bypass suportados:
- reflection: bypass de reflexão de Matt Graeber.
- scan_buffer_laine: bypass de patch AmsiScanBuffer de Paul Laîné.
Se nenhum tipo for especificado, o bypass de reflexão será usado por predefinição.
Métodos de ofuscação
Neste momento, a ferramenta suporta três técnicas diferentes de ofuscação PowerShell.
Para selecionar o tipo de ofuscação no modo bypass, a opção "-f" ou "--obfuscation" é usada (se nenhum for especificado, o bypass não será ofuscado). Para selecionar o tipo de ofuscação no modo obfuscate, a opção "-t" ou "--type" é usada (se nenhum for especificado, a técnica de concatenação será usada).
Os nomes dos tipos de ofuscação são os seguintes:
- mayus: irá alterar o código PowerShell usando a técnica de randomcase. Isto não afetará as strings presentes no código. Este método irá alterar o hash do ficheiro.
- concatenation: método usado por predefinição no modo obfuscate. Irá alterar as strings presentes no código para concatenação de strings mais pequenas. As strings serão divididas aleatoriamente, portanto cada vez o código será diferente para o mesmo ficheiro de entrada.
- insertion: irá alterar as strings presentes no código para combinações de string e variável. Por exemplo, se o código tem a string “amsiutils”, poderia ser substituída por “am$var_tfm0”, onde var_tfm0 = “siutils”. As strings são divididas aleatoriamente, portanto cada vez o código será diferente para o mesmo ficheiro de entrada. As variáveis terão um nome no formato “var_tfm{número}”, portanto, se o código original tiver variáveis com estes nomes, devem ser alteradas antes da fase de ofuscação.
Exemplos
Aqui pode ver alguns exemplos de uso:
Mostrar menu de ajuda
python main.py -h
python main.py --help
Mostrar o número da versão da ferramenta
python main.py -v
python main.py --version
Gerar bypass de reflexão ofuscado usando inserção de variáveis
python main.py -m bypass -t reflection -f insertion
Gerar bypass de Paul Laîné alterando o nome do ficheiro de saída
python main.py -m bypass -t scan_buffer_laine -o "output_name.ps1"
Ofuscar ficheiro usando método de concatenação de strings
python main.py -m obfuscate -t concatenation -i "input_required.ps1"