Logo GH

Bot Protection і антифрод API

1) Навіщо це потрібно

Боти і зловмисники атакують вхідні точки зростання і грошей: реєстрацію, логін (ATO), депозити/висновки, промо-механіку, каталоги ігор/коефіцієнтів. Ручні правила і чистий rate limit вже недостатні: потрібні багаторівневі сигнали, скоринг в реальному часі і контроль рішення (allow/deny/challenge/throttle) зі зворотним зв'язком від бізнес-подій (чарджбеки, chargeback-ratio, KYC-фейли).

2) Таксономія загроз

Реєстрація/онбординг: масові акаунти, одноразові e-mail/сім-банки, ферми девайсів.
ATO (Account Takeover): credential stuffing, password spraying, session hijack.
Бонус-аб'юз: мультиаккаутинг, арбітраж гео/юрисдикцій, self-exclusion обхід.
Картинг/платіжний фрод: тест карт, крадені гаманці, повернення коштів.
Скрейпінг/інвентар: агресивне витягування контенту, цін, коефіцієнтів.
API-DoS низької інтенсивності: черепашачі атаки, slow-POST, емуляції мобільних SDK.
Вебхуки/інтеграції: підробка повідомлень без HMAC/mTLS, replay.

3) Архітектура захисту

3. 1 Шари

1. Edge (CDN/WAF/шлюз): ранні відмови (ASN/Geo/IP-репутація), легкі челенджі, ліміти, PoW.
2. Risk API (PDP за ризиком): централізований рушій правил/ML; ответ — `decision`, `score`, `reason`, `ttl`.
3. App-рівень: доменні інваріанти, бізнес-логіка (ліміти, KYC, AML), асинхронні рев'ю.
4. Потік подій: Kafka/Kinesis → feature store/модель → зворотний зв'язок від платежів/диспутів.

3. 2 Контур рішення


[Request] → Edge Plugins → (enrich) → Risk API (rules+ML) → Decision:
allow      deny      throttle      challenge(type=captcha    sms    PoW    biometry)

Рішення кешується по ключу (наприклад, device × account × route) на'ttl'секунд.

4) Сигнали і збагачення

Мережа/канал: IP/ASN, проксі/VPN/Tor, rdns, rtt/jitter, SYN-rate, TLS-фінгерпринт (JA3/JA4), HTTP/2/3 поведінка.
Девайс/браузер: canvas/audio/WebGL FP (дбайливо), платформа/SDK, timezone/locale, роздільна здатність, шрифти, WebDriver/headless індикатори, mobile attestation (SafetyNet/Ded viceCheck, по можливості).
Поведінка: швидкість введення, траєкторії миші/тач, послідовність екранів, dwell-time, частота спроб, переходи між браузерними ідентифікаторами.
Контент/запит: форма e-mail/домен, disposable-провайдери, phone HLR/або тип номера, BIN карти, рахунок/IBAN в санк-реєстрах, схожість ПІБ/адрес.
Аккаунт/історія: вік акаунта, KYC-статус, ретеншн, ARPPU, velocity за депозитами/висновками/бонусами.
Зовнішні джерела: списки компрометації (HIBP-подібні), платіжні ризикові сигнали (PSP), ASN-репутація.

5) Рішення: правила + ML

5. 1 Правила (детерміновані)

Velocity: «N реєстрацій с/24 за 10 хв», «M логінів з одним девайсом до X акаунтів», «K 3DS-фейлів підряд».
Гео/юрисдикція: конфлікти IP-гео vs адреса/документ, раптові стрибки місця розташування.
Бізнес-інваріанти: ліміти відповідальних платежів, self-exclusion, санкційні списки.

5. 2 ML-скоринг (реал-тайм)

Легка модель (GBM/логрег) на онлайн-ознаках: `ip_risk`, `device_age`, `account_age`, `pwd_fail_rate`, `bin_risk`, `velocity_`, `behavioral_`.
Окрема модель для ATO і окремо - для платежів/висновків.
Сегментація по юрисдикції/тенанту (пер-ринок калібрування порогів).

5. 3 Прийняття рішення


if ip_blacklisted or bad_asn then deny else if rule_severe then challenge(hard)
else if score >= 0. 9 then deny else if 0. 7 <= score < 0. 9 then challenge(soft)
else allow

При'challenge'зберігати факти проходження/провалу; ескалувати/знижувати тертя динамічно.

