
Analyseur EVTX post-exploitation pour BloodHound Mapping
Analyseur EVTX post-exploitation pour le mappage BloodHound
LogHound collecte et analyse les journaux d'événements de sécurité Windows (.evtx) pour extraire les événements d'authentification, les données de session et les métadonnées de connexion en vue de leur ingestion dans BloodHound et pour une télémétrie adverse plus approfondie.
LogHound a été conçu pour résoudre un problème spécifique pour les équipes Red et les testeurs de pénétration réseau : comment suivre efficacement les cibles de mouvement latéral, déchiffrer les sessions utilisateur actives et établir une propriété définitive des machines sans compromettre la sécurité opérationnelle (OpSec).
Les fichiers de journal d'événements (Security.evtx) sur les contrôleurs de domaine Active Directory peuvent être des monstres de plusieurs gigaoctets. Les techniques de chargement traditionnelles épuisent souvent la mémoire système ou plantent, laissant des artefacts bruyants. LogHound résout ce problème en utilisant un paradigme de streaming par blocs sur la robuste infrastructure Impacket.
Il cartographie les structures réseau, établit qui « possède » réellement une machine en fonction de la fréquence de connexion, calcule les heures de travail précises pour identifier les opérations en dehors des heures (Night Owl), et alimente cette intelligence de manière transparente dans BloodHound CE (v5+).
LogHound repose sur Python 3 et Impacket. Il est fortement recommandé d'utiliser un environnement virtuel.
# 1. Clone the repository
git clone https://github.com/LogHound/LogHound.git
cd LogHound
# 2. (Optional but Recommended) Create a Python virtual environment
python3 -m venv venv
source venv/bin/activate
# 3. Install the required dependencies
pip install -r requirements.txt
L'interface CLI de LogHound interagit de manière identique aux modules Impacket standard (comme secretsdump.py), vous obligeant à spécifier un mode d'opération explicite (--local ou --remote).
python loghound.py [[domain/]username[:password]@]<targetName or address> [options]
--local EVTX_FILE: Analyse un fichier .evtx déjà présent sur votre machine locale.--remote: Télécharge Security.evtx depuis le système cible distant en utilisant les identifiants fournis.-hashes LMHASH:NTHASH: Utilise les hashs NTLM pour l'authentification Pass-The-Hash.-k: Utilise l'authentification Kerberos. Récupère les identifiants depuis un fichier .ccache spécifié par la variable d'environnement KRB5CCNAME.-aesKey hex_key: Utilise une clé AES spécifique (128 ou 256 bits) pour Kerberos.-no-pass: Ne demande pas de mot de passe de manière interactive.-keytab KEYTAB_FILE: Utilise un fichier keytab Kerberos pour l'authentification.-dc-ip IP: Adresse IP explicite du contrôleur de domaine.-target-ip IP: Adresse IP explicite de la machine cible (contourne les échecs de résolution de nom NetBIOS).-format {json,csv,md,all}: Dicte le format de sortie textuel. Note : Un rapport HTML interactif et les fichiers JSON BloodHound sont toujours générés. Par défaut : json.-outputfile BASENAME: Préfixe de nom pour les rapports de sortie générés dans les sous-répertoires.-threads N: Nombre de threads d'analyse à exécuter en parallèle (Défaut : 4).-chunk-size N: Nombre d'enregistrements de journal par bloc d'analyse. Des valeurs plus faibles réduisent la surcharge RAM ; des valeurs plus élevées analysent un peu plus vite (Défaut : 1000).
LogHound utilise un pipeline analytique hautement découplé et efficace en mémoire :
core/collector.py) : Se connecte à la cible via SMB, puis exécute wevtutil epl Security via WMI pour exporter le journal des événements de sécurité vers un fichier temporaire sur la cible. Le fichier exporté est ensuite téléchargé via SMB dans loot/YYYY-MM-DD_<cible>_Security.evtx pour éviter les écrasements.core/parser.py) : Un analyseur de blocs multithreadé parcourt le binaire .evtx brut et émet en continu les événements analysés dans un tampon JSON Line temporaire (jsonl/loghound_dump.jsonl). En cas d'interruption, il peut reprendre à partir de points de contrôle précis.core/analyzer.py) : Parcourt ligne par ligne le flux .jsonl pour maintenir une faible empreinte RAM. Il calcule des dictionnaires d'état intermédiaires (suivi de session, notation de propriété, suivi logique).core/exporter.py et core/exporter_bloodhound.py) : Vide dynamiquement l'état RAM de l'analyse dans les formats d'exportation finaux et .Pour la logique architecturale approfondie et les erreurs d'ingestion précédemment traitées, veuillez vous référer à la documentation interne à ARCHITECTURE.md.
LogHound filtre nativement six IDs d'événements de sécurité Windows explicites : 4624, 4634, 4648, 4768, 4769, 4776.
En utilisant ces événements, LogHound enrichit BloodHound CE en liant les attributs personnalisés suivants directement aux nœuds Utilisateur générés via le bloc Properties :
ObjectIdentifier s'alignent parfaitement avec les ingestions SharpHound existantes. Les utilisateurs du domaine AD reçoivent leur SID Windows natif (S-1-5-21-...). Pour éviter le déchirement des nœuds BloodHound, les comptes de machine locaux maintiennent avec précision le standard de repli USER@HOSTNAME.computers.json généré utilise exactement la structure de données native SessionAPIResult pour tracer les arêtes réelles « HasSession » entre les machines et les utilisateurs.Le moteur d'analyse calcule les heures de travail opérationnelles en fonction des événements de connexion/déconnexion suivis, en omettant les anomalies (comme les sessions s'étendant sur plusieurs jours).
L'analyse détermine le propriétaire explicite de toute station de travail ou adresse IP en comptant les connexions interactives les plus fréquentes. Cela lie un Propriétaire principal au nœud d'origine ainsi qu'un tableau de Autres utilisateurs secondaires.
Ce logiciel est fourni à des fins éducatives, de tests de pénétration autorisés et d'enquêtes judiciaires uniquement. Ne l'utilisez pas contre des réseaux pour lesquels vous n'avez pas d'autorisation explicite d'opérer.
Ce projet est sous licence Apache License 2.0 - voir le fichier LICENSE.
html/json/| Nom de la propriété | Type | Description de la métrique |
|---|
loghound_avg_start_time | String | Calcule la première connexion moyenne (00:00 HH:MM) enregistrée sur tous les jours valides observés pour l'utilisateur. |
loghound_avg_end_time | String | Calcule la dernière activité moyenne (déconnexion ou dernier contact) enregistrée par jour. |
loghound_active_days | Integer | Nombre total de jours validés (avec au moins une session correcte) utilisés pour calculer les tableaux de temps moyens. |
loghound_outside_hours | Boolean | Vrai/Faux. Identifie spécifiquement un Noctambule. Évalue à True si la fenêtre active calculée de début à fin de l'utilisateur chevauche la plage nocturne de 22:00 à 06:00. |
Avg Hours per Day | Float | Calculé en interne comme la différence de temps exacte entre le temps de début moyen et le temps de fin moyen de l'utilisateur. (Affiché dans les rapports texte/HTML). |