- होम
- क्लाइंट-साइड डिफेंस
- Demo
- चरण 3 — शमन
चरण 3 — शमन
चरण 3 CSD शमन का एक पहले/बाद का प्रमाण बनाता है। आप बेसलाइन स्थापित करने के लिए बिना किसी शमन के हमला फिर से चलाते हैं, शमन लागू करते हैं, फिर यह सिद्ध करने के लिए वही हमला फिर से चलाते हैं कि CSD नेटवर्क कॉल को ब्लॉक करता है। आगे बढ़ने से पहले चरण 2 पूरा होना चाहिए — सभी DET जाँचें PASS होनी चाहिए।
चरण 1: कोई सक्रिय शमन नहीं (बेसलाइन) की पुष्टि करें
Section titled “चरण 1: कोई सक्रिय शमन नहीं (बेसलाइन) की पुष्टि करें”“पहले” का स्नैपशॉट कैप्चर करने से पहले, सत्यापित करें कि परिवेश साफ़ है — कोई भी शमन सक्रिय नहीं होना चाहिए। यह सुनिश्चित करता है कि बेसलाइन हमला किसी भी CSD ब्लॉकिंग के बिना चलता है।
शमन किए गए डोमेन की गिनती जाँचें
Section titled “शमन किए गए डोमेन की गिनती जाँचें”curl -s \ -H "Authorization: APIToken xF5XC_API_TOKENx" \ "xF5XC_API_URLx/api/shape/csd/namespaces/xF5XC_NAMESPACEx/mitigated_domains" \ | jq '{count: (.items | length)}'यदि गिनती 0 नहीं है, तो पिछले रन से शमन शेष हैं। आगे बढ़ने से पहले प्रत्येक को हटाएँ:
# एक शमन किए गए डोमेन को हटाएँ (प्रत्येक डोमेन नाम के लिए दोहराएँ)curl -s -X DELETE \ -H "Authorization: APIToken xF5XC_API_TOKENx" \ "xF5XC_API_URLx/api/shape/csd/namespaces/xF5XC_NAMESPACEx/mitigated_domains/<domain-name>" \ | jq .<domain-name> को उस metadata.name से बदलें जो डोमेन को शमन करते समय उपयोग किया गया था (जैसे, cdn.jsdelivr.net, esm.sh, unpkg.com, ga.jspm.io, httpbin.org, jsonplaceholder.typicode.com)। यदि httpbin.org की सफाई के बाद एक आइटम शेष रहता है, तो www.httpbin.org को भी हटाने का प्रयास करें — कुछ पिछले रन में उसे metadata name के रूप में उपयोग किया गया होगा।
चरण 2 के डिटेक्शन की उपस्थिति की पुष्टि करें
Section titled “चरण 2 के डिटेक्शन की उपस्थिति की पुष्टि करें”curl -s \ -H "Authorization: APIToken xF5XC_API_TOKENx" \ "xF5XC_API_URLx/api/shape/csd/namespaces/xF5XC_NAMESPACEx/detected_domains" \ | jq '{total_domains: .domain_summary.totalDomains, domains: [.domains_list[]? | {domain: .domain, category: .category}]}'साक्ष्य
Section titled “साक्ष्य”| जाँच | अपेक्षित | स्थिति |
|---|---|---|
| शमन किए गए डोमेन की गिनती | 0 (साफ़ बेसलाइन) | 0 होने पर PASS, > 0 होने पर सफाई आवश्यक |
| डिटेक्ट किए गए डोमेन की गिनती | > 0 (चरण 2 के डिटेक्शन उपस्थित) | > 0 होने पर PASS |
| एक्सफिल डोमेन उपस्थित | www.httpbin.org, jsonplaceholder.typicode.com | कम से कम एक दिखाई देने पर PASS |
चरण 2: हमला चलाएँ — शमन से पहले
Section titled “चरण 2: हमला चलाएँ — शमन से पहले”एक ताज़ा बेसलाइन कैप्चर करने के लिए कोई शमन सक्रिय न होने पर संयुक्त सिमुलेशन फिर से चलाएँ। यह “पहले” का स्नैपशॉट है — इस बात का प्रमाण कि जब CSD शमन लागू नहीं होता तो हमले सफल होते हैं।
AI-स्वचालित निष्पादन
Section titled “AI-स्वचालित निष्पादन”ब्राउज़र ऑटोमेशन उपकरणों वाले AI सहायक उसी चरण 2 initScript (जो नेटिव fetch को सेव करती है) का उपयोग करके हमले के सिमुलेशन को प्रोग्रामेटिक रूप से चलाते हैं:
- initScript के साथ नेविगेट करें — पहले एक साफ़ डॉक्युमेंट संदर्भ सुनिश्चित करने के लिए (पिछले नेविगेशन से पुरानी initScripts से बचने के लिए)
about:blankपर नेविगेट करें, फिर चरण 2 initScript (verbatim कोड चरण 2 — AI-स्वचालित निष्पादन में) के साथhttp://$F5XC_DOMAINNAME/#/loginपरnavigate_pageकरें। यह initScript नेटिवsetInterval,clearInterval,fetch, औरconsole.logको सेव करती है — नेटिवfetchसंदर्भ यहाँ सही है क्योंकि कोई शमन सक्रिय नहीं है - स्वागत बैनर बंद करें — Welcome Banner बंद करने के लिए
Escapeके साथpress_keyकरें। बाद की विज़िट पर बैनर दिखाई नहीं दे सकता (कुकीज़ बनी रहती हैं)। कुकी सहमति डायलॉग Escape कुंजी द्वारा स्वचालित रूप से बंद हो जाता है - पूर्णता की प्रतीक्षा करें — सभी CDN स्क्रिप्ट लोड/एरर कॉलबैक और fetch promise रिज़ॉल्यूशन पूरे होने के लिए 10 सेकंड प्रतीक्षा करें
- साक्ष्य कैप्चर करें —
[CSD Demo] Simulation completeऔर CDN लोड परिणाम जाँचने के लिएlist_console_messages; HTTP स्थिति कोड (200/201सफलता के लिए) सत्यापित करने के लिएscriptऔरfetchप्रकारों के लिए फ़िल्टर किए गएlist_network_requests
मैन्युअल निष्पादन
Section titled “मैन्युअल निष्पादन”ब्राउज़र ऑटोमेशन उपकरणों के बिना ऑपरेटर चरण 2 — चरण 8: हमला सिमुलेशन के समान प्रक्रिया का उपयोग करके सिमुलेशन को मैन्युअल रूप से चलाते हैं:
http://xF5XC_DOMAINNAMEx/#/loginपर नेविगेट करें- Email और Password फ़ील्ड में डमी क्रेडेंशियल दर्ज करें (सबमिट न करें)
- DevTools खोलें — F12 दबाएँ और Console टैब पर जाएँ
- ट्रिगर डिटेक्शन से Combined Detection Script पेस्ट करें और चलाएँ
- कंसोल आउटपुट देखें — सभी CDN स्क्रिप्ट लोड होनी चाहिए और एक्सफिल कॉल
200/201प्रतिक्रियाओं के साथ सफल होनी चाहिए
साक्ष्य — शमन से पहले
Section titled “साक्ष्य — शमन से पहले”| जाँच | अपेक्षित (शमन से पहले) | स्थिति |
|---|---|---|
| CDN स्क्रिप्ट इंजेक्ट किए गए | सभी 4 स्क्रिप्ट टैग लोड — [Supply Chain] Loaded from संदेश दिखाई देते हैं, नेटवर्क टैब 200 दिखाता है | PASS |
www.httpbin.org पर एक्सफिल fetch | नेटवर्क टैब 200 दिखाता है — डेटा भेजा गया | PASS |
| jsonplaceholder.typicode.com पर एक्सफिल fetch | नेटवर्क टैब 201 दिखाता है — डेटा भेजा गया | PASS |
| कंसोल आउटपुट | [CSD Demo] Simulation complete | PASS |
चरण 3: शमन लागू करें
Section titled “चरण 3: शमन लागू करें”प्रत्येक डिटेक्ट किए गए डोमेन के लिए, mitigated domains एंडपॉइंट पर POST करें। चरण 2 सिमुलेशन के प्राथमिक लक्ष्य 4 CDN इंजेक्शन डोमेन और डिटेक्ट किए गए कोई भी डेटा एक्सफिलट्रेशन डोमेन हैं।
प्राथमिक शमन लक्ष्य (संयुक्त सिमुलेशन स्क्रिप्ट से):
| डोमेन | भूमिका |
|---|---|
cdn.jsdelivr.net | CDN स्क्रिप्ट इंजेक्शन |
esm.sh | CDN स्क्रिप्ट इंजेक्शन |
unpkg.com | CDN स्क्रिप्ट इंजेक्शन |
ga.jspm.io | CDN स्क्रिप्ट इंजेक्शन |
www.httpbin.org | डेटा एक्सफिलट्रेशन एंडपॉइंट |
jsonplaceholder.typicode.com | डेटा एक्सफिलट्रेशन एंडपॉइंट |
एक डोमेन को शमन करें (प्रति डोमेन एक बार चलाएँ):
curl -s -X POST \ -H "Authorization: APIToken xF5XC_API_TOKENx" \ -H "Content-Type: application/json" \ -d '{ "metadata": { "name": "cdn.jsdelivr.net", "namespace": "xF5XC_NAMESPACEx" }, "spec": { "mitigated_domain": "cdn.jsdelivr.net" } }' \ "xF5XC_API_URLx/api/shape/csd/namespaces/xF5XC_NAMESPACEx/mitigated_domains" \ | jq .प्रत्येक डोमेन के लिए दोहराएँ:
curl -s -X POST \ -H "Authorization: APIToken xF5XC_API_TOKENx" \ -H "Content-Type: application/json" \ -d '{"metadata":{"name":"esm.sh","namespace":"xF5XC_NAMESPACEx"},"spec":{"mitigated_domain":"esm.sh"}}' \ "xF5XC_API_URLx/api/shape/csd/namespaces/xF5XC_NAMESPACEx/mitigated_domains" \ | jq .
# unpkg.comcurl -s -X POST \ -H "Authorization: APIToken xF5XC_API_TOKENx" \ -H "Content-Type: application/json" \ -d '{"metadata":{"name":"unpkg.com","namespace":"xF5XC_NAMESPACEx"},"spec":{"mitigated_domain":"unpkg.com"}}' \ "xF5XC_API_URLx/api/shape/csd/namespaces/xF5XC_NAMESPACEx/mitigated_domains" \ | jq .
# ga.jspm.iocurl -s -X POST \ -H "Authorization: APIToken xF5XC_API_TOKENx" \ -H "Content-Type: application/json" \ -d '{"metadata":{"name":"ga.jspm.io","namespace":"xF5XC_NAMESPACEx"},"spec":{"mitigated_domain":"ga.jspm.io"}}' \ "xF5XC_API_URLx/api/shape/csd/namespaces/xF5XC_NAMESPACEx/mitigated_domains" \ | jq .
# httpbin.org — mitigated_domain के रूप में www.httpbin.org का उपयोग करें (नीचे नोट देखें)curl -s -X POST \ -H "Authorization: APIToken xF5XC_API_TOKENx" \ -H "Content-Type: application/json" \ -d '{"metadata":{"name":"httpbin.org","namespace":"xF5XC_NAMESPACEx"},"spec":{"mitigated_domain":"www.httpbin.org"}}' \ "xF5XC_API_URLx/api/shape/csd/namespaces/xF5XC_NAMESPACEx/mitigated_domains" \ | jq .
# jsonplaceholder.typicode.comcurl -s -X POST \ -H "Authorization: APIToken xF5XC_API_TOKENx" \ -H "Content-Type: application/json" \ -d '{"metadata":{"name":"jsonplaceholder.typicode.com","namespace":"xF5XC_NAMESPACEx"},"spec":{"mitigated_domain":"jsonplaceholder.typicode.com"}}' \ "xF5XC_API_URLx/api/shape/csd/namespaces/xF5XC_NAMESPACEx/mitigated_domains" \ | jq .200 प्रतिक्रिया बनाए गए shaman किए गए डोमेन ऑब्जेक्ट को लौटाती है। 409 प्रतिक्रिया का अर्थ है कि डोमेन पहले से ही shaman सूची में है — यह एक सफलता की स्थिति है।
चरण 4: शमन लागू होने की पुष्टि करें
Section titled “चरण 4: शमन लागू होने की पुष्टि करें”सभी shaman किए गए डोमेन सूचीबद्ध करें और पुष्टि करें कि गिनती अभी सबमिट किए गए डोमेन की संख्या से मेल खाती है:
curl -s \ -H "Authorization: APIToken xF5XC_API_TOKENx" \ "xF5XC_API_URLx/api/shape/csd/namespaces/xF5XC_NAMESPACEx/mitigated_domains" \ | jq '{count: (.items | length)}'साक्ष्य
Section titled “साक्ष्य”| जाँच | अपेक्षित | स्थिति |
|---|---|---|
| Shaman किए गए डोमेन की गिनती | 6 (POST गिनती से मेल खाती है) | गिनती मेल खाने पर PASS |
चरण 3 के सभी POST ने 200 या 409 लौटाया | प्रत्येक डोमेन स्वीकार किया गया | PASS |
यदि गिनती अपेक्षा से कम है, तो चरण 3 से गायब डोमेन के लिए POST कमांड फिर से चलाएँ।
चरण 5: हमला चलाएँ — शमन के बाद
Section titled “चरण 5: हमला चलाएँ — शमन के बाद”“बाद” का स्नैपशॉट कैप्चर करने के लिए बिल्कुल वही संयुक्त सिमुलेशन फिर से चलाएँ। सिमुलेशन स्क्रिप्ट समान है — केवल CSD की shaman स्थिति बदली है। shaman किए गए डोमेन से स्क्रिप्ट लोड अब CSD JavaScript द्वारा ब्लॉक किए जाते हैं (<script> टैग src को empty string में साफ़ किया जाता है)।
AI-स्वचालित निष्पादन
Section titled “AI-स्वचालित निष्पादन”ब्राउज़र ऑटोमेशन उपकरणों वाले AI सहायक उसी चरण 2 initScript (verbatim कोड चरण 2 — AI-स्वचालित निष्पादन में) का उपयोग करके हमले के सिमुलेशन को प्रोग्रामेटिक रूप से फिर से चलाते हैं। initScript zone.js एरर से बचने के लिए नेटिव fetch को सेव करती है — यह CSD शमन को प्रभावित नहीं करता क्योंकि CSD fetch() कॉल को इंटरसेप्ट नहीं करता।
- initScript के साथ नेविगेट करें — एक साफ़ ब्राउज़र संदर्भ के लिए
isolatedContextके साथnew_pageका उपयोग करें (चरण 2 से पुरानी initScripts से बचने के लिए), फिरabout:blankपर नेविगेट करें, फिर चरण 2 initScript के साथ लॉगिन पेज पर - स्वागत बैनर बंद करें —
Escapeके साथpress_keyकरें - पूर्णता की प्रतीक्षा करें — सभी async कॉलबैक के लिए 10 सेकंड प्रतीक्षा करें
- साक्ष्य कैप्चर करें —
[CSD Demo] Simulation completeजाँचने के लिएlist_console_messages;scriptऔरfetchप्रकारों के लिए फ़िल्टर किए गएlist_network_requestsयह देखने के लिए कि CDN स्क्रिप्ट लोड अनुपस्थित हैं (CSD ने script src को साफ़ किया) जबकि एक्सफिल डोमेन पर fetch कॉल सामान्य रूप से पूरी होती हैं
मैन्युअल निष्पादन
Section titled “मैन्युअल निष्पादन”ब्राउज़र ऑटोमेशन उपकरणों के बिना ऑपरेटर चरण 2 — चरण 8: हमला सिमुलेशन के समान प्रक्रिया का उपयोग करके सिमुलेशन को मैन्युअल रूप से फिर से चलाते हैं:
http://xF5XC_DOMAINNAMEx/#/loginपर नेविगेट करें- Email और Password फ़ील्ड में डमी क्रेडेंशियल दर्ज करें (सबमिट न करें)
- DevTools खोलें — F12 दबाएँ और Console टैब पर जाएँ
- ट्रिगर डिटेक्शन से Combined Detection Script पेस्ट करें और चलाएँ
- कंसोल और नेटवर्क आउटपुट देखें — shaman किए गए डोमेन के लिए CDN स्क्रिप्ट
onloadऔरonerrorकॉलबैक फ़ायर नहीं होते (CSD ने स्क्रिप्टsrcको empty string में साफ़ किया, नेटवर्क अनुरोध को पूरी तरह से रोका)। एक्सफिल डोमेन पर Fetch कॉल (www.httpbin.org, jsonplaceholder.typicode.com)200/201के साथ अभी भी पूरी होती हैं — CSD शमन स्क्रिप्ट लोडिंग को ब्लॉक करता है, fetch/XHR कॉल को नहीं
साक्ष्य — शमन के बाद
Section titled “साक्ष्य — शमन के बाद”| जाँच | अपेक्षित (शमन के बाद) | स्थिति |
|---|---|---|
| CDN स्क्रिप्ट लोड | ब्लॉक — स्क्रिप्ट नेटवर्क टैब में दिखाई नहीं देतीं (CSD ने src को empty string में साफ़ किया) | PASS |
| CDN स्क्रिप्ट कॉलबैक | shaman किए गए डोमेन के लिए न onload और न onerror फ़ायर होता है | PASS |
www.httpbin.org पर एक्सफिल fetch | 200 — fetch अभी भी पूरी होती है (CSD fetch को इंटरसेप्ट नहीं करता) | INFO |
| jsonplaceholder.typicode.com पर एक्सफिल fetch | 201 — fetch अभी भी पूरी होती है (CSD fetch को इंटरसेप्ट नहीं करता) | INFO |
| कंसोल आउटपुट | [CSD Demo] Simulation complete | PASS |
चरण 6: पहले बनाम बाद की तुलना
Section titled “चरण 6: पहले बनाम बाद की तुलना”यह डेमो का payoff है — साइड-बाइ-साइड साक्ष्य जो साबित करता है कि वही हमला, उसी पेज पर, उसी स्क्रिप्ट के साथ, अब एक पूरी तरह से अलग परिणाम देता है।
तुलना तालिका
Section titled “तुलना तालिका”| संकेत | शमन से पहले (चरण 2) | शमन के बाद (चरण 5) |
|---|---|---|
| CDN स्क्रिप्ट लोड | 200 — सभी 4 CDN स्क्रिप्ट सामान्य रूप से लोड होती हैं | ब्लॉक — नेटवर्क टैब से स्क्रिप्ट अनुपस्थित (CSD ने src को empty string में साफ़ किया) |
CDN onload कॉलबैक | [Supply Chain] Loaded from संदेश दिखाई देते हैं | कोई कॉलबैक फ़ायर नहीं होता (कोई नेटवर्क अनुरोध नहीं किया गया) |
www.httpbin.org पर एक्सफिल | 200 — डेटा एक्सफिल्ट्रेट हुआ | 200 — fetch अभी भी पूरी होती है (CSD fetch को इंटरसेप्ट नहीं करता) |
| jsonplaceholder.typicode.com पर एक्सफिल | 201 — डेटा एक्सफिल्ट्रेट हुआ | 201 — fetch अभी भी पूरी होती है (CSD fetch को इंटरसेप्ट नहीं करता) |
| CSD mitigated domains API | 0 shaman किए गए | 6 shaman किए गए |
बैकएंड डेटा में शमन सत्यापित करें
Section titled “बैकएंड डेटा में शमन सत्यापित करें”10 पुनरावृत्तियों (10 मिनट) तक हर 60 सेकंड में /detected_domains क्वेरी करें। तुलना तालिका तक आगे बढ़ें एक बार क्वेरी वापस आने पर, या 10 मिनट के अधिकतम के बाद — ये जाँचें सूचनात्मक हैं और चरण 4 को नहीं रोकतीं।
शमन के बाद डिटेक्ट किए गए डोमेन जाँचें:
curl -s \ -H "Authorization: APIToken xF5XC_API_TOKENx" \ "xF5XC_API_URLx/api/shape/csd/namespaces/xF5XC_NAMESPACEx/detected_domains" \ | jq '{total_domains: .domain_summary.totalDomains, domains: [.domains_list[]? | {domain: .domain, category: .category}]}'Shaman स्थिति के लिए स्क्रिप्ट जाँचें:
NOW=$(date +%s)START=$(( NOW - 86400 ))curl -s -X POST \ -H "Authorization: APIToken xF5XC_API_TOKENx" \ -H "Content-Type: application/json" \ -d "{\"startTime\": \"$START\", \"endTime\": \"$NOW\"}" \ "xF5XC_API_URLx/api/shape/csd/namespaces/xF5XC_NAMESPACEx/scripts" \ | jq '{total: (.scripts | length), scripts: [.scripts[]? | {script_name: .script_name, risk_level: .risk_level}]}'चरण 3 साक्ष्य सारांश
Section titled “चरण 3 साक्ष्य सारांश”| जाँच | अपेक्षित | स्थिति |
|---|---|---|
| बेसलाइन साफ़ (चरण 1) | शुरुआत में 0 shaman किए गए डोमेन | PASS / FAIL |
| पहले — हमला सफल (चरण 2) | स्क्रिप्ट लोड, एक्सफिल 200/201 लौटाता है | PASS / FAIL |
| शमन लागू (चरण 3) | सभी 6 डोमेन POST के माध्यम से स्वीकार (200 या 409) | PASS / FAIL |
| Shaman गिनती की पुष्टि (चरण 4) | सूची में 6 आइटम | PASS / FAIL |
| बाद — स्क्रिप्ट लोड ब्लॉक (चरण 5) | CDN स्क्रिप्ट नेटवर्क टैब से अनुपस्थित, fetch कॉल अभी भी पूरी होती हैं | PASS / FAIL |
| पहले बनाम बाद की तुलना (चरण 6) | चरण 2 और चरण 5 के साक्ष्य के बीच स्पष्ट अंतर | PASS / FAIL |
चरण 3 पूरा। सभी परिनियोजन ऑब्जेक्ट हटाने के लिए तैयार होने पर चरण 4 — निष्कासन पर आगे बढ़ें।