feat(ml): replace NetworkX/Louvain with PyTorch Geometric GraphSAGE for fleet detection

Rewrite fleet.py to use a GNN-based approach: nodes are src_ip with ML feature
vectors, edges connect IPs sharing (JA4, ASN) pairs, GraphSAGE (2 SAGEConv
layers, in→64→32) produces 32D embeddings clustered by HDBSCAN. PyG NeighborLoader
activates for >50k nodes. Update thesis docs (§5.2, §6.4, §2, §8) to reflect
GraphSAGE architecture and PyG scalability.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
Jacquin Antoine
2026-04-13 15:45:34 +02:00
parent c1821dcbc4
commit c6cb12981c
8 changed files with 378 additions and 264 deletions

View File

@ -43,8 +43,8 @@ La stabilité des empreintes H2 de Chrome sur 2+ ans (novembre 2023 2026) co
Six techniques entièrement implémentées adressant des angles morts spécifiques :
1. **Path Sequence Entropy (§5.1)** : entropie de la matrice de transition Markov des séquences de chemins — résistant à la randomisation de diversité par les bots
2. **Bipartite Bot Fleet Detection (§5.2)** : détection de flottes distribuées via graphe bipartite JA4×ASN et Louvain sur le graphe projeté pondéré — détecte les botnets dont aucune paire (JA4, ASN) individuelle n'est anormale
1. **Session Transformer Embedding (§5.1)** : embedding dense 32D produit par un encoder Transformer sur les séquences de requêtes (chemins, méthodes, Δt) — remplace l'entropie de Markov O(1) par une représentation contextuelle capturant les dépendances longues
2. **Détection de flottes par GraphSAGE (§5.2)** : apprentissage de représentations de graphe (GNN SAGEConv 2 couches) sur un graphe d'IPs connectées par co-occurrence (JA4, ASN), clusterisées par HDBSCAN dans l'espace latent 32D — détecte les botnets dont aucune paire (JA4, ASN) individuelle n'est anormale, en combinant structure topologique et features comportementales
3. **Request Cadence Fingerprint (§5.3)** : quatre signaux statistiques (CV, autocorrélation lag-1, ratio rafale/pause, déviation Benford) sur les intervalles inter-requêtes
4. **Resource Dependency Tree (§5.4)** : analyse du waterfall de chargement de ressources — détecte Playwright/Puppeteer par le délai anormalement court entre HTML et premier asset
5. **Intra-Session JA4 Drift (§5.5)** : ratio de transitions de JA4 dominant par fenêtre de 10 minutes — détecte les bots APT multi-phases
@ -69,7 +69,7 @@ Architecture de données fondée sur ClickHouse avec **AggregatingMergeTree view
| Famille 5 — Empreinte réseau | Caractéristiques de la pile réseau du client | ip_id_zero_ratio, avg_ttl, ttl_std, no_window_scale_ratio, ip_asn, ip_country, ja4_asn_rarity, et 6 autres (13 features) | 13 | 0 | 0 |
| Famille 6 — Comportement de navigation | Patterns de navigation et structure des requêtes | asset_ratio, direct_access_ratio, orphan_ratio, temporal_entropy, post_ratio, head_ratio, http_scheme_ratio, et 3 autres (10 features) | 10 | 0 | 0 |
| Famille 7 — Intelligence contextuelle | Enrichissements contextuels et browser scoring | ja4_asn_concentration, browser_confidence, browser_match_chrome, browser_match_firefox, browser_match_safari, browser_match_max, browser_family_detected, et 16 autres (23 features) | 23 | 0 | 0 |
| Famille 8 — Features comportementales avancées | Features originales de recherche (§5.1§5.8) | path_transition_entropy, cadence_cv, lag1_autocorrelation, burst_ratio, benford_deviation, root_to_first_asset_delay, ja4_drift_ratio, host_diversity, et 5 autres (13 features) | 13 | 0 | 0 |
| Famille 8 — Features comportementales avancées | Features originales de recherche (§5.1§5.8) | session_transformer_embedding (32D), lag1_autocorrelation, burst_ratio, pause_ratio, benford_deviation, root_to_first_asset_delay, asset_load_stddev, ja4_drift_ratio, host_diversity, et 3 autres (11 scalaires + 1 embedding) | 12 | 0 | 0 |
| **Total** | | | **96** | **0** | **0** |
**Résumé quantitatif** : les 96 features documentées dans la Section 4 sont **toutes entièrement implémentées** (`[impl.]`), incluant les 5 features `browser_match_*` du module `browser_matcher` (scoring à 7 dimensions complet, signatures Chrome/Firefox/Safari opérationnelles). Les features des techniques §5.6 (DNS Shadow Analysis) et §5.7 (Compression Ratio Invariant), classées `[todo]`, sont exclues du décompte des 96 features actives car identifiées comme travaux futurs dans la Section 5. Les features H2 brutes (`h2_window_update_value`, `h2_has_priority_frames`, `h2_pseudo_order`) sont entièrement implémentées depuis l'intégration du parser HTTP/2 avec buffer de réassemblage dans ja4ebpf.
@ -227,8 +227,11 @@ arXiv preprint arXiv:1210.0921.
[33] **ClickHouse** — Système de gestion de bases de données analytiques orienté colonnes, haute performance.
[https://clickhouse.com/docs/en/intro](https://clickhouse.com/docs/en/intro)
[34] **NetworkX** — Bibliothèque Python pour la création, la manipulation et l'étude de graphes.
[https://networkx.org/documentation/stable/](https://networkx.org/documentation/stable/)
[34] **PyTorch Geometric (PyG)** — Bibliothèque Python pour l'apprentissage de représentations sur graphes (GNN).
[https://pytorch-geometric.readthedocs.io/](https://pytorch-geometric.readthedocs.io/)
[34b] **Hamilton, W.L., Ying, R. & Leskovec, J.** (2017). *Inductive Representation Learning on Large Graphs* (GraphSAGE). NeurIPS 2017.
[https://arxiv.org/abs/1706.02216](https://arxiv.org/abs/1706.02216)
[35] **HDBSCAN Python library** — Implémentation performante de l'algorithme HDBSCAN.
[https://hdbscan.readthedocs.io/en/latest/](https://hdbscan.readthedocs.io/en/latest/)