Pular para o conteúdo
Categoria: Red Team11 min de leitura

DLL sideloading e sequestro: como funciona e como detectar

Compartilhar

Por Lucas Andrade ·

Guia defensivo sobre DLL sideloading e sequestro da ordem de busca: como a tecnica abusa da confianca, a telemetria que a expoe e passos concretos de hardening.

Neste artigo

O DLL sideloading e o sequestro da ordem de busca de DLL estao entre as tecnicas mais duraveis de uma intrusao moderna. Sao silenciosos, cavalgam na reputacao de software assinado e sobrevivem rotineiramente a controles que so olham para binarios obviamente maliciosos. Este artigo e escrito para defensores, respondedores de incidentes e engenheiros de plataforma que precisam entender a tecnica para detecta-la e neutraliza-la. Ficamos deliberadamente em nivel conceitual: sem payloads prontos para executar e sem instrucoes passo a passo para comprometer sistemas de terceiros. O objetivo e construir um modelo mental preciso de como o abuso de confianca acontece no Windows e traduzir esse modelo em logs, telemetria e hardening que voce pode implantar esta semana.

O que sao de fato o sideloading e o sequestro de DLL

Aplicacoes Windows raramente vem como um unico executavel monolitico. Elas carregam funcionalidade sob demanda a partir de bibliotecas de vinculo dinamico (DLLs). Quando um programa pede ao sistema operacional para carregar uma biblioteca por nome, o Windows resolve esse nome por uma ordem de busca definida: uma sequencia de diretorios verificados um apos o outro ate encontrar um arquivo correspondente. O sequestro da ordem de busca de DLL explora o fato de que um atacante capaz de colocar um arquivo mais cedo nessa sequencia consegue que sua biblioteca seja carregada em vez da pretendida. O DLL sideloading e uma variante muito proxima: um executavel legitimo, muitas vezes assinado, e colocado ao lado de uma DLL maliciosa que carrega o nome que a aplicacao espera, de modo que o processo confiavel carrega codigo nao confiavel. Em ambos os casos o codigo malicioso herda a identidade, a reputacao de assinatura e frequentemente os privilegios do processo hospedeiro.

A razao pela qual essas tecnicas importam aos defensores e a heranca de confianca. Um binario assinado por um fabricante conhecido passa sem problemas por allowlists ingenuas e verificacoes de reputacao. Quando esse binario carrega uma DLL controlada pelo atacante, a logica maliciosa agora executa dentro de um processo confiavel. Ferramentas de endpoint que se baseiam na reputacao do processo, e analistas que olham uma arvore de processos e veem um nome familiar, podem ambos ser enganados. E precisamente por isso que a tecnica tem tanta permanencia, tanto no crime comum quanto em intrusoes direcionadas.

Como funciona em alto nivel

Conceitualmente o abuso tem tres pecas moveis. Primeiro, um carregador vulneravel: uma aplicacao que pede uma biblioteca por um nome ambiguo em vez de um caminho totalmente qualificado e verificado. Segundo, um local gravavel mais cedo na ordem de busca do que a biblioteca legitima, comumente o proprio diretorio de trabalho da aplicacao. Terceiro, uma biblioteca maliciosa que exporta os simbolos que a aplicacao espera, para que o carregamento tenha sucesso e a aplicacao continue funcionando normalmente. Quando esses tres se alinham, o processo confiavel carrega e executa codigo do atacante sem explorar nenhum erro de corrupcao de memoria; e puro abuso do comportamento de carregamento previsto.

Variantes sofisticadas adicionam uma camada de proxy para que a aplicacao nao trave nem se comporte de forma anomala. A DLL maliciosa encaminha ou reimplementa as funcoes exportadas esperadas, repassando as chamadas legitimas a biblioteca real enquanto executa sua propria logica em paralelo. Esse proxy de funcoes mantem a experiencia do usuario intacta, o que atrasa a descoberta. Do ponto de vista da deteccao, a percepcao crucial e que o modulo malicioso e carregado de um caminho inesperado, e essa anomalia de caminho, nao o conteudo da DLL, costuma ser o sinal mais confiavel.

O vetor e a superficie de ataque

A superficie de ataque e mais ampla onde quer que diretorios gravaveis cruzem com executaveis confiaveis. Zonas de risco classicas incluem pastas de aplicacao por usuario, diretorios temporarios, pastas de download de onde os usuarios lancam instaladores e qualquer diretorio de aplicacao onde usuarios padrao tenham permissao de escrita por ACLs frouxas. Aplicacoes portateis e instaladores autoextraiveis sao hospedeiros frequentes porque, por design, rodam de locais gravaveis pelo usuario. Software de terceiros que distribui muitas DLLs auxiliares aumenta a superficie apenas por elevar o numero de nomes que um atacante poderia satisfazer.

