[BLOG] Série Especial “Entendendo os Ataques Cibernéticos”
DLL Security: Protegendo-se Contra Ataques de Preloading e Hijacking
Data: 11 de setembro de 2025
Introdução
As Dynamic-Link Libraries (DLLs) são componentes fundamentais do sistema operacional Windows, permitindo que código seja compartilhado entre diferentes aplicações. Essa flexibilidade, no entanto, introduz vetores de ataque significativos caso não sejam aplicadas boas práticas de segurança.
Ataques de DLL Preloading (também conhecidos como binary planting) e DLL Hijacking têm sido explorados em softwares corporativos e aplicações populares, permitindo execução de código malicioso, escalonamento de privilégios e persistência em sistemas.
Este artigo explora as vulnerabilidades associadas à segurança de DLLs e apresenta técnicas de mitigação práticas para proteger aplicações contra essas ameaças.
Origem e história
O DLL Hijacking / Preloading é uma técnica antiga, explorada desde meados dos anos 2000, quando pesquisadores começaram a identificar falhas em como o Windows gerenciava a ordem de busca de bibliotecas. Na época, surgiram vários exploits envolvendo softwares legítimos que carregavam DLLs de diretórios inseguros.
Status atual
Apesar de antiga, a técnica continua relevante hoje e pode ser classificada como um ataque cibernético moderno, por três razões:
- Persistência no MITRE ATT&CK: ainda catalogada na matriz de técnicas adversárias modernas (T1055.001 – DLL Injection).
- Uso em ataques reais recentes: grupos de APT e malwares modernos (ex.: TrickBot, QBot) utilizam DLL hijacking como parte da cadeia de ataque, principalmente para persistência e lateral movement.
- Exploração em sistemas atuais: mesmo com o Safe DLL Search Mode ativo por padrão, aplicações mal desenvolvidas ainda podem ser enganadas, abrindo brecha para exploração.
Comparação com outras técnicas
- Não é considerado um zero-day moderno (a técnica já é bem conhecida).
- Mas continua sendo uma técnica “evergreen”: assim como phishing, SQL Injection ou abuso de macros, é uma tática tradicional que segue funcionando porque muitos desenvolvedores ainda cometem erros de implementação.
Como funciona o ataque de DLL Preloading (Binary Planting)
O ataque de DLL Preloading ocorre quando uma aplicação carrega uma DLL maliciosa no lugar da DLL legítima. Isso é possível explorando a ordem de busca de DLLs do Windows.
Quando uma aplicação tenta carregar uma DLL sem especificar o caminho completo, o sistema operacional procura a DLL em uma série de diretórios predefinidos. Se o invasor conseguir colocar uma DLL maliciosa em um desses diretórios, e ela for encontrada antes da original, o sistema carregará o código malicioso.
Com o Safe DLL Search Mode habilitado (ativo por padrão em versões modernas do Windows), a ordem de busca é:
- Diretório de onde a aplicação foi carregada.
- Diretório do sistema.
- Diretório do sistema de 16 bits.
- Diretório do Windows.
- Diretório atual.
- Diretórios listados na variável de ambiente PATH.
Se o atacante tiver controle sobre qualquer um desses diretórios (em especial o diretório atual ou o de downloads do usuário), pode plantar uma DLL maliciosa e aguardar que a aplicação a carregue.
Vetores de ataque e consequências
Vetores principais:
- Controle de diretórios no caminho de busca – ex.: downloads ou pastas temporárias.
- Aplicações vulneráveis – que carregam DLLs sem especificar caminho completo.
- Engenharia social – convencer o usuário a executar um programa a partir de um diretório contendo a DLL maliciosa.
Consequências:
- Execução de código arbitrário com os privilégios da aplicação.
- Escalonamento de privilégios caso a aplicação rode como administrador.
- Roubo de dados e exfiltração de informações sensíveis.
- Persistência: uso da técnica para manter acesso em sistemas comprometidos (também categorizada no MITRE ATT&CK como técnica de Persistence).
Práticas recomendadas de mitigação
Felizmente, existem contramedidas eficazes contra DLL Hijacking e Preloading:
- Especificar caminhos completos
Sempre use o caminho absoluto ao carregar DLLs com LoadLibrary, LoadLibraryEx, CreateProcess e ShellExecute.
HMODULE hDll = LoadLibraryEx(L”C:\\Windows\\System32\\kernel32.dll”, NULL, LOAD_LIBRARY_SEARCH_SYSTEM32);
- Uso de SetDllDirectory
Remova o diretório atual do caminho de busca com:
SetDllDirectory(L””);
Recomenda-se chamar logo no início do processo.
- Uso de SetDefaultDllDirectories
Disponível em versões mais recentes do Windows, permite restringir os diretórios de busca para aumentar a segurança. - Habilitar e manter o Safe DLL Search Mode
Esse recurso já vem ativo por padrão, movendo o diretório atual para o fim da lista de busca. - Assinatura e verificação de DLLs
Assine digitalmente suas DLLs e verifique a assinatura antes do carregamento para garantir autenticidade. - Ferramentas de análise de vulnerabilidades
Utilitários como o Process Monitor (ProcMon) ajudam a identificar operações inseguras de carregamento de DLLs. - Mecanismo KnownDLLs
Recurso do Windows que garante que DLLs críticas só possam ser carregadas de diretórios confiáveis.
Como a [CYLO] pode ajudar?
A [CYLO] juntamente como Cortex XSIAM (com o agente do Cortex XDR) consegue detectar e responder a DLL preloading / search-order hijacking e DLL sideloading.
O que o XSIAM cobre, na prática
1. Detecções analíticas prontas (Analytics / BIOCs)
- Alertas nativos como Possible DLL Search Order Hijacking e Possible DLL Side-Loading monitoram carregamentos de módulos e padrões típicos do abuso da ordem de busca (DLL não confiável, diretórios incomuns, binário assinado carregando DLL suspeita, etc.). Esses alertas já vêm mapeados a MITRE T1574.001 (Hijack Execution Flow: DLL) e às táticas de Persistence / Privilege Escalation / Defense Evasion.
- Há variações como Possible DLL Hijack into a Microsoft process (DLL não assinada injetada em processo Microsoft assinado), úteis para priorizar casos de alto impacto.
- A própria Unit 42 da Palo Alto destaca que Cortex XDR/XSIAM detecta técnicas conhecidas e inéditas de DLL hijacking usando o Analytics “DLL Hijacking” tag.
2. Capacidades de prevenção (quando habilitadas na política do agente)
- Behavioral Threat Protection + Local Analysis (ML) podem bloquear execução de módulos maliciosos/inesperados (inclusive DLLs) — mesmo quando desconhecidos — com base em atributos e comportamento. Unit 42+1
3. Telemetria unificada e resposta
- Como plataforma, o XSIAM centraliza dados e costura eventos (stitching), oferecendo automação/orquestração para isolar host, bloquear hash, quarentenar arquivo, abrir investigação, etc., ao disparar desses alertas.
Conclusão
A segurança de DLLs é um aspecto crítico do desenvolvimento em ambiente Windows. Ataques de DLL Preloading e Hijacking são amplamente utilizados por invasores, mas podem ser prevenidos com práticas simples e eficazes.
Ao especificar caminhos completos, restringir a ordem de busca e validar a integridade das DLLs, os desenvolvedores reduzem drasticamente o risco de exploração.
Dica final: Ao aplicar essas medidas, você não apenas protege sua aplicação, mas também contribui para um ecossistema Windows mais resiliente contra ataques.
Referências
[1] Microsoft. (2021). Dynamic-Link Library Security. Microsoft Learn. https://learn.microsoft.com/en-us/windows/win32/dlls/dynamic-link-library-security
[2] Okta. (2024). DLL Hijacking Definition Tutorial & Prevention. https://www.okta.com/identity-101/dll-hijacking/
[3] MITRE ATT&CK. (n.d.). T1055.001: Process Injection: DLL Injection. https://attack.mitre.org/techniques/T1055/001/