WAF ва муҳофизати тазриқ
1) Чаро WAF дар давраи API
Ҳатто ҳангоми санҷиши дақиқ ва параметризатсия, тазриқ бо сабаби:- "думҳои дароз" -и ҳамгироӣ (рамзи меросӣ, вебхукҳои шарикӣ),
- таҳлили номутобиқатӣ (чаҳорчӯбаи прокси ↔),
- усулҳои нави протокол/obfuscation bypass.
- WAF сарҳади барвақт ва "таъмири виртуалӣ" -ро пеш аз барориши код медиҳад, аммо рушди бехатарро иваз намекунад.
2) Модели таҳдид: Намудҳои тазриқи API
SQL ji/ORM mi: классикӣ/мантиқӣ/замонӣ/часпонидашуда; кӯр тавассути таъхирҳо.
Нест SQL (Mongo/Elastic): операторҳо '$ ne/$ gt', тазриқи JSON, regex-Do
Тазриқи фармон/RCE: метахарактерҳои ниҳонӣ, иваз кардани аргументҳо, биёбоншавии хатарнок → рамзи exec.
XXE: субъектҳои беруна/DTD дар XML.
SSRF: дастрасӣ ба '169. 254. 169. 254 '/хадамоти дохилӣ; DNS-барқароркунӣ.
Тазриқи қолаб: Jinja/Thymeleaf/Handlebars; '{{77}}'.
LDAP/EL Injection, XP bath, тазриқи сарлавҳа (CRLF), гузариши роҳ.
Графикаи мушаххас: '__ схема' интроспексия, амиқ/мураккабии дархостҳо.
JSON/JS-мушаххас: Прототипи ифлосшавӣ ('__ прото __', 'созанда').
GRPC/Protobuf: паёмҳои азим, қочоқи саҳро тавассути номувофиқатии схема.
3) меъмории WAF
Периметри CDN-WAF: филтри тези гео/ASN, назорати асосии бот, кэш/анти-padding.
Периметри L7 (NGINX/Envoy/APISIX/Kong): таҳлили дақиқ, қоидаҳои амиқ, ҳамгироӣ бо PDP/маҳдудиятҳо.
Sidecar/mash (Envoy WASM/Filter): ҳар як хидмат, наздик ба маълумот, барои API-ҳои дохилӣ камтар мусбат.
Тавсия: модели қабати дугона (CDN-WAF + L7 WAF).
4) Коркард, нормализатсия ва зидди гузариш
WAF бояд ҳамон як намояндагии каноникиро ҳамчун барнома бинад:- Нормализатсияи роҳ ('/a/% 2e% 2e/b '→ нокомӣ),' UTF-8 '/Unicode confusables, байтҳои NUL.
- Рамзгузории ягона: URL-/HTML-/Unicode-/Base64-layers, манъи рамзгузории дугона.
- Маҳдудиятҳо: 'max _ headers', 'max _ header _ size', 'max _ body _ size', 'max _ args', умқи JSON, лимити бисёрҷониба, бомбаҳои 2x gzip/zip манъ карда шудаанд.
- Сиёсатҳои навъи мундариҷа: 'ариза/json' танҳо дар нуқтаҳои ниҳоии JSON; рад "полиглот".
5) Моделҳои қоида
Манфӣ (имзоҳо): OWASP CRS (SQL/XSS/SSRF/Java/Node RCE ва ғайра). Оғози зуд.
Мусбат (рӯйхати иҷозат): схемаҳои қатъӣ (JSON Schema/Protobuf), намудҳо ва диапазонҳо; дар масирҳо.
Ғайримуқаррарӣ/баҳодиҳӣ: ҷамъбасти аломатҳои "шубҳанок" → бастани ҳадди ниҳоӣ.
Контекстуалӣ: профилҳои гуногун барои 'POST/пардохтҳо' ва 'GET/status'; камтар FP.
6) Воҳидҳои муҳофизатӣ (дар маҷмӯъ)
1. Схемаҳо ва намудҳо: Тасдиқи JSON Schema/Protobuf ба мантиқи тиҷорат.
2. Параметризатсия: ибораҳои омодашуда, пайвастагиҳои ORM, манъи ҳамоҳангсозӣ.
3. Хуруҷи натиҷа: контекстуалии HTML/JS/SQL.
4. Сиёсати бадан: Намуди мундариҷа, андоза, маҳдудиятҳои бисёрҷониба, манъи бинарҳо дар дастгоҳҳои JSON.
5. Қоидаҳои WAF: CRS + фармоишии манфӣ/мусбат.
6. Меъёри/Квота/Мувофиқат: фишурдани бераҳм/сангпушт DD DD, captchas/мушкилоти муҳофизатӣ барои шаклҳои ҷамъиятӣ.
7. Ҷудокунии шабака: сиёсати egress барои SSRF (рад кардани розеткаҳои RFC1918/metadata/Unix).
8. Сарлавҳаҳо-гигиена: 'X-Content-Type-Options: nosniff', 'Content-Security-Policy' барои пеш, 'Referrer-Policy'.
9. Гвардияи графикӣ: маҳдудиятҳои амиқ/мураккаб, манъи интроспексия дар prod (ё нақши дарвоза).
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 Schema + SSRF egress-рад)
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: маҳдудкунии намуд ва зидди obfuscation
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) Танзим ва коҳиш додани мусбатҳои бардурӯғ (FP)
Профилҳои ҳар як масир: қоидаҳои қатъӣ танҳо дар ҳолати зарурӣ (масалан, '/ҷустуҷӯ 'имкон медиҳад '/'%').
Соя/Ҳисобот-Танҳо: ҷавобҳои сабти пеш аз блок; Муқоисаи ченакҳои A/B.
Рӯйхати фармоишӣ барои параметрҳои қонунии "ғавғо" иҷозат медиҳад.
Баҳодиҳӣ: Блоки танҳо вақте ки маблағи нишондиҳанда> ҳадди ниҳоӣ.
Таҷрибаҳо: фоизи ками трафик ба қоидаҳои нав → худкор.
9) Мушоҳида ва беморӣ
Метрикӣ: 'waf _ block _ total {rule}', 'waf _ anomaly _ score', 'request _ body _ redied _ total', 'schema _ violation _ total', 'ssrf _ block _ total'.
Гузоришҳо (интихобшуда): қоида, қисми дархост (таҳриршуда), 'trace _ id', 'иҷорагир', 'масир', сабаб. Пинҳон кардани PII/асрори.
Панели панелҳо: қоидаҳои боло/роҳҳо, кластерҳои FP, динамика пас аз озодшавӣ.
Ҳодисаҳо: сарфа кардани артефактҳо (сарборӣ, ҳангоми зарурат pcap), маҳсулоти RCA ва "часпакҳои виртуалӣ".
10) Сенарияҳои озмоишӣ ва бетартибӣ
Замимаҳои гардиши WAF (SQL/XSS/SSRF), рамзҳои омехтаи дукарата/сегона Юникод.
Фарқияти таҳлил: фиристодани сарборӣ, ки дар он прокси ва чаҳорчӯба метавонанд фарқ кунанд (параметр нусхабардорӣ мекунад, массивҳо, ';' vs '&').
Оҳиста-POST/калонҳаҷм, бомбаҳои почта, шаклҳои бисёр қисм, сарҳади хато.
GraphQL: тавлидкунандаи амиқӣ/мураккаб, санҷиши маҳдудиятҳо ва вақтҳо.
11) Антипаттернҳо
"CRS-ро фурӯзон кард ва фаромӯш кард": бидуни нақша, бидуни танзим дар масир.
Гузоришҳо бо мақоми дархости хом ва PII.
Ягон маҳдудият/андоза ба таври муқаррарӣ/гузариш вуҷуд надорад, барои таҳлил.
Гузаронидани 'Content-Type '/charset санҷишҳо → ҳамлаҳои полиглот.
Филтрҳои egress → SSRF ба метамаълумоти абрӣ нестанд.
Як профили умумӣ барои API-ҳои беруна ва дохилӣ.
Истисноҳои беназорат "барои шарик" → сӯрохиҳо дар периметр.
12) Хусусиятҳои IGaming/Finance
Профилҳои тақвиятёфта дар дастгоҳҳои пардохт/баромад: маҳдудиятҳои хурди бадан, нақшаҳои қатъӣ, рад кардани рӯйхатҳо барои майдонҳои ҳисоб/IBAN/PAN (ниқоб, чекҳои формат).
Webhooks аз PSP/KYC: имзои HMAC/TLS мутақобила, профилҳои инфиродӣ WAF, зидди такрорӣ.
Филтрҳои Geo/ASN ва маҳдудиятҳои рафторӣ барои пешгирии бақайдгирии бот ва сӯиистифодаи бонус.
Гузоришҳои ҳодисаҳо тағйирнопазиранд (аудит), нигаҳдорӣ аз рӯи салоҳият.
13) Рӯйхати санҷиши омодагии Prod
- Қабати дугонаи WAF (CDN + L7), меъёри ягона ва маҳдудиятҳои андоза.
- OWASP CRS фаъол аст, қоидаҳои фармоишӣ дар як масир; JSON Schema/Protobuf оид ба навиштани қалам.
- Сиёсати намуди мундариҷа/чарсет; манъ кардани рамзгузории дукарата/NULL/traversal.
- Блоки SSRF-egress барои гурӯҳҳои хусусӣ/метамаълумот; Муҳофизати такрории DNS.
- Меъёри/Квота/Мувофиқат ва зидди бот (мушкилот) дар шаклҳои ҷамъиятӣ.
- Соя/Ҳисобот-Танҳо § Канарей → татбиқ; худкор аз ҷониби SLO ва FP.
- Нишондиҳандаҳо/гузоришҳо/роҳҳо бо ниқоб; панели панели "қоидаҳои боло "/FP.
- Китобҳои бозии виртуалӣ ва RCA; озмоишҳои мунтазами гузариш.
- Профилҳои ҷудогона барои webhooks PSP/KYC, қаламҳои пардохт ва API-ҳои дохилӣ.
14) TL; ДР
Муҳофизатро аз рӯи қабатҳо созед: нормализатсия ва маҳдудиятҳо → схемаҳо/намудҳо → параметеризатсия → WAF (CRS + caste) → филтрҳои суръат/бот → блоки SSRF egress. Дар ҳар як масир танзим кунед, қоидаҳои навро дар сояи → канарейка иҷро кунед, ченакҳо/FP-ро назорат кунед ва пеш аз ислоҳи код "часбҳои виртуалӣ" созед. Барои роҳҳои пардохт/webhook - профилҳои қатъии алоҳида, HMAC/MTLS ва тирезаҳои ҳадди аққали эътимод.