GH GambleHub

WAF i ochrona przed wtryskiem

1) Dlaczego WAF w epoce API

Nawet przy rygorystycznej walidacji i parameteryzacji, wstrzyknięcia występują z powodu:
  • „długie ogony” integracji (dotychczasowy kod, haki powiązane),
  • rozbieżności sparingowe (ramy pośredniczące),
  • nowe techniki obwodnicy protokołu/obwodnicy.
  • WAF daje wczesne zaprzeczenie i „wirtualne łatanie” granicy przed wydaniem kodu, ale nie zastępuje bezpiecznego rozwoju.

2) Model zagrożenia: Typy wtrysku API

SQLi/ORMi: classic/boolean/time-based/stacked; ślepy przez opóźnienia.
NoSQLi (Mongo/Elastic): operator '$ ne/$ gt', JSON injection, regex-DoS.
Command Injection/RCE: metacharacters shell, substitution argument, unsafe deserialization → code exec.
XXE: podmioty zewnętrzne/systemy gwarancji depozytów w XML.
SSRF: dostęp do '169. 254. 169. 254 "/usługi wewnętrzne; DNS-rebinding.
Wzór wstrzyknięcia: Jinja/Thymeleaf/Handlebars; '{{77}}'.
LDAP/EL Injection, XPath, Header Injection (CRLF), Path traversal.
Specyficzne dla GraphQL: introspekcja „__ schemat”, głębokość/złożoność zapytań.
Specyficzne dla JSON/JS: zanieczyszczenie prototypem („__ proto __”, „konstruktor”).
gRPC/Protobuf: nadmiar wiadomości, przemyt pola przez niedopasowanie schematu.


3) architektury WAF

Obwód CDN-WAF: szybkie filtrowanie geo/ASN, podstawowa kontrola bot, pamięć podręczna/anti-padding.
Obwód L7 (NGINX/Envoy/APISIX/Kong): dokładne parsowanie, głębokie zasady, integracja z PDP/limity.
Sidecar/mash (Envoy WASM/Filter): per-service, close to the data, less false positive for internal API.
Zalecenie: model dwuwarstwowy (CDN-WAF + L7 WAF).


4) Parsing, normalizacja i anty-obwodnica

WAF powinien zobaczyć tę samą reprezentację kanoniczną co wniosek:
  • Normalizacja ścieżki ('/a/% 2e% 2e/b '→ awaria),' UTF-8 '/Unicode confusables, NUL bytes.
  • Pojedyncze dekodowanie: URL-/HTML-/Unicode-/Base64-layers, zakaz podwójnego dekodowania.
  • Ograniczenia: 'max _ headers', 'max _ header _ size', 'max _ body _ size', 'max _ args', JSON depth, multipart limit, 2x gzip/zip bombs prohibited.
  • Zasady dotyczące typu treści: „aplikacja/json” tylko w punktach końcowych JSON; odrzucić „poliglot”.

5) Modele reguł

Negatywne (podpisy): OWASP CRS (SQLi/XSS/SSRF/Java/Node RCE itp.). Szybki start.
Pozytywne (lista zezwoleń): rygorystyczne schematy (schemat JSON/Protobuf), rodzaje i zakresy; na trasach.
Nieprawidłowe/punktacja: podsumowanie „podejrzanych” objawów → próg blokowania.
Kontekst: różne profile „POST/płatności” i „GET/status”; mniej FP.


6) Jednostki zabezpieczające (w pakiecie)

1. Schematy i typy: JSON Schemat/Protobuf walidacja do logiki biznesowej.
2. Parameteryzacja: gotowe wyrażenia, wiązania ORM, zakaz konkatenacji.
3. Wyjście-ucieczka: HTML/JS/SQL kontekst.
4. Polityka ciała: Content-Type, rozmiar, ograniczenia multiart, zakaz binariów na uchwytach JSON.
5. Zasady WAF: CRS + niestandardowe negatywne/dodatnie.
6. Wskaźnik/Kwota/Równoczesność: tłumienie brute/żółw DDoS, uchwyty ochronne/wyzwania dla form publicznych.
7. Izolacja sieci: polityka wyjścia dla SSRF (odmowa RFC1918/metadata/Unix gniazd).
8. Higiena nagłówków: „X-Content-Type-Options: nosniff”, „Content-Security-Policy” dla front, „Referrer-Policy”.
9. GraphQL guard: granice głębokości/złożoności, zakaz introspekcji w prod (lub role-gate).


7) Przykłady konfiguracji

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 Wysłannik HTTP WAF (WASM + JSON Schema + SSRF egress-odmowa)

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: ograniczenie typu i anty-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) Dostrajanie i zmniejszanie fałszywych pozytywów (FP)

