Há tempos ensino em um de meus cursos, como é possível burlar antivírus com binários maliciosos, fazendo o enconding do mesmos, além de também trabalhar com PE's que são aplicações nativas de Windows, portanto consideradas inócuas pelos antivírus, só que payloads maliciosos personalizados embutidos e também encodados.
Todo esse processo, sempre ensino a fazer manualmente, para que o aluno saiba como funciona e o que acontece por debaixo dos panos. Então dá-lhe immunity debugger, LordPE e outras ferramentas para fazer isso, e um pouco de conhecimento e assembly.
Basicamente, para pegarmos um PE válido, standalone, e transformarmos em um binário com payload malicioso embutido e encodado seguimos o seguinte procedimento:
- criamos um stub, com permissão de execução, dentro do PE, onde injetaremos os códigos (payload e encoder/decoder baseado em XOR por exemplo);
- injetamos o payload e o encoder/decoder no stub;
- alteramos o entrypoint do PE para o início o decoder;
- colocamos um breakpoint no final do payload malicioso e configuramos para que nosso encoder codifique apenas o código do payload;
- executamos o programa (através de um debugger) e quando a execução para no breakpoint, salvamos o código todo, já encodado, como um novo PE.
Pontos de atenção:
- o entrypoint do PE deve estar direcionado para o início do encoder/decoder que agora vai decodificar o payload sempre que o mesmo for carregado na memória;
- após o decoder ser executado, o payload precisa ser executado, e ao final direcionar o fluxo de execução para o entrypoint original;
- a pilha deve estar organizada, ao final de execução do payload e redirecionamento de fluxo de execução para o entrypoint original, da mesma maneira como estaria se o fluxo de execução normal não houvesse sido alterado.
Resumindo, esse é o trabalho que temos para criar um PE válido, com código malicioso embutido e bypass de antivirus. Um pouco trabalhoso, não?
Como expliquei antes, prefiro ensinar isso aos meus alunos, para que saibam o que acontece quando usamos ferramentas automatizadas, como é o caso do Shellter.
Shellter é uma ferramenta de injeção dinâmica de shellcode em PE's de 32bits, e os shellcodes podem ser tanto personalizados, quanto criados por outras ferramentas como o Metasploit ou Veil Framework (que já utiliza técnicas de evasão de AV muito melhores que o Metasploit).
Alguns tipos de payload que o Shellter já utiliza por padrão:
[1] meterpreter_reverse_tcp
[2] meterpreter_reverse_http
[3] meterpreter_reverse_https
[4] meterpreter_bind_tcp
[5] shell_reverse_tcp
[6] shell_bind_tcp
[7] WinExec
Outra característica interessantíssima dessa ferramenta, é o Stealth Mode feature, que permite infectar o mesmo binário mais de uma vez, e com mais de um payload. Eles chama isso de RedTeam funcionality, pois para quem precisa fazer um pentest físico, com engenharia social, é muito melhor ser capaz de executar vários ataques de uma só vez plugando um pendrive na máquina da vítima ou enviando um binário malicioso.
E uma das coisas mais importantes, para proteger contra a detecção de antivírus, é o código polimórfico, como destacado na documentação do próprio Shellter:
"Shellter will break down a given algorithm or code block and will mix its
effective instructions with dynamically generated polymorphic code that does
not interfere with the logic of the original algorithm."
E ainda possui proteções contra engenharia reversa :-)
Para aprender um pouco mais sobre essas ferramentas (Shellter e Veil Framework), acesse seus sites, pois tem muita coisa interessante lá!
Shellter Project - https://www.shellterproject.com/introducing-shellter/
Veil framework - https://www.veil-framework.com/framework/
Divirtam-se!
Nenhum comentário:
Postar um comentário