Skip to content
KitploitKITPLOIT
OutilsBlog
Soumettre
OutilsBlog
Soumettre

Outils de Hacking, PenTest et Cybersécurité pour votre Arsenal de Sécurité !

Kitploit est un répertoire d'outils de hacking, de cybersécurité et de pentesting. Découvrez les dernières mises à jour des projets pour trouver des vulnérabilités, analyser des systèmes, automatiser les tests et renforcer votre sécurité.

··Flux·Contact·Confidentialité·© 2026 Kitploit

Répertoire d'outils

Catégories

Voir toutes les catégories
Loading categories
RogueAssemblyHunter — Rogue Assembly Hunter est un utilitaire permettant de découvrir des modules .NET CLR 'intéressants' dans les processus en cours. | Kitploit
Outils/GitHubGitHub/bohops/rogueassemblyhunter
Outils DéfensifsCriminalistique MémoireAnalyse ForensiqueAnalyse de MalwareRéponse aux Incidents
GitHubbohops/rogueassemblyhunter

RogueAssemblyHunter

Rogue Assembly Hunter est un utilitaire permettant de découvrir des modules .NET CLR 'intéressants' dans les processus en cours.

Voir le dépôt
12010il y a 4 ansVérifié par Kitploit

Populaires

Voir tout →

Découvrez les outils les plus utilisés par notre communauté.

Explorer tous les outils

Parcourez notre collection d'outils

Voir tous les outils →
Partager

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

Rogue Assembly Hunter

Rogue Assembly Hunter est un utilitaire pour découvrir des modules .NET CLR « intéressants » dans les processus en cours d’exécution.

  • Auteur : @bohops
  • Licence : MIT
  • Projet : https://github.com/bohops/RogueAssemblyHunter

Contexte

.NET est une plateforme de développement et un framework d’exécution très puissants et capables pour construire et exécuter des applications gérées .NET. Au cours des dernières années, .NET a été adopté par les Red Teams (et assimilés) pour instrumenter des techniques afin de soutenir des opérations offensives. En particulier, le passage de PowerShell offensif à .NET a été un saut logique (pour beaucoup) en raison de la visibilité accrue et de l’opportunité offerte par PowerShell v5+. Ainsi, les outils et techniques offensifs .NET ont été utilisés avec succès pour contourner les capacités défensives basées sur l’hôte, contourner le contrôle des applications et construire/stager/livrer/exécuter du code malveillant (similaire à PowerShell).

D’un point de vue préventif, Microsoft fait davantage pour lutter contre les menaces instrumentées par .NET et minimiser la surface d’attaque globale de .NET. Par exemple, Microsoft a ajouté des capacités d’inspection AMSI dans .NET Framework 4.8, et les mécanismes WDAC/WLDP sont assez efficaces. D’un point de vue détection/réponse, une visibilité et une introspection supplémentaires dans l’écosystème .NET sont toujours avantageuses pour découvrir de nouvelles façons de combattre les menaces ciblant .NET.

En 2017, Joe Desimone (@dez_) a écrit un article fantastique intitulé Hunting For In-Memory .NET Attacks. Toujours d’actualité, l’article décrit les vecteurs d’attaque .NET modernes ainsi que les techniques de détection à la demande et basées sur les événements. Accompagnant l’article, Joe a publié un outil (Get-ClrReflection) pour détecter (et récupérer) de manière proactive les modules CLR .NET en mémoire qui n’ont pas de référence disque appropriée. Inspiré par le travail de Joe et profitant des capacités d’introspection de la bibliothèque de diagnostics d’exécution CLRMD (ainsi que des capacités d’accès aux données ultérieures de mscordacwks.dll), Rogue Assembly Hunter a été créé pour :

  • Inspecter (tous) les processus .NET (« gérés ») en cours d’exécution à la recherche de modules CLR intéressants (par exemple les modules qui forment un « assembly »)
  • Inspecter un seul processus .NET (« géré ») (par PID) à la recherche de modules CLR intéressants
  • Surveiller les nouveaux processus créés et tenter d’inspecter les modules CLR intéressants
  • Prendre en charge plusieurs capacités de « chasse » pour découvrir les modules chargés en mémoire, l’état de signature des modules (si chargés depuis le disque), les modules chargés depuis des répertoires intéressants et les modules imposteurs (par exemple les fausses références de fichier)
  • Prendre en charge la fonctionnalité d’exportation de modules CLR (un port rapide de Get-ClrReflection)
  • Inspirer davantage d’outils et de techniques intéressants

