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.