Files
ja4-platform/shared/clickhouse
toto e52cdcc01f feat(bot-detector): Browser Signature Detection engine (parallel mode)
Étape A — browser_signatures.py
  Données pures : BROWSER_SIGNATURES (Chrome/Firefox/Safari), NON_BROWSER_SIGNATURES
  (curl/httpx/go), BROWSER_THRESHOLDS, DIMENSION_WEIGHTS. Valeurs H2 extraites
  des captures réelles (format Akamai avec virgules, non semicolons).

Étape B — browser_matcher.py
  Moteur vectorisé 7 dimensions (H2 SETTINGS 0.30, WINDOW_UPDATE 0.15,
  pseudo-header order 0.15, H2 PRIORITY 0.10, HTTP headers 0.15, TLS 0.10,
  JA4 dict 0.05). run_browser_matcher(df) ajoute bm_family/bm_score/bm_decision.
  CDN edge case : dimension H2 neutralisée (0.5) si has_xff=1.
  BROWSER_MATCHER_REPLACE=false par défaut (mode DUAL_MODE logging uniquement).

Étape C — 06_browser_signature_detection.sql (migration)
  Crée browser_h2_signatures (table MergeTree avec 12 fingerprints de référence).
  Recrée dict_browser_h2 depuis la table avec champ confidence (remplace CSV).

Étape D — 07_ai_features_view.sql
  +h2_wu_val dans le JOIN http_logs, +h2_window_update_value, +h2_dict_family,
  +h2_dict_confidence, +h2_window_{chrome,firefox,safari,absent},
  +h2_order_{chromesafari,firefox}, +h2_priority_present, +h2_pseudo_ord_raw,
  +tls_h2_family_mismatch (détection incohérence famille JA4 vs famille H2).

Étape E — preprocessing.py + pipeline.py
  preprocessing.py: appelle run_browser_matcher() après compute_browser_axes(),
  ajoute 7 nouvelles features binaires H2 à FEATURES et binary_features.
  pipeline.py: appelle log_dual_mode_comparison() après la classification A9.
  BROWSER_MATCHER_REPLACE=true active le remplacement du bypass.

Étape F — test_browser_matcher.py
  8 tests : Chrome/Firefox/Safari full match, curl rejeté, httpcloak partiel,
  TLS↔H2 mismatch, CDN proxy neutralisation, go net/http rejeté.
  Tous 8 PASSED (+ 36 tests existants inchangés).

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-04-10 13:52:57 +02:00
..

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és
  • ja4_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_ME dans 03_anubis_tables.sql

Notes

  • Toutes les migrations sont idempotentes (IF NOT EXISTS / CREATE OR REPLACE).
  • 04_mv_http_logs.sql est la version canonique de la vue matérialisée.
  • Les références inter-bases existent : les MVs dans ja4_processing lisent depuis ja4_logs.http_logs.
  • Documentation complète : docs/database/schema.md et docs/database/migrations.md.