6) Velocity і квоти (ключі і вікна)

Ключі: `ip`, `ip/24`, `device_id`, `account_id`, `payment_instrument`, `email_domain`, `bin`.
Вікна: ковзні (1м/5м/1ч/24ч) + окремі «burst «/« sustained ».
Політики: «жорсткі» deny на гарячих маршрутах (логін/депозит), м'які throttle на контенті.

Приклад Redis-правила (псевдо):
pseudo allow, retry_after = gcra_allow(key="login:ip:"+ip, rate=60/min, burst=30)
if not allow:
return 429, {"Retry-After": retry_after}

7) Челленджі і перевірка «людяності»

CAPTCHA/turnstile: як soft-challenge; прибирати після високої впевненості в «чистій» сесії.
Proof-of-Work (PoW): для API/скриптів - обчислити хеш із заданою складністю; динамічна складність при зростанні навантаження.
OTP/SMS/Email/Push: для АТО/критичних операцій; не зловживати (вартість/UX).
WebAuthn/біометрія: високий рівень впевненості на cash-out/зміна payout-деталей.
Device trust: bind аккаунта до перевіреного девайсу; нові девайси → challenge.

8) Інтеграція в шлюз/проксі

8. 1 Envoy: ext_authz → Risk API (псевдо)

yaml http_filters:
- name: envoy. filters. http. ext_authz typed_config:
http_service:
server_uri: { uri: http://risk-api:8080, cluster: risk, timeout: 80ms }
authorization_request:
allowed_headers:
patterns:
- exact: "x-tenant"
- exact: "x-device-id"
- exact: "user-agent"
authorization_response:
allowed_upstream_headers:
patterns: [{ exact: "x-risk-score" }, { exact: "x-risk-decision" }]
- name: envoy. filters. http. router

8. 2 NGINX/Lua: легкий PoW і velocity

nginx lua_shared_dict vel 20m;

access_by_lua_block {
local ip = ngx. var. remote_addr if not gcra_allow("reg:ip:"..ip, 20, 40) then ngx. header["Retry-After"] = 30; return ngx. exit(429)
end

local pow = ngx. req. get_headers()["X-POW"]
if not verify_pow(pow, ngx. var. request_id, 18) then ngx. status = 401; ngx. say('need-pow'); return ngx. exit(401)
end
}

9) Контракт Risk API

Запит (збагачений):
json
{
"tenant":"eu-1",
"route":"POST /v1/login",
"subject":{"account_id":"a123","email":"u@d. com"},
"device":{"id":"d-xyz","fp":"...","ja3":"...","headless":false},
"network":{"ip":"203. 0. 113. 10","asn":12345,"country":"DE","rtt_ms":42},
"context":{"fail_5m":3,"pwd_reset_24h":1}
}
Відповідь:
json
{ "decision":"challenge", "score":0. 83, "reason":"high_velocity+new_device", "ttl_sec":900, "challenge":"captcha" }

10) Дані, фічі та моделі

Feature Store (онлайн): Redis/Scylla/KeyDB - лічильники/velocity/часові мітки.
Batch/офлайн: DWH (BigQuery/S3 + Athena) для навчання/рефітів; зберігайте мітки відтоку, chargeback, ручних рев'ю.
Моделі: прості для real-time (логрег/GBM); важкі (XGBoost/NN) - офлайн з PGMs/шкалюванням і подальшою дистиляцією.
Контроль дрифту: PSI, AUC/PR, калібрування порогів по регіонах/каналах.

11) Спостережуваність і операційний контур

Метрики:
  • `risk_requests_total{route,decision}`
  • `risk_score_bucket` (distribution)
  • `waf_block_total`, `velocity_block_total`, `challenge_pass_rate`
  • `ato_incidents`, `carding_detected`, `cashout_denied`
  • бізнес-метрики: `chargeback_rate`, `bonus_abuse_rate`, `false_positive_rate`
  • Логи (редаговані): 'decision','score', ключові сигнали,'trace _ id', без PII/секретів.
  • A/B и Shadow: нова політика в shadow-режимі (логуємо рішення), потім canary (1-5%), авторолбек по SLO/FP.
  • Playbooks: ескалація, тимчасове посилення, відкат, «віртуальні патчі».

12) Приватність і відповідність

