Étape 2 — Fingerprinting HTTP/2 dans le pipeline ML : - Ajout du dictionnaire dict_browser_h2 (11 familles de navigateurs) dans 05_aggregation_tables.sql - Ajout du CTE h2_agg et 4 features HTTP/2 dans 07_ai_features_view.sql : h2_settings_known, h2_pseudo_order_match, h2_ja4_coherence, h2_settings_rare - Calcul du fingerprint_coherence_score (5 axes pondérés) dans la vue - Ajout du 6e axe axis_h2_coherence dans browser.py (poids rééquilibrés) - browser_h2.csv : 11 fingerprints Akamai → famille navigateur Étape 3 — Pré-filtre de cohérence sur la baseline humaine : - pipeline.py exclut les sessions avec fingerprint_coherence_score < seuil de la baseline d'entraînement - FINGERPRINT_COHERENCE_THRESHOLD configurable via env (défaut 0.25) - Log des sessions exclues pour analyse SOC Étape 4 — Détection de drift améliorée : - scoring.py : passage de 5 à 9 quantiles (p5…p95) - Ajout de la divergence KL en complément du test KS - Détection de drift adversarial (≥80% des features dérivent dans la même direction) - Split temporel strict pour la validation Étape 5 — Graphe bipartite JA4×ASN (§5.2) : - fleet.py : détection de flottes via NetworkX + Louvain (imports optionnels) - enrich_with_fleet_score() : ajout fleet_score + fleet_campaign_flag au DataFrame - cycle.py : appel après preprocess_df avec log du nombre de sessions en flotte - SQL migration 05_fleet_metrics_tables.sql : table fleet_detections (TTL 7j) - Dashboard : /fleet + /api/fleet (communautés détectées) + template fleet.html Étape 6 — Cross-domain Jaccard §5.8 : - 12_thesis_features.sql : CTE jaccard_paths → cross_domain_path_similarity - Signal : même chemins (/admin, /wp-login) sur plusieurs hosts = scanner Étape 7 — ExIFFI + erreurs AE par feature : - scoring.py : compute_exiffi_importance() par permutation, compute_ae_feature_errors() - pipeline.py : calcul ExIFFI sur X_test, mapping index → dict pour anomalies - build_reason() enrichi avec exiffi_top quand SHAP inactif Étape 8 — Méta-learner pour la pondération de l'ensemble : - scoring.py : classe MetaLearner (LogisticRegression, fallback poids fixes <1000 labels) - Collecte des labels depuis le cycle courant (known_bots, légitimes, Anubis) - pipeline.py : remplacement des poids fixes par MetaLearner.predict() Étape 9 — Métriques de performance et monitoring : - metrics.py : record_cycle_metrics() — taux anomalie, drift, corrélation, latence - SQL migration 05_fleet_metrics_tables.sql : table ml_performance_metrics (TTL 90j) - Dashboard : /health + /api/health + template health.html - cycle.py : appel record_cycle_metrics en fin de cycle (Complet + Applicatif) Tests : 36/36 bot-detector tests passent Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Schéma ClickHouse — ja4-platform
Ce répertoire contient les 13 fichiers SQL définissant le schéma complet de la plateforme. Le schéma utilise un patron double-base :
ja4_logs— ingestion brute et logs HTTP parsésja4_processing— agrégations, ML, vues, dictionnaires, audit
Les noms de base sont configurables via variables d'environnement
(CLICKHOUSE_DB_LOGS, CLICKHOUSE_DB_PROCESSING).
Fichiers SQL
Appliquer dans l'ordre numérique :
| Fichier | Contenu |
|---|---|
00_database.sql |
Création des bases ja4_logs et ja4_processing |
01_raw_tables.sql |
Table d'ingestion http_logs_raw |
02_dictionaries.sql |
Dictionnaire dict_iplocate_asn, tables ref_bot_networks, bot_ip, bot_ja4 |
03_anubis_tables.sql |
Tables de règles Anubis (anubis_ip_rules, anubis_asn_rules) et dictionnaires (dict_anubis_ip, dict_anubis_asn) |
04_mv_http_logs.sql |
Table http_logs + vue matérialisée mv_http_logs (parse JSON + enrichissement Anubis IP→ASN) |
05_aggregation_tables.sql |
Dictionnaires de réputation (dict_bot_ip, dict_bot_ja4, dict_browser_ja4, dict_asn_reputation) + tables d'agrégation + MVs |
06_ml_tables.sql |
Tables ML (ml_detected_anomalies, ml_all_scores) + vue view_ip_recurrence |
07_ai_features_view.sql |
Vue view_ai_features_1h (~65+ features ML) |
08_users.sql |
Utilisateurs data_writer et analyst avec permissions |
09_audit_table.sql |
Table audit_logs pour le journal d'audit SOC |
10_perf_indexes.sql |
Index secondaires et projections de performance |
11_views.sql |
Vues dashboard (entités, user-agents, force brute, rotation JA4, cascade) |
12_thesis_features.sql |
Tables d'agrégation thèse (§5) + vue view_thesis_features_1h |
Déploiement
Méthode recommandée
Utiliser deploy_schema.sh qui applique les 13 fichiers avec substitution
automatique des noms de base :
./deploy_schema.sh
# Ou avec configuration personnalisée :
CLICKHOUSE_DB_LOGS=my_logs \
CLICKHOUSE_DB_PROCESSING=my_proc \
CLICKHOUSE_HOST=clickhouse-server \
CLICKHOUSE_PASSWORD='secret' \
./deploy_schema.sh
Application manuelle
for f in 0*.sql 1*.sql; do
clickhouse-client --multiquery < "$f"
done
Prérequis
- ClickHouse 24.8+ (support
deduplicate_merge_projection_mode) - Fichiers CSV dans
/var/lib/clickhouse/user_files/:iplocate-ip-to-asn.csv— correspondance IP→ASN (~714K entrées)bot_ip.csv— préfixes IP de bots connus (~3,5K CIDR)bot_ja4.csv— empreintes JA4 de bots (~31 entrées)browser_ja4.csv— empreintes JA4 de navigateurs (~1,2K entrées)asn_reputation.csv— labels de réputation ASN (~82K entrées)
- Mots de passe Anubis : remplacer
CHANGE_MEdans03_anubis_tables.sql
Notes
- Toutes les migrations sont idempotentes (
IF NOT EXISTS/CREATE OR REPLACE). 04_mv_http_logs.sqlest la version canonique de la vue matérialisée.- Les références inter-bases existent : les MVs dans
ja4_processinglisent depuisja4_logs.http_logs. - Documentation complète :
docs/database/schema.mdetdocs/database/migrations.md.