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

obscura/research/uncontrollable/residual-network

6 min de lectura

Categoría: Residuales de Red / Capa de Transporte


1. Descripción

Incluso con falsificación TLS y HTTP, las señales de red residuales persisten porque la propia pila de red de Obscura es visible para el servidor destino. Estas señales no pueden normalizarse completamente porque son propiedades del SO del contenedor y la ruta de red.


2. Vectores

2.1 Fingerprint de Pila TCP/IP

Paquete SYN recibido:
  Window: 64240
  TTL: 64
  MSS: 1452
  Opciones: MSS, SACK_PERM, TIMESTAMP, NOP, WINDOW
  Window Scale: 10
  DF: True

Fingerprints del SO del contenedor:

Base del Contenedor Window TTL MSS Opciones Similar a 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 Depende del runtime Go/Rust

Entropía: ~4-6 bits

Mitigación: Ninguna a nivel de proxy. La pila TCP del contenedor se hereda.

2.2 Tiempo de Ida y Vuelta de Red (RTT)

El RTT es medible por el servidor:

Petición enviada:    T1
Respuesta recibida:  T2
RTT = T2 - T1    // Incluyendo tiempo de procesamiento del proxy
  • El RTT real varía según la ruta de red
  • El proxy añade latencia consistente (detectable como tiempo extra de procesamiento)
  • La varianza del RTT a lo largo del tiempo crea un patrón

Entropía: ~5-8 bits (firma de ruta + latencia del proxy)

Mitigación: No puede eliminarse, pero puede ocultarse parcialmente detrás de VPN/Tor.

2.3 Clock Skew

// Cálculo del lado del servidor
const clientTimestamp = parseInt(getHeader('Date'))
const serverTime = Date.now()
const skew = serverTime - clientTimestamp
// La deriva del reloj hardware es consistente

Cada reloj hardware deriva a una tasa única (partes-por-millón). Con minutos de interacción, la deriva se vuelve medible.

Entropía: ~4-8 bits

Mitigación: Obscura puede normalizar los headers HTTP Date, pero las opciones de timestamp TCP en el paquete SYN también revelan información del reloj.

2.4 SETTINGS HTTP/2 (Si No Se Falsifican)

Si Obscura no implementa SETTINGS HTTP/2 personalizados, los valores por defecto de la librería revelan el proxy:

Librería Proxy Initial Window Max Concurrent Header Table Size
Go net/http 6291456 250 4096
Rust hyper 65535 100 4096
Node.js http2 65535 100 4096
Envoy 1048576 100 65536

Entropía: ~6-10 bits

Mitigación: Valores de trama SETTINGS personalizados que coincidan con el perfil de navegador objetivo.

2.5 Características de MTU y Ruta

  • El MTU de la ruta afecta el TCP MSS
  • El TTL revela el número aproximado de saltos hasta el usuario
  • El comportamiento del router/ISP crea patrones únicos (estilo NAT)

Entropía: ~3-5 bits

Mitigación: Enrutar mediante VPN/Tor para normalizar.

2.6 HTTP/3 / QUIC (Si No Está Bloqueado)

Parámetros de transporte QUIC:

  • Longitud y valor del ID de conexión
  • Negociación de versión
  • Límites de control de flujo inicial
  • Parámetros de handshake TLS 1.3 sobre QUIC

Entropía: ~8-12 bits

Mitigación: Bloquear UDP 443 para forzar caída a TCP.


3. Fortalezas del Atacante

Fortaleza Explicación
Siempre presente Las señales de red son inevitables en cualquier conexión TCP/IP
Sin JS requerido Estas señales son observables en la capa de transporte
Difícil de falsificar La pila TCP/IP es a nivel de SO, no a nivel de aplicación
Consistente La ruta de red cambia con poca frecuencia
Correlación cruzada Se usa junto con señales HTTP/TLS

4. Debilidades del Atacante

Debilidad Explicación
Baja entropía individual TCP/IP solo no puede identificar a un usuario específico
Entorno de contenedor compartido Múltiples usuarios detrás del mismo contenedor se ven idénticos
Solo útil en conjunto Necesita combinación con otras señales
VPN/Tor normaliza Enrutar mediante VPN/Tor elimina fingerprints de red

5. Detección de Manipulación

Técnica Cómo Funciona
Desajuste TLS vs TCP TLS Chrome + pila TCP Linux = proxy
RTT vs ubicación declarada El usuario declara ubicación EEUU pero RTT sugiere otro continente
HTTP/2 vs declaración de navegador SETTINGS HTTP/2 de Go con User-Agent Chrome
Geolocalización IP vs zona horaria del perfil Desajuste entre el perfil y el origen de red real

6. Mitigaciones para Obscura

6.1 Lo Que Obscura Puede Hacer

Mitigación Efectividad Detectabilidad Implementación
Falsificación TLS mediante utls Alta Baja Requerido para Obscura
Falsificación de SETTINGS HTTP/2 Media Baja Valores SETTINGS personalizados
Enrutar mediante VPN/Tor upstream Alta Media Configurable por el usuario
Bloquear UDP 443 (QUIC) Alta Baja Regla iptables
Normalizar headers HTTP Date Baja Baja Reescritura de headers

6.2 Lo Que Obscura No Puede Hacer

No Puede Por Qué
Cambiar la pila TCP/IP del contenedor A nivel de SO, heredada de la imagen base del contenedor
Eliminar el RTT Física de la distancia de red
Cambiar el clock skew La deriva del reloj hardware es física
Eliminar información de número de saltos Los decrementos de TTL son inevitables

6.3 Enfoque Recomendado

1. Falsificación de fingerprint TLS mediante utls         (crítico — máxima prioridad)
2. Reflejo de SETTINGS HTTP/2                            (prioridad media)
3. Bloquear UDP 443                                      (prevenir evasión por QUIC)
4. VPN/Tor upstream opcional                             (normaliza todas las señales de red)
5. Aceptar residuales TCP/IP                             (baja entropía individual)

7. Referencias de Investigación

  • 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.