
Сетевые браунауты Windows на уровне приложения в виде нативного кода на C и BOF
Сетевые «просадки» Windows в масштабе приложения для детерминированной проверки в ходе red-team.
Нативный C • Windows Filtering Platform • IPv4 + IPv6 • Динамическая очистка
Читать сопроводительную публикацию в блоге →
Быстрый старт • Профили • CLI • Как это работает • Сборка • BOF • Проверка
[!CAUTION] Только контролируемые среды. Запускайте DutchOven только на системах, которыми вы владеете или на проверку которых у вас есть явное разрешение. Инструмент изменяет действующую сетевую политику Windows и требует токена с повышенными правами администратора. Перед использованием ознакомьтесь с SECURITY.md.
DutchOven — намеренно небольшой примитив для red-team в Windows, который ставит явно заданные пути к исполняемым файлам за детерминированный сетевой шлюз. В течение каждого периода соответствующие приложения блокируются на ограниченный интервал, а оставшееся время им разрешается проходить.
Результат — воспроизводимая просадка (brownout), а не остановка службы или постоянное правило брандмауэра. Она создаёт контролируемый способ измерять логику повторных попыток, буферизацию, переходы состояний работоспособности, задержанную доставку и поведение при восстановлении, пока процесс остаётся живым.
| Проектное решение | Ценность для оператора |
|---|---|
| Фильтры WFP в масштабе приложения | Ограничивает эксперимент путями, заданными оператором |
| Цикл блокировки/пропуска по таймеру | Даёт измеримую деградацию, а не только состояния «онлайн/офлайн» |
| Атомарные изменения IPv4 и IPv6 | Держит оба семейства адресов в одном расписании |
| Динамический сеанс WFP | Удаляет фильтры и созданный подслой при закрытии сеанса движка |
| Реализация на нативном C | Без зависимостей от Go, .NET, установки службы или собственного драйвера |
| Только явные цели | Без перечисления продуктов, угадывания процессов или встроенной базы целей |
DutchOven управляет авторизацией новых исходящих подключений. Существующее подключение, которое WFP уже авторизовал, не разрывается задним числом; при проверке непрерывного долгоживущего потока используйте новое канареечное подключение или независимо заставьте цель переподключиться.
Откройте окно PowerShell с повышенными правами.
Проверьте разрешённую цель и тайминг, не изменяя WFP:
.\dutchoven.exe --app 'C:\Path\To\Target.exe' --dry-run
Запустите профиль brownout по умолчанию:
.\dutchoven.exe --app 'C:\Path\To\Target.exe'
Это полный минимальный вызов. --app — единственный обязательный флаг. Профиль по умолчанию блокирует цель на 1,5 секунды в каждом 5-секундном периоде и завершается через одну минуту.
Используйте Ctrl+C для досрочной остановки. DutchOven удаляет активные фильтры перед закрытием своей сессии WFP; динамическая сессия служит страховкой для очистки, если процесс будет прерван.
Профили содержат готовые полезные расписания, чтобы операторам не приходилось указывать каждое значение тайминга.
| Профиль | Блокировка | Пропуск | Период | Длительность | Назначение |
|---|---|---|---|---|---|
light | 0,5 с | 4,5 с | 5 с | 60 с | Наблюдение за повторными попытками с низким воздействием |
brownout | 1,5 с | 3,5 с | 5 с | 60 с | Сбалансированный эксперимент по умолчанию |
heavy | 3,5 с | 1,5 с | 5 с | 60 с | Тестирование очередей и нагрузки при восстановлении |
blackout | 5 с | 0 с | 5 с | 30 с | Короткое ограниченное полное прерывание |
Выберите профиль с помощью одного необязательного флага:
.\dutchoven.exe --app 'C:\Path\To\Target.exe' --profile heavy
dutchoven --app <absolute.exe> [--app <absolute.exe> ...] [options]
| Флаг | Обязательный | Описание |
|---|---|---|
--app <absolute.exe> | Да | Путь к целевому исполняемому файлу; повторяйте для многопроцессных приложений |
--profile <name> | Нет | light, brownout, heavy или blackout |
--period-ms <ms> | Нет | Переопределить полный период блокировки/пропуска |
--block-ms <ms> | Нет | Переопределить заблокированную часть каждого периода |
--duration-ms <ms> | Нет | Переопределить ограниченное общее время выполнения |
--warmup-ms <ms> | Нет | Разрешить трафик до первого интервала блокировки |
--dry-run | Нет | Проверить и вывести конфигурацию без открытия WFP |
--json | Нет | Выводить конфигурацию и переходы состояний в формате JSON Lines |
--help | Нет | Вывести справку по команде |
Выведите версию сборки с помощью dutchoven version.
Расширенные флаги таймингов переопределяют выбранный профиль независимо от порядка аргументов:
.\dutchoven.exe `
--app 'C:\Path\To\Target.exe' `
--period-ms 8000 `
--block-ms 2000 `
--duration-ms 120000 `
--warmup-ms 5000
Строки JSON предназначены для тестовых стендов и сбора доказательств:
.\dutchoven.exe --app 'C:\Path\To\Target.exe' --profile heavy --json
Ограничения по времени обеспечиваются парсером:
100–60000 ms1 ms до полного периода900000 ms (15 минут)60000 msexplicit executable path
│
▼
WFP application ID
│
├── ALE_AUTH_CONNECT_V4 ──┐
└── ALE_AUTH_CONNECT_V6 ──┤── BLOCK / PASS schedule
│
└── dynamic WFP session cleanup
Цели Windows разрешаются как Unicode и канонизируются до их длинного пути, прежде чем DutchOven
запрашивает у WFP идентификатор приложения. Это предотвращает ситуацию, когда псевдоним пути в формате 8.3, такой как ADMINI~1, незаметно
создаёт фильтр, который не может сопоставиться с длинной формой идентификатора образа процесса.
Консоль выводит переходы состояний с отметками времени по настенным часам и относительно расписания:
Targets: 1
C:\Path\To\Target.exe
Schedule: block=1500ms pass=3500ms period=5000ms duration=60000ms warmup=0ms
Profile: brownout
Mode: brownout
BLOCK cycle=1 filters=2 wall_ms=1786973903811 elapsed_ms=0
PASS cycle=1 wall_ms=1786973908813 elapsed_ms=5000
...
CLEAN filters=0 session=closed cycles=12 wall_ms=1786973963812 elapsed_ms=60000
Сборка по умолчанию для Linux проверяет поведение парсинга и пробного запуска. Для работы с живым шлюзом WFP требуется нативная кросс-сборка под Windows.
make check
make release