WAF ve enjeksiyon koruması
1) API döneminde neden WAF
Titiz doğrulama ve parametrelendirme ile bile, enjeksiyonlar aşağıdakiler nedeniyle gerçekleşir:- Entegrasyonların "uzun kuyrukları" (eski kod, bağlı web kitapları),
- Ayrıştırma tutarsızlıkları (proxy ↔ framework),
- yeni protokol/şaşırtma bypass teknikleri.
- WAF, kod sürümünden önce erken bir reddetme ve'sanal yamalama "sınırı verir, ancak güvenli geliştirmenin yerini almaz.
2) Tehdit Modeli: API Enjeksiyon Tipleri
SQLi/ORMi: klasik/boolean/zaman tabanlı/yığılmış; Gecikmelerle kör.
NoSQLi (Mongo/Elastic): operatörler '$ ne/$ gt', JSON enjeksiyonu, regex-DoS.
Komut Enjeksiyonu/RCE: kabuk metakarakterleri, argüman değiştirme, güvenli olmayan çölleşme - kod exec.
XXE: XML'de harici varlıklar/DTD'ler.
SSRF: '169'a erişim. 254. 169. 254'/dahili hizmetler; DNS-rebinding.
Şablon Enjeksiyonu: Jinja/Thymeleaf/Gidonlar; '{{77}'.
LDAP/EL Enjeksiyonu, XPath, Başlık enjeksiyonu (CRLF), Yol geçişi.
GraphQL'ye özgü: '__ şeması' iç gözlem, sorguların derinliği/karmaşıklığı.
JSON/JS'ye özgü: Prototip Kirliliği ('__ proto __', 'yapıcı').
GRPC/Protobuf: büyük boyutlu mesajlar, şema uyumsuzluğu yoluyla alan kaçakçılığı.
3) WAF mimarileri
CDN-WAF çevre: hızlı coğrafi/ASN filtreleme, temel bot kontrolü, önbellek/anti-dolgu.
Perimeter L7 (NGINX/Envoy/APISIX/Kong): doğru ayrıştırma, derin kurallar, PDP/limitlerle entegrasyon.
Sidecar/mash (Envoy WASM/Filter): Servis başına, veriye yakın, dahili API'ler için daha az false positive.
Öneri: Çift katmanlı model (CDN-WAF + L7 WAF).
4) Ayrıştırma, normalleştirme ve anti-bypass
WAF, uygulama ile aynı kanonik temsili görmelidir:- Yol normalleştirme ('/a/% 2e %2e/b '> başarısızlık),' UTF-8'/Unicode confusables, NUL bytes.
- Tek kod çözme: URL-/HTML-/Unicode-/Base64-layers, çift kod çözme yasağı.
- Kısıtlamalar: 'max _ headers', 'max _ header _ size', 'max _ body _ size', 'max _ args', JSON derinliği, çok parçalı sınır, 2x gzip/zip bombaları yasaktır.
- İçerik Türü politikaları: Yalnızca JSON uç noktalarında 'uygulama/json'; "Çokdilli'yi reddet.
5) Kural modelleri
Negatif (imzalar): OWASP CRS (SQLi/XSS/SSRF/Java/Node RCE, vb.). Hızlı başlangıç.
Pozitif (allow-list): katı şemalar (JSON Schema/Protobuf), türleri ve aralıkları; güzergahlarda.
Anormal/puanlama: "şüpheli" işaretlerin toplanması - engelleme eşiği.
Bağlamsal: 'POST/payments've' GET/status 'için farklı profiller; Daha az FP.
6) Koruma birimleri (bir paket halinde)
1. Şemalar ve türleri: JSON Schema/Protobuf iş mantığına doğrulama.
2. Parametreleştirme: hazırlanmış ifadeler, ORM bağlamaları, bitiştirme yasağı.
3. Çıktı alma: HTML/JS/SQL bağlamsal.
4. Gövde politikaları: İçerik Tipi, boyut, çok parçalı kısıtlamalar, JSON tutamaçlarında ikili dosyaların yasaklanması.
5. WAF kuralları: CRS + özel negatif/pozitif.
6. Oran/Kota/Eşzamanlılık: kaba/kaplumbağa DDoS bastırma, koruyucu captchas/kamu formları için zorluklar.
7. Ağ yalıtımı: SSRF için çıkış ilkeleri (RFC1918/metadata/Unix soketlerini reddetme).
8. Headers-hygiene: 'X-Content-Type-Options: nosniff', 'Content-Security-Policy' for front, 'Referrer-Policy'.
9. GraphQL koruması: derinlik/karmaşıklık sınırları, prod (veya rol kapısı) iç gözlem yasağı.
7) Yapılandırma örnekleri
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 Elçi HTTP WAF (WASM + JSON Şeması + SSRF çıkışı-reddi)
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: tip kısıtlaması ve anti-şaşırtma
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) Yanlış pozitifleri ayarlama ve azaltma (FP)
Rota başına profiller: Yalnızca uygun olduğu durumlarda katı kurallar (örn. '/search 'allows'/' %').
Gölge/Yalnızca Rapor: Bloktan önce günlük yanıtları; Metriklerin A/B karşılaştırması.
Özel, "gürültülü" meşru parametreler için listelere izin verir.
Puanlama: Yalnızca gösterge toplamı> eşik olduğunda engelleyin.
Deneyler: yeni kurallara trafiğin küçük bir yüzdesi - otomatik geri alma.
9) Gözlemlenebilirlik ve görülme sıklığı
Метрики: 'waf _ block _ total {rule}', 'waf _ anomaly _ score', 'request _ body _ rejected _ total', 'schema _ violation _ total', 'ssrf _ block _ total'.
Günlükler (örneklenmiş): kural, isteğin parçası (düzenlenmiş), 'trace _ id', 'kiracı', 'rota', neden. PII/sırları gizleyin.
Panolar: üst kurallar/yollar, FP kümeleri, serbest bırakıldıktan sonra dinamikler.
Olaylar: Eserleri kaydetmek (gerekirse yük, pcap), RCA ürünleri ve'sanal yamalar ".
10) Test ve kaos senaryoları
WAF bypass muhafazaları (SQLi/XSS/SSRF), çift/üçlü Unicode karışık kodlamalar.
Ayrıştırma farklılıkları: proxy ve çerçevenin ayrılabileceği payload gönder (parametre kopyaları, diziler, ';' vs '&').
Yavaş POST/büyük boy, zip bombaları, çok parçalı formlar, hatalı sınır.
GraphQL: derinlik/karmaşıklık oluşturucu, sınırları ve zaman aşımlarını kontrol etme.
11) Antipatterns
"CRS'yi açtı ve unuttu": şemalar olmadan, rotalar boyunca ayarlama yapmadan.
Ham istek gövdesi ve PII ile günlükler.
Normalleştirme/boyut sınırları yok - atlamalar, ayrıştırma için DoS.
'Content-Type'/charset kontrollerini atlamak - çok dilli saldırılar.
Bulut meta verilerine çıkış filtreleri - SSRF yok.
Harici ve dahili API'ler için ortak bir profil.
Kontrolsüz istisnalar "ortak için" - çevredeki delikler.
12) iGaming/Finansın Özellikleri
Ödeme/çıktı tutamaçlarında güçlendirilmiş profiller: küçük gövde limitleri, katı şemalar, hesap/IBAN/PAN alanları için reddetme listeleri (maskeleme, format kontrolleri).
PSP/KYC'den Webhooks: HMAC imzası/karşılıklı TLS, bireysel WAF profilleri, anti-replay.
Bot kayıtlarını ve bonus kötüye kullanımını önlemek için Geo/ASN filtreleri ve davranış sınırları.
Olay günlükleri değişmez (denetim), yargı yetkisine göre depolamadır.
13) Prod Hazırlık Kontrol Listesi
- Çift katmanlı WAF (CDN + L7), tek normalleştirme ve boyut sınırları.
- OWASP CRS etkin, rota başına özel kurallar; JSON Schema/Protobuf yazma kalemlerinde.
- İçerik Tipi/charset politikaları; Çift kod çözme/NULL/geçişine izin verme.
- Özel bantlar/meta veriler için SSRF-çıkış bloğu; DNS yeniden bağlama koruması.
- Halka açık formlarda Oran/Kota/Eşzamanlılık ve anti-bot (zorluklar).
- Shadow/Report-Only - kanarya - zorlamak; SLO ve FP tarafından otomatik geri alma.
- Maskeleme ile metrikler/günlükler/yollar; Panolar "üst kurallar "/FP.
- Sanal yama ve RCA oyun kitapları; Düzenli bypass testleri.
- PSP/KYC web kitapları, ödeme kalemleri ve dahili API'ler için ayrı profiller.
14) TL; DR
Katmanlara göre koruma oluşturun: normalleştirme ve sınırlar - şemalar/türler - parametrelendirme - WAF (CRS + kast) - oran/bot filtreleri - SSRF çıkış bloğu. Rota başına ayarlayın, gölgede yeni kurallar çalıştırın - kanarya, metrikleri/FP'yi izleyin ve kod düzeltmeden önce'sanal yamalar "yapın. Ödeme/webhook yolları için - ayrı katı profiller, HMAC/mTLS ve minimum güven pencereleri.