
Dégradations réseau Windows ciblées par application, en C natif et sous forme de BOF
Dégradations réseau Windows limitées à des applications pour une validation red team déterministe.
C natif • Windows Filtering Platform • IPv4 + IPv6 • Nettoyage dynamique
Démarrage rapide • Profils • CLI • Fonctionnement • Compilation • BOF • Validation
[!CAUTION] Environnements contrôlés uniquement. Exécutez DutchOven uniquement sur des systèmes que vous possédez ou que vous êtes explicitement autorisé à évaluer. Il modifie la stratégie réseau Windows en direct et nécessite un jeton Administrateur élevé. Consultez SECURITY.md avant toute utilisation.
DutchOven est une primitive red team Windows volontairement minimale qui place des chemins exécutables explicites derrière une porte réseau déterministe. À chaque période, les applications correspondantes sont bloquées pendant un intervalle borné puis autorisées à passer pour le reste de la période.
Le résultat est un brownout reproductible, et non un arrêt de service ou une règle de pare-feu permanente. Cela crée un moyen contrôlé de mesurer la logique de nouvelle tentative, la mise en tampon, les transitions d'état de santé, la livraison différée et le comportement de récupération pendant qu'un processus reste actif.
DutchOven contrôle l'autorisation des nouvelles connexions sortantes. Une connexion existante déjà autorisée par WFP n'est pas interrompue rétroactivement ; utilisez une nouvelle connexion canari ou forcez indépendamment la cible à se reconnecter pour valider un flux longue durée ininterrompu.
Ouvrez une fenêtre PowerShell avec élévation de privilèges.
Validez la cible résolue et le minutage sans modifier WFP :
.\dutchoven.exe --app 'C:\Path\To\Target.exe' --dry-run
Exécutez le profil brownout par défaut :
.\dutchoven.exe --app 'C:\Path\To\Target.exe'
C'est l'invocation minimale complète. --app est le seul paramètre requis. Le profil par défaut
bloque la cible pendant 1,5 seconde à chaque période de 5 secondes et se termine après une minute.
Utilisez Ctrl+C pour arrêter prématurément. DutchOven supprime les filtres actifs avant de fermer sa session WFP ;
la session dynamique constitue le filet de sécurité de nettoyage si le processus est interrompu.
Les profils intègrent des calendriers utiles afin que les opérateurs n'aient pas à spécifier chaque valeur de minutage.
Sélectionnez un profil avec un seul paramètre facultatif :
.\dutchoven.exe --app 'C:\Path\To\Target.exe' --profile heavy
dutchoven --app <absolute.exe> [--app <absolute.exe> ...] [options]
Affichez la version du binaire avec dutchoven version.
Les paramètres de minutage avancés remplacent le profil sélectionné quel que soit l'ordre des arguments :
.\dutchoven.exe `
--app 'C:\Path\To\Target.exe' `
--period-ms 8000 `
--block-ms 2000 `
--duration-ms 120000 `
--warmup-ms 5000
Les lignes JSON sont destinées aux bancs de test et à la collecte de preuves :
.\dutchoven.exe --app 'C:\Path\To\Target.exe' --profile heavy --json
Les limites de minutage sont appliquées par l'analyseur :
100–60000 ms1 ms à la période complète900000 ms (15 minutes)60000 msexplicit executable path
│
▼
WFP application ID
│
├── ALE_AUTH_CONNECT_V4 ──┐
└── ALE_AUTH_CONNECT_V6 ──┤── BLOCK / PASS schedule
│
└── dynamic WFP session cleanup
Les cibles Windows sont résolues en Unicode et canonisées selon leur chemin long avant que DutchOven
ne demande une identité d'application à WFP. Cela évite qu'un alias de chemin 8.3 tel que ADMINI~1 ne
crée silencieusement un filtre incapable de correspondre à l'identité d'image au format long du processus.
La console affiche les transitions d'état avec des horodatages en temps réel et relatifs au calendrier :
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
La compilation Linux par défaut exerce l'analyse et le comportement dry-run. La porte WFP en direct nécessite la compilation croisée native Windows.
make check
make release
make check exécute les tests portables, compile en croisé les artefacts Windows et vérifie le contrat
d'importation du BOF. make release produit des artefacts de version allégés et SHA256SUMS sous
artifacts/v<version>/.
Sorties principales :
L'exécutable Windows ne lie que les bibliothèques système Windows : fwpuclnt, rpcrt4 et
advapi32.
Le BOF empaquette DutchOven en une impulsion synchrone courte qui s'exécute de manière inline dans un Beacon x64. Compilez l'objet COFF, actualisez l'artefact versionné et vérifiez son contrat d'importation avec :
make bof
Chargez bof/dutchoven.cna dans le Script Manager de Cobalt Strike, puis invoquez-le depuis une console Beacon :
dutchoven "C:\Path\To\Target.exe"
dutchoven "C:\Path\To\Target.exe" heavy
Le profil par défaut est brownout. Les profils correspondent à un unique intervalle de blocage borné :
| Profil | Impulsion |
|---|---|
light | 0,5 s |
brownout | 1,5 s |
heavy |
Chaque invocation ouvre une session WFP dynamique, installe atomiquement les filtres de connexion IPv4 et IPv6, attend l'impulsion sélectionnée, supprime explicitement les deux filtres puis ferme la session avant de retourner. La fermeture de la session dynamique reste le filet de sécurité de nettoyage si la suppression explicite échoue.
Le BOF utilise la résolution dynamique de fonctions pour Kernel32, Rpcrt4 et Fwpuclnt ; il ne comporte
aucune importation de runtime C. Il accepte un chemin exécutable absolu existant, requiert un Beacon avec
élévation de privilèges et refuse de contrôler le processus hébergeant le BOF. Parce qu'il s'exécute de manière
inline, il ne reproduit volontairement pas le planificateur multi-cycles d'une minute du binaire autonome.
Un résultat red team utile nécessite des preuves indépendantes. Ne considérez pas un appel d'ajout de filtre réussi comme la preuve que la cible a subi la dégradation prévue.
Le dépôt comprend un banc de test d'intégration Windows qui automatise ces assertions avec deux copies d'un canari TCP inoffensif. Il requiert une session PowerShell avec élévation de privilèges et un écouteur TCP non local joignable ; le trafic en boucle locale n'est pas un substitut valide pour la validation WFP routée.
.\tests\windows_integration.ps1 `
-DutchOvenPath '.\build-windows\dutchoven.exe' `
-CanaryPath '.\build-windows\windows_canary.exe' `
-ServerAddress '192.0.2.10' `
-ServerPort 8443
Le banc de test prouve la connectivité de référence, le blocage ciblé, un contrôle insensible, la récupération normale, la récupération après terminaison forcée via la session dynamique et l'absence totale de résidu WFP.
DutchOven 0.4.1 a été validé sur Windows Server 2022 avec Elastic Defend 9.4.2 :
Elastic a enregistré le démarrage du processus DutchOven, sa fin, l'identité SYSTEM et la ligne de commande complète, puis a livré la télémétrie mise en tampon après la récupération. Cela n'a produit aucune alerte Elastic Defend dans cette configuration. Considérez ceci comme un résultat mesuré unique, et non comme une affirmation universelle de détection ou de contournement.
DutchOven ne fait volontairement pas :
Les droits Administrateur sont requis car l'ajout d'objets WFP nécessite un accès en écriture au moteur de filtrage de base. L'identité d'application doit correspondre à l'exécutable qui possède réellement le flux réseau. Les agents multiprocessus, les proxys, la mise en réseau par noyau et les connexions longue durée peuvent modifier le résultat observé et doivent être mesurés plutôt que supposés.
| Choix de conception | Valeur pour l'opérateur |
|---|
| Filtres WFP limités à l'application | Limite l'expérience aux chemins fournis par l'opérateur |
| Cycle bloqué/autorisation minuté | Produit une dégradation mesurable au lieu de seulement des états en ligne/hors ligne |
| Changements IPv4 et IPv6 atomiques | Maintient les deux familles d'adresses sur le même calendrier |
| Session WFP dynamique | Supprime les filtres et la sous-couche générée lorsque la session du moteur se ferme |
| Implémentation en C natif | Aucune dépendance à Go, .NET, une installation de service ou un pilote personnalisé |
| Cibles explicites uniquement | Aucune énumération de produits, aucune supposition de processus ni base de données de cibles intégrée |
| Profil | Blocage | Autorisation | Période | Durée | Usage prévu |
|---|
light | 0,5 s | 4,5 s | 5 s | 60 s | Observation des nouvelles tentatives à faible impact |
brownout | 1,5 s | 3,5 s | 5 s | 60 s | Expérience équilibrée par défaut |
heavy | 3,5 s | 1,5 s | 5 s | 60 s | Test de file d'attente et de pression de récupération |
blackout | 5 s | 0 s | 5 s | 30 s | Interruption totale courte et bornée |
| Paramètre | Requis | Description |
|---|
--app <absolute.exe> | Oui | Chemin de l'exécutable cible ; répétez pour les applications multiprocessus |
--profile <name> | Non | light, brownout, heavy ou blackout |
--period-ms <ms> | Non | Remplace la période complète blocage/autorisation |
--block-ms <ms> | Non | Remplace la portion bloquée de chaque période |
--duration-ms <ms> | Non | Remplace la durée totale bornée |
--warmup-ms <ms> | Non | Autorise le trafic avant le premier intervalle de blocage |
--dry-run | Non | Valide et affiche la configuration sans ouvrir WFP |
--json | Non | Émet la configuration et les transitions d'état en JSON Lines |
--help | Non | Affiche l'aide de la commande |
| Artefact | Objectif |
|---|
build/dutchoven | Analyseur POSIX et binaire dry-run |
build/dutchoven_tests | Tests unitaires principaux |
build-windows/dutchoven.exe | Porte WFP Windows native |
build-windows/dutchoven_tests.exe | Binaire de test Windows natif |
build-windows/windows_canary.exe | Canari de test d'intégration routé |
bof/dutchoven.x64.o | Fichier d'objet Beacon x64 versionné |
artifacts/v<version>/ | EXE de version allégé, BOF et sommes de contrôle |
| 3,5 s |
blackout | 5 s |
| Chemin | Contenu |
|---|
src/main.c | Point d'entrée minimal en ligne de commande |
src/gate.c | Porte WFP, profils, minutage et nettoyage |
tests/test_gate.c | Tests de l'analyseur, des profils et des limites |
tests/windows_canary.c | Canari TCP inoffensif pour les tests d'intégration Windows routés |
tests/windows_integration.ps1 | Banc de test d'intégration WFP avec nettoyage normal et forcé |
bof/ | Source du BOF x64, wrapper Aggressor et vérificateur de contrat |