feat(e2e): add distributed E2E test framework with parametric traffic generation
Add run-e2e-test.sh with CLI parameters (--hits, --http-ratio, --dns, --tls, --src-ips, --keep-analysis, --up) for configurable traffic generation. Traffic runs from VM endpoints with multiple source IPs (alias IPs on eth0) to produce distinct sessions for the ML pipeline. Fix curl TLS flags (--tlsv1.2 instead of --tls-v1-2), skip redundant local verification in distributed mode, and fix dashboard is_available() cache that never retried after ClickHouse recovery. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
@ -100,12 +100,13 @@ INSERT (Native TCP :9000)
|
||||
- **Applicatif** (L7 seulement, ~73 features, `correlated=0`) — trafic HTTP non corrélé
|
||||
- **Ensemble triple voix** :
|
||||
- **Extended Isolation Forest** (isotree) — scoreur non supervisé principal
|
||||
- **Autoencoder** (PyTorch, architecture n→64→32→16→32→64→n) — erreur de reconstruction
|
||||
- **NFEnsemble** (PyTorch, Deep Ensemble M=5 TrafficNormalizingFlow/RealNVP) — NLL et incertitude épistémique
|
||||
- **XGBoost** — supervisé, entraîné sur les labels SOC (`soc_feedback`)
|
||||
- **Score final** : `final = meta_learner.predict(eif_norm, ae_norm, xgb_prob, volume, correlated)` avec fallback sur pondération linéaire fixe `(1-β) × ((1-α) × eif_norm + α × ae_norm) + β × xgb_prob` (α=0.30, β=0.20)
|
||||
- **MetaLearner** (régression logistique) entraîné automatiquement sur les labels accumulés (seuil: 1000 labels)
|
||||
- **Seuil adaptatif** par percentile, détection de dérive conceptuelle (KS + KL divergence)
|
||||
- **fleet_detector** (NetworkX) — graphe bipartite JA4×ASN, `fleet_score`, table `fleet_detections`
|
||||
- **MetaLearner** (MLP) entraîné automatiquement sur les labels accumulés (seuil: 1000 labels)
|
||||
- **Seuil adaptatif** par percentile, détection de dérive conceptuelle (ADWIN + KS + KL divergence)
|
||||
- **Détection adversariale** : incertitude inter-modèles NFEnsemble (`nf_uncertainty > NF_UNCERTAINTY_THRESHOLD`)
|
||||
- **fleet_detector** (PyTorch Geometric GraphSAGE) — graphe bipartite JA4×ASN, `fleet_score`, table `fleet_detections`
|
||||
- **HDBSCAN** — regroupement en campagnes d'attaque
|
||||
- **Détection de navigateur** — 6 axes multifactoriels (confiance ≥ 0.55 → `LEGITIMATE_BROWSER`)
|
||||
- **ExIFFI** — importance de features native à l'EIF (alternative à SHAP)
|
||||
@ -211,7 +212,7 @@ view_ip_recurrence ───┤ │ Pré- │ │
|
||||
│ │
|
||||
│ ┌────────────┐ │ Pour chaque branche :
|
||||
│ │ Ensemble │ │ ├── Extended Isolation Forest (EIF)
|
||||
│ │ triple │──▶│ ├── Autoencoder (PyTorch)
|
||||
│ │ triple │──▶│ ├── NFEnsemble (M=5 NF, PyTorch)
|
||||
│ │ voix │ │ └── XGBoost (supervisé)
|
||||
│ └────────────┘ │
|
||||
│ │ Score = MetaLearner(eif, ae, xgb) ou
|
||||
@ -264,9 +265,9 @@ Les deux empreintes sont générées par **ja4ebpf** (espace utilisateur Go) à
|
||||
| Capture applicative (L7) | eBPF uprobe SSL_read + kprobe tcp_recvmsg |
|
||||
| Corrélation en mémoire | Go 1.24.6 (256-shard manager, goroutines) |
|
||||
| Détection ML — EIF | Python 3.11 + isotree |
|
||||
| Détection ML — Autoencoder | Python 3.11 + PyTorch |
|
||||
| Détection ML — NFEnsemble | Python 3.11 + PyTorch |
|
||||
| Détection ML — Supervisé | Python 3.11 + XGBoost |
|
||||
| Détection ML — Ensemble | Python 3.11 + MetaLearner (régression logistique) |
|
||||
| Détection ML — Ensemble | Python 3.11 + MetaLearner (MLP) |
|
||||
| Clustering de campagnes | HDBSCAN + NetworkX (fleet detection) |
|
||||
| Explicabilité | SHAP + ExIFFI |
|
||||
| Backend dashboard | FastAPI + Jinja2 (Python 3.11) |
|
||||
|
||||
Reference in New Issue
Block a user