GH GambleHub

Web Application Firewall и защита от атак

Краткое резюме

WAF/WAAP фильтрует и контролирует HTTP(S)/WebSocket-трафик на уровне приложения: блокирует эксплуатацию уязвимостей (OWASP Top 10), попытки обхода аутентификации, сканирование, автоматизированный бот-трафик и L7 DDoS. Современный стек дополняется анти-бот-движком, API-защитой, rate limiting, виртуальными патчами, а также тесной интеграцией с CI/CD, чтобы правила выкатывались так же безопасно, как код.

Роли и место в архитектуре

Edge/CDN WAF (облако): низкая латентность, глобальная репутация/Managed Rules, L7 DDoS.
Self-hosted WAF (on-prem/K8s): глубокая интеграция с внутренними сетями, тонкая настройка.
WAAP-подход: WAF + API-Gateway функции (schema-validation, authZ), анти-бот, L7 DoS, mTLS.
Схемы включения: Reverse-proxy перед приложением; Ingress-контроллер в K8s; Service Mesh фильтры; sidecar.

Модель защиты

Negative security (подписи/CRS): быстрое покрытие известных техник (SQLi/XSS/SSRF/RCE).
Positive security (allow-list): разрешаем только «валидные» запросы (методы/пути/схемы/типы контента).
Virtual Patching: оперативная блокировка эксплойта до фикса кода.
Контекстность: разные политики для статического контента, API, админок, загрузок, вебхуков.

Типовые угрозы и меры

OWASP Top 10: SQLi, XSS, IDOR/BOLA, SSRF, инъекции в шаблонизаторах, десериализация, мисконфиги.
L7 DDoS: медленные запросы/заголовки, burst на горячие эндпоинты → защита: rate-limits, challenge, авто-блок.
Боты/скрейперы: поведение, частота, «нечеловеческие» паттерны, device-фингерпринтинг, динамические токены.
Credential Stuffing/ATO: перехват/перебор логинов → аномалия по IP/ASN, velocity rules, доп. факторы.
Загрузки: тип/размер/мультискан антивирусом, «image-only» в медиазонах.
API/GraphQL: schema-validation, `maxDepth`/`maxCost`, запрет ненаказуемых wildcard, контроль методов и заголовков.

Политики и конструкторы правил

Базовый «скелет» для любого приложения:

1. Транспорт: TLS 1.2+/1.3, HSTS, mTLS на чувствительных бэкендах.

2. Методы: allow-list (`GET, POST, PUT, DELETE, PATCH, OPTIONS`) уникально на ресурс.

3. Пути: строгие маски/регэкспы; админка/биллинг — на отдельный префикс/домен.

4. Заголовки: белые списки, запрет опасных (`X-Original-URL`, нестандартные) без нужды.

5. Тела: JSON-only/Multipart-only по маршруту; лимиты `Content-Length`, блок бинарей на «логин/поиск».

6. Rate limits: per-IP/ASN/ключ/организация; отдельные лимиты на «дорогие» запросы.

7. Анти-бот: поведенческий скоринг, «нераздражающие» челленджи, склейка идентичностей (cookie-токены, JA3/TLS FP).

8. CRS/Managed Rules: включены, тюнинг под FP.

9. Вирт-патчи: быстрая блокировка известных параметров/шаблонов атак.

10. Логи/метрики: единый формат, корреляция с `trace_id`, отчеты об FP/TP.

Практика тюнинга: как снизить ложные срабатывания

Запускать новые правила в Detect-only/Count-mode (shadow) с выборкой трафика.
Создавать исключения по контексту (`path=/search`, `param=q` разрешить спецсимволы).
Делить зону: «публичные страницы» vs «чувствительные операции» (порог агрессивности разный).
Конвейер: правило → стейджинг → канарейка (1–5%) → прод; rollback по метрикам FP.
Вести каталог «ложных» payload для регрессионных тестов.

Интеграция в DevSecOps

CI: статические правила в Git; тесты: реплей реальных запросов + синтетика из каталога атак.
CD: канареечные выкладки, флаги фичей; «политический» мониторинг (изменение правил = change).
RASP и SAST/DAST: WAF дополняет, но не заменяет исправление кода.

Наблюдаемость и SLO

Метрики:
  • p95/99 латентности через WAF; доля заблокированных/пропущенных; share Managed Rules vs custom; «attack rate».
  • Анти-бот: доля челленджей/сдач, FP/TP.
  • L7 DDoS: burst-rate, auto-mitigation events.
SLO примеры:
  • «Не более 0.5% FP на авторизованные операции/сутки».
  • «p95 overhead WAF ≤ 10 мс».
  • «TTR виртуального патча ≤ 30 минут».
  • Алармы: всплеск 4xx/5xx после релиза правил; рост FP; падение прохождения капч; деградация JWKS/мТLS-валидации.

Примеры конфигураций

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, rate limit + блок списка стран)

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 (Expression Rules)


