
Rogue Assembly Hunter é um utilitário para descobrir módulos 'interessantes' do .NET CLR em processos em execução.
__________ _____ . .
_____ \ ____ ____ __ __ ____ / _ \ ______ ______ ____ _ | | | ..
| // _ \ / __| | _/ __ \ / /\ \ / // __// __ \ / | __ | |< | |
| | ( <> ) // > | /\ / / | \ \ _ \ /| Y Y \ _\ \ |_ |
|| /_/_ /|/ _ > _| /____ >____ >___ >|| / /____/ |
/ // / / / / / / / /
___ ___ __
/ | \ __ __ / | ___________
/ ~ \ | |/ \ __/ __ _ __
\ Y / | / | \ | \ /| | /
_| /|/|| /| _ >|
/ / /
Rogue Assembly Hunter é um utilitário para descobrir módulos CLR .NET 'interessantes' em processos em execução.
.NET é uma plataforma de desenvolvimento e um runtime framework muito poderosa e capaz para construir e executar aplicações gerenciadas .NET. Nos últimos anos, o .NET foi adotado por Red Teams (e afins) para instrumentar táticas de suporte a operações ofensivas. Em particular, a mudança do PowerShell ofensivo para .NET foi um salto lógico (para muitos) devido ao aumento da visibilidade e oportunidades de observação presentes no PowerShell v5+. Como tal, ferramentas e táticas ofensivas .NET têm sido usadas com sucesso para evadir capacidades defensivas baseadas em host, contornar controle de aplicações e construir/preparar/entregar/executar código malicioso (similar ao PowerShell).
Do ponto de vista da prevenção, a Microsoft está fazendo mais para combater ameaças instrumentadas pelo .NET e minimizar a superfície de ataque geral do .NET. Por exemplo, a Microsoft adicionou capacidades de inspeção AMSI no .NET Framework 4.8, e mecanismos WDAC/WLDP são bastante eficazes. Do ponto de vista de detecção/resposta, maior visibilidade e introspecção no ecossistema .NET é sempre vantajoso para descobrir novas formas de combater ameaças focadas em .NET.
Em 2017, Joe Desimone (@dez_) escreveu um artigo fantástico chamado Hunting For In-Memory .NET Attacks. Ainda relevante hoje, o artigo descreve vetores de ataque .NET modernos, bem como técnicas de detecção sob demanda e baseadas em eventos. Acompanhando o artigo, Joe lançou uma ferramenta (Get-ClrReflection) para detectar proativamente (e recuperar) módulos CLR .NET em memória que não possuem uma referência de disco adequada. Inspirado pelo trabalho de Joe e aproveitando as capacidades de introspecção da biblioteca de diagnóstico de runtime CLRMD (+ capacidades subsequentes de acesso a dados da mscordacwks.dll), o Rogue Assembly Hunter foi criado para:
[*] Parâmetros:
--mode=<.> : Obrigatório | Selecione o modo de análise. Opções: sweep, process e watch.
--hunt=<.> : Opcional | Selecione o tipo de varredura de caça para encontrar módulos CLR interessantes. Especifique all (padrão), memory-only, unusual-dir,
sig-status, imposter-file ou list.
--export=<.> : Opcional, Experimental | Especifique um caminho de arquivo para exportar módulos CLR carregados para varreduras de caça em memória e caça de arquivo impostor
(ex.: --hunt=memory-only/imposter-file/all).
--pid=<.> : Opcional | Especifique um processo alvo por PID. Deve ser usado com o parâmetro/valor --mode=process.
--checks=<.> : Opcional | Especifique um valor para ciclos de varredura. Isso pode ajudar a reduzir perdas por condição de corrida durante as varreduras, mas também pode repetir a saída de resultados.
Valor padrão é 1.
--sleep=<.> : Opcional | Especifique um valor para segundos de pausa. Isso pode ajudar a reduzir perdas por condição de corrida durante as varreduras, atrasando o ciclo de verificação.
Valor padrão é 0 segundos.
--debug : Opcional | Exiba informações de exceção (ex.: erros de conexão de processo).
--nobanner : Opcional | Suprime o banner de exibição. Útil para executar com o script PowerShell ou para casos de uso que aproveitam automação.
--suppress : Opcional | Não escaneie o processo RogueAssemblyHunter durante --mode=sweep ou --mode=watch.