
네이티브 C 및 BOF 형식으로 구현된 애플리케이션 범위의 Windows 네트워크 브라운아웃
결정론적 레드팀 검증을 위한 애플리케이션 범위 Windows 네트워크 브라운아웃.
네이티브 C • Windows Filtering Platform • IPv4 + IPv6 • 동적 정리
빠른 시작 • 프로필 • CLI • 작동 방식 • 빌드 • BOF • 검증
[!CAUTION] 통제된 환경에서만 사용하십시오. DutchOven은 소유하고 있거나 평가 권한을 명시적으로 부여받은 시스템에서만 실행하십시오. 이 도구는 실행 중인 Windows 네트워크 정책을 변경하며 상승된 Administrator 토큰이 필요합니다. 사용 전에 SECURITY.md를 검토하십시오.
DutchOven은 명시적인 실행 파일 경로를 결정론적 네트워크 게이트 뒤에 배치하는, 의도적으로 작은 Windows 레드팀 프리미티브입니다. 각 주기 동안 일치하는 애플리케이션은 정해진 간격 동안 차단되고 나머지 시간 동안 통과가 허용됩니다.
그 결과는 서비스 중지나 영구 방화벽 규칙이 아닌 반복 가능한 브라운아웃입니다. 이는 프로세스가 살아 있는 동안 재시도 로직, 버퍼링, 상태 전환, 지연 전달, 복구 동작을 측정할 수 있는 통제된 방법을 제공합니다.
| 설계 선택 | 운영자 가치 |
|---|---|
| 애플리케이션 범위 WFP 필터 | 실험을 운영자가 제공한 경로로 제한 |
| 시간 기반 차단/통과 듀티 사이클 | 단순한 온라인/오프라인 상태가 아닌 측정 가능한 성능 저하 생성 |
| 원자적 IPv4 및 IPv6 변경 | 두 주소 체계를 동일한 일정으로 유지 |
| 동적 WFP 세션 | 엔진 세션이 닫힐 때 필터와 생성된 서브레이어 제거 |
| 네이티브 C 구현 | Go, .NET, 서비스 설치, 사용자 지정 드라이버 의존성 없음 |
| 명시적 대상만 | 제품 열거, 프로세스 추측, 내장 대상 데이터베이스 없음 |
DutchOven은 새 아웃바운드 연결 승인을 게이트합니다. WFP가 이미 승인한 기존 연결은 소급하여 종료되지 않습니다. 중단 없는 장기 흐름을 검증할 때는 새 카나리 연결을 사용하거나 대상이 독립적으로 재연결하도록 강제하십시오.
상승된 PowerShell 창을 엽니다.
WFP를 변경하지 않고 확인된 대상과 타이밍을 검증합니다:
.\dutchoven.exe --app 'C:\Path\To\Target.exe' --dry-run
기본 브라운아웃 프로필을 실행합니다:
.\dutchoven.exe --app 'C:\Path\To\Target.exe'
이것이 완전한 최소 호출입니다. --app은 유일한 필수 플래그입니다. 기본 프로필은
5초 주기마다 1.5초 동안 대상을 차단하고 1분 후 종료됩니다.
조기에 중지하려면 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 Lines는 테스트 하네스와 증거 수집을 위해 설계되었습니다:
.\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 대상은 DutchOven이 WFP에 애플리케이션 ID를 요청하기 전에 유니코드로 확인되고 긴 경로로 정규화됩니다. 이렇게 하면 ADMINI~1과 같은 8.3 경로 별칭이 프로세스의 긴 형식 이미지 ID와 일치할 수 없는 필터를 조용히 생성하는 것을 방지합니다.
콘솔은 벽시계 및 스케줄 기준 타임스탬프와 함께 상태 전환을 출력합니다:
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
make check는 이식 가능한 테스트를 실행하고, Windows 아티팩트를 크로스 빌드하며, BOF 임포트 계약을 검증합니다. make release는 스트리핑된 릴리스 아티팩트와 SHA256SUMS를 artifacts/v<version>/ 아래에 생성합니다.
주요 출력물:
| 아티팩트 | 용도 |
|---|---|
build/dutchoven | POSIX 파서 및 드라이런 바이너리 |
build/dutchoven_tests | 핵심 단위 테스트 |
build-windows/dutchoven.exe | 네이티브 Windows WFP 게이트 |
build-windows/dutchoven_tests.exe | 네이티브 Windows 테스트 바이너리 |
build-windows/windows_canary.exe | 라우팅된 통합 테스트 카나리 |
bof/dutchoven.x64.o | 버전이 지정된 x64 Beacon Object File |
artifacts/v<version>/ | 스트리핑된 릴리스 EXE, BOF 및 체크섬 |
Windows 실행 파일은 Windows 시스템 라이브러리인 fwpuclnt, rpcrt4, advapi32에만 링크됩니다.
BOF는 DutchOven을 x64 Beacon에서 인라인으로 실행되는 짧고 동기적인 펄스로 패키징합니다. COFF 오브젝트를 빌드하고, 버전이 지정된 아티팩트를 갱신하며, 다음 명령으로 임포트 계약을 검증하십시오:
make bof
Cobalt Strike의 Script Manager에서 bof/dutchoven.cna를 로드한 다음, Beacon 콘솔에서 호출합니다:
dutchoven "C:\Path\To\Target.exe"
dutchoven "C:\Path\To\Target.exe" heavy
기본 프로필은 brownout입니다. 프로필은 단일한 제한된 차단 간격에 매핑됩니다:
| 프로필 | 펄스 |
|---|---|
light | 0.5초 |
brownout | 1.5초 |
heavy | 3.5초 |
blackout | 5초 |
각 호출은 동적 WFP 세션을 열고, IPv4 및 IPv6 연결 필터를 원자적으로 설치하며, 선택된 펄스를 기다린 뒤, 두 필터를 명시적으로 제거하고, 반환하기 전에 세션을 닫습니다. 명시적 제거가 실패할 경우 동적 세션을 닫는 것이 정리 백스톱으로 남습니다.
BOF는 Kernel32, Rpcrt4, Fwpuclnt에 대해 Dynamic Function Resolution을 사용하며, C 런타임 임포트가 없습니다. 기존의 절대 실행 파일 경로 하나를 받아들이고, 상승된 Beacon을 요구하며, BOF를 호스팅하는 프로세스를 게이팅하는 것을 거부합니다. 인라인으로 실행되기 때문에, 독립 실행형 바이너리의 1분 다중 사이클 스케줄러를 의도적으로 재현하지 않습니다.
유용한 레드팀 결과에는 독립적인 증거가 필요합니다. 필터 추가 호출이 성공했다고 해서 대상이 의도한 브라운아웃을 겪었다는 증거로 간주하지 마십시오.
저장소에는 무해한 TCP 카나리 두 개를 사용하여 이러한 검증 항목을 자동화하는 Windows 통합 하네스가 포함되어 있습니다. 상승된 PowerShell 세션과 접근 가능한 비로컬 TCP 리스너가 필요하며, 루프백 트래픽은 라우팅된 WFP 검증을 대체할 수 없습니다.
.\tests\windows_integration.ps1 `
-DutchOvenPath '.\build-windows\dutchoven.exe' `
-CanaryPath '.\build-windows\windows_canary.exe' `
-ServerAddress '192.0.2.10' `
-ServerPort 8443
하네스는 기준 연결성, 표적 차단, 영향받지 않는 대조군, 정상 복구, 동적 세션을 통한 강제 종료 복구, 그리고 WFP 잔여물 없음을 입증한다.
DutchOven 0.4.1은 Elastic Defend 9.4.2가 설치된 Windows Server 2022에서 검증되었다:
Elastic은 DutchOven의 프로세스 시작, 프로세스 종료, SYSTEM 신원, 그리고 전체 명령줄을 기록한 뒤, 복구 후에 버퍼링된 텔레메트리를 전달했다. 해당 구성에서는 Elastic Defend 경고를 생성하지 않았다. 이는 하나의 측정된 결과로 취급해야 하며, 보편적인 탐지 또는 회피 주장으로 보아서는 안 된다.