TrollDump
- Injeta DLL gerenciada x64 em processo gerenciado/não gerenciado x64 (o processo deve ter GUI porque obtemos o seu handle de janela) usando setwindowshook
- Aqui, como um TROLL, injetamos na janela oculta do taskmgr para fazer um dump de lsass sem detecção (veja a seção Test Case abaixo)
- A DLL injetora e a DLL injetada são a mesma DLL, portanto nenhuma DLL adicional é necessária
- O nível de integridade do processo alvo deve ser igual ou inferior ao do processo injetor
Créditos (atualização/reescrita do projeto)
Projeto Original: https://github.com/enkomio/ManagedInjector
- portou o código para injetar em binários de 64 bits ---> o projeto original só permite injeção de DLL em binários de 32 bits
- removeu a lógica de IPC porque era excessiva
- criou código boilerplate para executar seu payload diretamente na função RunOnRemoteProcess() em vez do modo complicado anterior
- o projeto ainda usa DLLExport para fazer uma DLL .NET exportar funções
- Nota: isto não é uma dependência do projeto, mas sim um pós-processamento. O DLLExport modificará sua DLL .NET final para exportar uma função.
- Você pode fazer a exportação de função manualmente, se quiser https://blog.xpnsec.com/rundll32-your-dotnet/
Compilação
- Baixe o projeto e compile a solução como X64, Release
- Nenhuma dependência externa é necessária
Uso
> Requires High Integrity depending on use case
> [System.Reflection.Assembly]::LoadFrom("C:\Users\public\TrollDump.dll")
> [TrollDump.ForFun]::Main("C:\windows\system32\taskmgr.exe")
- Neste POC, fazemos um dump de lsass; você pode executar qualquer "lógica de função exportada da DLL" que quiser, modificando a função RunOnRemoteProcess() e recompilando.
- Como mencionado anteriormente, o código serve como boilerplate para a injeção de DLL; o que você escolher fazer depois pode ser convenientemente escrito em código gerenciado c#.
Caso de Teste
- Win 2019 build 17763.737 com os patches mais recentes do windefender
- ambos dllinject + dump de lsass
- Outros AVs (não nomeados)
- dllinject funciona bem
- obviamente, se o dump de lsass funciona ou não, depende se o AV permite que o taskmgr faça o dump de lsass
- Não testado em nenhum EDR -> suspeito que a injeção de DLL ainda deve funcionar em EDRs específicos
OPSEC
- A DLL precisa estar no disco, portanto deve ser ofuscada
- A DLL deve ser usada apenas para a injeção; o payload real nunca deve ser embutido na DLL e deve ser carregado de forma reflexiva
- Obviamente, injetar CLR em um processo não gerenciado é suspeito, mas ei!
- setwindowshook, embora seja uma técnica clássica, é mais frequentemente associado a keylogging, não ao nosso caso de uso
- Você pode ser super criativo com qualquer processo GUI em que queira injetar (se estiver executando como system, também pode injetar em dwm.exe)
Lista de Desejos - O projeto foi feito durante o fim de semana e não tenho tempo/intenção de seguir o seguinte:
- Injetar em processo sem GUI
- atualmente, para setwindowshook, ele usa WH_CALLWNDPROC; você pode modificá-lo para usar WH_GETMESSAGE, mas o processo alvo deve estar executando um loop de mensagens (GetMessage())
- se você conseguir encontrar um binário sem GUI que implemente um loop de mensagens (suspeito que seja improvável), então também poderá injetar em binários sem GUI
- é comum que processos GUI executem GetMessage()
- Totalmente reflexivo e sem necessidade de ser gravado no disco
- Baseado em setwindowshook, parece que a DLL precisa estar no disco?
- tentei usar delegados c# para passar um ponteiro de função para executar em vez da função de DLL exportada e isso não funcionou (esta é a técnica clássica de keylogger em c# para processo local, mas estamos fazendo em processo remoto)
- você pode tentar isso incorporando outras técnicas; acho que é viável
- O Taskmgr será gerado automaticamente como High Integrity, mesmo que nosso processo atual seja Medium (então, tecnicamente, se injetarmos a DLL nele, é um bypass de UAC)
- A injeção parece funcionar bem, de acordo com os resultados de retorno da API WIN
- No entanto, o taskmgr não consegue chamar a função exportada
Aviso Legal
Deve ser usado apenas para fins educacionais!