Saltar al contenido principal
fr/blog/obscura/research/uncontrollable/index/

obscura/research/uncontrollable/index

17 min de lecture

Une Analyse Technique des Signaux Matériels, Comportementaux et Inhérents au Navigateur Qui Ne Peuvent Pas Être Usurpés au Niveau Réseau

Recherche Obscura — Juillet 2026


Résumé

Les outils de confidentialité au niveau réseau comme Obscura peuvent efficacement usurper les en-têtes HTTP, les empreintes TLS, les requêtes DNS et les propriétés navigateur accessibles via JavaScript. Cependant, une classe significative de vecteurs d'empreinte opère en dessous, au-dessus, ou en dehors de la portée du proxy. Ces vecteurs dérivent de caractéristiques physiques du matériel, de détails d'implémentation du navigateur, de modèles de comportement utilisateur et de l'asymétrie inhérente à la course aux armements de la détection.

Cet article catalogue ces vecteurs incontrôlables, analyse leurs forces et faiblesses du point de vue d'un attaquant, et propose des stratégies d'atténuation — à la fois dans le périmètre d'Obscura et via des outils complémentaires.


1. Introduction

1.1 Le Fossé du Proxy

Obscura opère aux couches OSI 3-7 (réseau à application). Les signaux qui proviennent de :

  • Couches 0-2 (matériel physique, GPU, puce audio, CPU)
  • Couche 7+ (moteur de rendu navigateur, comportement utilisateur)
  • Incohérences inter-couches (décalages entre signaux usurpés et non usurpés)

...sont hors du contrôle direct du proxy.

1.2 Classification

Catégorie Vecteurs Cause Racine Levier du Proxy
GPU/Matériel Rendu Canvas, WebGL, WebGPU Pipeline de rendu physique Aucun
Audio Matériel AudioContext, latence DSP audio, pilotes Aucun
CPU/Plateforme Précision mathématique, fonctionnalités Wasm, SIMD Microarchitecture Aucun
Inhérent au Navigateur Support de fonctionnalités, CSS média, bugs, bizarreries Implémentation du moteur Aucun (blocage DNS uniquement)
Comportemental Souris, frappes, défilement, timing Utilisateur Aucun
Résiduel Réseau TCP/IP, dérive d'horloge, RTT Pile OS/conteneur Partiel
Inter-Couches Incohérence de profil, heuristiques de détection Logique Indirect

1.3 Le Problème de l'Asymétrie

L'asymétrie fondamentale : le service d'empreinte n'a besoin que d'un seul vecteur réussi pour identifier ou corréler un utilisateur. Le défenseur doit bloquer tous les vecteurs.

Cet article ne prétend pas résoudre cette asymétrie. Il documente le risque résiduel.


2. Empreinte du Pipeline GPU & Rendu

Document complet : gpu-rendering.md

2.1 Pourquoi Ça Marche

