
नेटिव C और BOF प्रारूप में एप्लिकेशन-स्कोप्ड विंडोज नेटवर्क ब्राउनआउट
नियतिवादी रेड-टीम सत्यापन के लिए एप्लिकेशन-स्कोप्ड विंडोज़ नेटवर्क ब्राउनआउट।
नेटिव C • विंडोज़ फ़िल्टरिंग प्लेटफ़ॉर्म • IPv4 + IPv6 • डायनामिक क्लीनअप
त्वरित आरंभ • प्रोफ़ाइल • CLI • यह कैसे काम करता है • बिल्ड • BOF • सत्यापन वर्कफ़्लो
[!CAUTION] केवल नियंत्रित वातावरण। DutchOven को केवल उन्हीं सिस्टम पर चलाएँ जिनके स्वामी आप हैं या जिनका आकलन करने के लिए आप स्पष्ट रूप से अधिकृत हैं। यह लाइव विंडोज़ नेटवर्क नीति बदलता है और इसके लिए उन्नत Administrator टोकन आवश्यक है। उपयोग से पहले SECURITY.md पढ़ें।
DutchOven एक जानबूझकर छोटा विंडोज़ रेड-टीम प्रिमिटिव है जो स्पष्ट निष्पादन योग्य पथों को एक नियतिवादी नेटवर्क गेट के पीछे रखता है। प्रत्येक अवधि के दौरान, मेल खाने वाले एप्लिकेशन एक सीमित अंतराल के लिए ब्लॉक होते हैं और शेष अवधि के लिए पास होने दिए जाते हैं।
परिणाम एक दोहराने योग्य ब्राउनआउट है, न कि कोई सर्विस स्टॉप या स्थायी फ़ायरवॉल नियम। यह रिट्राई लॉजिक, बफ़रिंग, हेल्थ-स्टेट ट्रांज़िशन, विलंबित डिलीवरी और रिकवरी व्यवहार को मापने का एक नियंत्रित तरीका बनाता है, जबकि प्रोसेस जीवित रहती है।
| डिज़ाइन विकल्प | ऑपरेटर मूल्य |
|---|---|
| एप्लिकेशन-स्कोप्ड 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 सेकंड के लिए लक्ष्य को ब्लॉक करती है और एक मिनट के बाद बाहर निकलती है।
जल्दी रोकने के लिए Ctrl+C उपयोग करें। DutchOven अपना WFP सत्र बंद करने से पहले सक्रिय फ़िल्टर हटा
देता है; यदि प्रोसेस बाधित होती है तो डायनामिक सत्र क्लीनअप बैकस्टॉप है।
प्रोफ़ाइल उपयोगी शेड्यूल पहले से सेट करती हैं ताकि ऑपरेटरों को हर टाइमिंग मान निर्दिष्ट न करना पड़े।
एक वैकल्पिक फ़्लैग से किसी प्रोफ़ाइल का चयन करें:
.\dutchoven.exe --app 'C:\Path\To\Target.exe' --profile heavy
dutchoven --app <absolute.exe> [--app <absolute.exe> ...] [options]
बिल्ड संस्करण 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 लक्ष्यों को Unicode के रूप में हल किया जाता है और DutchOven द्वारा WFP से एप्लिकेशन पहचान
माँगने से पहले उनके लंबे पथ में कैननिकलाइज़ किया जाता है। यह ADMINI~1 जैसे 8.3 पथ उपनाम को चुपचाप
एक फ़िल्टर बनाने से रोकता है जो प्रोसेस के लंबे-रूप इमेज पहचान से मेल नहीं खा सकता।
कंसोल वॉल-क्लॉक और शेड्यूल-सापेक्ष टाइमस्टैम्प के साथ स्टेट ट्रांज़िशन प्रिंट करता है:
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>/ के अंतर्गत उत्पन्न करता है।
प्राथमिक आउटपुट:
Windows निष्पादन योग्य केवल Windows सिस्टम लाइब्रेरीज़ से लिंक करता है: fwpuclnt, rpcrt4, और
advapi32।
BOF DutchOven को एक छोटी, सिंक्रोनस पल्स के रूप में पैकेज करता है जो x64 बीकन में इनलाइन चलती है। COFF ऑब्जेक्ट बनाएँ, वर्शन्ड आर्टिफैक्ट ताज़ा करें, और इसके इम्पोर्ट कॉन्ट्रैक्ट को इसके साथ सत्यापित करें:
make bof
Cobalt Strike के Script Manager में bof/dutchoven.cna लोड करें, फिर बीकन कंसोल से इसे इनवोक करें:
dutchoven "C:\Path\To\Target.exe"
dutchoven "C:\Path\To\Target.exe" heavy
डिफ़ॉल्ट प्रोफ़ाइल brownout है। प्रोफ़ाइल एकल सीमित ब्लॉक अंतराल पर मैप होती हैं:
| प्रोफ़ाइल | पल्स |
|---|---|
light | 0.5 s |
brownout | 1.5 s |
heavy |
प्रत्येक इनवोकेशन एक डायनामिक WFP सत्र खोलता है, परमाणु रूप से IPv4 और IPv6 कनेक्ट फ़िल्टर स्थापित करता है, चयनित पल्स के लिए प्रतीक्षा करता है, स्पष्ट रूप से दोनों फ़िल्टर हटाता है, और लौटने से पहले सत्र बंद करता है। डायनामिक सत्र को बंद करना क्लीनअप बैकस्टॉप बना रहता है यदि स्पष्ट निष्कासन विफल हो।
BOF Kernel32, Rpcrt4, और Fwpuclnt के लिए डायनामिक फंक्शन रिज़ॉल्यूशन का उपयोग करता है; इसमें कोई
C रनटाइम इम्पोर्ट नहीं है। यह एक मौजूदा पूर्ण निष्पादन योग्य पथ स्वीकार करता है, उन्नत बीकन आवश्यक है,
और BOF को होस्ट करने वाली प्रोसेस को गेट करने से इनकार करता है। क्योंकि यह इनलाइन निष्पादित होता है,
यह जानबूझकर स्टैंडअलोन बाइनरी के एक-मिनट के मल्टी-साइकिल शेड्यूलर को पुनरुत्पादित नहीं करता।
एक उपयोगी रेड-टीम परिणाम को स्वतंत्र साक्ष्य की आवश्यकता होती है। सफल फ़िल्टर-ऐड कॉल को यह प्रमाण न मानें कि लक्ष्य ने इच्छित ब्राउनआउट अनुभव किया।
रीपॉज़िटरी में एक Windows इंटीग्रेशन हार्नेस शामिल है जो हानिरहित TCP कैनरी की दो प्रतियों के साथ उन दावों को स्वचालित करता है। इसके लिए एक उन्नत 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 को Windows Server 2022 पर Elastic Defend 9.4.2 के साथ मान्य किया गया था:
Elastic ने DutchOven की प्रोसेस स्टार्ट, प्रोसेस एंड, SYSTEM पहचान और पूर्ण कमांड लाइन रिकॉर्ड की, फिर रिकवरी के बाद बफ़र्ड टेलीमेट्री वितरित की। उस कॉन्फ़िगरेशन में इसने Elastic Defend अलर्ट उत्पन्न नहीं किया। इसे एक मापा गया परिणाम मानें, न कि सार्वभौमिक डिटेक्शन या चोरी का दावा।
DutchOven जानबूझकर नहीं करता:
प्रशासक अधिकार आवश्यक हैं क्योंकि WFP ऑब्जेक्ट जोड़ने के लिए Base Filtering Engine तक लेखन पहुँच आवश्यक है। एप्लिकेशन पहचान उस निष्पादन योग्य से मेल खानी चाहिए जो वास्तव में नेटवर्क फ़्लो का स्वामी है। मल्टीप्रोसेस एजेंट, प्रॉक्सी, कर्नेल नेटवर्किंग, और लंबे समय तक चलने वाले कनेक्शन देखे गए परिणाम को बदल सकते हैं और उन्हें अनुमान के बजाय मापा जाना चाहिए।
| प्रोफ़ाइल | ब्लॉक | पास | अवधि | अवधि (ड्यूरेशन) | इच्छित उपयोग |
|---|
light | 0.5 s | 4.5 s | 5 s | 60 s | कम-प्रभाव वाला रिट्राई अवलोकन |
brownout | 1.5 s | 3.5 s | 5 s | 60 s | संतुलित डिफ़ॉल्ट प्रयोग |
heavy | 3.5 s | 1.5 s | 5 s | 60 s | क्यू और रिकवरी-दबाव परीक्षण |
blackout | 5 s | 0 s | 5 s | 30 s | छोटा, सीमित पूर्ण व्यवधान |
| फ़्लैग | आवश्यक | विवरण |
|---|
--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 | नहीं | कमांड सहायता प्रिंट करें |
| आर्टिफैक्ट | उद्देश्य |
|---|
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 बीकन ऑब्जेक्ट फ़ाइल |
artifacts/v<version>/ | स्ट्रिप्ड रिलीज़ EXE, BOF, और चेकसम |
| 3.5 s |
blackout | 5 s |
| पथ | सामग्री |
|---|
src/main.c | न्यूनतम कमांड-लाइन प्रवेश बिंदु |
src/gate.c | WFP गेट, प्रोफ़ाइल, टाइमिंग, और क्लीनअप |
tests/test_gate.c | पार्सर, प्रोफ़ाइल, और सीमा परीक्षण |
tests/windows_canary.c | रूटेड Windows इंटीग्रेशन परीक्षणों के लिए हानिरहित TCP कैनरी |
tests/windows_integration.ps1 | सामान्य और जबरन-क्लीनअप WFP इंटीग्रेशन हार्नेस |
bof/ | x64 BOF स्रोत, Aggressor रैपर, और कॉन्ट्रैक्ट चेकर |