Busca de evidências de carregamento lateral de DLL com PowerShell e Sysmon

Vista lateral de um desenvolvedor de software programando em um computador enquanto trabalha em casa

Autora

John Dwyer

Head of Research

IBM Security X-Force

Recentemente, o X-Force Red lançou uma ferramenta chamada Windows Feature Hunter, que identifica alvos para carregamento lateral de bibliotecas de vínculo dinâmico (DLL) em um sistema Windows usando o Frida. Para oferecer uma perspectiva de contramedida defensiva contra o carregamento lateral de DLLs, o X-Force Incident Response lançou o SideLoaderHunter, um script de perfilamento de sistema e configuração do Sysmon projetado para identificar evidências de carregamento lateral em sistemas Windows. Este post vai falar sobre por que o IBM X-Force acha que a ferramenta é necessária, descrever suas funções e analisar alguns casos de uso.

O que é carregamento lateral de DLL?

No Microsoft Windows, os programas podem definir quais bibliotecas são carregadas no tempo de execução especificando um caminho completo ou usando outro mecanismo, como um manifesto. Um manifesto de programa é um arquivo externo ou recurso embutido dentro de uma aplicação usado para gerenciar os nomes e versões de assemblies compartilhados lado a lado, para os quais a aplicação deve ser carregada durante a execução. Um manifesto de programa pode incluir redirecionamentos de DLL, nomes de arquivos ou caminhos completos. Se um manifesto se referir apenas a um nome de arquivo de biblioteca, ele será considerado uma referência fraca e estará vulnerável a um ataque de carregamento lateral de DLL.

Se uma referência fraca for feita a uma biblioteca, o Windows tentará localizar a DLL por meio de uma ordem de pesquisa predefinida. O primeiro local que o Windows pesquisará é o diretório no qual a aplicação é carregada.

Um ataque de carregamento lateral de DLL é uma técnica adversária que visa aproveitar as referências de biblioteca fracas e a ordem de pesquisa padrão do Windows, inserindo um arquivo DLL malicioso que se passa por uma DLL legítima no sistema, que será carregada automaticamente por um programa legítimo.

Para obter mais informações sobre o carregamento lateral de DLL, consulte MITRE ATT& CK Technique T1574.00.

As mais recentes notícias de tecnologia, corroboradas por insights de especialistas.

Mantenha-se atualizado sobre as tendências mais importantes (e intrigantes) do setor em IA, automação, dados e muito mais com o boletim informativo Think. Consulte a Declaração de privacidade da IBM.

Agradecemos sua inscrição!

Sua assinatura será entregue em inglês. Você pode encontrar um link para cancelar a assinatura em todos os boletins informativos. Você pode gerenciar suas inscrições ou cancelar a inscrição aqui. Consulte nossa Declaração de privacidade da IBM para obter mais informações.

Cenário de ameaças de carregamento lateral de DLL

O carregamento lateral de DLL não é uma técnica nova, pois a vulnerabilidade de sequestro de ordem de pesquisa no Windows existe desde o Windows XP. O X-Force observou o carregamento lateral de DLL usado pelo Trojan bancário Metamorfo, que implanta arquivos MSI maliciosos que extraem um binário assinado e uma DLL maliciosa para executar um carregador de malware de segundo estágio. Devido à ordem de pesquisa padrão incorporada ao Windows, o binário assinado carregará a DLL maliciosa e continuará o fluxo de execução.

Embora não seja a técnica mais comum utilizada por agentes da ameaça, o carregamento lateral de DLL está sendo cada vez mais utilizado por operadores de ransomware, que têm aproveitado o carregamento lateral de DLL para executar sua carga útil e evitar a detecção por produtos de segurança.

Por exemplo, o operador de ransomware REvil aproveitou uma vulnerabilidade de carregamento lateral de DLL em um executável do Windows Defender (MsMpEng.exe) para carregar uma DLL maliciosa chamada mpsvc.dll contendo a carga útil do ransomware.

Mixture of Experts | 12 de dezembro, episódio 85

Decodificando a IA: resumo semanal das notícias

Participe do nosso renomado painel de engenheiros, pesquisadores, líderes de produtos e outros enquanto filtram as informações sobre IA para trazerem a você as mais recentes notícias e insights sobre IA.

Detecção de carregamento lateral de DLL

