WAF और इंजेक्शन सुरक्षा
1) एपीआई युग में WAF क्यों
यहां तक कि कठोर सत्यापन और पैरामेटराइजेशन के साथ, इंजेक्शन निम्नलिखित के कारण होते हैं:- एकीकरण की "लंबी पूंछ" (विरासत कोड, संबद्ध वेबहूक),
- पार्सिंग विसंगतियां (प्रॉक्सी ↔ फ्रेमवर्क),
- नई प्रोटोकॉल/obfuscation बाईपास तकनीक।
- WAF कोड रिलीज से पहले एक प्रारंभिक इनकार और "वर्चुअल पैचिंग" सीमा देता है, लेकिन सुरक्षित विकास को प्रतिस्थापित
2) धमकी मॉडल: एपीआई इंजेक्शन प्रकार
SQLi/ORMi: क्लासिक/बूलियन/टाइम-आधारित/स्टैक्ड; देरी के माध्यम से अंधा।
NoSQLi (मोंगो/इलास्टिक): ऑपरेटर '$ ne/$ gt', JSON इंजेक्शन, regex-DOS।
कमांड इंजेक्शन/आरसीई: शेल मेटाकार्टर्स, तर्क प्रतिस्थापन, असुरक्षित मरुस्थलीकरण → कोड निष्पादित।
XXE: XML में बाहरी इकाइयाँ/DTD।
SSRF: '169 तक पहुंच। 254. 169. 254 '/आंतरिक सेवाएं; DNS-रिबाइंडिंग।
LDAP/EL इंजेक्शन, XPath, हेडर इंजेक्शन (CRLF), पथ ट्रैवर्सल।
साँचा इंजेक्शन: जिंजा/थाइमेलेफ/हैंडलबार; '{{77}'.
ग्राफ़क्यूएल-विशिष्ट: '__ स्कीमा' आत्मनिरीक्षण, प्रश्नों की गहराई/जटिलता।
JSON/JS-विशिष्ट: प्रोटोटाइप प्रदूषण ('__ प्रोटो __', 'कंस्ट्रक्टर')।
gRPC/Protobuf: ओवरसाइज़्ड संदेश, स्कीमा बेमेल के माध्यम से क्षेत्र तस्करी।
3) WAF आर्किटेक्चर
CDN-WAF परिधि: फास्ट जियो/ASN फ़िल्टरिंग, बेसिक बॉट कंट्रोल, कैश/एंटी-पैडिंग।
परिधि L7 (NGINX/दूत/APISIX/Cong): सटीक पार्सिंग, गहरे नियम, पीडीपी/सीमाओं के साथ एकीकरण।
Sidecar/mash (Envoy WASM/Filter): प्रति-सेवा, डेटा के करीब, आंतरिक API के लिए कम गलत सकारात्मक।
सिफारिश: दोहरी परत मॉडल (CDN-WAF + L7 WAF)।
4) पार्सिंग, सामान्यीकरण और एंटी-बाईपास
WAF को आवेदन के समान विहित प्रतिनिधित्व देखना चाहिए:- पथ सामान्यीकरण ('/a/% 2e% 2e/b 'विफलता),' UTF-8 '/Unicode भ्रमित करने योग्य, NUL बाइट्स.
- एकल डिकोडिंग: URL-/HTML-/Unicode-/Base64-layers, डबल डिकोडिंग का निषेध।
- प्रतिबंध: 'max _ header', 'max _ header _ size', 'max _ body _ size', 'max _ args', JSON गहराई, मल्टीपार्ट सीमा, 2x gzip/zip बम निषिद्ध।
- सामग्री-प्रकार की नीतियां: 'एप्लिकेशन/जेसन' केवल JSON समापन बिंदुओं पर; "बहुभुज" को अस्वीकार करें।
5) नियम मॉडल
नकारात्मक (हस्ताक्षर): OWASP CRS (SQLi/XSS/SSRF/जावा/नोड RCE, आदि)। त्वरित शुरुआत।
पॉजिटिव (अनुमति-सूची): सख्त योजनाएं (JSON स्कीमा/प्रोटोबुफ), प्रकार और रेंज; मार्गों पर।
असामान्य/स्कोरिंग: "संदिग्ध" संकेतों का योग - सीमा अवरुद्ध।
प्रासंगिक: 'POST/भुगतान' और 'GET/स्थिति' के लिए अलग-अलग प्रोफाइल; कम एफपी।
6) संरक्षण इकाइयाँ (एक बंडल में)
1. स्कीमा और प्रकार: JSON स्कीमा/व्यावसायिक तर्क के लिए प्रोटोबुफ सत्यापन।
2. पैरामेटराइजेशन: तैयार किए गए भाव, ओआरएम बाइंडिंग, कॉन्सेटेनेशन निषेध।
3. आउटपुट-एस्केपिंग: HTML/JS/SQL प्रासंगिक।
4. शरीर की नीतियां: सामग्री-प्रकार, आकार, बहुपक्षीय प्रतिबंध, JSON हैंडल पर बायनेरीज़का निषेध।
5. WAF नियम: CRS + कस्टम नेगेटिव/पॉजिटिव।
6. दर/कोटा/संगोष्ठी: क्रूर/कछुआ डीडीओएस दमन, सार्वजनिक रूपों के लिए सुरक्षात्मक कैप्चा/चुनौतियां।
7. नेटवर्क अलगाव: SSRF के लिए नीतियां (इनकार RFC1918/metadata/Unix सॉकेट)।
8. हेडर-स्वच्छता: 'एक्स-कंटेंट-टाइप-ऑप्शन: नोसनिफ', 'कंटेंट-सिक्योरिटी-पॉलिसी' फॉर फ्रंट, 'रेफरर-पॉलिसी'।
9. ग्राफक्यूएल गार्ड: गहराई/जटिलता की सीमा, प्रोड (या रोल-गेट) में आत्मनिरीक्षण का निषेध।
7) कॉन्फ़िगरेशन उदाहरण
7. 1 NGINX + ModSecurity (OWASP CRS)
nginx load_module modules/ngx_http_modsecurity_module.so;
modsecurity on;
modsecurity_rules_file /etc/modsecurity/modsecurity.conf;
modsecurity_rules '
SecRuleEngine On
Подключаем CRS
Include /etc/modsecurity/crs/crs-setup.conf
Include /etc/modsecurity/crs/rules/.conf
Позитивные правила: только JSON и ограничение размера
SecRule REQUEST_HEADERS:Content-Type "!@rx ^application/json($;)" "id:10001,phase:1,deny,status:415,msg:'Only JSON allowed'"
SecRequestBodyLimit 1048576
SecRequestBodyNoFilesLimit 1048576
Блок локальных адресов (SSRF)
SecRule REQUEST_HEADERS:Host "@ipmatch 127.0.0.0/8 10.0.0.0/8 169.254.0.0/16 192.168.0.0/16" \
"id:10002,phase:1,deny,status:403,msg:'Blocked private range'"
';
server {
listen 443 ssl http2;
server_name api.example.com;
client_max_body_size 1m;
proxy_request_buffering on; # защита от slow-POST proxy_read_timeout 300ms;
proxy_connect_timeout 100ms;
location /v1/ {
proxy_pass http://app_backends;
}
}
7. 2 दूत HTTP WAF (WASM + JSON स्कीमा + SSRF egress-deny)
yaml http_filters:
- name: envoy.filters.http.wasm typed_config:
config:
vm_config: { vm_id: waf, code: { local: { filename: /plugins/waf.wasm } } }
configuration:
"@type": type.googleapis.com/google.protobuf.Struct value:
crs_profile: "strict"
deny_patterns: ["(?i)union.select", "(?i)(sleep benchmark)\\s\\("]
json_schema:
"/v1/payments:create": "/schemas/payments_create.json"
- name: envoy.filters.http.router
Egress SSRF guard (L4): deny private ranges from gateway filter_chains:
- filters:
- name: envoy.filters.network.tcp_proxy typed_config:
stat_prefix: egress cluster: internet access_log: [...]
tunneling_config:
hostname: "%REQ(:authority)%"
transport_socket:
name: envoy.transport_sockets.tls
7. 3 APISIX: प्रकार प्रतिबंध और विरोधी प्रतिबंध
yaml routes:
- uri: /v1/
plugins:
cors: { allow_origins: "https://app.example.com" }
request-validation:
body_schema:
{"type":"object","properties":{"amount":{"type":"number","minimum":1}},"required":["amount"]}
uri-blocker:
block_rules: ["..","%2e%2e","%2f..","\\x00"] # traversal/NULL proxy-rewrite:
headers:
set:
X-Content-Type-Options: "nosniff"
8) ट्यूनिंग और झूठी सकारात्मकता को कम करना (एफपी)
प्रति-मार्ग प्रोफाइल: सख्त नियम केवल जहां उचित हो (उदा। '/search 'अनुमति देता है '/'%').
छाया/रिपोर्ट-केवल: ब्लॉक से पहले लॉग प्रतिक्रियाएं; मैट्रिक्स की ए/बी तुलना।
कस्टम "शोर" वैध मापदंडों के लिए सूचियों की अनुमति दें।
स्कोरिंग: केवल तभी ब्लॉक करें जब संकेतक योग> सीमा।
प्रयोग: नए नियमों के लिए यातायात का एक छोटा प्रतिशत - ऑटो-रोलबैक।
9) अवलोकन और घटना
Метрики: 'waf _ block _ total {rul}', 'waf _ anomaly _ score', 'requess _ body _ recesed _ total', 'sschema _ mulation _ total', 'ssrf _ blox _ total'।
लॉग (नमूना): नियम, अनुरोध का हिस्सा (संपादित), 'ट्रेस _ आईडी', 'किरायेदार', 'रूट', कारण। PII/रहस्यों को छिपाएं।
डैशबोर्ड: शीर्ष नियम/पथ, एफपी समूह, रिलीज के बाद गतिशीलता।
घटनाएं: कलाकृतियों की बचत (पेलोड, यदि आवश्यक हो तो पीसीएपी), आरसीए उत्पाद और "आभासी पैच"।
10) परीक्षण और अराजकता परिदृश्य
WAF बाईपास एन्क्लोजर (SQLi/XSS/SSRF), डबल/ट्रिपल यूनिकोड मिश्रित एन्कोडिंग।
पार्सिंग अंतर: पेलोड भेजें, जहां प्रॉक्सी और फ्रेमवर्क विचलन कर सकता है (पैरामीटर डुप्लिकेट, सरणियाँ, ';' बनाम '&')।
धीमा-POST/ओवरसाइज़, ज़िप बम, बहु-भाग रूप, गलत सीमा।
ग्राफक्यूएल: गहराई/जटिलता जनरेटर, सीमा की जाँच और समय समाप्ति।
11) एंटीपैटर्न
"सीआरएस चालू किया और भूल गया": योजनाओं के बिना, मार्गों के साथ ट्यूनिंग के बिना।
कच्चे अनुरोध निकाय और पीआईआई के साथ लॉग।
कोई सामान्यीकरण/आकार सीमा नहीं - बाईपास, पार्सिंग के लिए डॉस।
'कंटेंट-टाइप '/चार्सेट चेक छोड़ ना - पॉलीग्लॉट हमला।
क्लाउड मेटाडेटा के लिए कोई एग्रेस फ़िल्टर → SSRF।
बाहरी और आंतरिक एपीआई के लिए एक सामान्य प्रोफ़ाइल।
अनियंत्रित अपवाद "साथी के लिए" परिधि में छेद।
12) आईगेमिंग/वित्त की विशिष्टताएं
भुगतान/आउटपुट हैंडल पर प्रबलित प्रोफाइल: छोटी बॉडी लिमिट, सख्त योजनाएं, खाते/आईबीएएन/पैन फील्ड (मास्किंग, प्रारूप जांच) के लिए सूचियों से इनकार करें।
PSP/KYC से वेबहूक: HMAC हस्ताक्षर/आपसी TLS, व्यक्तिगत WAF प्रोफाइल, एंटी-रीप्ले।
बॉट पंजीकरण और बोनस दुरुपयोग को रोकने के लिए जियो/एएसएन फिल्टर और व्यवहार सीमाएं।
हादसे लॉग अपरिवर्तनीय (ऑडिट) हैं, अधिकार क्षेत्र द्वारा भंडारण।
13) प्रोड रेडीनेस चेकलिस्ट
- दोहरी परत WAF (CDN + L7), एकल सामान्यीकरण और आकार सीमा।
- OWASP CRS सक्षम, कस्टम नियम प्रति-मार्ग; लेखन पेन पर JSON स्कीमा/Protobuf।
- सामग्री-प्रकार/चार्सेट नीतियां; डबल डिकोडिंग/NULL/ट्रैवर्सल को अस्वीकार करें।
- निजी बैंड/मेटाडेटा के लिए एसएसआरएफ-एग्रेस ब्लॉक; DNS विद्रोह संरक्षण।
- सार्वजनिक रूपों पर दर/कोटा/समवर्ती और एंटी-बॉट (चुनौतियां)।
- छाया/रिपोर्ट-केवल → कैनरी → लागू करें; एसएलओ और एफपी द्वारा ऑटो-रोलबैक।
- मास्किंग के साथ मेट्रिक्स/लॉग/ट्रेल्स; डैशबोर्ड "शीर्ष नियम "/एफपी।
- आभासी पैच और आरसीए प्लेबुक; नियमित बाईपास परीक्षण।
- PSP/KYC वेबहूक, भुगतान पेन और आंतरिक API के लिए अलग प्रोफाइल।
14) टीएल; डीआर
परतों द्वारा सुरक्षा का निर्माण: सामान्यीकरण और सीमा → योजनाओं/प्रकारों → पैरामेटराइजेशन → डब्ल्यूएएफ (सीआरएस + जाति) → दर/बॉट फिल्टर → एसएसआरएफ एग्रेस ब्लॉक। ट्यून प्रति मार्ग, छाया - कैनरी में नए नियम चलाएं, मेट्रिक्स/एफपी की निगरानी करें और कोड फिक्स से पहले "वर्चुअल पैच" बनाएं। भुगतान/वेबहुक पथ के लिए - अलग सख्त प्रोफाइल, HMAC/mTLS और न्यूनतम ट्रस्ट विंडो।