Qu'est-ce que l'empreinte digitale HTTP/2 ?
Identification par empreinte digitale HTTP/2 Il s'agit d'une technique de détection au niveau de la couche de connexion qui identifie un client en analysant la manière dont il construit les trames du protocole HTTP/2, et pas seulement le contenu de la requête. Les véritables navigateurs envoient un schéma spécifique et cohérent de paramètres SETTINGS, de valeurs WINDOW_UPDATE et d'ordre des pseudo-en-têtes. La plupart des bibliothèques HTTP et des robots ne reproduisent pas ce modèle, ce qui permet de les détecter avant même qu’ils n’envoient la moindre URL.
Comment fonctionne l'empreinte digitale HTTP/2 ?
Lorsqu'un client établit une connexion HTTP/2, il envoie plusieurs trames de bas niveau avant toute donnée d'application. Les chercheurs d’Akamai ont démontré que les serveurs peuvent identifier un client à partir de quatre signaux observables : les paramètres de la trame SETTINGS (sous forme de paires ID:valeur classées par ordre), l’incrément WINDOW_UPDATE, les données de la trame PRIORITY et l’ordre des pseudo-en-têtes (:method, :authority, :scheme, :path) (Livre blanc d'Akamai - Identification passive des clients HTTP/2, Black Hat EU 2017, 2017).
Tous les principaux navigateurs (Chrome, Firefox, Safari) génèrent une empreinte numérique cohérente et connue. Les clients HTTP « bruts » tels que curl ou la bibliothèque Python requests Les bibliothèques génèrent une empreinte différente, car elles ne reproduisent pas le processus d'initialisation HTTP/2 au niveau du navigateur. Les systèmes de détection des bots créent des tables de correspondance répertoriant les empreintes de navigateurs connues et signalent tout ce qui ne correspond pas.
Un environnement de navigation complet, capable d'exécuter du JavaScript et d'afficher des pages, génère par défaut une empreinte HTTP/2 authentique. C'est pourquoi une approche basée sur l'affichage passe ce contrôle, contrairement à un simple client HTTP ou à un proxy basique.
Foire aux questions
Les serveurs analysent la trame SETTINGS (paramètres spécifiques et leur ordre), l'incrément WINDOW_UPDATE, les données PRIORITY, ainsi que l'ordre des pseudo-en-têtes (:method, :authority, :scheme, :path). Ensemble, ces signaux constituent une empreinte quasi unique pour chaque type de client HTTP.
L'empreinte TLS (JA3/JA4) analyse la négociation TLS avant tout échange de données HTTP. L'empreinte HTTP/2 intervient à un niveau supérieur, une fois le tunnel crypté ouvert, en analysant la structure des premières trames HTTP/2. Ces deux techniques sont souvent combinées pour permettre une détection des bots à plusieurs niveaux.
Un proxy se contente d'acheminer le trafic ; il ne modifie pas le client HTTP à l'origine des trames. Si le logiciel situé derrière le proxy envoie des trames HTTP/2 qui ne proviennent pas d'un navigateur, l'empreinte numérique sera tout de même signalée. Seul un véritable environnement de navigateur génère nativement la structure de trame attendue.