Architektura i Eksperymenty
Ostatnia aktualizacja: 2026-05-27
Architektura systemu
Opis ogólny
FinPhishGuard to hybrydowy system detekcji phishingu impersonującego marki finansowe, łączący 4 niezależne moduły (URL, Visual, Content, DOM Timing) z adaptacyjną fuzją decyzyjną. Główny wkład techniczny: adversarially hardened logo detection (CLIP + PGD training) odporna na GAN i diffusion logos, oraz DOM-based obrona przed delayed rendering bez potrzeby screenshotów.
Komponenty główne
| Komponent | Opis | Technologia |
|---|---|---|
| M1 – URL Analyzer | Homoglyph/punycode detection, domain age, TLD abuse; wstępny filtr <5ms | LightGBM, SSL CT logs |
| M2a – Logo Localization | Detekcja i lokalizacja logo na screenshocie strony | Deformable DETR fine-tuned na LogoSENSE |
| M2b – Brand Matching | Zero-shot matching logo do bazy 150+ marek finansowych | CLIP ViT-B/32 (embeddingi tekstowo-wizualne) |
| M2c – Adversarial Verifier | Weryfikacja odporna na GAN/diffusion logo attacks | ResNet-50/ViT-B/16 + PGD adversarial training |
| M2d – Timing Defense | Wielokrotne screenshoty t=0/500ms/2000ms + delta | Playwright, anomaly detection |
| M3 – Content Brand Extractor | NER brand extraction z HTML + OCR header | RoBERTa-base fine-tuned, PaddleOCR |
| M4 – DOM Timing Analyzer | Statyczna analiza CSS/JS opacity hiding elementów logo | BeautifulSoup, AST analysis |
| Fuzja decyzyjna | s = 0.25·p_url + 0.40·p_visual + 0.25·p_content + 0.10·p_timing | Adaptive weighted ensemble |
Przepływ danych
flowchart TD URL([URL wejściowa]) --> M1[M1 URL Analyzer] M1 -->|p_url > 0.9| BLOCK([BLOCK]) M1 -->|p_url ≤ 0.9| PW[Screenshot Playwright] PW --> M2a[M2a Logo Localization] M2a --> M2b[M2b CLIP Brand Matching] M2b --> M2c[M2c Adversarial Verifier] M2c --> p_visual([p_visual]) HTML([HTML raw]) --> M4[M4 DOM Static Analysis] HTML --> M3[M3 NER/OCR Brand Extractor] M4 --> p_timing([p_timing]) M3 --> p_content([p_content]) M1 --> p_url2([p_url]) p_url2 --> FUSION[Adaptive Fusion\ns = 0.25·p_url + 0.40·p_visual\n+ 0.25·p_content + 0.10·p_timing] p_visual --> FUSION p_content --> FUSION p_timing --> FUSION FUSION --> DECISION([PHISHING / BENIGN])
Stack technologiczny
| Warstwa | Technologia | Uzasadnienie |
|---|---|---|
| Język | Python 3.11+ | standard ML |
| ML framework | PyTorch 2.x, Hugging Face | CLIP, ViT, RoBERTa |
| Object Detection | torchvision / Deformable DETR | logo localization |
| Browser automation | Playwright | screenshoty + timing |
| HTML parsing | BeautifulSoup, lxml | DOM analysis |
| URL features | tldextract, homoglyphs | M1 features |
| Dane | LogoSENSE, Ji & Kim 2025, PhiUSIIL | publiczne datasety |
| Pomiar / eval | sklearn metrics, Bootstrap CI | F1, FPR@95%TPR |
Eksperymenty
BP-EXP-1: Adversarial Robustness CLIP vs ResNet dla Logo Matching
Status: planned
Priorytet: high
Powiązany pomysł: BP-1
Dodano: 2026-05-27
Hipoteza: CLIP ViT-B/32 wykazuje istotnie niższy evasion rate pod atakiem GAN logos (Lee 2023) niż ResNet-50 z triplet loss (baseline VisualPhishNet) — mierzony jako odsetek GAN-perturbowanych logo błędnie dopasowanych do złej marki. Spodziewany wynik: CLIP evasion rate <30% vs ResNet-50 >80%.
Dane:
- Dataset: LogoSENSE test set (1,979 próbek) + GAN logos z Lee 2023 + LogoMorph z Hao 2024
- Podział: train (LogoSENSE 3,060) / test (1,979 + adversarial subset)
- Preprocessing: resize 224×224, normalize ImageNet mean/std
Metoda:
- Trenuj M2a Deformable DETR na LogoSENSE train set (bounding boxes)
- Zbuduj bazę embeddingów: CLIP ViT-B/32 dla 150+ marek finansowych
- Baseline: ResNet-50 z triplet loss (VisualPhishNet setup, Phishpedia logos)
- Generuj adversarial logos: FGSM ε=8/255, PGD k=40 ε=8/255, GAN (Lee 2023 methodology)
- Zmierz: Recall@1 i evasion rate dla CLIP vs ResNet na clean i adversarial logo
Modele / Baseline:
| Model | Opis |
|---|---|
| ResNet-50 triplet | VisualPhishNet baseline, HOG+SVM |
| CLIP ViT-B/32 | zero-shot brand matching |
| ViT-B/16 + PGD training | adversarially hardened verifier |
| EVA-02-CLIP-L/14 (optional) | SOTA CLIP ablation (#BP-8) |
Metryki:
- Główna: evasion rate pod GAN attack (próg sukcesu: CLIP <30% vs ResNet >80%)
- Dodatkowe: Recall@1, Recall@5 na clean LogoSENSE; mAP per brand tier
- Test statystyczny: McNemar test (CLIP vs ResNet, α=0.05)
Wyniki: (do wypełnienia po wykonaniu)
| Model | Evasion rate (GAN) | Recall@1 (clean) | Uwagi |
|---|
Wnioski: (do wypełnienia po wykonaniu)
BP-EXP-2: Financial Brand Coverage Audit SOTA RBPD
Status: planned
Priorytet: high
Powiązany pomysł: BP-2
Dodano: 2026-05-27
Hipoteza: Istniejące SOTA systemy RBPD (PhishIntention, KnowPhish) mają recall <50% dla marek fintech (Revolut, Wise, Klarna, N26) i payment gateways (BLIK, Stripe) — istotnie niższy niż dla tradycyjnych banków (>80% recall), potwierdzając systematyczny coverage gap dla financial services.
Dane:
- Dataset: Ji & Kim 2025 (19,131 phishing + 243 benign), PhishIntention brand list
- Podział: pełny test set (bez treningu — pure evaluation)
- Preprocessing: tagowanie stron per brand tier (banking/payment/fintech)
Metoda:
- Uruchom PhishIntention + KnowPhish na Ji & Kim 2025 dataset (docker/API)
- Taguj wyniki per brand category (banking vs payment vs fintech vs crypto)
- Oblicz recall per brand i per category
- Zidentyfikuj coverage gaps: marki z recall <50%
- Dodaj brakujące marki do knowledge base i zmierz improvement
Modele / Baseline:
| Model | Opis |
|---|---|
| PhishIntention | USENIX Sec 2022, główny baseline |
| KnowPhish | SOTA 2024, 20k brand KB |
| Extended KB | FinPhishGuard brand list (150+ financial) |
Metryki:
- Główna: recall per brand tier (próg: fintech <50%, banking >80%)
- Dodatkowe: overall F1, FPR, breakdown per Tier 1-4
- Test statystyczny: McNemar test (PhishIntention vs Extended KB)
Wyniki: (do wypełnienia po wykonaniu)
| System | Recall (banking) | Recall (payment) | Recall (fintech) | Ogółem F1 |
|---|
Wnioski: (do wypełnienia po wykonaniu)
BP-EXP-3: TempGuard — DOM/CSS Defense Against Delayed Rendering
Status: planned
Priorytet: high
Powiązany pomysł: BP-3
Dodano: 2026-05-27
Hipoteza: System TempGuard oparty na statycznej analizie DOM/CSS/JS wykrywa delayed rendering attacks (Yuan 2026) z recall >80% bez dodatkowych screenshotów — podczas gdy pojedynczy screenshot baseline osiąga recall 0% na tym samym zbiorze testowym.
Dane:
- Dataset: syntetyczny zbiór delayed rendering pages (reprodukcja Yuan 2026 PoC CSS curtain)
- Podział: 500 strony z timing evasion (syntetyczne) + Ji & Kim 2025 subset (measurement)
- Preprocessing: raw HTML + Playwright resource timing trace
Metoda:
- Implementacja TempGuard: CSS parser (opacity:0, display:none na logo elements) + JS AST (setTimeout >200ms na logo nodes) + network timing (logo fetch delay >300ms)
- Generuj syntetyczne CSS curtain pages (CSS opacity: 0 → 1 po 500ms/1000ms/3000ms)
- Ewaluacja na syntetycznym zbiorze: recall TempGuard vs single-screenshot baseline
- Measurement study na Ji & Kim 2025: ile stron używa timing evasion? (deskryptywne)
Modele / Baseline:
| Model | Opis |
|---|---|
| Single-screenshot | Phishpedia/PhishIntention standard |
| Yuan 2026 PoC | drugi screenshot jako obrona |
| TempGuard (DOM+CSS) | nasz system bez screenshotów |
| TempGuard (full) | DOM + network timing + multi-timestamp |
Metryki:
- Główna: recall na delayed rendering attacks (próg sukcesu: >80%)
- Dodatkowe: latencja detekcji [ms], FPR na benign pages
- Test statystyczny: Fisher exact test (TempGuard vs single-screenshot na syntetycznych)
Wyniki: (do wypełnienia po wykonaniu)
| System | Recall (timing evasion) | Latencja [ms] | FPR |
|---|
Wnioski: (do wypełnienia po wykonaniu)
Pipeline danych
Dane wejściowe: URL → Playwright headless browser → screenshot + HTML + resource timing. LogoSENSE (3,060 train / 1,979 test) używany do treningu i walidacji logo detectora. Ji & Kim 2025 (19,131 stron) jako benchmark end-to-end. Syntetyczne strony CSS curtain generowane skryptem Python (selenium/playwright) dla timing defense.
Wymagania techniczne
Środowisko
Python: 3.11+
GPU: NVIDIA 8GB+ VRAM (DETR training, PGD adversarial training)
RAM: min. 16 GB
Dysk: ~50 GB (datasets + model checkpoints)
Kluczowe biblioteki
# requirements-research.txt
torch>=2.0
torchvision>=0.15
transformers>=4.38
clip @ git+https://github.com/openai/CLIP
playwright>=1.40
beautifulsoup4>=4.12
scikit-learn>=1.3
lightgbm>=4.0
paddleocr>=2.7
tldextract>=5.0
homoglyphs>=2.0