{% extends "base.html" %}
{% block title %}JA4 SOC — Browser Signatures{% endblock %}
{% block page_title %}
Browser Signature Detection
Analyse croisée du fingerprint HTTP/2 (SETTINGS, WINDOW_UPDATE, pseudo-headers)
et du JA4 TLS pour identifier les vrais navigateurs et détecter les imposteurs. TLS↔H2 mismatch : sessions où le JA4 identifie une famille
(ex: Chromium) mais les SETTINGS H2 appartiennent à une autre (ex: Firefox).
Signal fort d'un outil qui émule un TLS de navigateur sans répliquer le H2. Source : view_ai_features_1h (dict_browser_h2, h2_window_*)Détection passive des navigateurs (§4)
browser_matcher score chaque session sur 7 dimensions :
H2 SETTINGS (0.30), WINDOW_UPDATE (0.15),
pseudo-headers (0.15), H2 PRIORITY (0.10), HTTP headers (0.15),
structure TLS (0.10), dictionnaire JA4 (0.05).
Un mismatch TLS↔H2 est détecté quand le JA4 (couche TLS)
identifie Chrome mais le WINDOW_UPDATE H2 est celui de Firefox (ou vice-versa) — signature
d'un outil qui copie le TLS sans répliquer fidèlement le H2.
En mode DUAL_MODE (défaut), les décisions sont journalisées sans modifier le bypass —
activer BROWSER_MATCHER_REPLACE=true pour basculer.
Correspondance du fingerprint SETTINGS H2 complet (format Akamai)
avec le dictionnaire dict_browser_h2. Une correspondance
exacte identifie Chrome, Firefox, Safari ou Edge avec un haut degré
de certitude.
Source : view_ai_features_1h.h2_dict_family
La valeur du frame WINDOW_UPDATE est l'empreinte H2 la plus fiable car chaque navigateur utilise une valeur distincte et constante :
Source : view_ai_features_1h.h2_window_*
Proportion de sessions dont la famille JA4 (TLS) contredit la famille H2. Un taux élevé pour "Chromium" indique des outils qui imitent Chrome TLS sans reproduire le comportement H2.
Exemples de mismatch :
Source : view_ai_features_1h.tls_h2_family_mismatch
Sessions dont le JA4 (TLS) et les SETTINGS H2 identifient des familles différentes — signal fort d'un outil qui émule le TLS d'un navigateur mais trahit son origine via le H2.
Action : Investiguer l'IP, vérifier le JA4 dans la page Détections, ou ajouter à la liste de blocage.
| IP | JA4 famille | H2 famille | WU value | Pseudo-order | Hits | Cohérence |
|---|---|---|---|---|---|---|
| Chargement… | ||||||
L'ordre des pseudo-headers (:method, :authority,
:scheme, :path) est spécifique à chaque navigateur :
Un ordre non répertorié indique un outil ou une version rare.
Source : view_ai_features_1h (h2_order_chromesafari, h2_order_firefox)
m,a,s,pm,p,s,abrowser_h2_signaturesSource des fingerprints HTTP/2 (format Akamai) utilisés par
dict_browser_h2. Le dictionnaire est rechargé automatiquement
après chaque ajout ou suppression.
Format : SETTINGS|WINDOW_UPDATE|PRIORITY|PSEUDO_ORDER
Exemple Chrome : 1:65536,2:0,4:6291456,6:262144|15663105|0|m,a,s,p
Source : ja4_processing.browser_h2_signatures (migration 06)
| Fingerprint H2 (format Akamai) | Famille | Confidence | Notes | Action |
|---|---|---|---|---|
| Chargement… | ||||
browser_matcher.py
Le browser_matcher calcule un score 0–1 par famille en agrégeant 7 dimensions.
Ces règles sont définies dans bot_detector/browser_signatures.py.
Modification : éditer le fichier Python et redéployer bot-detector
| Dimension | Poids | Chrome | Firefox | Safari |
|---|---|---|---|---|
| H2 SETTINGS exact | 0.30 | 1:65536,2:0,4:6291456,6:262144 | 1:65536,4:131072,5:16384 | 1:4096,3:100,4:65535 |
| H2 WINDOW_UPDATE | 0.15 | 15 663 105 | 12 517 377 | 10 485 760 |
| Pseudo-header order | 0.15 | m,a,s,p | m,p,s,a | m,a,s,p |
| HTTP headers cohérence | 0.15 | Sec-CH-UA ✓ · Sec-Fetch ✓ | Sec-CH-UA ✗ · Sec-Fetch ✓ | Sec-CH-UA ✗ · Sec-Fetch ✗ |
| H2 PRIORITY frames | 0.10 | absent | absent | absent |
| TLS structure (JA4 famille) | 0.10 | Chromium · Chrome · Edge + GREASE | Firefox · pas de GREASE | Safari · pas de GREASE |
| JA4 dict lookup | 0.05 | dict_browser_ja4 — correspondance fingerprint TLS exact | ||
| Seuil de bypass ML | — | ≥ 0.72 | ≥ 0.68 | ≥ 0.68 |
Mode actuel : DUAL_MODE — le matcher journalise les décisions sans modifier le scoring ML.
Activer le bypass : variable d'environnement BROWSER_MATCHER_REPLACE=true dans bot-detector.