Saltar al contenido principal
fr/blog/obscura/research/uncontrollable/residual-network/

obscura/research/uncontrollable/residual-network

6 min de lecture

Catégorie : Résidus de la Couche Réseau / Transport


1. Description

Même avec l'usurpation TLS et HTTP, des signaux réseau résiduels persistent car la propre pile réseau d'Obscura est visible par le serveur de destination. Ces signaux ne peuvent pas être entièrement normalisés car ce sont des propriétés de l'OS du conteneur et du chemin réseau.


2. Vecteurs

2.1 Empreinte de Pile TCP/IP

Paquet SYN reçu :
  Fenêtre : 64240
  TTL : 64
  MSS : 1452
  Options : MSS, SACK_PERM, TIMESTAMP, NOP, WINDOW
  Window Scale : 10
  DF : True

Empreintes de l'OS du Conteneur :

Base du Conteneur Fenêtre TTL MSS Options Similaire JA4T
Alpine Linux 29200-65535 64 1460 M,S,T,N,W 29200_2-4-8-1-3_1460_7
Debian/Ubuntu 29200-65535 64 1460 M,S,T,N,W 29200_2-4-8-1-3_1460_7
Distroless 29200-65535 64 1460 M,S,T,N,W Dépend du runtime Go/Rust

Entropie : ~4-6 bits

Atténuation : Aucune au niveau proxy. La pile TCP du conteneur est héritée.

2.2 Temps Aller-Retour Réseau (RTT)

Le RTT est mesurable par le serveur :

Requête envoyée :    T1
Réponse reçue : T2
RTT = T2 - T1    // Inclut le temps de traitement du proxy
  • Le RTT réel varie selon le chemin réseau
  • Le proxy ajoute une latence cohérente (détectable comme temps de traitement supplémentaire)
  • La variance du RTT dans le temps crée un motif

Entropie : ~5-8 bits (signature de chemin + latence du proxy)

Atténuation : Ne peut pas être éliminé, mais peut être partiellement caché derrière un VPN/Tor.

2.3 Dérive d'Horloge

// Calcul côté serveur
const clientTimestamp = parseInt(getHeader('Date'))
const serverTime = Date.now()
const skew = serverTime - clientTimestamp
// La dérive d'horloge matérielle est cohérente

Chaque horloge matérielle dérive à un taux unique (parties par million). Sur des minutes d'interaction, la dérive devient mesurable.

Entropie : ~4-8 bits

Atténuation : Obscura peut normaliser les en-têtes HTTP Date, mais les options de timestamp TCP dans le paquet SYN révèlent également des informations d'horloge.

2.4 Paramètres HTTP/2 SETTINGS (Si Non Usurpés)

Si Obscura n'implémente pas de paramètres HTTP/2 SETTINGS personnalisés, les valeurs par défaut de la bibliothèque révèlent le proxy :

Bibliothèque Proxy Fenêtre Initiale Max Concurrents Taille Table d'En-têtes
Go net/http 6291456 250 4096
Rust hyper 65535 100 4096
Node.js http2 65535 100 4096
Envoy 1048576 100 65536

Entropie : ~6-10 bits

Atténuation : Valeurs de trame SETTINGS personnalisées correspondant au profil du navigateur cible.

2.5 MTU & Caractéristiques de Chemin

  • Le MTU du chemin affecte le MSS TCP
  • Le TTL révèle le nombre approximatif de sauts vers l'utilisateur
  • Le comportement du routeur/FAI crée des motifs uniques (style NAT)

Entropie : ~3-5 bits

Atténuation : Router via VPN/Tor pour normaliser.

2.6 HTTP/3 / QUIC (Si Non Bloqué)

Paramètres de transport QUIC :

  • Longueur et valeur de l'ID de connexion
  • Négociation de version
  • Limites initiales de contrôle de flux
  • Paramètres de poignée de main TLS 1.3 sur QUIC

Entropie : ~8-12 bits

Atténuation : Bloquer UDP 443 pour forcer le repli TCP.


3. Forces de l'Attaquant

Force Explication
Toujours présent Les signaux réseau sont inévitables dans toute connexion TCP/IP
Aucun JS requis Ces signaux sont observables au niveau transport
Difficile à usurper La pile TCP/IP est au niveau OS, pas au niveau application
Cohérent Le chemin réseau change peu fréquemment
Corrélation croisée Utilisé avec les signaux HTTP/TLS

4. Faiblesses de l'Attaquant

Faiblesse Explication
Faible entropie individuelle TCP/IP seul ne peut pas identifier un utilisateur spécifique
Environnement de conteneur partagé Plusieurs utilisateurs derrière le même conteneur se ressemblent
Utile seulement en agrégat Nécessite une combinaison avec d'autres signaux
VPN/Tor normalise Router via VPN/Tor élimine les empreintes réseau

5. Détection de la Manipulation

Technique Comment Ça Marche
Décalage TLS vs TCP TLS Chrome + pile TCP Linux = proxy
RTT vs emplacement revendiqué L'utilisateur revendique un emplacement US mais le RTT suggère un autre continent
HTTP/2 vs revendication navigateur Paramètres HTTP/2 SETTINGS de Go avec User-Agent Chrome
Géolocalisation IP vs fuseau horaire du profil Décalage entre le profil et l'origine réseau réelle

6. Atténuations pour Obscura

6.1 Ce Qu'Obscura Peut Faire

Atténuation Efficacité Détectabilité Implémentation
Usurpation TLS via utls Élevée Faible Requis pour Obscura
Usurpation des paramètres HTTP/2 SETTINGS Moyenne Faible Valeurs SETTINGS personnalisées
Router via VPN/Tor en amont Élevée Moyenne Configurable par l'utilisateur
Bloquer UDP 443 (QUIC) Élevée Faible Règle iptables
Normaliser les en-têtes HTTP Date Faible Faible Réécriture d'en-tête

6.2 Ce Qu'Obscura Ne Peut Pas Faire

Ne Peut Pas Pourquoi
Changer la pile TCP/IP du conteneur Niveau OS, hérité de l'image de base du conteneur
Éliminer le RTT Physique de la distance réseau
Changer la dérive d'horloge La dérive d'horloge matérielle est physique
Supprimer les informations de nombre de sauts Les décrémentations TTL sont inévitables

6.3 Approche Recommandée

1. Usurpation d'empreinte TLS via utls          (critique — priorité absolue)
2. Miroir des paramètres HTTP/2 SETTINGS        (priorité moyenne)
3. Bloquer UDP 443                               (empêche le contournement QUIC)
4. VPN/Tor amont optionnel                       (normalise tous les signaux réseau)
5. Accepter les résidus TCP/IP                    (faible entropie individuelle)

7. Références de Recherche

  • FoxIO (2024). "JA4+ Suite: TLS, TCP, and QUIC Fingerprinting." FoxIO Blog.
  • Zalewski, M. (2007). "p0f: Passive OS Fingerprinting." lcamtuf.coredump.cx/p0f.
  • Beverly, R. (2004). "A Robust Classifier for Passive TCP/IP Fingerprinting." PAM 2004.
  • Satori (2025). "Python rewrite of passive OS fingerprinting tool." GitHub: xnih/satori.