O X-Force não observou muitos agentes da ameaça ou malware sobrepondo binários ou módulos existentes em um sistema para executar um ataque de carregamento lateral de DLL, pois isso poderia causar o travamento de um sistema ou criar erros que poderiam levar à detecção.

Em vez disso, os agentes da ameaça ou malware que aproveitaram o carregamento lateral de DLL geralmente dependem de dois comportamentos antes de executar um ataque:

  1. Implantar um executável assinado em um diretório de destino junto com a DLL maliciosa.
  2. Migrar um executável do Windows do System32 ou SysWow64 na máquina de destino para um diretório não padrão e colocar a DLL maliciosa dentro da mesma pasta.

O primeiro caso de uso é uma metodologia de detecção bastante simples. Embora o binário possa estar assinado, sua execução ainda seria considerada uma anomalia dentro de um conjunto de dados de execução do programa. No exemplo do Metamorfo mencionado anteriormente, o malware instalou o utilitário de despejo de memória do Avast, AVDump32.exe. renomeado como jesus.exe, que carregou lateralmente uma DNS maliciosa chamada dbghelp.dll.

Neste exemplo, a identificação de jesus.exe foi realizada por meio da realização de uma análise de frequência nos nomes de arquivos registrados em um conjunto de dados de execução do programa.

Análise de frequência do nome binário no conjunto de dados de execução do programa

Figura 1: análise de frequência do nome binário no conjunto de dados de execução do programa

O segundo caso de uso pode ser mais difícil de detectar, pois normalmente aproveita aplicações padrão confiáveis do Windows para executar a DLL maliciosa, o que ajuda a atividade maliciosa a se misturar com dados de execução de programas não maliciosos. Há oportunidades de detecção por meio da análise de frequência do caminho completo do binário dentro de um conjunto de dados de execução do programa, mas sem qualquer tipo de filtragem, essa análise é muito ineficiente.

Em vez disso, o conjunto de dados de execução de programas pode ser filtrado apenas para incluir nomes de executáveis que, por padrão, residem no System32 ou no SysWow64. Nesse caso, a análise seria realizada em todos os dados de execução do programa associados aos executáveis do System32 ou do SysWow64 em que o caminho completo do binário não correspondia ao padrão.

Para realizar essa análise, crie uma tabela de pesquisa dos executáveis padrão do System32 e do SysWow64 dos sistemas Windows, que atuarão como um conjunto de dados de controle, no qual os defensores podem identificar anomalias.

O script do PowerShell a seguir enumera os executáveis dentro do System32 e SysWow64 e exporta os resultados para um CSV.

O uso do sysbins.csv como grupo de controle possibilita a identificação da execução do programa e fornece evidências de aplicações do Windows fora de seus diretórios padrão System32 ou SysWow64.

$SysBinList = Get-ChildItem $env:SystemRoot\system32\
,$env:SystemRoot\syswow64\ -Recurse -ErrorAction SilentlyContinue | Where-Object
{($_.Extension -like “.exe”)} -ErrorAction SilentlyContinue | Select Name;$SysBinLobj
= $SysBinList.Name | select -Unique | Select-Object @{Name=’Name’;
Expression={$_}};$SysBinLobj | export-csv sysbins.csv -NoTypeInformation
Análise de frequência do caminho completo dos binários do System32

Figura 2: análise de frequência no caminho completo dos binários do System32

É importante observar que os agentes da ameaça podem evitar a detecção usando a correspondência de nome de arquivo ao renomear o executável binário, pois a técnica de carregamento lateral permanecerá viável independentemente do nome do executável.

Side-LoadSide-Loading mspaint.exe (renomeado como notmspaint.exe) com msftedit.dll

Figura 3: mspaint.exe de carregamento lateral (renomeado como notmspaint.exe) com msftedit.dll

Uma maneira de detectar executáveis renomeados é por meio de uma criação de perfil adicional dos valores de hash dos executáveis System32 e SysWow64 em máquinas Windows ou da coleta do nome interno de arquivos executáveis de sistemas de destino. Algumas soluções de monitoramento de execução de processos, como o Sysmon, irão capturar o nome interno de um executável após a execução. Além disso, o PowerShell possui o recurso para enumerar o nome original de um executável após ele ter sido renomeado.

Listando o atributo de nome de arquivo original no PowerShell

Figura 4: listando o atributo de nome de arquivo original no PowerShell

O script a seguir enumerará uma lista de hashes executáveis nos diretórios System32 e SysWow64, que também podem ser usados como um conjunto de dados de controle para identificar executáveis padrão do Windows em locais que não são padrão.