A persistencia e um objetivo comum. Como a DLL maliciosa carrega sempre que a aplicacao confiavel roda, um atacante que a implanta em um programa lancado com frequencia ganha execucao repetivel que parece rotineira. Por isso a tecnica aparece tanto em cadeias de acesso inicial quanto em pontos de apoio de longo prazo. Entender a superficie permite priorizar: inventarie os executaveis assinados da sua frota que resolvem bibliotecas a partir de caminhos gravaveis e voce tera uma lista ordenada dos carregadores que mais merecem vigilancia.

Deteccao: logs, Event IDs e telemetria

A deteccao comeca pela telemetria de carga de imagem/modulo. No Windows, o Sysmon Event ID 7 (Image Loaded) e o cavalo de batalha: registra qual processo carregou qual modulo, a partir de qual caminho, junto ao status de assinatura do modulo. A regra de maior valor e uma regra de anomalia de caminho: um executavel assinado conhecido carregando uma DLL de nome conhecido a partir de um diretorio nao padrao (um perfil de usuario, uma pasta temporaria, um caminho de download) em vez de System32 ou do diretorio de instalacao do fabricante. Correlacione sobre a tupla processo pai, nome de DLL esperado e caminho de carga real.

Enriqueca com sinais de assinatura e procedencia. Um processo confiavel carregando um modulo sem assinatura ou com assinatura invalida, ou um modulo assinado por um certificado inesperado, merece escrutinio. O Sysmon Event ID 1 (Process Create) fornece a linha de comando e o diretorio de trabalho que preparam a carga; o Event ID 11 (File Create) pode capturar a DLL sendo escrita no diretorio do carregador momentos antes da execucao. Plataformas EDR expoem eventos equivalentes de carga de modulo e escrita de arquivo, frequentemente com analitica embutida para anomalias de caminho de carga. O evento de seguranca do Windows 4688 (com auditoria de linha de comando habilitada) e o log de bloco de script do PowerShell (4104) ajudam a reconstruir como o diretorio de staging foi preenchido.

Hipoteses de caca que compensam: binarios assinados carregando DLLs de %APPDATA%, %TEMP% ou %USERPROFILE%\Downloads; o mesmo nome de DLL existindo em multiplos locais entre hosts; um executavel legitimo copiado para fora do seu diretorio de instalacao para um caminho gravavel pelo usuario; e processos carregando modulos cujo carimbo de criacao e apenas segundos mais antigo que o proprio processo. Estabeleca primeiro uma linha de base de como sao as cargas de modulo normais das suas aplicacoes criticas: a anomalia so e visivel contra uma linha de base conhecida como boa. Combine isso com varreduras de persistencia tipo autoruns para capturar DLLs implantadas referenciadas por tarefas agendadas ou itens de inicializacao.

Mitigacao e hardening

O controle mais duravel e eliminar a condicao de diretorio gravavel mais binario confiavel. Imponha ACLs estritas para que usuarios padrao nao possam escrever em nenhum diretorio de onde executaveis confiaveis rodam, e nunca deixe diretorios de trabalho de aplicacao gravaveis por todos. Para o seu proprio software, carregue sempre bibliotecas com caminhos totalmente qualificados, chame SetDefaultDllDirectories com uma politica de busca restritiva e prefira LoadLibraryEx com LOAD_LIBRARY_SEARCH_SYSTEM32 ou flags de busca segura explicitos. Esses controles do lado do desenvolvedor colapsam a ambiguidade da qual a tecnica depende.

No nivel de plataforma, implante controle de aplicacoes. O Windows Defender Application Control (WDAC) e o AppLocker podem impor que apenas modulos aprovados e assinados carreguem, e as politicas modernas de WDAC podem validar DLLs, nao apenas executaveis, fechando a brecha do sideloading. Habilite o modo de busca segura de DLL (ligado por padrao em sistemas suportados, mas verifique via o valor de registro SafeDllSearchMode) e considere politicas de mitigacao de processo que bloqueiam a carga de DLLs nao assinadas pela Microsoft ou remotas para processos sensiveis. Mantenha o software de terceiros com patches, ja que os fabricantes corrigem cada vez mais os padroes de carga vulneraveis com que suas aplicacoes foram enviadas.