Principales exigences et dépendances

  • Exécution sous un contexte utilisateur/processus privilégié
  • .NET Framework 4.6.1+
  • .NET CLRMD - Bibliothèque d’introspection Microsoft.Diagnostics.Runtime (paquet NuGet)
  • ILMerge - Éditeur de liens statique (paquet NuGet)
  • ...et les paquets NuGet associés dans Visual Studio.

Remarques, conseils et mises en garde

  • Exécutez en tant qu’utilisateur privilégié avec une intégrité haute/système.
  • Les « chasses » sont expérimentales et ne garantissent pas des résultats complets/corrects. Méfiez-vous des faux positifs (par exemple les modules signés) et validez en conséquence.
  • RogueAssemblyHunter utilise CLRMD pour se connecter aux processus en direct, ce qui peut introduire des résultats intéressants.
  • En raison de la nature de balayage de RogueAssemblyHunter, des conditions de concurrence et des résultats manqués sont possibles. Envisagez de régler les commutateurs --checks et --sleep pour vous aider (surtout en mode « watch »). Dans certains cas, il peut être difficile de « capturer » un chargement d’assembly particulier en raison de la vitesse d’exécution (comme execute-assembly et les processus sacrifiés).
  • L’architecture (32/64 bits) et les versions de .NET (par ex. 4+) sont importantes pour interagir avec les processus distants avec les bibliothèques .NET CLRMD.
    • Pour une inspection/ couverture maximale, compilez et exécutez ce programme pour les cas d’utilisation x86 et x64.
    • Le mode de balayage des processus tentera de se connecter à tous les processus en cours d’exécution indépendamment du « bitness ». Il échouera autrement en cas d’incompatibilité d’architecture.
  • Testé sur Windows 10 Pro 2H1H et Windows Server 2016 Standard 1607. Peut fonctionner sur d’autres versions avec le .NET Framework approprié.
  • Le projet Visual Studio avec les paquets NuGet, le script PowerShell et les binaires de la version sont inclus dans ce projet.
  • Notice.md contient les clauses de non-responsabilité et les informations de licence.
  • À utiliser à vos risques et périls (et ne faites pas attention à mon code horrible ;) ) !

Utilisation

root@kitploit:~
[*] Paramètres :
    
    --mode=<.>   : Requis | Sélectionnez le mode d’analyse. Options : sweep, process et watch.

    --hunt=<.>   : Facultatif | Sélectionnez le type de chasse pour trouver des modules CLR intéressants. Spécifiez all (par défaut), memory-only, unusual-dir,
                   sig-status, imposter-file ou list.

    --export=<.> : Facultatif, expérimental | Spécifiez un chemin de fichier pour exporter les modules CLR chargés pour les chasses en mémoire et les chasses de fichiers imposteurs
                   (ex. --hunt=memory-only/imposter-file/all).

    --pid=<.>    : Facultatif | Spécifiez un processus ciblé par PID. Doit être utilisé avec le paramètre/valeur --mode=process.

    --checks=<.> : Facultatif | Spécifiez une valeur pour les cycles d’analyse. Cela peut aider à réduire les oublis dus aux conditions de concurrence, mais peut aussi répéter la sortie des résultats.
                   Valeur par défaut : 1.

    --sleep=<.>  : Facultatif | Spécifiez une valeur pour les secondes de pause. Cela peut aider à réduire les oublis dus aux conditions de concurrence en retardant le cycle de vérification.
                   Valeur par défaut : 0 seconde.

    --debug      : Facultatif | Afficher les informations d’exception (ex. erreurs de connexion au processus).

    --nobanner   : Facultatif | Supprimer la bannière d’affichage. Utile pour l’exécution avec le script PowerShell ou pour des cas d’utilisation automatisés.

    --suppress   : Facultatif | Ne pas analyser le processus RogueAssemblyHunter pendant --mode=sweep ou --mode=watch.

    --help       : Facultatif | Afficher cette aide. Cela remplacera tout autre paramètre et quittera l’application. *C’est la valeur par défaut sans paramètres.


