Você está na página 1de 45

App control with DLL Hijack + Proxy for fun and not profit

-= SWaNk =-
Roteiro
✓ !whoami AND whoami
✓ Motivação
✓ DLL?
✓ PE Format
✓ Search Order
✓ DLL Proxy
✓ Modus operandi
✓ PoC||GTFO
✓ Mitigação
Roteiro
✓ !whoami AND whoami
✓ Motivação
✓ DLL?
✓ PE Format
✓ Search Order
✓ DLL Proxy
✓ Modus operandi
✓ PoC||GTFO
✓ Mitigação
!(whoami)
✓ Purista (O melhor SO/linguagem é a que vai resolver o seu problema)
✓ Deus do código (Me viro mas tô longe de ser elegante)
✓ Oráculo de conhecimento (Tenho várias lacunas!)
✓ Segurança por obscuridade
✓ Banker (Malandro que é malandro anda na linha)
✓ White hat e muito menos Black hat
whoami
✓ Rafael Salema Marques (SWaNk)
✓ Malware coder
✓ Mabouia Ransomware OSX PoC
✓ Publicação na 29a issue 7 (New way to startup files - ShellExecute
InstallScreenSaver)
✓ Pesquisador (PhD) Detecção de rootkits
✓ Engenharia reversa e análise de malware
✓ Red Team – Inteligência cibernética
✓ Membro ativo VXUG (https://vx-underground.org/)
whoami
whoami
whoami
✓ Mabouia Ransomware: Acabar com o mito e alertar usuários
Roteiro
✓ !whoami AND whoami
✓ Motivação
✓ DLL?
✓ PE Format
✓ Search Order
✓ DLL Proxy
✓ Modus operandi
✓ PoC||GTFO
✓ Mitigação
Motivação
✓ Por que DLL Hijack é relevante?

▪ Persistência (Malware)
▪ Elevação de privilégios (Bounty)
▪ Pode ser usada em uma aplicação
assinada e que esteja dentro de uma
whitelist, que no ponto de vista do
atacante é muito bom para bypass de
soluções de defesa
▪ Apesar de ser considerada uma
técnica não muito elegante, vem sendo
utilizada há anos com efetividade
Motivação
✓ Por que DLL Proxy é relevante?

▪ Modificar comportamento de programa


▪ Coletar informação sensível
Motivação
✓ A CIA utilizava técnicas de DLL Hijack em suas ferramentas de campo (Fine Dining)
Motivação

...ainda dá pra fazer


muita maldade em
um Windows 10 x64
atualizado
Roteiro
✓ !whoami AND whoami
✓ Motivação
✓ DLL?
✓ PE Format
✓ Search Order
✓ DLL Proxy
✓ Modus operandi
✓ PoC||GTFO
✓ Mitigação
DLL?
✓ Dynamic Link Library (DLL)
✓ É uma biblioteca compartilhada
✓ O objetivo inicial era economizar espaço em disco e memória
✓ Segue o padrão de arquivos executáveis do Windows (PE)
✓ Podem conter códigos, dados, recursos (ícones, fontes, e etc...)
✓ É uma forma de compartilhar código entre programas (Exporta funções)
✓ Possibilita modularidade

✓ https://support.microsoft.com/en-us/help/815065/what-is-a-dll
DLL?
Caso eu queira criar uma caixa de
mensagem padrão do Windows, eu
tenho que carregar a DLL do
sistema user32.dll e chamar a
função MessageBoxA.
User32.dll
MessageBoxA()
A interação do usuário com o
sistema de Arquivos, Registro e
outras funcionalidades do SO são
viabilizadas por funções de DLLs
nativas do sistema (Windows API)

Aplicação carrega a DLL na


memória e utiliza suas funções
DLL?
Roteiro
✓ !whoami AND whoami
✓ Motivação
✓ DLL?
✓ PE Format
✓ Search Order
✓ DLL Proxy
✓ Modus operandi
✓ PoC||GTFO
✓ Mitigação
PE Format
▪ O formato PE é utilizado em arquivos executáveis (.exe, .dll, .cpl e etc...)
▪ O SO utiliza as informações padronizadas que existem dentro do binário em
disco (seções e cabeçalhos e atributos) para poder carregá-lo em memória
▪ Em relação a importação e exportação de código, existem duas tabelas: IMPORT
e EXPORT TABLES
PE Format
▪ Usando o CFF Explorer:

▪ User32.dll
▪ MessageBoxA
PE Format
✓ EXPORT TABLE
▪ Tabela que guarda as
funções que podem ser
utilizadas por outros
programas
PE Format
✓ IMPORT TABLE
▪ Tabela que guarda
informações sobre as
funções que o
programa vai utilizar
durante sua execução
✓ Uma DLL também pode
importar funções de outras
DLLs
✓ DLLs podem ter Entry Point
SPOILER ALERT
(São opcionais, utilizados O Entry Point de um binário PE é uma referência para o
nesse caso para a própria SO de onde está localizada a primeira instrução a ser
inicialização da DLL) executada. Ele será utilizado em nosso ataque
Roteiro
✓ !whoami AND whoami
✓ Motivação
✓ DLL?
✓ PE Format
✓ Search Order
✓ DLL Proxy
✓ Modus operandi
✓ PoC||GTFO
✓ Mitigação
Search Order
Mas como o SO sabe onde está a DLL se geralmente no PE não tem nenhuma
referência de localização da DLL no sistema de arquivos?
Search Order
✓ O Windows busca a DLL em diversos locais
predefinidos no Sistema (DLL Search Order) caso
o desenvolvedor não tenha definido um caminho
completo ou um manifesto.
✓ 2 Tipos de Busca:
▪ Safe DLL Search
▪ Unsafe DLL Search
✓ A partir do Windows XP SP2 Safe DLL Search é
padrão para aplicações Desktop.
✓ Qualquer DLL presente na chave de registro
KnownDLLs não entra na busca, está no system

https://docs.microsoft.com/en-us/windows/win32/dlls/dynamic-link-library-search-order
Search Order
✓ IMPORTANTE:
▪ Se uma DLL com mesmo nome já está carregada
na memória, o SO vai usar a carregada.
▪ Se a DLL carregada está na lista de KnownDLLs
e tem dependência em outra DLL, o SO vai
executar busca (possibilidades…)
▪ HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\
Control\Session Manager\KnownDLLs
Search Order
✓ Safe DLL Search (default)
▪ Diretório onde a aplicação foi carregada
▪ Diretório do sistema (%WINDOWS%\System32)
▪ Diretório do sistema 16-bits (%WINDOWS%\System)
▪ Diretório do Windows (%WINDOWS%)
▪ Diretório atual
▪ Diretórios presents nas variáveis de ambiente (%PATH%)

https://docs.microsoft.com/en-us/windows/win32/dlls/dynamic-link-library-search-order
Search Order
✓ Unsafe DLL Search
▪ Diretório atual
▪ Diretório onde a aplicação foi carregada
▪ Diretório do sistema (%WINDOWS%\System32)
▪ Diretório do sistema 16-bits (%WINDOWS%\System)
▪ Diretório do Windows (%WINDOWS%)
▪ Diretórios presents nas variáveis de ambiente (%PATH%)

https://docs.microsoft.com/en-us/windows/win32/dlls/dynamic-link-library-search-order
Roteiro
✓ !whoami AND whoami
✓ Motivação
✓ DLL?
✓ PE Format
✓ Search Order
✓ DLL Proxy
✓ Modus operandi
✓ PoC||GTFO
✓ Mitigação
DLL Proxy
✓ Também conhecido como DLL Forwarding
✓ Funcionalidade utilizada para encaminhar as
chamadas de funções para outra DLL
✓ Utilizado para dar nova funcionalidade a programas
legados… Mas na prática a galera usa pra modificar o
comportamento das funções de interesse (API Hook)

ORIGINAL
APP EVIL DLL
DLL
Roteiro
✓ !whoami AND whoami
✓ Motivação
✓ DLL?
✓ PE Format
✓ Search Order
✓ DLL Proxy
✓ Modus operandi
✓ PoC||GTFO
✓ Mitigação
Modus Operandi
O que precisamos para executar o ataque de DLL Hijack na vida real?
✓ Achar diretório que:
▪ A aplicação busque uma DLL e não ache
▪ Usuário tenha permissão de escrita
▪ Colocar a DLL maliciosa no diretório

Como achar?
✓ Procmon
✓ icacls
Modus Operandi
O que precisamos para executar o ataque de DLL Proxy na vida real?
✓ Carregar a DLL maliciosa na memória do processo alvo
▪ DLL Hijack é seu amigo para fazer isso (Vantagens e devantagens)
✓ Modificar as funções de interesse
✓ Encaminhar as que não temos interesse
Modus Operandi
Saber como as coisas funcionam no
detalhe é fundamental para evoluir
técnicas e achar falhas… Se você
pensa em seguir carreira na área da
segurança, precisa ir fundo nos
protocolos, arquiteturas e conceitos
pra poder achar vulnerabilidades.

O mundo não precisa de mais


rodadores de script, Nessus e
NMAP…
Roteiro
✓ !whoami AND whoami
✓ Motivação
✓ DLL?
✓ PE Format
✓ Search Order
✓ DLL Proxy
✓ Modus operandi
✓ PoC||GTFO
✓ Mitigação
POC || GTFO
✓ Alvo: Telegram Desktop
POC || GTFO
✓ Alvo: Telegram Desktop
▪ Verificar permissão do usuário no diretório (icacls)
▪ Ferramenta administrative do windows (antigo cacls)
▪ https://docs.microsoft.com/en-us/windows-server/administration/windows-commands/icacls

▪ (F) Full access


POC || GTFO
✓ Alvo: Telegram Desktop
▪ Filtros Procmon (Sysinternals)
POC || GTFO
✓ Alvo: Telegram Desktop
▪ Filtros Procmon

Essa galera toda é alvo


POC || GTFO
✓ Alvo: Telegram Desktop
▪ Usaremos a DLL winmm.dll para fazer o Hijack e modificaremos a função
timeSetEvent
▪ Pra não ficar só no tradicional MessageBox, vamos criar um dead pixel na tela
da vítima.
proc pixel
local hdc:DWORD

invoke GetDC, 0 ;null mean the main desktop


mov [hdc],eax
mov esi,0xffffffff
invoke SetPixel,[hdc],640,480,esi
invoke SetPixel,[hdc],641,480,esi
invoke SetPixel,[hdc],640,479,esi
invoke SetPixel,[hdc],641,479,esi
invoke SetPixel,[hdc],642,479,esi
invoke SetPixel,[hdc],642,480,esi
invoke ReleaseDC,0,[hdc]
ret
endp
Roteiro
✓ !whoami AND whoami
✓ Motivação
✓ DLL?
✓ PE Format
✓ Search Order
✓ DLL Proxy
✓ Modus operandi
✓ PoC||GTFO
✓ Mitigação
Mitigação
✓ Verifique permissões nos diretórios do “DLL Search Order”
✓ Sejam específicos em seus manifestos
✓ Carregue sempre a DLL com caminho completo
✓ Utilize as APIs SetDllDirectory / AddDllDirectiory para amarrar
o diretório correto
Roteiro
✓ !whoami AND whoami
✓ Motivação
✓ DLL?
✓ PE Format
✓ Search Order
✓ DLL Proxy
✓ Modus operandi
✓ PoC||GTFO
Referências

DLL Proxying
✓ https://www.pelock.com/articles/intercepting-dll-libraries-calls-api-hooking-in-practice
✓ https://kevinalmansa.github.io/application%20security/DLL-Proxying/
✓ https://itm4n.github.io/dll-proxying/

DLL Hijack
✓ https://itm4n.github.io/windows-dll-hijacking-clarified/
✓ https://pentestlab.blog/2017/03/27/dll-hijacking/
✓ https://medium.com/@sghosh2402/ikeext-dll-hijacking-3aefe4dde7f5
✓ https://medium.com/@AndrewRollins/discord-dll-hijack-cb77a6a288cf
✓ https://posts.specterops.io/automating-dll-hijack-discovery-81c4295904b0
✓ https://hacknpentest.com/windows-privilege-escalation-dll-hijacking/
✓ https://www.sans.org/cyber-security-summit/archives/file/summit-archive-1493862085.pdf
✓ https://news.sophos.com/en-us/2017/03/10/qa-wikileaks-the-cia-fine-dining-and-dll-hijacks/

Fine Dining
✓ https://wikileaks.org/ciav7p1/cms/page_20251107.html
✓ https://www.bleepingcomputer.com/news/security/vault-7-cia-developed-24-decoy-applications-to-
spy-on-targets/
That’s all folks!
Telegram: @SWaNk
Twitter: @pegaBizu

Você também pode gostar