Profile na trasie: ścisłe zasady tylko w stosownych przypadkach (np. '/search 'pozwala '/'%').
Tylko cień/raport: odpowiedzi dziennika przed blokiem; Porównanie mierników A/B.
Niestandardowe pozwalają na listy „hałaśliwych” legalnych parametrów.
Punktacja: Blok tylko wtedy, gdy suma wskaźnika> próg.
Eksperymenty: niewielki procent ruchu do nowych zasad → auto-rollback.


9) Obserwowalność i częstość występowania

Метрика: 'waf _ block _ total {rule}', 'waf _ anomaly _ score', 'request _ body _ rejected _ total', 'schema _ violate _ total', 'ssrf _ block _ total'.
Dzienniki (pobrane próbki): reguła, część żądania (edytowana), 'trace _ id',' lokator ',' route ', powód. Ukryj PII/sekrety.
Deski rozdzielcze: górne reguły/ścieżki, klastry FP, dynamika po zwolnieniu.
Incydenty: zapisywanie artefaktów (ładunek użytkowy, pcap w razie potrzeby), produktów RCA i „wirtualnych łatek”.


10) Testowanie i scenariusze chaosu

Obwodnice WAF (SQLi/XSS/SSRF), podwójne/potrójne kodowanie mieszane Unicode.
Różnice w parsowaniu: wyślij ładunek użytkowy, w którym serwer proxy i ramy mogą się różnić (duplikaty parametrów, tablice, ';' vs' & ').
Slow-POST/oversize, bomby zamek błyskawiczny, wieloczęściowe formy, błędna granica.
GraphQL: generator głębokości/złożoności, limity kontrolne i czasowe.


11) Antypattery

„Włączył KSR i zapomniał”: bez schematów, bez dostrajania wzdłuż tras.
Dzienniki z surowym organem żądania i PII.
Brak limitów normalizacji/rozmiaru → obwodnice, DoS do parsowania.
Pominięcie 'Content-Type '/charset checks → ataki poliglotyczne.
Brak filtrów wyjmowania → SSRF do metadanych chmurowych.
Jeden wspólny profil dla zewnętrznych i wewnętrznych API.
Niekontrolowane wyjątki „dla partnera” → otwory w obwodzie.


12) Szczegóły dotyczące iGaming/Finance

Wzmocnione profile na uchwytach płatności/wyjściowych: małe limity nadwozia, rygorystyczne schematy, odrzucanie list dla pól konta/IBAN/PAN (maskowanie, sprawdzanie formatów).
Haki internetowe z PSP/KYC: podpis HMAC/wzajemny TLS, poszczególne profile WAF, anty-replay.
Filtry geo/ASN i ograniczenia behawioralne, aby zapobiec rejestracjom bot i nadużyciom bonusowym.
Dzienniki incydentów są niezmienne (audyt), przechowywanie przez jurysdykcję.


13) Lista kontrolna gotowości Prod

  • Podwójna warstwa WAF (CDN + L7), pojedyncza normalizacja i limity wielkości.
  • KSR OWASP włączone, niestandardowe zasady na trasie; JSON Schema/Protobuf na długopisach.
  • Polityka typu treści/charset; disallow double decoding/NULL/traversal.
  • SSRF-egress blok dla prywatnych pasm/metadanych; Ochrona przed buntowaniem DNS.
  • Stawka/kwota/Równoczesność i walka z botem (wyzwania) na formularzach publicznych.
  • Shadow/Report-Only → canary → enforce; auto-rollback przez SLO i FP.
  • Mierniki/kłody/szlaki z maskowaniem; deski rozdzielcze „top rules „/FP.
  • Playbooks wirtualnych i RCA; regularne testy obejścia.
  • Oddzielne profile dla haków internetowych PSP/KYC, długopisów płatniczych i wewnętrznych interfejsów API.

14) TL; DR

Ochrona budowania przez warstwy: normalizacja i ograniczenia → schematy/typy → parametryzacja → WAF (CRS + caste) → filtry szybkości/bot → SSRF egress block. Tune per-route, uruchom nowe zasady w cieniu → canary, monitoruj mierniki/FP i wykonaj „wirtualne plastry” przed naprawą kodu. Dla ścieżek płatności/webhook - oddzielne ścisłe profile, HMAC/mTLS i minimalne okna zaufania.

Contact

Skontaktuj się z nami

Napisz do nas w każdej sprawie — pytania, wsparcie, konsultacje.Zawsze jesteśmy gotowi pomóc!

Rozpocznij integrację

Email jest wymagany. Telegram lub WhatsApp są opcjonalne.

Twoje imię opcjonalne
Email opcjonalne
Temat opcjonalne
Wiadomość opcjonalne
Telegram opcjonalne
@
Jeśli podasz Telegram — odpowiemy także tam, oprócz emaila.
WhatsApp opcjonalne
Format: kod kraju i numer (np. +48XXXXXXXXX).

Klikając przycisk, wyrażasz zgodę na przetwarzanie swoich danych.