Bot Protection i anti-fraud API
1) Dlaczego go potrzebujesz
Boty i atakujący atakują punkty wzrostu i pieniędzy: rejestracja, logowanie (ATO), depozyty/wnioski, mechanika promocyjna, katalogi gier/współczynników. Zasady ręczne i limit czystej prędkości nie wystarczą już: potrzebujesz sygnałów wielopoziomowych, punktacji w czasie rzeczywistym i kontroli rozwiązań (zezwalaj/zaprzeczaj/wyzwanie/przepustnica) z informacjami zwrotnymi z wydarzeń biznesowych (obciążenia zwrotne, stosunek obciążenia zwrotnego, pliki KYC).
2) Taksonomia zagrożenia
Rejestracja/wejście na pokład: rachunki zbiorcze, jednorazowy e-mail/banki SIM, gospodarstwa urządzeń.
ATO (Przejęcie konta): wiarygodne nadziewanie, rozpylanie haseł, porwanie sesji.
Nadużycia bonusowe: multi-booking, geo/arbitraż jurysdykcyjny, obwodnica samodzielnego wykluczenia.
Karting/oszustwo płatności: test karty, skradzione portfele, refundacje.
Skrobanie/inwentaryzacja: agresywne ciągnięcie zawartości, ceny, wskaźniki.
API-DoS o niskiej intensywności: ataki żółwia, powolny POST, mobilne emulsje SDK.
Haki/integracje: fałszywe powiadomienia bez HMAC/mTLS, powtórka.
3) Architektura ochrony
3. 1 Warstwy
1. Krawędź (CDN/WAF/gateway): wczesne awarie (reputacja ASN/Geo/IP), wyzwania świetlne, limity, PoW.
2. API ryzyka (Risk PDP): silnik scentralizowany reguły/ML; отвей - "decyzja", "ocena", "powód", "ttl'.
3. Poziom aplikacji: niezmienne domeny, logika biznesowa (limity, KYC, AML), asynchroniczne opinie.
4. Przepływ zdarzeń: Kafka/Kinesis → sklep z funkcjami/model → opinie z płatności/sporów.
3. 2 Pętla roztworu
[Request] → Edge Plugins → (enrich) → Risk API (rules+ML) → Decision:
allow deny throttle challenge(type=captcha sms PoW biometry)
Rozwiązanie jest buforowane przez klucz (na przykład urządzenie × konto × trasa) przez sekundy 'ttl'.
4) Sygnały i wzbogacenie
Sieć/kanał: IP/ASN, proxy/VPN/Tor, rdns, rtt/jitter, wskaźnik SYN, odcisk palca TLS (JA3/JA4), zachowanie HTTP/2/3.
Urządzenie/przeglądarka: płótno/audio/WebGL FP (ostrożnie), platforma/SDK, timezone/locale, rozdzielczość, czcionki, wskaźniki WebDriver/bezgłowy, certyfikat mobilny (w miarę możliwości, w zależności od tego, czy jest to możliwe).
Zachowanie: prędkość wejścia, trajektorie myszy/dotyku, sekwencja ekranu, dwell-time, częstotliwość prób, przejścia między identyfikatorami przeglądarki.
Treść/żądanie: formularz e-mail/domena, dostawcy jednorazowego użytku, telefon HLR/lub typ numeru, karta BIN, konto/IBAN w rejestrach sanka, podobieństwo pełnej nazwy/adresów.
Konto/historia: wiek konta, status KYC, retencja, ARPPU, prędkość według depozytów/wypłat/bonusów.
Źródła zewnętrzne: listy kompromisowe (podobne do HIBP), sygnały ryzyka płatniczego (PSP), reputacja ASN.
5) Rozwiązanie: Zasady + ML
5. 1 Zasady (deterministyczne)
Prędkość: „N rejestracji z/24 w 10 minut”, „M login z jednym urządzeniem do X kont”, „K 3DS-files z rzędu”.
Geo/jurysdykcja: konflikty geo IP vs adres/dokument, nagłe skoki lokalizacji.
Niezmienne przedsiębiorstwa: limity odpowiedzialnych płatności, samowykluczenie, listy sankcji.
5. 2 ML punktacja (w czasie rzeczywistym)
Model światła (GBM/logreg) na temat charakterystyki internetowej: 'ip _ risk', 'device _ age', 'account _ age', 'pwd _ fail _ rate', 'bin _ risk', 'speed _',' behavioral _'.
Oddzielny model dla ATO i oddzielnie dla płatności/produktów.
Segmentacja według jurysdykcji/najemcy (kalibracja progów na rynku).
5. 3 Podejmowanie decyzji
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
Kiedy „wyzwanie”, przechowywać fakty przejścia/awarii; przyspieszyć/zmniejszyć tarcie dynamicznie.
6) Prędkość i kwoty (klucze i okna)
Клика: 'ip', 'ip/24', 'device _ id',' account _ id', 'payment _ instrument', 'email _ domain', 'bin'.
Okna: przesuwne (1m/5m/1h/24h) + indywidualne „burst „/” sustained „.
Politycy: „twarde” zaprzeczanie na gorących trasach (login/deposit), miękka przepustnica na treści.
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) Wyzwania i testowanie „ludzkości”
CAPTCHA/turnstile: кай soft-challenge; usunąć po dużym zaufaniu do „czystej” sesji.
Proof-of-Work (PoW): dla API/skryptów - oblicz hash o określonej złożoności; dynamiczna złożoność podczas wzrostu obciążenia.
OTP/SMS/Email/Push: dla operacji ATO/krytycznych; nie nadużywać (koszt/UX).
WebAuthn/biometria: wysoki poziom zaufania do szczegółów wypłat gotówkowych/zmian.
Zaufanie urządzenia: powiązać konto ze zweryfikowanym urządzeniem; nowe urządzenia → wyzwanie.
8) Integracja bramy/serwera proxy
8. 1 Wysłannik: ext_authz → API ryzyka (pseudo)
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: łatwy PoW i prędkość
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) Umowa API ryzyka
Żądanie (wzbogacone):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}
}
Odpowiedź:
json
{ "decision":"challenge", "score":0. 83, "reason":"high_velocity+new_device", "ttl_sec":900, "challenge":"captcha" }
10) Dane, cechy i modele
Sklep funkcyjny (online): Redis/Scylla/МDB - liczniki/prędkość/znaczniki czasu.
Seria/offline: DWH (BigQuery/S3 + Athena) do szkolenia/napraw; przechowywać ślady odpływu, obciążenia zwrotnego, ręcznie recenzje.
Modele: proste w czasie rzeczywistym (logreg/GBM); ciężkie (XGBoost/NN) - offline z PGM/skalowaniem, a następnie destylacją.
Kontrola dryfu: PSI, AUC/PR, kalibracja progów według regionu/kanału.
11) Obserwowalność i obwód operacyjny
Metryka:- „risk _ requests _ total {route, decision}”
- „risk _ score _ wiadro” (dystrybucja)
- „waf _ block _ total”, „velocity _ block _ total”, „challenge _ pass _ rate”
- "ato _ incidents", "carding _ detected", "cashout _ denied'
- wskaźniki biznesowe: 'chargeback _ rate', 'bonus _ abuse _ rate', 'false _ positive _ rate'
- Dzienniki (edytowane): "decyzja", "wynik", sygnały kluczowe, "trace _ id', brak PII/tajemnic.
- A/B i Shadow: nowa polityka w trybie cienia (logujemy decyzje), następnie canary (1-5%), auto-rollback przez SLO/FP.
- Playbooks: eskalacja, tymczasowe dokręcanie, rollback, „wirtualne plastry”.
12) Prywatność i zgodność
Zminimalizować PII; stabilne identyfikatory hash (na przykład SHA-256 e-mail z solą).
Przestrzeganie jurysdykcji regionalnej (lokalizacja danych, zgoda).
przejrzyste wyjaśnienia decyzji dotyczących ręcznych przeglądów; zachować tylko to, czego potrzebujesz i z TTL.
13) Szczegóły dotyczące iGaming/Finance
Rejestracja: jednorazowy e-mail/filtry VoIP, prędkość przez/24, urządzenie gospodarstwa → wyzwanie/zaprzeczenie.
Login/ATO: nowe urządzenia/geo-skoki → OTP/WebAuthn; rozpylanie hasła → przepustnica/zaprzeczenie.
Bonusy: limity na „ścieżce do prania” (depozit → bonus → minimalnyy oborot → vyvod), analiza wykresu przynależności (adresy/urządzenia/karty).
Płatności/wypłaty: ryzyko BIN, niedopasowanie kraju, sygnały PSP; cashout do nowego instrumentu → wysoki próg i KYC kontroli.
Haki internetowe PSP/KYC: HMAC + mTLS, wąska lista IP-permit, anty-replay („X-Timestamp”, okno ± 5 minut).
14) Antypattery
Jeden uniwersalny captcha „wszędzie i zawsze” → wysoki spadek FP/konwersji.
Tylko limit prędkości bez sygnałów behawioralnych/urządzenia.
Przechowywanie „surowych” nadruków i PII jest nieograniczone.
Brak cieni i kanarka dla nowych polityk.
Pełne zaufanie do zewnętrznych etykiet „reputacyjnych” bez własnej walidacji.
Podejmowanie decyzji o kliencie (JS/Mobile SDK) bez weryfikacji serwera.
15) Przykłady reguł i pseudokody
15. 1 Reguła złożona (w czasie rzeczywistym)
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 Wykres zależności (wielofunkcyjny)
edge(accountA, deviceX)
edge(accountB, deviceX)
edge(accountB, cardY)
edge(accountC, cardY)
Threshold by common nodes → investigation/deny bonus
16) Lista kontrolna gotowości Prod
- Architektura wielopoziomowa: Krawędź → API ryzyka → Aplikacja, przepływ zdarzeń.
- Sygnały: sieć, urządzenie, zachowanie, zawartość, płatność; Minimalizacja PII.
- Prędkość/GCRA na ip/urządzenie/konto/klucze płatnicze, okna przesuwne.
- Rozwiązania: zezwalaj/zaprzeczaj/wyzwanie/przepustnica; Pamięć podręczna rozwiązania z TTL repozytorium wyzwań faktów.
- Wyzwania: captcha/PoW/OTP/WebAuthn; dynamiczna złożoność.
- API ryzyka: SLA <100 ms, pamięć podręczna, zdegradowana do trybu „minimum safe”.
- Obserwowalność: ryzyko, FP/FN, deski rozdzielcze, wpisy; wskaźniki biznesowe (obciążenie zwrotne/nadużycie bonusowe).
- Cień → kanaryjski → egzekwować; eskalacja i rollback playbooks.
- Webhooks PSP/KYC: HMAC + mTLS + anty-replay + permit-list.
- Wymogi regionalne i TTL dotyczące danych wrażliwych.
17) TL; DR
Zbuduj zabezpieczenie warstwowe: wczesne filtry krawędzi i wyzwania, scentralizowany API ryzyka z zasadami + ML i przepływ zdarzeń dla informacji zwrotnych. Użyj limitów prędkości, sygnałów sieciowych/urządzeń/zachowań, wyzwań dynamicznych (captcha/PoW/OTP/WebAuthn). Podejmowanie decyzji zezwalających/zaprzeczających/wyzwanie/przepustnica, pomiar FP/FN i efekt biznesowy, rolka przez cień/kanarka. Dla ścieżek płatniczych/bonusowych - oddzielne dokręcone profile i link z KYC/AML.