Skip to content
KitploitKITPLOIT
FerramentasBlog
Enviar
FerramentasBlog
Enviar

Ferramentas de Hacking, PenTest e Cibersegurança para o seu Arsenal de Segurança!

Kitploit é um diretório de ferramentas de hacking, cibersegurança e pentesting. Descubra as últimas atualizações de projetos para encontrar vulnerabilidades, analisar sistemas, automatizar testes e fortalecer sua segurança.

··Feeds·Contato·Privacidade·© 2026 Kitploit

Diretório de Ferramentas

Categorias

Ver todas as categorias
Loading categories
RogueAssemblyHunter — Rogue Assembly Hunter é um utilitário para descobrir módulos 'interessantes' do .NET CLR em processos em execução. | Kitploit
Ferramentas/GitHubGitHub/bohops/rogueassemblyhunter
Ferramentas DefensivasForensia de MemóriaAnálise ForenseAnálise de MalwareResposta a Incidentes
GitHubbohops/rogueassemblyhunter

RogueAssemblyHunter

Rogue Assembly Hunter é um utilitário para descobrir módulos 'interessantes' do .NET CLR em processos em execução.

Ver Repositório
12010há 4 anosRevisado pelo Kitploit

Mais Populares

Ver todos →

Descubra as ferramentas mais usadas pela nossa comunidade.

Explore todas as ferramentas

Navegue pela nossa coleção de ferramentas

Ver todas as ferramentas →
Compartilhar

__________ _____ . .
_
____ \ ____ ____ __ __ ____ / _ \ ______ ______ ____ _ | | | .. | // _ \ / __| | _/ __ \ / /\ \ / // __// __ \ / | __ | |< | | | | ( <> ) // > | /\ / / | \ \ _ \ /| Y Y \ _\ \ |_ | || /_/_ /|/ _ > _| /____ >____ >___ >|| / /____/ | / // / / / / / / / /
___ ___ __
/ | \ __ __ / | ___________ / ~ \ | |/ \ __/ __ _ __
\ Y / | / | \ | \ /| | / _| /|
/|
| /
| _
>
|
/ / /

Rogue Assembly Hunter

Rogue Assembly Hunter é um utilitário para descobrir módulos CLR .NET 'interessantes' em processos em execução.

  • Autor: @bohops
  • Licença: MIT
  • Projeto: https://github.com/bohops/RogueAssemblyHunter

Contexto

.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:

  • Inspecionar (todos) os processos .NET ('gerenciados') em execução em busca de módulos CLR interessantes (ex.: módulo(s) que formam um 'assembly')
  • Inspecionar um único processo .NET ('gerenciado') (por PID) em busca de módulos CLR interessantes
  • Observar novos processos gerados e tentar inspecionar módulos CLR interessantes
  • Suportar várias capacidades de 'caça' para descobrir módulos carregados em memória, status de assinatura de módulos (se carregados do disco), módulos carregados de diretórios interessantes e módulos impostores (ex.: referências de arquivo falsas).
  • Suportar funcionalidade de exportação de módulos CLR (um port rápido do Get-ClrReflection)
  • Inspirar ferramentas e táticas mais interessantes

Principais Requisitos e Dependências

  • Executar sob um contexto de usuário/processo privilegiado
  • .NET Framework 4.6.1+
  • .NET CLRMD - Biblioteca de Introspecção de Runtime Microsoft.Diagnostics.Runtime (Pacote NuGet)
  • ILMerge - Linkedor Estático (Pacote NuGet)
  • ...e pacotes NuGet de suporte no Visual Studio.

Notas, Dicas e Advertências

  • Execute como um usuário privilegiado com integridade alta/sistema.
  • 'Caças' são experimentais e não garantem resultados completos/corretos. Cuidado com falsos positivos (ex.: módulos assinados) e valide de acordo.
  • RogueAssemblyHunter usa o CLRMD para conectar a processos ao vivo, o que pode introduzir resultados interessantes.
  • Devido à natureza de varredura do RogueAssemblyHunter, há possibilidade de condições de corrida e resultados perdidos. Considere ajustar com os parâmetros --checks e --sleep para ajudar (especialmente no modo 'watch'). Em alguns casos, pode ser difícil 'capturar' um carregamento de assembly específico devido à velocidade de execução (como execute-assembly e processos sacrificiais).
  • Arquitetura ('bitness') e versões do .NET são importantes (ex.: 4+) para interagir com processos remotos com as bibliotecas .NET CLRMD.
    • Para máxima inspeção/cobertura, compile e execute este programa para casos de uso x86 e x64.
    • O modo de varredura de processos tentará conectar a todos os processos em execução, independentemente do 'bitness'. Caso contrário, falhará adequadamente para incompatibilidades de arquitetura.
  • Testado no Windows 10 Pro 2H1H e Windows Server 2016 Standard 1607. Pode executar em outras versões com o .NET Framework relevante.
  • O código-fonte do projeto Visual Studio com pacotes NuGet, script PowerShell e binários de versão estão incluídos neste projeto.
  • Notice.md inclui isenções de responsabilidade do projeto e informações de licença.
  • Execute por sua conta e risco (e não se importe com meu código horrível ;) )!

Uso