$binarray=@()$SysBinList = Get-ChildItem $env:SystemRoot\system32\,$env:SystemRoot
\syswow64\ -Recurse -ErrorAction SilentlyContinue
| Where-Object {($_.Extension -like “.exe”)} -ErrorAction SilentlyContinue | Select FullName,Name

foreach($bin in $SysBinList)

{

$binhash = Get-FileHash $bin.FullName -Algorithm SHA1

$binobject = New-Object psobject

$binobject | Add-Member -MemberType NoteProperty -Name “Name” -Value $bin.Name

$binobject | Add-Member -MemberType NoteProperty -Name “Hash” -Value $binhash.Hash

$binarray += $binobject

}

$binarray | export-csv sysbinhash.csv -NoTypeInformation

Figura 5: script do PowerShell para coletar hashes de arquivos

No entanto, as detecções mencionadas acima são mais eficazes quando há dados de execução de processos centralizados e a capacidade de estabelecer referências de atividades ao longo do tempo em um ambiente. Isso é muito raro durante uma investigação.

Para superar esse desafio, o X-Force implementa utilitários de coleta de dados para reunir metadados de endpoints em escala. Um desses utilitários é o SideLoadHunter, que irá analisar o endpoint em busca de DLLs e executáveis dentro de perfis de usuário, System32 e SysWow64. Após a criação de perfis dos executáveis e DLLs, o X-Force realiza uma análise comparativa para identificar possíveis evidências de carregamento lateral de DLL por meio de nomes de arquivos, valores de hash e nomes internos. Além disso, os artefatos de execução do programa são analisados em busca de evidências de executáveis carregados lateralmente que não existem mais no disco. Essa ferramenta foi adaptada para o PowerShell e está disponível para download aqui.

SideLoadHunter

As principais funções do SideLoadHunter são:

  • Get-SideLoadDetect: função de análise comparativa projetada para identificar situações em que um executável System32/SysWow64 está localizado em um diretório do espaço do usuário juntamente com uma DLL que corresponde a um nome de DLL System32/SysWow64, mas não é assinado pela Microsoft.
  • Get-SusShimcache: para fornecer algumas detecções de executáveis carregados lateralmente que não estão mais no disco, o SusShimcache analisará as entradas do ShimCache para executáveis System32 e SysWow64 que foram executados em um local não padrão.
  • Get-SusExecs e Get-SusDLLs: traça o perfil de um sistema para localizar executáveis System32 e SysWow64 e arquivos DLL que não existem em seu local padrão.
Execução do Side-Loadhunter.ps1

Figura 6: execução do Side-Loadhunter.ps1

SideLoadDetect

Por meio da pesquisa contínua de arquivos executáveis vulneráveis ao carregamento lateral em sistemas Windows, o X-Force identificou uma lista de nomes de executáveis e as DLLs associadas que podem ser carregadas lateralmente.

Uma lista completa de alvos de carregamento lateral pode ser encontrada aqui.

Para auxiliar na detecção em tempo real desses alvos de carregamento lateral, o X-Force migrou a lista de carregamentos laterais conhecidos para uma configuração do Sysmon destinada a registrar os carregamentos de módulos para os executáveis e DLLs associados.

A configuração do Sysmon pode ser encontrada aqui.

Evento Sysmon do Side-Loadhunter.xml

Figura 7: evento Sysmon do Side-LoadHunter.xml

Mais do que System32 e SysWow64

Embora malwares e adversários comumente mirem em executáveis dentro dos diretórios System32 e SysWow64 para carregamento lateral, a possibilidade de carregar uma DLL em um executável não se restringe a esses diretórios. Por exemplo, através de esforços colaborativos entre o X-Force Incident Response e o X-Force Red, o executável OneDriveStandaloneUpdater.exe, existente em %userprofile%\appdata\local\Microsoft\OneDrive por padrão nos sistemas Windows 10, pode ser carregado lateralmente via WofUtil.dll, que reside em %windir%\system32\ por padrão.

Carregamento lateral OneDriveStandaloneUpdater.exe com WofUtil.dll

Figura 8: carregamento lateral do OneDriveStandaloneUpdater.exe com o WofUtil.dll

Atualmente, o X-Force está conduzindo pesquisas para criar uma lista mais exaustiva de arquivos executáveis e DLL que são alvos de carregamento paralelo, portanto, fique atento às futuras atualizações.