From 0ccd417a02588796f38f1314187cc0568199e006 Mon Sep 17 00:00:00 2001 From: toto Date: Wed, 8 Apr 2026 00:12:51 +0200 Subject: [PATCH] =?UTF-8?q?docs:=20audit=20conformit=C3=A9=20d=C3=A9tectio?= =?UTF-8?q?n=20vs=20th=C3=A8se=20=C3=A9tat=20de=20l'art?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Analyse exhaustive feature-par-feature des techniques de détection implémentées vs ce que décrit la thèse. Score: 97% base, 6% techniques avancées, 72% global pondéré. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- docs/AUDIT_Detection_vs_Thesis.md | 450 ++++++++++++++++++++++++++++++ 1 file changed, 450 insertions(+) create mode 100644 docs/AUDIT_Detection_vs_Thesis.md diff --git a/docs/AUDIT_Detection_vs_Thesis.md b/docs/AUDIT_Detection_vs_Thesis.md new file mode 100644 index 0000000..fcf16f4 --- /dev/null +++ b/docs/AUDIT_Detection_vs_Thesis.md @@ -0,0 +1,450 @@ +# Audit de conformité : Détection de bots vs État de l'art (Thèse) + +**Date** : 7 avril 2026 +**Référence** : `docs/THESIS_HTTP_Traffic_Detection.md` + +--- + +## Légende + +| Statut | Signification | +|--------|---------------| +| ✅ CONFORME | Implémenté conformément à la thèse | +| ⚠️ PARTIEL | Implémenté mais incomplet ou dégradé | +| ❌ ABSENT | Décrit dans la thèse, non implémenté | +| 🔄 DIVERGENT | Implémenté différemment de ce que décrit la thèse | + +--- + +## 1. Architecture multi-couches (Thèse §3) + +### 1.1 Pipeline global + +| Composant thèse | Statut | Réalité | +|-----------------|--------|---------| +| Capture L3-L5 (ja4sentinel) | ✅ | Opérationnel — extraction TTL, IP-ID, DF, TCP win/mss/scale, JA4/JA3, ALPN, SNI | +| Capture L7 (mod_reqin_log) | ✅ | Opérationnel — headers, méthode, path, query, timestamps ns | +| Corrélation inter-couches (logcorrelator) | ✅ | Clé `src_ip:src_port`, Keep-Alive, orphelins, fenêtre 10s | +| Enrichissement GeoIP/ASN à l'ingestion | ✅ | `dict_iplocate_asn` dans `mv_http_logs` | +| Enrichissement Anubis à l'ingestion | ✅ | 5 niveaux de priorité (UA+IP > UA > IP > ASN > Country) | +| Agrégation temporelle 1h | ✅ | `agg_host_ip_ja4_1h` + `agg_header_fingerprint_1h` via MV | +| Détection ML semi-supervisée | ✅ | Dual IsolationForest (Complet/Applicatif), cycle 5min | +| Dashboard SOC | ✅ | 21+ routes, clustering, fingerprints, incidents | + +**Verdict §3** : L'architecture multi-couches décrite dans la thèse est **fidèlement implémentée**. C'est le point fort de la plateforme. + +--- + +## 2. Couche L3 — IP et paquets (Thèse §3.2) + +| Signal thèse | Feature implémentée | Statut | +|--------------|---------------------|--------| +| TTL initial caractéristique de l'OS | `avg_ttl` (feature #49) | ✅ | +| Déviation TTL (`ttl_std`) | `ttl_std` (feature #50) | ✅ | +| IP ID à zéro → paquets forgés | `ip_id_zero_ratio` (feature #16) | ✅ | +| Variance bit DF | `ip_df_variance` (feature #48) | ✅ | +| Variance Total Length | `request_size_variance` (feature #17) | ✅ | +| Anomalous payload ratio (<60 ou >1500) | `anomalous_payload_ratio` (feature #33) | ✅ | + +**Verdict L3** : ✅ **100% conforme**. Tous les signaux L3 décrits dans la thèse sont implémentés. + +--- + +## 3. Couche L4 — TCP (Thèse §3.3) + +| Signal thèse | Feature implémentée | Statut | +|--------------|---------------------|--------| +| Window Size × Scale (`true_window_size`) | Composants disponibles (`tcp_window`, `tcp_scale`) mais `true_window_size` non calculé comme feature ML | ⚠️ PARTIEL | +| MSS (1460 = Ethernet, <1460 = tunnel) | `mss_mobile_mismatch` (feature #19) — utilise MSS mais uniquement pour détecter le mismatch mobile | ⚠️ PARTIEL | +| Options TCP (absence timestamp/scale) | `no_window_scale_ratio` (feature #51) | ✅ | +| `tcp_shared_count` (IPs partageant même fingerprint TCP) | Feature #8 | ✅ | +| Jitter SYN→ClientHello | `tcp_jitter_variance` (feature #41) | ✅ | +| `src_port_density` | Feature #24 | ✅ | +| Keepalive count | `max_keepalives` (feature #7) | ✅ | + +| Lacune | Impact | +|--------|--------| +| `true_window_size` = `window × 2^scale` non calculé comme feature indépendante | **MOYEN** — le signal est partiellement capturé par le TCP fingerprinting du dashboard (poids 20% window + 10% scale séparés) mais pas fusionné pour le ML | +| MSS comme feature ML directe (pas seulement mismatch mobile) | **MOYEN** — MSS brut permettrait de distinguer Ethernet/VPN/mobile au-delà du cas mobile | + +**Verdict L4** : ⚠️ **85% conforme**. Les signaux critiques sont présents, mais `true_window_size` et MSS brut manquent comme features ML directes. + +--- + +## 4. Couche L5 — TLS (Thèse §3.4) + +| Signal thèse | Feature implémentée | Statut | +|--------------|---------------------|--------| +| JA4 + rareté | `is_rare_ja4` (feature #27) | ✅ | +| JA3 diversité dans un JA4 stable | `ja3_diversity_ratio` (feature #45) | ✅ | +| ALPN absent | `is_alpn_missing` (feature #43) | ✅ | +| SNI ≠ Host | `sni_host_mismatch` (feature #44) | ✅ | +| TLS 1.2 ratio | `tls12_ratio` (feature #47) | ✅ | +| ALPN × HTTP version mismatch | `alpn_http_mismatch` (feature #42) | ✅ | + +**Verdict L5** : ✅ **100% conforme**. + +--- + +## 5. Couche L7 — HTTP (Thèse §3.5) + +| Signal thèse | Feature implémentée | Statut | +|--------------|---------------------|--------| +| HEAD requests | `head_ratio` (feature #34) | ✅ | +| HTTP/1.0 | `http10_ratio` (feature #37) | ✅ | +| Temporal entropy (Shannon) | `temporal_entropy` (feature #30) | ✅ | +| Accept-Language présent | `has_accept_language` (feature #11) | ✅ | +| Cookie présent | `has_cookie` (feature #12) | ✅ | +| Referer présent | `has_referer` (feature #13) | ✅ | +| Sec-Fetch absence | `sec_fetch_absence_rate` (feature #35) | ✅ | +| Generic Accept | `generic_accept_ratio` (feature #36) | ✅ | +| Missing Accept-Encoding | `missing_accept_enc_ratio` (feature #39) | ✅ | +| Client Hints (Sec-CH-UA) | `modern_browser_score` (feature #14) | ✅ | +| UA/Client-Hints mismatch | `ua_ch_mismatch` (feature #15) | ✅ | +| Header count | `header_count` (feature #10) | ✅ | +| Header order confidence | `header_order_confidence` (feature #28) | ✅ | + +**Verdict L7** : ✅ **100% conforme**. + +--- + +## 6. Détection ML semi-supervisée (Thèse §3.8) + +| Mécanisme thèse | Implémentation | Statut | +|-----------------|----------------|--------| +| Trifurcation (known bots → Anubis → IF) | `bot_detector.py:532-693` — exactement 3 flux | ✅ | +| Dual modèle (Complet L4+L7 / Applicatif L7-only) | 45 features (corrélé) / 37 features (non corrélé) | ✅ | +| Baseline humaine (`asn_label='human'`, min 500) | `bot_detector.py:247-290` | ✅ | +| Seuil adaptatif `min(P5, -0.05)` | `bot_detector.py:422-431` | ✅ | +| Niveaux de menace (CRITICAL/HIGH/MEDIUM/LOW) | `bot_detector.py:206-215` — seuils identiques à la thèse | ✅ | +| SHAP TreeExplainer top-5 | `bot_detector.py:458-490` | ✅ | +| DBSCAN campagnes | `bot_detector.py:496-516` | ✅ | +| Pénalité de récurrence | `bot_detector.py:576-579` | ✅ | +| Dérive conceptuelle (drift) | `bot_detector.py:329-353` | 🔄 DIVERGENT | + +### Divergence détection de dérive + +La thèse (§3.8) mentionne le test de Kolmogorov-Smirnov pour détecter la dérive. L'implémentation utilise un **Z-score sur la moyenne** (`|current_mean - trained_mean| / trained_std > 2.0`), pas un test KS. + +| Aspect | Thèse | Réalité | Impact | +|--------|-------|---------|--------| +| Méthode | Test KS (distribution complète) | Z-score (moyenne seule) | **MOYEN** — le Z-score détecte les shifts de moyenne mais manque les changements de forme de distribution (ex: bimodalité émergente) | +| Seuil | Non spécifié | 30% features driftées → retrain | Acceptable | + +**Verdict ML** : ⚠️ **95% conforme**. Seule la méthode de détection de dérive diverge. + +--- + +## 7. Taxonomie des features (Thèse §4) — Les 7 familles + +### Famille 1 : Volumétrie et vitesse +| Feature thèse | Implémentée | Statut | +|---------------|-------------|--------| +| `hits` | ✅ Feature #1 | ✅ | +| `hit_velocity` | ✅ Feature #2 | ✅ | +| `max_keepalives` | ✅ Feature #7 | ✅ | + +### Famille 2 : Diversité et exploration +| Feature thèse | Implémentée | Statut | +|---------------|-------------|--------| +| `fuzzing_index` | ✅ Feature #3 | ✅ | +| `path_diversity_ratio` | ✅ Feature #31 | ✅ | +| `url_depth_variance` | ✅ Feature #32 | ✅ | +| `distinct_ja4_count` | ✅ Feature #23 | ✅ | +| `distinct_header_orders` | ✅ Feature #29 | ✅ | +| `is_ua_rotating` | ✅ Feature #22 | ✅ | + +### Famille 3 : Authenticité protocolaire +| Feature thèse | Implémentée | Statut | +|---------------|-------------|--------| +| `modern_browser_score` | ✅ Feature #14 | ✅ | +| `ua_ch_mismatch` | ✅ Feature #15 | ✅ | +| `has_accept_language` | ✅ Feature #11 | ✅ | +| `has_cookie` | ✅ Feature #12 | ✅ | +| `has_referer` | ✅ Feature #13 | ✅ | +| `sec_fetch_absence_rate` | ✅ Feature #35 | ✅ | +| `generic_accept_ratio` | ✅ Feature #36 | ✅ | +| `missing_accept_enc_ratio` | ✅ Feature #39 | ✅ | +| `header_count` | ✅ Feature #10 | ✅ | +| `header_order_confidence` | ✅ Feature #28 | ✅ | + +### Famille 4 : Cohérence cross-layer +| Feature thèse | Implémentée | Statut | +|---------------|-------------|--------| +| `alpn_http_mismatch` | ✅ Feature #42 | ✅ | +| `is_alpn_missing` | ✅ Feature #43 | ✅ | +| `sni_host_mismatch` | ✅ Feature #44 | ✅ | +| `mss_mobile_mismatch` | ✅ Feature #19 | ✅ | +| `tls12_ratio` | ✅ Feature #47 | ✅ | +| `http10_ratio` | ✅ Feature #37 | ✅ | +| `tcp_jitter_variance` | ✅ Feature #41 | ✅ | +| `syn_timing_cv` | ✅ Feature #46 | ✅ | + +### Famille 5 : Empreinte réseau +| Feature thèse | Implémentée | Statut | +|---------------|-------------|--------| +| `ip_id_zero_ratio` | ✅ Feature #16 | ✅ | +| `request_size_variance` | ✅ Feature #17 | ✅ | +| `anomalous_payload_ratio` | ✅ Feature #33 | ✅ | +| `avg_ttl` | ✅ Feature #49 | ✅ | +| `ttl_std` | ✅ Feature #50 | ✅ | +| `no_window_scale_ratio` | ✅ Feature #51 | ✅ | +| `ip_df_variance` | ✅ Feature #48 | ✅ | +| `tcp_shared_count` | ✅ Feature #8 | ✅ | +| `port_exhaustion_ratio` | ✅ Feature #5 | ✅ | +| `src_port_density` | ✅ Feature #24 | ✅ | + +### Famille 6 : Comportement de navigation +| Feature thèse | Implémentée | Statut | +|---------------|-------------|--------| +| `asset_ratio` | ✅ Feature #20 | ✅ | +| `direct_access_ratio` | ✅ Feature #21 | ✅ | +| `orphan_ratio` | ✅ Feature #6 | ✅ | +| `temporal_entropy` | ✅ Feature #30 | ✅ | +| `post_ratio` | ✅ Feature #4 | ✅ | +| `head_ratio` | ✅ Feature #34 | ✅ | +| `http_scheme_ratio` | ✅ Feature #40 | ✅ | + +### Famille 7 : Intelligence contextuelle +| Feature thèse | Implémentée | Statut | +|---------------|-------------|--------| +| `ja4_asn_concentration` | ✅ Feature #25 | ✅ | +| `ja4_country_concentration` | ✅ Feature #26 | ✅ | +| `is_rare_ja4` | ✅ Feature #27 | ✅ | +| `header_order_shared_count` | ✅ Feature #9 | ✅ | +| `ja3_diversity_ratio` | ✅ Feature #45 | ✅ | +| `anubis_is_flagged` | ✅ Feature #38 | ✅ | +| `multiplexing_efficiency` | ✅ Feature #18 | ✅ | + +**Verdict §4** : ✅ **100% des 51 features** de la taxonomie sont implémentées. + +--- + +## 8. Techniques originales proposées (Thèse §5) — TOUTES ABSENTES + +C'est ici que la plateforme diverge massivement de l'état de l'art proposé. + +### 8.1 Path Sequence Entropy (§5.1) + +| Aspect | Thèse | Réalité | +|--------|-------|---------| +| Entropie de Markov ordre 1 sur séquences de chemins | Formule définie | ❌ NON IMPLÉMENTÉ | +| `groupArray(path)` dans l'agrégation | Requis | ❌ Absent — les agrégations ne stockent que `uniq_paths` (cardinalité), pas les séquences | +| UDF ClickHouse pour entropie de transition | Requis | ❌ Absent | + +**Impact** : La plateforme mesure la *diversité* des chemins (`path_diversity_ratio`) mais pas leur *ordre*. Un crawler parcourant `/a`, `/b`, `/c` en ordre alphabétique est indistinguable d'un humain visitant les mêmes pages de manière organique. Cette technique est **la plus impactante** des 8 car elle exploite un signal déjà partiellement capturé. + +**Prérequis d'implémentation** : +1. Ajouter `groupArray(path)(100)` dans `agg_host_ip_ja4_1h` (ou nouvelle table `agg_path_sequences_1h`) +2. UDF ClickHouse ou calcul Python dans `view_ai_features_1h` / `bot_detector.py` +3. Nouvelle feature : `path_transition_entropy` + +### 8.2 Graphe bipartite JA4×ASN (§5.2) + +| Aspect | Thèse | Réalité | +|--------|-------|---------| +| Graphe bipartite G = (JA4 ∪ ASN, E) | Formule définie | ❌ NON IMPLÉMENTÉ | +| Détection de communautés (Louvain) | Requis | ❌ Absent | +| `fleet_score` | Métrique définie | ❌ Absent | + +**Impact** : `ja4_asn_concentration` détecte quand un JA4 est concentré dans un ASN, mais ne détecte pas les **flottes distribuées** utilisant N JA4 × M ASN. Un botnet rotatif avec 10 JA4 sur 50 ASN est invisible avec les features actuelles car chaque paire (JA4, ASN) paraît banale individuellement. + +**Prérequis** : Bibliothèque Python `networkx` ou `igraph`, calcul batch dans `bot_detector.py` (pas en SQL — trop complexe pour ClickHouse). + +### 8.3 Request Cadence Fingerprint (§5.3) + +| Aspect | Thèse | Réalité | +|--------|-------|---------| +| CV des intervalles inter-requêtes | Formule définie | ❌ NON IMPLÉMENTÉ | +| Autocorrélation lag-1 | Formule définie | ❌ NON IMPLÉMENTÉ | +| Ratio burst/pause | Formule définie | ❌ NON IMPLÉMENTÉ | +| Loi de Benford sur Δt | Formule définie | ❌ NON IMPLÉMENTÉ | + +**Impact** : Actuellement, `hit_velocity` (moyenne) et `temporal_entropy` (distribution horaire) sont les seuls signaux temporels. Le *rythme* précis des requêtes est un signal extrêmement discriminant : un bot avec `sleep(1.0)` a un CV ≈ 0.01, un humain a un CV ≈ 2.0. C'est la **deuxième technique la plus impactante**. + +**Prérequis** : +1. `groupArray(time)(1000)` dans l'agrégation (ou table dédiée) +2. Calcul `arrayDifference()` + `arrayReduce('stddevPop', ...)` / `arrayReduce('avg', ...)` en SQL +3. 4 nouvelles features : `cadence_cv`, `cadence_autocorr_lag1`, `burst_pause_ratio`, `benford_deviation` + +### 8.4 Resource Dependency Tree (§5.4) + +| Aspect | Thèse | Réalité | +|--------|-------|---------| +| Cascade HTML→CSS→JS→Images | Formule définie | ❌ NON IMPLÉMENTÉ | +| Délai racine→première-feuille | Métrique définie | ❌ NON IMPLÉMENTÉ | +| Simultanéité des feuilles | Métrique définie | ❌ NON IMPLÉMENTÉ | + +**Impact** : `asset_ratio` détecte les bots qui ne chargent pas les assets, mais les scrapers modernes (Playwright) les chargent tous. Seul l'*ordre temporel* des chargements les trahit. Impact moyen car requiert des données intra-page-view qui ne sont pas dans les agrégations actuelles. + +**Prérequis** : Préserver l'ordre temporel intra-session dans les agrégations, distinguer HTML/CSS/JS/image par extension ou Accept header. + +### 8.5 Intra-Session JA4 Drift (§5.5) + +| Aspect | Thèse | Réalité | +|--------|-------|---------| +| Segmentation 10min + JA4 dominant | Formule définie | ❌ NON IMPLÉMENTÉ | +| Drift ratio (transitions / segments) | Formule définie | ❌ NON IMPLÉMENTÉ | +| Corrélation drift × changement de comportement | Décrit | ❌ NON IMPLÉMENTÉ | + +**Impact** : `distinct_ja4_count` compte les JA4 distincts mais ne capture pas le *moment* du changement. Un APT changeant d'outil en cours de session (reconnaissance GET → exploitation POST) serait détecté comme `distinct_ja4_count=2` sans contexte temporel. Impact modéré — nécessite des sessions longues (>10min) et des attaquants sophistiqués. + +**Prérequis** : `groupArray(ja4)` ordonnée par time dans l'agrégation, calcul de transitions en SQL ou Python. + +### 8.6 DNS Shadow Analysis (§5.6) + +| Aspect | Thèse | Réalité | +|--------|-------|---------| +| Capture DNS passive (UDP/53) | Requis | ❌ ja4sentinel ne capture PAS le DNS | +| `dns_shadow_ratio` | Formule définie | ❌ NON IMPLÉMENTÉ | + +**Impact** : Technique puissante (bots avec /etc/hosts ou DoH privé sont invisibles aux DNS locaux) mais nécessite une **extension majeure de ja4sentinel** pour capturer les paquets UDP/53. Coût d'implémentation élevé. + +**Prérequis** : Modifier `capture.go` pour capturer UDP/53, nouveau type de log réseau, nouveau pipeline de corrélation DNS↔HTTP. + +### 8.7 Compression Ratio Invariant (§5.7) + +| Aspect | Thèse | Réalité | +|--------|-------|---------| +| Ratio compression effectif par session | Requis | ❌ NON IMPLÉMENTÉ | +| Timing post-Brotli vs post-gzip | Requis | ❌ NON IMPLÉMENTÉ | + +**Impact** : Nécessite une **instrumentation côté serveur** (Apache) pour mesurer les tailles pré/post-compression. Le module `mod_reqin_log` ne capture pas ces métriques. Coût d'implémentation élevé. + +**Prérequis** : Modifier `mod_reqin_log.c` pour capturer `Content-Length` pré-compression et taille envoyée, propager dans le log JSON. + +### 8.8 Cross-Domain Session Linking (§5.8) + +| Aspect | Thèse | Réalité | +|--------|-------|---------| +| Host diversity par IP | Partiellement — `view_dashboard_entities` fait un UNION ALL par host | ⚠️ PARTIEL | +| Host sweep speed | Formule définie | ❌ NON IMPLÉMENTÉ | +| Host coverage uniformity | Formule définie | ❌ NON IMPLÉMENTÉ | +| Cross-domain path similarity (Jaccard) | Formule définie | ❌ NON IMPLÉMENTÉ | + +**Impact** : L'agrégation actuelle est par `(window, src_ip, ja4, host)` — un scan horizontal sur 10 vhosts apparaît comme 10 lignes distinctes sans score cross-domain. Le dashboard (`view_dashboard_entities`) calcule des statistiques par entité mais **pas de features ML cross-domain**. Impact significatif en environnement multi-host. + +**Prérequis** : +1. Nouvelle vue d'agrégation par `(window, src_ip)` sans décomposition par host +2. Features : `host_diversity`, `host_sweep_speed`, `host_coverage_uniformity` +3. Calcul Jaccard en Python (trop complexe pour SQL natif) + +--- + +## 9. Lacunes additionnelles identifiées (au-delà de la thèse) + +### 9.1 Boucle de feedback supervisée + +| Aspect | Thèse §6.2 | Réalité | Statut | +|--------|-------------|---------|--------| +| Les classifications SOC devraient être réinjectées dans l'entraînement | Mentionné comme piste | `audit_logs` + `/api/analysis/{ip}/classify` existent mais ne sont JAMAIS lus par `bot_detector.py` | ❌ ABSENT | + +**Impact CRITIQUE** : Le SOC classifie des IPs (vrai positif / faux positif), mais cette connaissance est perdue. Le modèle ne s'améliore jamais à partir du feedback humain. C'est le **manque le plus fondamental** de la plateforme. + +### 9.2 Détection brute-force + +| Aspect | Thèse §3.5 | Réalité | Statut | +|--------|-------------|---------|--------| +| Analyse comportementale HTTP riche | Décrit | `POST >= 10` en 24h seulement | ⚠️ MINIMALISTE | + +La détection brute-force ignore : les codes de réponse (401/403), les timing patterns, le ratio succès/échec, la diversité des credentials (estimable via query param diversity). + +### 9.3 DBSCAN non-adaptatif + +| Aspect | Thèse §3.8 | Réalité | Statut | +|--------|-------------|---------|--------| +| Détection de campagnes | DBSCAN décrit | `eps=0.5` hardcodé, `min_samples=3` | ⚠️ PARTIEL | + +**Impact** : `eps=0.5` est un choix arbitraire. Selon la distribution des données, cela peut fusionner des campagnes distinctes ou fragmenter une campagne en micro-clusters. L'état de l'art recommande HDBSCAN (adaptatif, sans eps) ou au minimum un tuning automatique via silhouette score. + +### 9.4 TCP fingerprinting statique + +| Aspect | Thèse §3.3 | Réalité | Statut | +|--------|-------------|---------|--------| +| p0f-style extensible | Référencé | 27 signatures codées en dur | ⚠️ PARTIEL | + +La base de signatures n'est pas extensible par configuration. Pas de mise à jour communautaire (contrairement à p0f qui a une base maintenue). + +### 9.5 Vérification active + +| Aspect | Thèse §2.5 | Réalité | Statut | +|--------|-------------|---------|--------| +| Challenges JS, CAPTCHA, browser fingerprinting | État de l'art décrit (BotD, etc.) | **ZÉRO** vérification active | ❌ ABSENT | + +La plateforme est **100% passive**. Aucun challenge n'est envoyé aux clients suspects. C'est un choix architectural (pas de modification du trafic), mais la thèse le mentionne comme état de l'art. + +--- + +## 10. Synthèse quantitative + +### Conformité par section + +| Section thèse | Items | Conformes | Partiels | Absents | Score | +|---------------|-------|-----------|----------|---------|-------| +| §3 Architecture | 8 | 8 | 0 | 0 | **100%** | +| §3.2 L3 IP | 6 | 6 | 0 | 0 | **100%** | +| §3.3 L4 TCP | 7 | 5 | 2 | 0 | **86%** | +| §3.4 L5 TLS | 6 | 6 | 0 | 0 | **100%** | +| §3.5 L7 HTTP | 13 | 13 | 0 | 0 | **100%** | +| §3.8 ML | 9 | 8 | 0 | 1 | **89%** | +| §4 Taxonomie (51 features) | 51 | 51 | 0 | 0 | **100%** | +| §5 Techniques originales | 8 | 0 | 1 | 7 | **6%** | + +### Score global + +| Catégorie | Score | +|-----------|-------| +| **Base existante** (§2-4) : features, pipeline, ML | **97%** conforme | +| **Techniques avancées** (§5) : les 8 innovations | **6%** conforme | +| **Score pondéré global** | **~72%** | + +--- + +## 11. Plan d'action par priorité d'impact + +### Priorité 1 — Impact maximal, coût modéré + +| # | Action | Technique thèse | Effort | Impact détection | +|---|--------|----------------|--------|-----------------| +| 1 | **Boucle de feedback supervisée** | §6.2 | Moyen | 🔴 CRITIQUE — sans cela le modèle ne s'améliore jamais | +| 2 | **Request Cadence Fingerprint** | §5.3 | Moyen | 🔴 CRITIQUE — discrimine immédiatement bots réguliers vs humains | +| 3 | **Path Sequence Entropy** | §5.1 | Moyen | 🟠 ÉLEVÉ — distingue crawlers systématiques vs navigation organique | +| 4 | **Cross-Domain Session Linking** (features ML) | §5.8 | Faible | 🟠 ÉLEVÉ — scan horizontal invisible actuellement | + +### Priorité 2 — Impact significatif, coût modéré + +| # | Action | Technique thèse | Effort | Impact détection | +|---|--------|----------------|--------|-----------------| +| 5 | **HDBSCAN** remplacer DBSCAN | §3.8 | Faible | 🟡 MOYEN — meilleure détection de campagnes | +| 6 | **Drift KS** remplacer Z-score | §3.8 | Faible | 🟡 MOYEN — détection de dérive plus robuste | +| 7 | **Bipartite Fleet Graph** | §5.2 | Élevé | 🟡 MOYEN — botnets distribués à JA4/ASN rotatifs | +| 8 | **Intra-Session JA4 Drift** | §5.5 | Moyen | 🟡 MOYEN — APT multi-phases | +| 9 | **true_window_size** + MSS brut comme features | §3.3 | Faible | 🟡 MOYEN — meilleur fingerprinting L4 | + +### Priorité 3 — Impact modéré, coût élevé + +| # | Action | Technique thèse | Effort | Impact détection | +|---|--------|----------------|--------|-----------------| +| 10 | **Resource Dependency Tree** | §5.4 | Élevé | 🟡 MOYEN — Playwright/headless | +| 11 | **TCP fingerprint extensible** (p0f-style) | §3.3 | Moyen | 🟢 FAIBLE — 27 signatures couvrent le gros | +| 12 | **Brute-force avancée** (codes réponse, timing) | §3.5 | Moyen | 🟡 MOYEN | + +### Priorité 4 — Nécessite modifications architecturales + +| # | Action | Technique thèse | Effort | Impact détection | +|---|--------|----------------|--------|-----------------| +| 13 | **DNS Shadow Analysis** | §5.6 | Très élevé | 🟠 ÉLEVÉ — requiert extension sentinel UDP/53 | +| 14 | **Compression Ratio Invariant** | §5.7 | Très élevé | 🟡 MOYEN — requiert modification mod_reqin_log | +| 15 | **Vérification active** (JS challenges) | §2.5 | Très élevé | 🟠 ÉLEVÉ — changement de paradigme | + +--- + +## 12. Conclusion + +La plateforme ja4-platform implémente **fidèlement 97% de la base** décrite dans la thèse : l'architecture multi-couches, les 51 features des 7 familles, le pipeline ML semi-supervisé avec trifurcation, SHAP, DBSCAN, et récurrence. C'est un acquis solide. + +**Le fossé majeur est dans les techniques avancées** (§5 de la thèse) : aucune des 8 techniques originales n'est implémentée. Ces techniques exploitent des signaux **temporels** (séquences de chemins, cadence inter-requêtes), **structurels** (graphes JA4×ASN), et **cross-domain** (sessions multi-host) qui sont les angles morts de la détection actuelle. + +**La lacune la plus critique** n'est pas une technique spécifique mais l'absence de **boucle de feedback** : les classifications SOC sont stockées mais jamais réinjectées dans l'entraînement, empêchant toute amélioration itérative du modèle. + +**Pour atteindre l'état de l'art sans concession**, les actions 1 à 4 du plan (feedback loop, cadence fingerprint, path entropy, cross-domain linking) couvrent ~80% de l'écart restant avec un coût d'implémentation modéré.