Zapora sieciowa aplikacji i ochrona przed atakami
Krótkie podsumowanie
Filtry WAF/WAAP i kontrolują ruch HTTP (S )/WebSocket na poziomie aplikacji: blokuje eksploatację luk (OWASP Top 10), próby ominięcia uwierzytelniania, skanowania, zautomatyzowanego ruchu bot i L7 DDoS. Nowoczesny stos uzupełniony jest silnikiem anty-bot, ochroną API, ograniczeniem szybkości, wirtualnymi łatami, a także ciasną integracją z CI/CD, dzięki czemu zasady są tak bezpieczne, jak kod.
Role i miejsce w architekturze
Krawędź/CDN WAF (chmura): niskie opóźnienia, globalna reputacja/zarządzane zasady, L7 DDoS.
Samohosting WAF (on-prem/K8s): głęboka integracja z sieciami wewnętrznymi, precyzyjne dostrajanie.
Podejście WAAP: funkcje WAF + API-Gateway (schemat-walidacja, authZ), anty-bot, L7 DoS, mTLS.
Systemy włączenia: Reverse-proxy przed wnioskiem; Kontroler Ingress w K8s; Usługi filtry siatki; sidecar.
Model ochrony
Negatywne zabezpieczenie (podpisy/KSR): szybki zakres znanych technik (SQLi/XSS/SSRF/RCE).
Pozytywne zabezpieczenie (lista zezwoleń): zezwala tylko na „ważne” żądania (metody/ścieżki/schematy/typy treści).
Wirtualne łatanie: online blokowanie exploit do naprawy kodu.
Kontekst: różne zasady dotyczące treści statycznych, interfejsu API, administratorów, plików do pobrania, haków internetowych.
Typowe zagrożenia i środki
OWASP Top 10: SQLi, XSS, IDOR/BOLA, SSRF, zastrzyki szablonu, deserializacja, błędne konfiguracje.
L7 DDoS: powolne żądania/nagłówki, pęknięcie dla gorących punktów końcowych → ochrona: limity prędkości, wyzwanie, auto-blok.
Boty/skrobaki: zachowanie, częstotliwość, „nieludzkie” wzory, odciski palców urządzenia, żetony dynamiczne.
Wierzytelne nadziewanie/ATO: przechwytywanie/wyliczanie loginów → anomalia przez IP/ASN, zasady prędkości, dodatkowe czynniki.
Pliki do pobrania: type/size/multiscan antivirus, „image-only” w strefach medialnych.
API/GraphQL: schemat-walidacja, 'maxDepth '/' maxCost', zakaz bezkarnych dzikich kart, kontrola metod i nagłówków.
Projektanci zasad i zasad
Szkielet podstawowy do każdego zastosowania:1. Transport: TLS 1. 2+/1. 3, HSTS, mTLS na wrażliwych oparciach.
2. Metody: lista zezwoleń ('GET, POST, PUT, DELETE, PATCH, OPTIONS') jest unikalna dla każdego zasobu.
3. Ścieżki: ścisłe maski/regexps; admin/billing - do oddzielnego prefiksu/domeny.
4. Nagłówki: białe listy, niepotrzebnie zakazane niebezpieczne ("X-Original-URL', niestandardowe).
5. Ciała: tylko JSON/Multipart-tylko na trasie; limity 'Content-Length', blok binariów dla „login/search”.
6. Limity stawek: per-IP/ASN/key/organization; oddzielne limity „drogich” wniosków.
7. Anty-bot: punktacja behawioralna, wyzwania „nie drażniące”, tożsamość klejenia (tokeny ciasteczek, FP JA3/TLS).
8. CRS/Managed Rules: włączone, dostrajanie w ramach FP.
9. Plastry Wirth: szybkie blokowanie znanych parametrów/wzorów ataku.
10. Dzienniki/mierniki: jednolity format, korelacja z 'trace _ id', raporty FP/TP.
Praktyka dostrajania: jak zmniejszyć fałszywe pozytywy
Uruchom nowe zasady w trybie Detect-only/Count-mode (shadow) z próbkowaniem ruchu.
Tworzenie wyjątków według kontekstu ('path =/search', 'param = q' pozwalają na specjalne znaki).
Podziel strefę: „strony publiczne” vs „operacje wrażliwe” (próg agresywności jest inny).
Przenośnik: zasada → ustawianie → kanarka (1-5%) → prod; Rollback przez metryki FP.
Utrzymuj katalog ładunku „fałszywego” do testów regresji.
Integracja z DevSecOp
CI: zasady statyczne w Git; testy: powtórz prawdziwe żądania + syntetyki z katalogu ataków.
CD: obliczenia kanarkowe, flagi funkcji; monitorowanie „polityczne” (zmiana reguł = zmiana).
RASP i SAST/DAST: suplementy WAF, ale nie zastępują korekcji kodu.
Obserwowalność i SLO
Metryka:- p95/99 opóźnienie przez WAF; odsetek zablokowanych/pominiętych; share Managed Rules vs custom; „wskaźnik ataku”.
- Anty-bot: udział wyzwań/zmian, FP/TP.
- L7 DDoS: szybkość wybuchu, zdarzenia łagodzące.
- "Nie więcej niż 0. 5% FP w zatwierdzonych operacjach/dzień"
- „p95 napowietrzne WAF ≤ 10 ва”.
- „Wirtualny plaster TTR ≤ 30 minut”.
- Alerts: 4xx/5xx spike po zwolnieniu zasad; Wzrost PR; spadek przejścia captcha; degradacja walidacji JWKS/mTLS.
Konfiguracje próbki
ModSecurity + OWASP CRS (Nginx)
nginx
Enabling ModSecurity modsecurity on;
modsecurity_rules_file /etc/nginx/modsec/main. conf;
'/etc/nginx/modsec/main. conf ":
apache
SecRuleEngine On
Include /usr/local/owasp-modsecurity-crs/crs-setup. conf
Include /usr/local/owasp-modsecurity-crs/rules/.conf
Example of an exception for a search parameter
SecRule REQUEST_URI "@beginsWith /search" "id:900100,phase:1,pass,nolog,ctl:ruleRemoveByTag=attack-xss"
SecRule REQUEST_URI "@beginsWith /search" "id:900101,phase:2,pass,ctl:ruleRemoveTargetById=942100; ARGS:q"
AWS WAF (JSON, limit stawki + blok listy krajów)
json
{
"Name": "prod-web-acl",
"Scope": "CLOUDFRONT",
"DefaultAction": { "Allow": {} },
"Rules": [
{
"Name": "BurstLogin",
"Priority": 1,
"Statement": {
"RateBasedStatement": {
"Limit": 100,
"AggregateKeyType": "IP",
"ScopeDownStatement": { "ByteMatchStatement": {
"SearchString": "/login",
"FieldToMatch": { "UriPath": {} },
"TextTransformations": [{ "Priority": 0, "Type": "NONE" }],
"PositionalConstraint": "CONTAINS"
}}
}
},
"Action": { "Block": {} },
"VisibilityConfig": { "MetricName": "BurstLogin", "SampledRequestsEnabled": true, "CloudWatchMetricsEnabled": true }
}
]
}
Cloudflare (Zasady wyrażania)
(http. request. uri. path contains "/admin" and ip. geoip. country ne "UA")
or (http. request. uri. path eq "/login" and cf. threat_score > 10)
or (http. request. uri. path contains "/api" and not http. request. headers["authorization"][0] contains "Bearer ")
NGINX: Prosta metoda/reguła ciała
nginx location /api/withdraw {
limit_except POST { deny all; }
if ($request_method = POST) {
set $cl $http_content_length;
if ($ cl = "") {return 411;} # length is required if ($ cl> 1048576) {return 413;} # ≤ 1MB add_header X-Idempotency-Required "true";
}
}
GraphQL: policjanci
„maxDepth = 6”, „maxCost = 1000”, zakaz „schematu __” w sprzedaży, dopuszczalny wykaz operacji, walidacja nagłówków („Content-Type: application/json”).
Kontrole anty-botowe i przyjazne dla człowieka
Niewidzialne wyzwanie (wyzwania JS bez captcha), dowód pracy na „drogich” ścieżkach, analityka behawioralna (ruchy/godziny).
TLS/JA3 odciski palców, reputacja IP/ASN, listy proxy/VPN (w rozsądnych granicach).
Pułapki (pola honeypot) na formularzach, tokeny dynamiczne/sesyjne.
Ochrona prywatności: minimalizacja śledzenia, przejrzyste zasady, opcje rezygnacji.
Focus API
Schemat pierwszy: Schemat OpenAPI/JSON do walidacji; zakaz dodatkowych pól.
Auth: obowiązkowy Bearer JWT lub mTLS; odrzucić „Autoryzacja”.
Stawka/kwota: na klucz/na org; w przypadku przekroczenia - „miękki blok „/spowolnienie.
Haki internetowe: podpis HMAC, 'timestamp + nonce', krótkie okno odbioru.
GraphQL: patrz ograniczenia powyżej; Zaloguj nazwę/etykietę operacji.
Pliki do pobrania i media
Limit rozmiaru, białe listy MIME/rozszerzenia, zmiany nazwy plików;
Skanowanie AV (wielosilnikowe), polityka ImageMagick (bez niebezpiecznych dekoderów);
Usługa kciuka na osobnej domenie, serwuj tylko obrazy.
Bezpieczeństwo administratorów i obszarów krytycznych
Oddzielna domena/ścieżka, mTLS/zakaz od wspólnych ASN/krajów, ograniczenia stawki twardej, dostęp JIT, lista zezwoleń IP.
Dodatkowe sygnały (postawa urządzenia, ocena ryzyka) → wymagają drugiego sprawdzenia.
Operacje, incydenty i wirtualne łatki
Runbook: szybkie zwolnienie reguł blokowych, ograniczenie TTL, powiadomienie polecenia.
Kryteria wsteczne: wzrost 4xx/5xx> próg, FP> próg, p95 opóźnienie
Pośmiertnie: dodać test do ustawienia reguły regresji, wpisać ostrzeżenie SIGMA do SIEM.
Zgodność i prywatność
Log minimum: path/method/code/block reason/identifiers; nie przechowywać tajemnic PII/ciała.
Okresy zatrzymywania dziennika polityki; dostęp - według ról; szyfrowanie na dysku.
Funkcje dla iGaming/fintech
Płatności/wypłaty/portfele: kwoty na org, mTLS dla PSP, ścisłe wykazy tras, HMAC dla haków PSP.
ATO/bonus abuse: zasady prędkości dla logowania/rejestracji/kody promocyjne, ograniczenia behawioralne i anty-bot.
Dostawcy treści/studia: poszczególne domeny/zasady, lista zezwoleń IP/ASN, monitorowanie czasu do portfela/konwersje dotyczące wpływu WAF.
Wymogi regionalne: polityki geograficzne (kraje/regiony), przejrzystość traktowania RODO.
Plan realizacji
1. Spis stref (publiczny, API, panel administracyjny, pliki do pobrania).
2. Profil bazowy: TLS, metody/ścieżki listy zezwoleń, zasady zarządzania/CRS.
3. Limity szybkości + anty-bot na wrażliwych ścieżkach.
4. Proces wirtualnych łatek i pilnych reguł (SLA ≤ 30 min).
5. CI/CD dla reguł, ustawianie/kanaryjski/cień-tryb.
6. Telemetria, SLO, testy regresyjne zasad.
7. Okresowy przegląd wyjątków i „czyszczenie” obwodnic.
Częste błędy
„Włączone wszystkie KSR do maksimum” → Lawina FP i wypalenie zespołu.
Zasady bez kanarów i trybu cienia.
Brak segmentacji: jedna polityka na wszystko.
Ignorowanie specyfiki API/GraphQL (schemat/limity).
Dzienniki bez korelacji ('trace _ id') i bez mierników jakości.
NAJCZĘŚCIEJ ZADAWANE PYTANIA
WAF zastępuje bezpieczny kod?
Nie, nie jest. Jest to warstwa łagodząca i „wirtualna łatka”, ale dług techniczny w kodzie musi zostać wyeliminowany.
Jak zrozumieć, że nadszedł czas, aby włączyć twarde bloki?
Kiedy raport trybu cienia pokazuje niski FP i istnieją testy regresji reguł.
Czy potrzebuję osobnego WAF dla API?
Lepsza integracja WAAP z bramą API: schemat, limity, uwierzytelnianie, podpisy webhook.
Razem
Wydajny WAF/WAAP to połączenie podstawowych reguł CRS/Managed, pozytywnego modelu, anty-bot, limitów i wirtualnych łatek, obsługiwanych przez procesy DevSecOp, telemetrię i przezroczyste SLO. Podejście to zapewnia szybką reakcję na luki, odporność na zautomatyzowane ataki oraz przewidywalny wpływ na UX i wydajność.