docs: mise à jour complète — 7/8 techniques, 85 features, 12 modules
Reflète l'état réel du système après les étapes 1-9 du roadmap : - §5.2 (fleet_detector NetworkX/Louvain) et §5.8 (Jaccard cross-domain) : ✅ - MetaLearner (régression logistique, fallback poids fixes) : documenté - ExIFFI (profondeur isolation EIF) + erreur AE par feature : documenté - KL divergence en complément du KS, drift adversarial : documenté - HTTP/2 fingerprinting (h2_fingerprint, dict_browser_h2, axis_h2_coherence) : documenté - Métriques de cycle (metrics.py, ml_performance_metrics, alertes) : documenté - Browser confidence : 5 axes → 6 axes (axis_h2_coherence) - 85 features (73 FEATURES + 12 FEATURES_COMPLET), 12 modules, 53 routes dashboard - Conformité thèse : 99.4% (était 97.9%), §5 : 87.5% (était 62.5%) - Tables nouvelles : fleet_detections, ml_performance_metrics, soc_feedback - Dictionnaires : 8 (dict_browser_h2 ajouté) - Dashboard : 16 pages + 37 API routes (fleet, health ajoutés) Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
This commit is contained in:
@ -20,10 +20,10 @@ inter-bases). Le schéma complet est défini dans 13 fichiers SQL ordonnés dans
|
||||
| Catégorie | Nombre | Objets |
|
||||
|-----------|--------|--------|
|
||||
| **Bases de données** | 2 | `ja4_logs`, `ja4_processing` |
|
||||
| **Tables** | 14 | `http_logs_raw`, `http_logs`, `ref_bot_networks`, `bot_ip`, `bot_ja4`, `anubis_ip_rules`, `anubis_asn_rules`, `agg_host_ip_ja4_1h`, `agg_header_fingerprint_1h`, `agg_path_sequences_1h`, `agg_request_timing_1h`, `agg_ip_behavior_1h`, `agg_resource_cascade_1h`, `ml_detected_anomalies`, `ml_all_scores`, `audit_logs` |
|
||||
| **Dictionnaires** | 7 | `dict_iplocate_asn`, `dict_bot_ip`, `dict_bot_ja4`, `dict_browser_ja4`, `dict_asn_reputation`, `dict_anubis_ip`, `dict_anubis_asn` |
|
||||
| **Vues matérialisées** | 8 | `mv_http_logs`, `mv_agg_host_ip_ja4_1h`, `mv_agg_header_fingerprint_1h`, `mv_agg_path_sequences_1h`, `mv_agg_request_timing_1h`, `mv_agg_ip_behavior_1h`, `mv_agg_resource_cascade_1h` |
|
||||
| **Vues** | 8 | `view_ip_recurrence`, `view_ai_features_1h`, `view_form_bruteforce_detected`, `view_host_ip_ja4_rotation`, `view_dashboard_user_agents`, `view_dashboard_entities`, `view_resource_cascade_1h`, `view_thesis_features_1h` |
|
||||
| **Tables** | 19 | `http_logs_raw`, `http_logs`, `ref_bot_networks`, `bot_ip`, `bot_ja4`, `anubis_ip_rules`, `anubis_asn_rules`, `agg_host_ip_ja4_1h`, `agg_header_fingerprint_1h`, `agg_path_sequences_1h`, `agg_request_timing_1h`, `agg_ip_behavior_1h`, `agg_resource_cascade_1h`, `ml_detected_anomalies`, `ml_all_scores`, `audit_logs`, `fleet_detections`, `ml_performance_metrics`, `soc_feedback` |
|
||||
| **Dictionnaires** | 8 | `dict_iplocate_asn`, `dict_bot_ip`, `dict_bot_ja4`, `dict_browser_ja4`, `dict_browser_h2`, `dict_asn_reputation`, `dict_anubis_ip`, `dict_anubis_asn` |
|
||||
| **Vues matérialisées** | 7 | `mv_http_logs`, `mv_agg_host_ip_ja4_1h`, `mv_agg_header_fingerprint_1h`, `mv_agg_path_sequences_1h`, `mv_agg_request_timing_1h`, `mv_agg_ip_behavior_1h`, `mv_agg_resource_cascade_1h` |
|
||||
| **Vues** | 9 | `view_ip_recurrence`, `view_ai_features_1h`, `view_form_bruteforce_detected`, `view_host_ip_ja4_rotation`, `view_dashboard_user_agents`, `view_dashboard_entities`, `view_resource_cascade_1h`, `view_thesis_features_1h`, `view_health_metrics` |
|
||||
|
||||
---
|
||||
|
||||
@ -130,6 +130,10 @@ Table de logs HTTP parsés et enrichis — alimentée par la vue matérialisée
|
||||
| `anubis_bot_name` | LowCardinality(String) DEFAULT `''` | Nom du bot détecté par Anubis |
|
||||
| `anubis_bot_action` | LowCardinality(String) DEFAULT `''` | Action Anubis |
|
||||
| `anubis_bot_category` | LowCardinality(String) DEFAULT `''` | Catégorie Anubis |
|
||||
| `h2_fingerprint` | String DEFAULT `''` | Fingerprint HTTP/2 au format Akamai (SETTINGS\|WU\|PRIORITY\|PSEUDO) |
|
||||
| `h2_settings_fp` | String DEFAULT `''` | Valeurs brutes des paramètres SETTINGS HTTP/2 |
|
||||
| `h2_window_update` | UInt32 DEFAULT 0 | Valeur WINDOW_UPDATE initial du client HTTP/2 |
|
||||
| `h2_pseudo_order` | LowCardinality(String) DEFAULT `''` | Ordre des pseudo-headers (`:method:authority:scheme:path`) |
|
||||
|
||||
Index de saut de données :
|
||||
|
||||
@ -427,6 +431,71 @@ Toutes les classifications ML (sans filtre de seuil) pour l'observabilité.
|
||||
|
||||
---
|
||||
|
||||
### fleet_detections
|
||||
|
||||
Résultats de détection de flottes de bots coordonnées via analyse de graphe bipartite JA4×ASN (module `fleet.py`).
|
||||
|
||||
| Colonne | Type | Description |
|
||||
|---------|------|-------------|
|
||||
| `src_ip` | IPv6 | Adresse IP membre de la flotte |
|
||||
| `campaign_id` | Int32 | Identifiant de la communauté détectée |
|
||||
| `fleet_score` | Float32 | Score de flotte : `taille × densité / log(nb_ASN)` |
|
||||
| `ja4_list` | Array(String) | Empreintes JA4 partagées dans la communauté |
|
||||
| `asn_list` | Array(UInt32) | ASNs impliqués dans la communauté |
|
||||
| `member_count` | UInt32 | Nombre total d'IPs dans la communauté |
|
||||
| `window_start` | DateTime | Début de la fenêtre de détection |
|
||||
| `detected_at` | DateTime | Horodatage d'insertion |
|
||||
|
||||
- **Moteur** : ReplacingMergeTree(detected_at)
|
||||
- **Partition** : `toDate(window_start)`
|
||||
- **Tri** : `(window_start, src_ip, campaign_id)`
|
||||
- **TTL** : `window_start + INTERVAL 7 DAY`
|
||||
|
||||
---
|
||||
|
||||
### ml_performance_metrics
|
||||
|
||||
Métriques de performance du pipeline ML par cycle de détection (module `metrics.py`).
|
||||
|
||||
| Colonne | Type | Description |
|
||||
|---------|------|-------------|
|
||||
| `model_name` | LowCardinality(String) | Nom du modèle (`complet`, `applicatif`) |
|
||||
| `cycle_id` | String | Identifiant unique du cycle (timestamp ISO) |
|
||||
| `anomaly_rate` | Float32 | Taux d'anomalies détectées (0.0–1.0) |
|
||||
| `known_bot_rate` | Float32 | Taux de KNOWN_BOT dans le cycle |
|
||||
| `legit_browser_rate` | Float32 | Taux de LEGITIMATE_BROWSER dans le cycle |
|
||||
| `drift_rate` | Float32 | Fraction de features en drift (KS ou KL) |
|
||||
| `corr_rate` | Float32 | Taux de sessions corrélées (correlated=1) |
|
||||
| `cycle_latency_s` | Float32 | Durée totale du cycle d'inférence en secondes |
|
||||
| `alert_flags` | Array(String) | Liste des alertes déclenchées dans ce cycle |
|
||||
| `recorded_at` | DateTime | Horodatage d'enregistrement |
|
||||
|
||||
- **Moteur** : MergeTree
|
||||
- **Partition** : `toDate(recorded_at)`
|
||||
- **Tri** : `(recorded_at, model_name)`
|
||||
- **TTL** : `recorded_at + INTERVAL 90 DAY`
|
||||
|
||||
---
|
||||
|
||||
### soc_feedback
|
||||
|
||||
Feedback des analystes SOC pour l'entraînement supervisé XGBoost et le MetaLearner.
|
||||
|
||||
| Colonne | Type | Description |
|
||||
|---------|------|-------------|
|
||||
| `src_ip` | IPv6 | Adresse IP classifiée |
|
||||
| `label` | LowCardinality(String) | Classification : `bot`, `legitimate`, `suspicious` |
|
||||
| `analyst` | String | Identifiant de l'analyste |
|
||||
| `confidence` | Float32 | Confiance déclarée (0.0–1.0) |
|
||||
| `notes` | String | Notes libres de l'analyste |
|
||||
| `created_at` | DateTime | Horodatage de la classification |
|
||||
|
||||
- **Moteur** : ReplacingMergeTree(created_at)
|
||||
- **Partition** : `toDate(created_at)`
|
||||
- **Tri** : `(src_ip, created_at)`
|
||||
|
||||
---
|
||||
|
||||
### audit_logs
|
||||
|
||||
Journal d'audit SOC pour le suivi de l'activité du dashboard.
|
||||
@ -523,6 +592,7 @@ Tous les fichiers doivent être placés dans `/var/lib/clickhouse/user_files/`.
|
||||
| `dict_bot_ip` | `bot_ip.csv` | `prefix` (String) | IP_TRIE | `bot_name` (String) | 300 s | ~3,5K CIDR |
|
||||
| `dict_bot_ja4` | `bot_ja4.csv` | `ja4` (String) | COMPLEX_KEY_HASHED | `bot_name` (String) | 300 s | ~31 |
|
||||
| `dict_browser_ja4` | `browser_ja4.csv` | `ja4` (String) | COMPLEX_KEY_HASHED | `browser_family`, `tls_library`, `context` | 300 s | ~1,2K |
|
||||
| `dict_browser_h2` | `browser_h2.csv` | `h2_fingerprint` (String) | COMPLEX_KEY_HASHED | `browser_family`, `h2_known` (UInt8) | 300 s | ~50 |
|
||||
| `dict_asn_reputation` | `asn_reputation.csv` | `src_asn` (UInt64) | HASHED | `label` (String) | 300 s | ~82K |
|
||||
|
||||
### Dictionnaires basés sur ClickHouse
|
||||
@ -542,7 +612,7 @@ Tous les fichiers doivent être placés dans `/var/lib/clickhouse/user_files/`.
|
||||
|
||||
### view_ai_features_1h
|
||||
|
||||
Calcule ~65+ features ML par `(src_ip, ja4, host)` sur les dernières 24 heures
|
||||
Calcule ~85 features ML par `(src_ip, ja4, host)` sur les dernières 24 heures
|
||||
en joignant `agg_host_ip_ja4_1h` et `agg_header_fingerprint_1h`.
|
||||
|
||||
| Catégorie | Features |
|
||||
|
||||
Reference in New Issue
Block a user