Le pipeline de rendu GPU est physiquement déterministe — la même entrée produit toujours la même sortie sur le même matériel. Les différences proviennent de :

  • Microarchitecture GPU (nombre d'ALU, unités de rastérisation, TMU, ROP)
  • Version du pilote et optimisations du compilateur
  • Différences de précision en virgule flottante dans les shaders
  • Algorithmes d'anti-aliasing
  • Ordre de rendu subpixel (RVB vs BVR)
  • Matrices de conversion d'espace colorimétrique

2.2 Vecteurs

Vecteur Entropie Détectable si Bloqué
Hachage Canvas toDataURL() ~5-7 bits Oui
WEBGL_debug_renderer_info.UNMASKED_RENDERER ~20 bits (modèle GPU exact) Oui
Hachage de rendu de scène WebGL ~10-15 bits Oui
adapterInfo WebGPU (vendor, arch, device, driver) ~25+ bits Oui
Limites WebGPU (50+ capacités numériques) ~30+ bits Oui
Liste d'extensions WebGL ~8-12 bits Oui

2.3 Avantages de l'Attaquant

  • Aucune dépendance réseau : Le rendu est local, aucune requête nécessaire
  • Verrouillé au matériel : Ne peut pas être changé sans matériel différent
  • Multi-navigateur : Le même GPU produit des empreintes similaires sur Chrome/Firefox/Safari
  • Passif : L'utilisateur ne peut pas savoir qu'il est empreinté

2.4 Faiblesses (du point de vue de l'attaquant)

  • Le blocage est facile pour l'utilisateur : Les drapeaux Firefox privacy.resistFingerprinting et CanvasBlocker fonctionnent
  • Tor Browser le vainc : Le rendu logiciel (SwiftShader) normalise toute la sortie
  • Les mises à jour de pilotes changent l'empreinte : Instabilité périodique
  • L'injection de bruit fonctionne : L'injection de pixels aléatoires de CanvasBlocker brise la répétabilité
  • La détection statistique de la manipulation est imparfaite : Les attaquants ne peuvent que deviner si du bruit est injecté

2.5 Atténuations Proposées

Atténuation Efficacité Impact Implémentation
Bloquer WebGL/WebGPU entièrement Élevée Casse le contenu 3D Injection JS
Injection de bruit Canvas Moyenne-Élevée Détectable Injection JS (algorithme CanvasBlocker)
Bruit aléatoire cohérent par session Moyenne Corrélation de session possible Injection JS
Bloquer WEBGL_debug_renderer_info Moyenne Bloque la fuite du modèle GPU Injection JS
Rendu GPU logiciel (SwiftShader) Très Élevée Énorme perte de performance Côté client uniquement (Tor Browser)
Arrondir les dimensions canvas à une grille Faible Réduit l'entropie Injection JS

Meilleur qu'Obscura puisse faire : Blocage + injection de bruit via JS. Ne peut pas égaler le rendu logiciel de Tor Browser.


3. Empreinte Matérielle Audio

Document complet : audio-hardware.md

3.1 Pourquoi Ça Marche

Le traitement audio implique :

  • Implémentation du pilote audio (ALSA, PulseAudio, PipeWire, CoreAudio, WASAPI)
  • Caractéristiques du DAC/ADC matériel
  • Algorithmes de conversion de taux d'échantillonnage
  • Comportement de la compression dynamique
  • Gestion des tampons audio

Ceux-ci produisent des différences mesurables et cohérentes dans la sortie de l'oscillateur et le comportement du compresseur.

3.2 Vecteurs

Vecteur Entropie Notes
AudioContext getChannelData sur sortie DynamicsCompressor ~8-12 bits Le plus courant
Latence de base AudioContext ~4-6 bits Dépendant du matériel
Support du taux d'échantillonnage ~2-3 bits Varie selon le matériel
Nombre max de canaux ~1-2 bits Stéréo vs surround

3.3 Avantages de l'Attaquant

  • Cohérent entre sessions : Même matériel — même empreinte audio
  • Difficile de détecter la manipulation : Le site peut comparer plusieurs lectures
  • Fonctionne en arrière-plan : Aucune interaction utilisateur nécessaire

3.4 Faiblesses

  • Le comportement DynamicsCompressor change selon les versions du navigateur
  • Peut être bloqué entièrement (Firefox resistFingerprinting bloque AudioContext)
  • Aplatir la sortie est détectable mais ne peut pas être distingué d'un matériel réel avec un comportement identique

3.5 Atténuations Proposées

Atténuation Efficacité Impact
Bloquer AudioContext entièrement Élevée Casse les applications audio
Aplatir la sortie du compresseur (retourner tout -100dB) Moyenne Modèle détectable
Injecter du bruit périodique dans le tampon de sortie Moyenne-Élevée Complexe, détectable
Surcharger le taux d'échantillonnage à une valeur fixe Faible Un seul signal

Meilleur qu'Obscura puisse faire : Bloquer AudioContext via injection JS.


4. Empreinte CPU & Plateforme

Document complet : cpu-platform.md

4.1 Pourquoi Ça Marche

Le CPU est le composant système le plus fondamental. Son comportement est déterministe et mesurable depuis JavaScript :

  • Précision arithmétique en virgule flottante (la conformité IEEE 754 varie légèrement)
  • Résolution de performance.now() (dépend du temporisateur matériel, OS)
  • Détection de fonctionnalités basée sur Wasm (SIMD, AES-NI, AVX, BMI1/BMI2, POPCNT)
  • Canaux auxiliaires de temporisation de cache (bien qu'atténués dans les navigateurs)
  • Vitesse d'exécution WebAssembly (benchmark de performance relative)

4.2 Vecteurs

Vecteur Entropie Notes
Empreinte mathématique (précision FPU) ~4-6 bits Subtile, étonnamment identifiable
Détection de fonctionnalités Wasm ~8-12 bits Capacités CPU
Résolution de performance.now() ~2-3 bits Dépendant OS/CPU
navigator.hardwareConcurrency ~3-4 bits Nombre de cœurs (Usurpable via JS)

4.3 Avantages de l'Attaquant

  • Verrouillé au matériel : Les fonctionnalités CPU ne changent pas
  • Wasm est rapide : Détection binaire en <1ms
  • Ne peut pas être usurpé au niveau proxy : Wasm s'exécute localement

4.4 Faiblesses

  • La précision de performance.now() réduite dans les navigateurs (1ms → 100μs → 5μs → va-et-vient)
  • La détection de fonctionnalités Wasm dépend de l'exposition par le navigateur
  • hardwareConcurrency est usurpable via JS — déjà listé comme contrôlable
  • L'empreinte mathématique a une très faible entropie — seulement utile en combinaison

4.5 Atténuations Proposées

Atténuation Efficacité Impact
Réduire la précision de performance.now() via JS Faible Les attaquants utilisent le timing Wasm
Bloquer Wasm entièrement Élevée Casse de nombreux sites
Surcharger hardwareConcurrency Élevée Trivial via injection JS
Accepter l'empreinte mathématique FPU Aucun Entropie trop faible seule

Meilleur qu'Obscura puisse faire : Accepter — ou bloquer Wasm (radical).


5. Fonctionnalités Inhérentes du Navigateur & Bizarreries d'Implémentation

Document complet : browser-features-quirks.md

5.1 Pourquoi Ça Marche

Chaque moteur de navigateur (Blink, Gecko, WebKit) a un ensemble unique de :

  • API Web supportées (100+ fonctionnalités binaires)
  • Support de propriétés CSS
  • Bugs et bizarreries d'implémentation
  • Paramètres par défaut (taille de police, largeur de barre de défilement, style de formulaire)
  • Comportement de rendu Unicode
  • Version de support des emojis

5.2 Vecteurs

Vecteur Entropie Notes
Vecteur de support de fonctionnalités (~100 fonctionnalités) ~10-15 bits Hautement corrélé
Bizarreries de rendu CSS ~5-8 bits Spécifique au moteur
Rendu Unicode/emoji ~3-5 bits Dépendant OS+navigateur
Largeur de barre de défilement ~2-3 bits Dépendant OS
Métriques de police par défaut ~4-6 bits Dépendant OS+navigateur

5.3 Avantages de l'Attaquant

  • Ne peut pas être changé : Ce sont des caractéristiques inhérentes au navigateur/OS
  • Aucune autorisation nécessaire : Aucun consentement utilisateur requis
  • Difficile à bloquer : Bloquer des fonctionnalités change le vecteur de fonctionnalités lui-même

5.4 Faiblesses

  • Identifie principalement la famille + version du navigateur, pas les utilisateurs individuels
  • Faible entropie au sein d'une même version de navigateur (tous les utilisateurs Chrome 120 se ressemblent)
  • Les scripts de détection de fonctionnalités peuvent être bloqués par DNS avant leur chargement

5.5 Atténuations Proposées

Atténuation Efficacité Impact
Bloquer DNS des domaines de scripts d'empreinte Élevée Arrête entièrement l'énumération des fonctionnalités
Accepter — faible entropie individuelle Passif Peut encore corréler avec d'autres signaux
Patcher le navigateur (pas au niveau proxy) Très Élevée Nécessite une construction navigateur personnalisée

Meilleur qu'Obscura puisse faire : Blocage DNS des domaines d'empreinte connus.


6. Biométrie Comportementale

Document complet : behavioral-biometrics.md

6.1 Pourquoi Ça Marche

Les modèles de comportement utilisateur sont hautement individuels :

  • Trajectoires de mouvement de souris (vitesse, accélération, gigue)
  • Dynamique de frappe (temps de maintien des touches, intervalles inter-touches, motifs d'erreur)
  • Modèles de défilement (vitesse, accélération, comportement de pause)
  • Gestes tactiles (sur mobile : angle de balayage, pression, vitesse)
  • Modèles de lecture (rythme défilement-puis-pause)
  • Chronométrage et préférences de position de clic/appui

6.2 Vecteurs

Vecteur Entropie Notes
Dynamique de frappe ~15-25 bits Hautement individuelle
Mouvement de souris ~10-20 bits Moins stable dans le temps
Comportement de défilement ~8-12 bits Dépendant du contenu
Gestes tactiles ~12-18 bits Spécifique au mobile

6.3 Avantages de l'Attaquant

  • Authentification continue : Pas un instantané, mais continu
  • Difficile à falsifier : Imiter le comportement d'un autre utilisateur est extrêmement difficile
  • Aucune restriction d'API JS : Tout est lisible depuis les écouteurs d'événements JS

6.4 Faiblesses

  • Nécessite une interaction utilisateur significative : Ne peut pas empreinter passivement
  • Haute variance : Le comportement change avec l'humeur, la fatigue, le contexte
  • Temps de collecte long : Nécessite des minutes d'interaction
  • Apprentissage machine requis : Le simple hachage ne fonctionne pas
  • Facilement perturbé : Tout script qui interfère avec le timing le casse

6.5 Atténuations Proposées

Atténuation Efficacité Impact
Bloquer les écouteurs d'événements souris/tactiles via surcharge JS Moyenne Casse les sites interactifs
Injecter du bruit de timing synthétique Faible Peut être filtré
Utiliser Tor Browser pour les sessions à haute sensibilité Très Élevée Solution la plus pratique
Accepter — le comportemental est contextuellement étroit Passif Fonctionne seulement sur les sessions connectées

Meilleur qu'Obscura puisse faire : Très limité. Tor Browser est la solution pratique.


7. Empreintes Résiduelles au Niveau Réseau

Document complet : residual-network.md

7.1 Pourquoi Ça Marche

Même avec l'usurpation TLS et HTTP, des signaux réseau résiduels persistent :

  • Paramètres de pile TCP/IP (hérités de l'OS du conteneur)
  • Temps aller-retour réseau (RTT) et sa variance
  • Découverte de chemin MTU
  • TTL des paquets (révèle le nombre approximatif de sauts)
  • Dérive d'horloge entre le client et le serveur
  • Paramètres de transport QUIC HTTP/3 (si non bloqué)

7.2 Vecteurs

Vecteur Entropie Notes
Taille de fenêtre TCP ~2-4 bits Spécifique à l'OS du conteneur
TTL initial ~1-2 bits 64 vs 128
RTT + variance ~5-8 bits Dépendant du chemin réseau
Dérive d'horloge ~4-8 bits Dérive d'horloge matérielle
Paramètres HTTP/2 SETTINGS (si non usurpés) ~6-10 bits Spécifique à la bibliothèque proxy

7.3 Avantages de l'Attaquant

  • Toujours présent : Les signaux réseau sont inévitables
  • Peut être combiné : La corrélation croisée de multiples signaux faibles augmente l'entropie
  • Stable : Le chemin réseau change peu fréquemment

7.4 Faiblesses

  • Faible entropie individuelle : TCP/IP seul identifie rarement
  • Environnement de conteneur partagé : Plusieurs utilisateurs derrière le même conteneur se ressemblent
  • L'usurpation TLS élimine le signal le plus identifiable

7.5 Atténuations Proposées

Atténuation Efficacité Impact
Usurpation d'empreinte TLS (JA3/JA4 via utls) Très Élevée Critique pour Obscura
Miroir des paramètres HTTP/2 SETTINGS Élevée Implémentation complexe
Normaliser les paramètres TCP Aucun Le conteneur hérite de l'hôte
Router via VPN/Tor en amont Élevée Change les caractéristiques réseau

Meilleur qu'Obscura puisse faire : Usurpation TLS + HTTP/2. TCP/IP est accepté.


8. Détection des Incohérences de Proxy & d'Usurpation

Document complet : proxy-detection.md

8.1 Pourquoi Ça Marche

L'acte d'usurpation crée des modèles détectables :

  • Incohérence de profil : User-Agent Chrome + pile TLS Go + plateforme Win32 + polices non-Windows
  • Signaux manquants : Les API bloquées (WebGL retourne null) créent une empreinte "bloquée" unique
  • Anomalies de timing : Le MITM ajoute une latence mesurable
  • Empreintes de certificat : Les certificats CA auto-signés sont détectables
  • Normalisation d'en-têtes : Des en-têtes trop propres/cohérents (les vrais navigateurs ont des variations)
  • Détection de surcharge JavaScript : Object.getOwnPropertyDescriptor() peut détecter les surcharges Object.defineProperty

8.2 Techniques de Détection

Technique Ce Qu'elle Détecte Fiabilité
Décalage d'empreinte TLS Logiciel proxy vs navigateur revendiqué Très Élevée
Blocage de fonctionnalités Utilisation d'outil de confidentialité Élevée
Détection de surcharge JS Scripts injectés Moyenne
Inspection de certificat Proxy MITM Élevée
Analyse de timing Latence du proxy Moyenne
Corrélation inter-signaux Incohérence de profil Très Élevée

8.3 Avantages de l'Attaquant

  • L'usurpation augmente la surface détectable : Plus vous changez, plus il y a de choses à détecter
  • Analyse statistique : La comparaison avec de grands ensembles de données révèle des anomalies
  • Apprentissage machine : Peut trouver des modèles que les humains manquent

8.4 Faiblesses

  • La détection est probabiliste, pas déterministe
  • Faux positifs : Les mises à jour légitimes du navigateur ressemblent à de l'usurpation
  • Les outils de confidentialité sont utilisés par des millions de personnes : Être détecté comme "utilisateur de confidentialité" n'est pas unique
  • Jeu du chat et de la souris : La détection de surcharge peut être contrecarrée par des surcharges plus profondes

8.5 Atténuations Proposées

Atténuation Efficacité Impact
Cohérence de profil parfaite Très Élevée Nécessite des mises à jour continues du profil
Fuiter quelques signaux réels Contre-intuitif Rend le profil plus naturel
Utiliser un vrai certificat CA Moyenne Évite la détection de CA auto-signé
Arrondir le timing au lieu de le supprimer Moyenne Moins suspect qu'une latence zéro
Ne pas bloquer — usurper à la place Élevée Plus dur à détecter que le blocage

Meilleur qu'Obscura puisse faire : Tests rigoureux de cohérence de profil et mises à jour continues.


9. Le Problème d'Agrégation

9.1 Entropie Individuelle vs Combinée

Un aperçu crucial : les vecteurs incontrôlables individuels ont une faible entropie seuls, mais combinés, ils deviennent identifiables.

Htotal=i=1nHiHcorreˊlationH_{total} = \sum_{i=1}^{n} H_i - H_{corrélation}

HiH_i est l'entropie individuelle et HcorreˊlationH_{corrélation} tient compte des dépendances entre vecteurs.

Pour les vecteurs incontrôlables seuls (GPU + Audio + CPU + Fonctionnalités + Réseau + Comportemental) :

Hincontro^lable5+8+4+12+6+1550 bitsH_{incontrôlable} \approx 5 + 8 + 4 + 12 + 6 + 15 \approx 50 \text{ bits}

C'est suffisant pour identifier de manière unique un utilisateur parmi ~101510^{15}.

9.2 Implications

  • Même l'usurpation parfaite par proxy des vecteurs contrôlables est insuffisante si les vecteurs incontrôlables persistent
  • Le blocage DNS est critique : Il empêche la bibliothèque d'empreinte de voir les vecteurs incontrôlables
  • Défense en profondeur : Chaque vecteur bloqué réduit l'entropie agrégée

10. Directions de Recherche Proposées

10.1 Court terme (Obscura v1)

  1. Cohérence de profil parfaite : Outils de validation automatisés
  2. Maintenance des listes de blocage DNS : Flux de domaines d'empreinte
  3. Injection de bruit Canvas : Algorithme de CanvasBlocker
  4. Blocage des infos de débogage WebGL/WebGPU : Injection JS
  5. Blocage AudioContext : Injection JS

10.2 Moyen terme

  1. Apprentissage machine pour la détection d'anomalies : Détecter quand les modifications d'Obscura créent des modèles détectables
  2. Sélection adaptative de profil : Choisir le profil qui correspond le mieux au matériel réel de l'utilisateur (ne pas revendiquer Safari sous Windows)
  3. Dégradation gracieuse : Revenir à une usurpation moins agressive si le risque de détection est élevé

10.3 Long terme / Hors de portée

  1. Modification du navigateur : Construction navigateur personnalisée qui normalise les empreintes (approche Tor Browser)
  2. Normalisation GPU au niveau matériel : Interception de rendu au niveau pilote
  3. Obscurcissement comportemental : Modèles de souris/clavier générés par IA
  4. Empreinte résistante aux quantiques : Pérennisation contre les nouvelles techniques

11. Conclusion

Les vecteurs incontrôlables documentés ici représentent la limite fondamentale de l'anti-empreinte au niveau réseau. Aucun proxy ne peut les éliminer complètement car ils dérivent de :

  • La physique : Rendu GPU, traitement audio, dérive d'horloge
  • La biologie : Modèles de comportement utilisateur
  • L'ingénierie : Choix d'implémentation du navigateur

L'approche d'Obscura est pragmatique :

  1. Contrôler ce qui peut être contrôlé (en-têtes, TLS, DNS, API JS) — ~55% de la surface
  2. Bloquer ce qui ne peut pas être usurpé (canvas, audio, WebGL) — empêche l'observation
  3. Accepter le risque résiduel — documenter et surveiller

L'alternative — la protection parfaite — nécessite Tor Browser, qui y parvient en normalisant chaque signal au prix de la fonctionnalité, des performances et de la commodité. Les deux approches ont leur place.


Références

  1. Acar, G. et al. (2014). "The Web Never Forgets: Persistent Tracking Mechanisms in the Wild." CCS 2014.
  2. Mowery, K. & Shacham, H. (2012). "Pixel Perfect: Fingerprinting Canvas in HTML5." WOOT 2012.
  3. Eckersley, P. (2010). "How Unique Is Your Web Browser?" PETS 2010.
  4. Englehardt, S. & Narayanan, A. (2016). "Online Tracking: A 1-million-site Measurement and Analysis." CCS 2016.
  5. Tor Browser Design Document (2024). "The Design and Implementation of the Tor Browser."
  6. FingerprintJS (2026). "Browser Fingerprinting Techniques." fingerprintjs.com.
  7. FoxIO (2024). "JA4: TLS Client Fingerprinting." GitHub.
  8. Laperdrix, P. et al. (2020). "Browser Fingerprinting: A Survey." ACM TOIT.