
Outil pour énumérer les tâches planifiées privilégiées sur les systèmes distants
<p align="center">
<img width="350" height="350" alt="Logo TaskHound" src="https://assets.kitploit.com/production/public/readmes/9903/f048c922e3b550dd3bc0880bd2e9ba4bebdfdb710812a9a7eec7249bce3e112e.png" />
</p>
<p align="center">
<strong>Outil de découverte de tâches planifiées privilégiées Windows</strong> pour le plaisir et le profit.
</p>
<p align="center">
<a href="https://github.com/1r0BIT/TaskHound/releases">
<img src="https://img.shields.io/github/v/release/1r0BIT/TaskHound?style=flat-square&logo=github&color=blue" alt="Dernière version">
</a>
<a href="https://bloodhound.specterops.io/">
<img src="https://img.shields.io/badge/BloodHound-OpenGraph-red.svg?style=flat-square&logo=neo4j" alt="BloodHound OpenGraph">
</a>
<a href="https://www.python.org/">
<img src="https://img.shields.io/badge/python-3.11+-blue.svg?style=flat-square&logo=python&logoColor=white" alt="Python 3.11+">
</a>
<br>
<a href="https://deepwiki.com/1r0BIT/TaskHound">
<img src="https://deepwiki.com/badge.svg" alt="Demander à DeepWiki">
</a>
<a href="https://twitter.com/0xr0BIT">
<img src="https://img.shields.io/badge/Twitter-@0xr0BIT-1DA1F2?style=flat-square&logo=twitter&logoColor=white" alt="Twitter">
</a>
<a href="https://r0bit.io">
<img src="https://img.shields.io/badge/Blog-r0bit.io-orange?style=flat-square&logo=rss&logoColor=white" alt="Blog">
</a>
</p>
<hr />
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](https://r0bit.io/posts/taskhound/part1/index.html) et [Partie 2](https://r0bit.io/posts/taskhound/part2/index.html).
## Fonctionnalités clés
| 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 |
## Démarrage rapide```bash
# Install
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 .
# Basic usage - single target
taskhound -u homer.simpson -p 'Doh!123' -d thesimpsons.local -t moe.thesimpsons.local
# Multiple targets with threading
taskhound -u homer.simpson -p 'Doh!123' -d thesimpsons.local --targets-file hosts.txt --threads 10
# Auto-discover all domain computers
taskhound -u homer.simpson -p 'Doh!123' -d thesimpsons.local --dc-ip 10.0.0.1 --auto-targets --threads 20
# With LAPS - auto-retrieves per-host local admin passwords
taskhound -u homer.simpson -p 'Doh!123' -d thesimpsons.local --targets-file hosts.txt --laps --threads 10
# Offline analysis of mounted disk image
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
## Intégration AdaptixC2
Le BOF de TaskHound est inclus dans le [Adaptix Extension-Kit](https://github.com/Adaptix-Framework/Extension-Kit) sous `SAR-BOF/taskhound/`.
## Résultat de démonstration```
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
```
### Méthodes de détection Tier 0
| 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.) |
### Ingestion de données hors ligne
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 ...`
---
## Visualisation des chemins d'attaque OpenGraph
<p align="center">
<img src="https://assets.kitploit.com/production/public/readmes/9903/43ec2d44fef6e06a4aee6b0cad113991182e24d877f0d9099cd6b479554b3362.jpg" alt="OpenGraph Attack Path" />
</p>
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 :**
- **Nœuds personnalisés** : `ScheduledTask` avec 20+ propriétés (identifiants, déclencheurs, analyse de mot de passe, statut de validation)
- **Arêtes personnalisées** : `HasTask`, `HasTaskWithStoredCreds`, `RunsAs`
- **Chemins d'attaque** : `(Owned) → AdminTo → (Computer) → HasTask → (Task) → RunsAs → (Target)````bash
# Collect and auto-upload
taskhound -u homer.simpson -p 'Doh!123' -d thesimpsons.local -t moe.thesimpsons.local --bh-opengraph
# Generate without upload (saves to {output_dir}/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 | `msLAPS-EncryptedPassword` | Oui (MS-GKDI) |
| LAPS hérités | `ms-Mcs-AdmPwd` | Non |
---
## Extraction des identifiants DPAPI
TaskHound extrait et déchiffre les identifiants de tâches stockés en utilisant DPAPI. **Le pillage DPAPI est activé par défaut**.```bash
# Step 1: Get DPAPI_SYSTEM key via LSA dump
nxc smb moe.thesimpsons.local -u homer.simpson -p 'Doh!123' --lsa
# Look for: DPAPI_SYSTEM userkey: 0x51e43225...
# Step 2a: Loot + decrypt immediately (looting is default, just add key)
taskhound -t moe.thesimpsons.local -u homer.simpson -p 'Doh!123' -d thesimpsons.local --dpapi-key 0x51e43225...
# Step 2b: Or collect now (default saves to ./output/raw_backups/), decrypt later
taskhound -t moe.thesimpsons.local -u homer.simpson -p 'Doh!123' -d thesimpsons.local
# Later:
taskhound --offline ./output/raw_backups/moe.thesimpsons.local --dpapi-key 0x51e43225...
# Custom output directory
taskhound -t moe.thesimpsons.local -u homer.simpson -p 'Doh!123' -d thesimpsons.local --output-dir ./collected
# Disable DPAPI looting explicitly
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
```
### Comment ça marche
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 :
| 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.) |
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 `--opsec` ou `--no-rpc`.
---
## Formats de sortie
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`).
### Formats disponibles
| 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 |
### Exemples d'utilisation```bash
# Default - plain text to console + files
taskhound -u homer.simpson -p 'Doh!123' -d thesimpsons.local -t moe.thesimpsons.local
# Multiple output formats
taskhound -u homer.simpson -p 'Doh!123' -d thesimpsons.local --auto-targets -o plain,json,html
# JSON only for automation
taskhound -u homer.simpson -p 'Doh!123' -d thesimpsons.local --auto-targets -o json
# Custom output directory
taskhound -u homer.simpson -p 'Doh!123' -d thesimpsons.local --auto-targets -o html --output-dir ./audit_results
# All formats for comprehensive audit
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
```
### Rapports de sécurité HTML
La sortie HTML génère un rapport de sécurité complet conçu pour les évaluations d'équipe bleue :
- **Score de gravité** : Tâches évaluées par niveau de risque basé sur les privilèges, les identifiants stockés et la configuration
- **Détails de la tâche** : Métadonnées complètes incluant déclencheurs, actions, comptes d'exécution et statut de validation
- **Filtrage** : Filtrage côté client par hôte, gravité et statut des identifiants
- **Prêt pour l'export** : Adapté aux rapports de gestion et à la documentation d'audit
### Collecte de sauvegarde
Par défaut, TaskHound enregistre les fichiers XML bruts des tâches et les blobs d'identifiants DPAPI pour une analyse hors ligne :```bash
# Disable backup collection
taskhound -u homer.simpson -p 'Doh!123' -d thesimpsons.local -t moe.thesimpsons.local --no-backup
# Analyze backups later (offline mode)
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
```
### Filtrage automatique des cibles
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 | Exclu | `--include-disabled` |
| Ordinateurs obsolètes (>60 jours) | Exclu | `--stale-threshold 0` (désactiver) |
| Contrôleurs de domaine | Exclu | `--include-dcs` |
**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 uniquement
- `workstations` - Systèmes d'exploitation non serveur uniquement
- `(raw LDAP)` - Filtre LDAP personnalisé (nécessite une source LDAP)
---
## Résolution des SID
TaskHound résout les SID en noms lisibles en utilisant une chaîne de repli à plusieurs niveaux :
1. **BloodHound** (si connecté) - le plus rapide, aucun trafic réseau
2. **Cache** - Cache persistant SQLite (TTL par défaut 24h)
3. **LSARPC** - requête directe vers la cible (la plus précise pour les comptes locaux)
4. **LDAP** - requête vers le contrôleur de domaine
5. **Catalogue global** - pour les SID inter-domaines/forêts```bash
# Separate LDAP credentials for SID resolution
taskhound -u localadmin -p 'L0c4lP@ss!' -d . -t moe.thesimpsons.local \
--ldap-user homer.simpson --ldap-password 'Doh!123' --ldap-domain thesimpsons.local
# Specify Global Catalog for multi-domain
taskhound -u homer.simpson -p 'Doh!123' -d thesimpsons.local -t moe.thesimpsons.local --gc-server 10.0.0.1
# Disable all network-based resolution (OPSEC)
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
```
---
## Considérations OPSEC
TaskHound offre un contrôle granulaire des opérations réseau pour équilibrer furtivité et fonctionnalité.
### Impact sur les protocoles
| 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` |
### Chaîne de résolution SID```
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
```
### Meilleures pratiques pour la furtivité
1. **Pré-remplir les données BloodHound** - Importer d'abord les données du domaine avec `--bh-live`
2. **Utiliser le drapeau `--opsec`** - Désactive toutes les opérations bruyantes en une fois
3. **Ajouter `--jitter` pour la randomisation temporelle** - Éviter les schémas de scan prévisibles
4. **Collecter les XMLs par d'autres moyens** - Analyser hors ligne avec `--offline`
5. **Utiliser l'implémentation BOF** - Disponible dans AdaptixC2
---
## Référence complète de la CLI
TaskHound 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
```
---
[Read more](https://github.com/1r0bit/taskhound)