Reduza o raio de dano com minimo privilegio e segmentacao: aplicacoes que rodam como usuarios padrao limitam o que o codigo sideloaded pode alcancar, e a segmentacao de rede restringe o movimento lateral se um ponto de apoio for estabelecido. Por fim, trate sua cadeia de suprimentos de software como parte da superficie: verifique a integridade do instalador, prefira fabricantes que enviam para diretorios protegidos e monitore o padrao classico de um app portatil legitimo largado em uma pasta gravavel pelo usuario ao lado de uma DLL inesperada.

Armadilhas comuns para defensores

O erro mais comum e confiar no nome do processo. Como o processo que carrega e legitimo e assinado, alertas suprimidos por reputacao do assinante deixarao passar o sideloading em silencio. Construa regras que inspecionam o modulo carregado e seu caminho, nao apenas o processo hospedeiro. Uma segunda armadilha e a fadiga de alertas por regras de caminho ruidosas: muitas aplicacoes legitimas carregam DLLs de diretorios de usuario, entao ajustar contra uma linha de base por aplicacao e essencial antes de habilitar bloqueio. Uma terceira e supor que o EDR cobre isso por padrao: a deteccao de anomalia de caminho de carga de modulo muitas vezes precisa ser habilitada ou escrita explicitamente.

As equipes tambem subestimam os sosias legitimos. Alguns fabricantes de fato enviam DLLs para %APPDATA%, e algumas ferramentas de desenvolvimento carregam bibliotecas de diretorios de build. Documente essas excecoes de forma deliberada em vez de alargar a regra ate a cegueira. Por fim, nao esqueca as linhas do tempo forenses: quando encontrar um modulo suspeito, pivote sobre a hora de criacao do arquivo, o processo que o escreveu e qualquer evento anterior de extracao de arquivo ou download para reconstruir como a DLL chegou.

Uma checklist pratica para defensores

Use isto como checklist de trabalho. 1) Inventarie executaveis assinados da sua frota que resolvem bibliotecas de caminhos gravaveis. 2) Implante Sysmon (ou EDR equivalente) com log de carga de modulo Event ID 7 e uma regra de anomalia de caminho para carregadores assinados lendo DLLs de diretorios gravaveis pelo usuario. 3) Habilite auditoria de linha de comando (4688) e log de bloco de script do PowerShell (4104). 4) Tranque as ACLs em diretorios de aplicacao e de trabalho. 5) Implante WDAC ou AppLocker com regras de DLL primeiro em modo auditoria, depois em imposicao. 6) Verifique o SafeDllSearchMode e aplique politicas de mitigacao de processo a apps sensiveis. 7) Estabeleca uma linha de base de cargas de modulo normais para aplicacoes criticas antes de alertar. 8) Ensaie um playbook de resposta a incidente que pivote de um modulo suspeito para seus eventos de criacao de arquivo e staging.

Perguntas frequentes

O DLL sideloading e uma vulnerabilidade para corrigir ou uma tecnica? E principalmente uma tecnica que abusa do comportamento de carga legitimo, embora aplicacoes especificas possam ter bugs de carga vulneravel corrigiveis. A defesa e, portanto, tanto configuracao (ACLs, controle de aplicacoes, politica de busca) quanto a correcao de infratores individuais a medida que os fabricantes os tratam. Trate como um controle continuo, nao como um conserto unico.

O antivirus sozinho o detem? Nao de forma confiavel. Como o codigo malicioso roda dentro de um processo confiavel e assinado, ferramentas baseadas em assinatura e reputacao muitas vezes o deixam passar. Um EDR comportamental com analitica de caminho de carga de modulo, combinado a controle de aplicacoes e hardening de diretorios, e muito mais eficaz do que qualquer scanner isolado.

Conclusao

O DLL sideloading e o sequestro da ordem de busca perduram porque convertem confianca em arma: um processo assinado e familiar torna-se o veiculo do codigo do atacante. A vantagem do defensor e que o abuso deixa uma impressao digital consistente: um binario confiavel carregando um modulo inesperado de um caminho inesperado e gravavel. Instrumente as cargas de modulo, estabeleca uma linha de base do normal, imponha controle de aplicacoes ate o nivel de DLL e elimine a condicao de diretorio gravavel mais binario confiavel onde puder. Faca isso e uma tecnica construida sobre confianca herdada torna-se um dos comportamentos mais confiavelmente detectaveis no seu ambiente.

Compartilhar

Compartilhar

Leituras relacionadas

Nenhum comentário ainda

Seja o primeiro a comentar.

Deixe seu comentário

Entre com sua conta Canverly para comentar. Você pode usar a mesma conta em qualquer site da rede.

Entrar com Canverly