(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: простое правило по методам/телам

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: ограничители

`maxDepth=6`, `maxCost=1000`, запрет `__schema` в проде, allow-list операций, валидация заголовков (`Content-Type: application/json`).

Анти-бот и человеко-дружественные проверки

Invisible challenge (JS-челленджи без капчи), proof-of-work на «дорогих» путях, поведенческая аналитика (движения/тайминги).
TLS/JA3-фингерпринтинг, IP/ASN репутация, списки прокси/VPN (в разумных пределах).
Ловушки (honeypot-поля) на формах, динамические токены формы/сеанса.
Защита приватности: минимизация трекинга, прозрачные политики, опции opt-out.

API-фокус

Schema-first: OpenAPI/JSON Schema для валидации; запрет лишних полей.
Auth: обязательно Bearer JWT или mTLS; reject без `Authorization`.
Rate/Quota: per-key/per-org; при превышении — «soft block»/slowing.
Webhooks: подпись HMAC, `timestamp+nonce`, короткое окно приема.
GraphQL: см. ограничители выше; логировать имя/метку операции.

Загрузки и медиа

Лимит размера, whitelists MIME/расширений, переименование файлов;

AV-скан (мульти-движки), ImageMagick policy (без опасных декодеров);

Thumb-сервис на отдельном домене, serve-only-images.

Безопасность админок и критичных зон

Отдельный домен/путь, mTLS/запрет с общих ASN/стран, жесткие rate limits, JIT-доступы, IP allow-list.
Дополнительные сигналы (device posture, risk score) → требовать вторую проверку.

Операции, инциденты и виртуальные патчи

Runbook: быстрый выпуск block-правила, TTL-ограничение, уведомление команд.
Критерии отката: рост 4xx/5xx>порог, FP>порог, p95 latency↑.
Post-mortem: добавление теста в регрессионный набор правил, фиксация SIGMA-алерта в SIEM.

Комплаенс и приватность

Логировать минимум: путь/метод/код/причина блока/идентификаторы; не хранить PII/секреты тела.
Сроки хранения логов по политике; доступ — по ролям; шифрование на диске.

Особенности для iGaming/финтех

Платежи/выплаты/кошельки: per-org квоты, мTLS к PSP, строгие allow-листы путей, HMAC для вебхуков PSP.
ATO/бонус-абьюз: velocity-правила на логин/регистрации/промокоды, поведенческие лимиты и анти-бот.
Контент-провайдеры/студии: отдельные домены/политики, IP/ASN allow-list, мониторинг Time-to-Wallet/конверсий на влияние WAF.
Региональные требования: гео-политики (страны/регионы), прозрачность обработок для GDPR.

Дорожная карта внедрения

1. Инвентаризация зон (публичные, API, админка, загрузки).
2. Базовый профиль: TLS, методы/пути allow-list, Managed Rules/CRS.
3. Rate limits + анти-бот на чувствительных путях.
4. Виртуальные патчи и процесс срочных правил (SLA ≤ 30 мин).
5. CI/CD для правил, стейджинг/канарейка/shadow-mode.
6. Телеметрия, SLO, регрессионные тесты правил.
7. Периодический review исключений и «чистка» обходов.

Типичные ошибки

«Включили все CRS на максимум» → лавина FP и выгорание команды.
Правила без канареек и shadow-режима.
Отсутствие сегментации: одна политика для всего.
Игнор API/GraphQL специфики (schema/limits).
Логи без корреляции (`trace_id`) и без метрик качества.

FAQ

WAF заменяет безопасный код?
Нет. Это слой смягчения и «виртуальный патч», но технический долг в коде устранять обязательно.

Как понять, что пора включать жесткие блоки?
Когда отчет по shadow-режиму показывает низкий FP и есть регрессионные тесты правил.

Нужен ли отдельный WAF для API?
Лучше WAAP/интеграция с API-шлюзом: схема, лимиты, аутентификация, подписи вебхуков.

Итог

Эффективный WAF/WAAP — это сочетание базовых CRS/Managed Rules, позитивной модели, анти-бота, лимитов и виртуальных патчей, подкрепленное процессами DevSecOps, телеметрией и четкими SLO. Такой подход обеспечивает быструю реакцию на уязвимости, устойчивость к автоматизированным атакам и предсказуемое влияние на UX и производительность.

Contact

Свяжитесь с нами

Обращайтесь по любым вопросам или за поддержкой.Мы всегда готовы помочь!

Начать интеграцию

Email — обязателен. Telegram или WhatsApp — по желанию.

Ваше имя необязательно
Email необязательно
Тема необязательно
Сообщение необязательно
Telegram необязательно
@
Если укажете Telegram — мы ответим и там, в дополнение к Email.
WhatsApp необязательно
Формат: +код страны и номер (например, +380XXXXXXXXX).

Нажимая кнопку, вы соглашаетесь на обработку данных.