root@kitploit:~
[*] 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.

    --help       : Opcional | Mostre esta ajuda. Isso substituirá qualquer outro parâmetro de linha de comando e sairá do aplicativo. *Este é o padrão sem parâmetros.


[*] Modos (--mode=)

    - sweep   : Escaneie/itera através de todos os processos (Nota: Apenas processos de mesma arquitetura/'bitness' serão escaneados com sucesso. Compile para executar para x86/x64/etc.).

    - process : Escaneie um único processo. Use com --pid=<PID>.
    
    - watch   : Escaneie novos processos quando criados. Ajuste atributos de varredura com --checks e --sleep. (Nota: Isso é experimental. Condições de corrida são prováveis.)


[*] Caças (--hunt=)

    - all           : Valor padrão. Analise com todas as opções de caça (Exceto 'list').

    - memory-only   : Caça em memória. Analise módulos CLR que não são suportados por disco.

    - unusual-dir   : Caça de diretório incomum. Analise módulos CLR carregados fora de diretórios 'normais'.
                      Edite '_huntUnusualDirectoryFilter' para personalizar.

    - sig-status    : Caça de assinatura de arquivo. Analise módulos CLR com status de assinatura anômalo (ex.: não assinado). Nota: Isso é experimental. Falsos positivos são possíveis.
                      Edite '_huntSigExclusionsFilter' para personalizar.
    
    - imposter-file : Caça de módulo CLR inesperado. Analise módulo CLR com suporte de arquivo de disco suspeito. Experimental.
    
    - list          : Itere através de todos os módulos CLR e liste de acordo.


[*] Exemplo de Uso
    
    - Exemplo 1 : Escaneie processos e execute todas as caças para processos 64 bits acessíveis (exceto 'list') -
                  RogueAssemblyHunter_x64.exe --mode=sweep
    
    - Exemplo 2 : Escaneie processos, liste todos os módulos CLR em processos gerenciados 32 bits acessíveis e mostre informações de erro -
                  RogueAssemblyHunter_x86.exe --mode=sweep --hunt=list --debug

    - Exemplo 3 : Observe novos processos, escaneie todos os módulos CLR (se gerenciados e 64 bits), não escaneie o processo RogueAssemblyHunter e faça 2 verificações com um atraso de 3 segundos entre elas -
                  RogueAssemblyHunter_x64.exe --mode=watch --suppress --checks=2 --sleep=3

    - Exemplo 4 : Escaneie um único processo por PID, liste apenas módulos CLR em memória e exporte módulos CLR para o caminho especificado -
                  RogueAssemblyHunter_x86.exe --mode=process --pid=4650 --hunt=memory-only --export=c:\evilassemblies\
    
    - Exemplo 5 : Escaneie processos, liste apenas módulos CLR em memória para processos 64 bits acessíveis, não escaneie o processo RogueAssemblyHunter e não mostre o banner de título -
                  RogueAssemblyHunter_x64.exe --mode=sweep --hunt=memory-only --suppress --nobanner

Arquivos de Versão: Invoke-RogueAssemblyHunter e Binários Compilados

Para conveniência, um script PowerShell junto com dois binários compilados (RogueAssemblyHunter_x64.exe e RogueAssemblyHunter_x86.exe) foram incluídos na pasta \Release. Sinta-se à vontade para modificar para atender aos seus casos de uso (ex.: implantação, incorporação, verificações, pausa, etc.).

Exemplo de Uso:

Execute Invoke-RogueAssemblyHunter no modo sweep e verifique todas as opções de caça

root@kitploit:~
cd c:\path\to\RogueAssemblyHunter
import-module .\Invoke-RogueAssemblyHunter.ps1
Invoke-RogueAssemblyHunter

Execute Invoke-RogueAssemblyHunter no modo watch e verifique todas as opções de caça

root@kitploit:~
cd c:\path\to\RogueAssemblyHunter
import-module .\Invoke-RogueAssemblyHunter.ps1
Invoke-RogueAssemblyHunter -ScanMode watch

Hashes SHA256:

root@kitploit:~
e804711a8b6469f1b13b388de47dfa6dde1c85279d365db7b6e19e1644990fa6  Invoke-RogueAssemblyHunter.ps1
cc985d918e566671aa209142abc55bd798ca6c1a18730b785ac8c18d489736c3  RogueAssemblyHunter_x64.exe
ae3aead43871e263cd8465d5356c4daaae0635714321f872c931ec825008287a  RogueAssemblyHunter_x86.exe

Roadmap

  • Análise de arquivo de despejo gerenciado (.dmp)
  • Melhorar verificação(ões) de status de assinatura
  • Melhorias na saída (ex.: json)
  • Correções de estabilidade e bugs

Créditos, Inspiração e Recursos

  • Hunting For In-Memory .NET Attacks | por Joe Desimone (@dez_)
  • Get-ClrReflection | por Joe Desimone (@dez_)
  • Get-InjectedThread | por Jared Atkinson (@jaredcatkinson)
  • pe-sieve | por hasherezade (@hasherezade)
  • CLR MD — Analyzing Live Process | por Harsha
  • How to enumerate Modules in each App Domain using ClrMD | por Sukesh Ashok Kumar
  • WMIProcessWatcher | por Tim MalcomVetter (@malcomvetter)
Baixar ferramenta