A 8 meses atrás eu comecei a desenvolver alguns malwares, com o intuito de entender mais sobre o formato PE e sobre como manipular o mesmo para atividades maliciosas, a pesquisa ficou tão interessante que eu decidi expandir para outras lingua...
A 8 meses atrás eu comecei a desenvolver alguns malwares, com o intuito de entender mais sobre o formato PE e sobre como manipular o mesmo para atividades maliciosas, a pesquisa ficou tão interessante que eu decidi expandir para outras linguagem e técnicas (com o tempo venho trazendo para cá, tenho de tudo por aqui). | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Fique tranquilo! eu irei disponibilizar o código no final do artigo. Irei começar do básico! que é relembrar um pouco sobre o formato PE. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
O formato de arquivo PE tem onze seções predefinidas, como é comum em aplicativos para Windows NT, baseado na especificação COFF (Common Object File Format), mas cada aplicativo pode definir suas próprias seções exclusivas para código e dados. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Para permanecer compatível com versões anteriores do MS-DOS e Windows, o formato de arquivo PE mantém o antigo cabeçalho MZ do MS-DOS. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
O formato consiste em um cabeçalho MZ do MS-DOS, seguido por um programa stub em modo real, a assinatura do arquivo PE, o cabeçalho do arquivo PE, o cabeçalho opcional PE, todos os cabeçalhos de seção e, finalmente, todos os body´s de seção. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
O cabeçalho opcional termina com uma matriz de entradas de diretório de dados que são endereços virtuais relativos a diretórios de dados contidos em body´s de seção. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Cada diretório de dados indica como os dados de um corpo de seção específico são estruturados. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
um breve resumo sobre como as seções são organizadas pode ser encontrado abaixo: | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
.text : Esta seção de um executável contém o código executável e tem mais do que uma secção. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
.rdata : Esta tabela lista a API do Windows utilizada pelo executável, ao longo de DLLs | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
.data : Contém dados inicializados. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
.bss : Esta seção contém dados não inicializados | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
.pdata : Contém informações sobre as seções de funções de tratamento de excepções. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
.reloc : Contém informações sobre recolocação. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
.rsrc : Contém informações como imagens e outras informações necessárias para a IU da aplicação. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Observação: TODAS AS SEÇÕES PODEM SER MANIPULADAS!!! | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
calma! não vou te deixar na mão, caso queira aprofundar no assunto acesse aqui!! | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Também não estou aqui para te ensinar programação, então caso queira aprender qualquer linguagem, acesse aqui!! | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Hands On!! | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
O programa abaixo, tem como intuito exemplificar a utilização de um Shellcode (binário do notepad.exe) que foi ofuscado utilizando base64: | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
O programa acima não é nada de surreal, mesmo utilizando base64 já informo que é facilmente detectável por soluções de segurança, já que é uma técnica absurdamente utilizada por frameworks como metasploit por exemplo. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
O programa é iniciado configurando uma variável contendo uma payload em base 64, como já dito, para efetuar um certo nível de ofuscação. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Logo em seguida temos a função responsável por decodificar a carga útil de Base64 para binário (notepad.exe), além disso a função é responsável por copiar o resultado para a memória que irá ser alocada. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
A main do código é o pão com ovo de cada dia! Aloca buffer de memória para carga útil, chama a função citada anteriormente, define a memória recém alocada para ser executável e se o processo de alocação de memória for bem sucedida irá executar a thread contendo o shellcode! | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
para ter acesso ao repositório contendo o código, clique aqui!! | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
espero que tenham gostado!! me acompanhe para mais artigos como esse!! | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
#malware #reverseengineer #malwaredev #devmalware #CTI #cti #cyberthreatintelligence #killchain #mitre #malwarereverseengineer #cyberintelligence #sigma #yara #security #cybersecurity #cybercrime #C #C++ #python #dev #offensivesecurity #defensivesecurity #blueteam #redteam #purpleteam |