Мінімізуйте PII; хешуйте стійкі ідентифікатори (наприклад, email SHA-256 з сіллю).
Поважайте регіональну юрисдикцію (локалізація даних, згоди).
Прозорі пояснення рішень для ручних рев'ю; зберігайте тільки необхідне і з TTL.

13) Специфіка iGaming/фінансів

Реєстрація: фільтри disposable e-mail/VoIP, velocity по/24, девайс-ферми → challenge/deny.
Логін/АТО: нові девайси/гео-стрибки → OTP/WebAuthn; password spraying → throttle/deny.
Бонуси: ліміти на «шлях до відмивання» (depozit→bonus→minimalnyy oborot→vyvod), graph-аналіз афілійованості (адреси/девайси/карти).
Платежі/висновки: BIN-ризик, country-mismatch, PSP-сигнали; cashout на новий інструмент → високий поріг і чекап KYC.
Вебхуки PSP/KYC: HMAC + mTLS, вузькі IP-allow-лист, anti-replay ('X-Timestamp', вікно ± 5 хв).

14) Антипатерни

Один універсальний captcha «скрізь і завжди» → високий FP/падіння конверсії.
Тільки rate limit без поведінкових/девайсних сигналів.
Зберігання «сирих» відбитків і PII безстроково.
Відсутність shadow-прогону і canary для нових політик.
Повна довіра зовнішнім «репутаційним» міткам без власної валідації.
Прийняття рішень на клієнті (JS/мобільний SDK) без серверної перевірки.

15) Приклади правил і псевдокод

15. 1 Композитне правило (реал-тайм)

pseudo score = 0 if ip_asn in bad_asn_list then score += 0. 5 if device_age < 1d and route in {login, withdraw} then score += 0. 3 if velocity("login:account", 5m) > 10 then score += 0. 3 if geovelocity(last_login_loc, current_loc) > 800km/h then score += 0. 2 decision = score>=0. 9? "deny": score>=0. 7? "challenge": "allow"

15. 2 Граф зв'язків (мультиаккаунт)


edge(accountA, deviceX)
edge(accountB, deviceX)
edge(accountB, cardY)
edge(accountC, cardY)
Threshold by common nodes → investigation/deny bonus

16) Чек-лист prod-готовності

  • Багаторівнева архітектура: Edge → Risk API → App, потік подій.
  • Сигнали: мережа, девайс, поведінка, контент, платіж; мінімізація PII.
  • Velocity/GCRA на ключах ip/device/account/payment, ковзні вікна.
  • Рішення: allow/deny/challenge/throttle; кеш рішень з TTL; сховище фактів челленджів.
  • Челленджі: captcha/PoW/OTP/WebAuthn; Динамічна складність.
  • Risk API: SLA <100 мс, кеш, деградація в «мінімально безпечний» режим.
  • Спостережуваність: метрики risk, FP/FN, дашборди, алерти; бізнес-метрики (chargeback/bonus-abuse).
  • Shadow → canary → enforce; плейбуки ескалації і відкату.
  • Вебхукі PSP/KYC: HMAC+mTLS+anti-replay+allow-list.
  • Регіональні вимоги і TTL на чутливі дані.

17) TL; DR

Будуйте шаруватий захист: ранні edge-фільтри і челенджі, централізований Risk API з правилами + ML і потік подій для зворотного зв'язку. Використовуйте velocity-ліміти, сигнали мережі/девайсу/поведінки, динамічні challenge (captcha/PoW/OTP/WebAuthn). Приймайте рішення allow/deny/challenge/throttle, міряйте FP/FN і бізнес-ефект, розгортайте через shadow/canary. Для платіжних/бонусних шляхів - окремі посилені профілі і зв'язка з KYC/AML.

Contact

Зв’яжіться з нами

Звертайтеся з будь-яких питань або за підтримкою.Ми завжди готові допомогти!

Telegram
@Gamble_GC
Розпочати інтеграцію

Email — обов’язковий. Telegram або WhatsApp — за бажанням.

Ваше ім’я необов’язково
Email необов’язково
Тема необов’язково
Повідомлення необов’язково
Telegram необов’язково
@
Якщо ви вкажете Telegram — ми відповімо й там, додатково до Email.
WhatsApp необов’язково
Формат: +код країни та номер (наприклад, +380XXXXXXXXX).

Натискаючи кнопку, ви погоджуєтесь на обробку даних.