[*] Modes (--mode=)

    - sweep   : Analyser/parcourir tous les processus (Remarque : seuls les processus de la même architecture/« bitness » seront analysés avec succès. Compilez pour x86/x64/etc.).

    - process : Analyser un seul processus. Utilisez --pid=<PID>.
    
    - watch   : Analyser les nouveaux processus lors de leur création. Ajustez les attributs d’analyse avec --checks et --sleep. (Remarque : c’est expérimental. Des conditions de concurrence sont probables.)


[*] Chasses (--hunt=)

    - all           : Valeur par défaut. Analyser avec toutes les options de chasse (sauf 'list').

    - memory-only   : Chasse mémoire. Analyser les modules CLR qui ne sont pas sauvegardés sur le disque.

    - unusual-dir   : Chasse répertoire inhabituel. Analyser les modules CLR chargés en dehors des répertoires « normaux ».
                      Modifiez '_huntUnusualDirectoryFilter' pour personnaliser.

    - sig-status    : Chasse signature de fichier. Analyser les modules CLR avec un état de signature anormal (ex. non signé). Remarque : expérimental. De faux positifs sont possibles.
                      Modifiez '_huntSigExclusionsFilter' pour personnaliser.
    
    - imposter-file : Chasse module CLR inattendu. Analyser les modules CLR avec un fichier de sauvegarde suspect. Expérimental.
    
    - list          : Parcourir tous les modules CLR et les lister en conséquence.


[*] Exemples d’utilisation
    
    - Exemple 1 : Analyser les processus et lancer toutes les chasses pour les processus 64 bits accessibles (sauf 'list') -
                  RogueAssemblyHunter_x64.exe --mode=sweep
    
    - Exemple 2 : Analyser les processus, lister tous les modules CLR dans les processus gérés 32 bits accessibles et afficher les informations d’erreur -
                  RogueAssemblyHunter_x86.exe --mode=sweep --hunt=list --debug

    - Exemple 3 : Surveiller les nouveaux processus, analyser tous les modules CLR (si gérés et 64 bits), ne pas analyser le processus RogueAssemblyHunter, et effectuer 2 vérifications avec 3 secondes de délai -
                  RogueAssemblyHunter_x64.exe --mode=watch --suppress --checks=2 --sleep=3

    - Exemple 4 : Analyser un seul processus par PID, lister uniquement les modules CLR en mémoire et exporter les modules CLR vers le chemin spécifié -
                  RogueAssemblyHunter_x86.exe --mode=process --pid=4650 --hunt=memory-only --export=c:\evilassemblies\
    
    - Exemple 5 : Analyser les processus, lister uniquement les modules CLR en mémoire pour les processus 64 bits accessibles, ne pas analyser le processus RogueAssemblyHunter et ne pas afficher la bannière -
                  RogueAssemblyHunter_x64.exe --mode=sweep --hunt=memory-only --suppress --nobanner

Fichiers de la version : Invoke-RogueAssemblyHunter et binaires compilés

Pour plus de commodité, un script PowerShell ainsi que deux binaires compilés (RogueAssemblyHunter_x64.exe et RogueAssemblyHunter_x86.exe) ont été inclus dans le dossier \Release. N’hésitez pas à les modifier pour les adapter à vos cas d’utilisation (ex. déploiement, intégration, vérifications, pause, etc.).

Exemple d’utilisation :

Exécuter Invoke-RogueAssemblyHunter en mode sweep et vérifier toutes les options de chasse

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

Exécuter Invoke-RogueAssemblyHunter en mode watch et vérifier toutes les options de chasse

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

Empreintes SHA256 :

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

Feuille de route

  • Analyse des fichiers de vidage (.dmp) gérés
  • Amélioration du contrôle de l’état de signature
  • Améliorations de la sortie (ex. json)
  • Corrections de stabilité et de bugs

Crédits, inspiration et ressources

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