Defensive Research

Investigación defensiva de amenazas: visitar URLs sospechosas mediante aislamiento por proxy

3 min read Published Updated 654 words

Visitar una URL sospechosa directamente desde su estación de trabajo de investigación es imprudente: más del 70% de las páginas de aterrizaje maliciosas identifican la IP que se conecta y, o bien muestran una página benigna, o bloquean la solicitud por completo. El aislamiento mediante proxy no es opcional; es la base para cualquier recopilación creíble de inteligencia de amenazas. Sin él, está entregando el bloque de red de su infraestructura a los adversarios, quienes pasarán a atacar sus servicios internos en cuestión de minutos.

Por qué la navegación directa falla para la inteligencia de amenazas

Los kits modernos de explotación y phishing verifican REMOTE_ADDR contra listas de bloqueo de inteligencia de amenazas, bases de datos de geolocalización e incluso consultas DNS inversas. Una conexión directa desde un ASN de investigación conocido provoca una redirección a una página limpia o un 404. Peor aún, muchos kits usan JavaScript para enumerar la IP local del cliente mediante fugas de WebRTC (RFC 8834), exponiendo su red real incluso detrás de una VPN. El aislamiento mediante proxy rompe esta cadena al terminar la conexión en un intermediario remoto que no comparte la reputación de su infraestructura. El proxy en sí debe ser desechable: una instancia en la nube de un solo uso o un grupo rotatorio de proxies residenciales. Los proxies estáticos de un solo proveedor se queman en cuestión de días.

Aislamiento en capas: Proxy + máquina virtual o contenedor

Un proxy por sí solo es insuficiente si el navegador filtra datos a través de DNS, canales laterales basados en tiempo o la huella digital del navegador. Combine el proxy con una máquina virtual o contenedor creado específicamente, sin almacenamiento persistente, sin montajes del sistema de archivos del host y con un perfil de navegador reducido. Use iptables en el contenedor para forzar todo el tráfico de salida a través del proxy y descartar todo el tráfico hacia direcciones RFC 1918. Por ejemplo, un contenedor Docker con --network none y un túnel SOCKS5 mediante ssh -D 1080 hacia un servidor puente desechable. Esto evita que el navegador omita el proxy a través de WebSocket o WebRTC, un modo de fallo común cuando se usa solo una configuración de proxy a nivel de navegador. La máquina virtual o el contenedor deben destruirse después de cada sesión; las instantáneas solo son aceptables si se eliminan todas las cookies, la caché y el almacenamiento local.

Herramientas: Burp Suite con cadena de proxy y navegadores sin interfaz gráfica

Para el análisis manual, encadene Burp Suite a través de un proxy SOCKS5 (RFC 1928) configurando User options > Connections > SOCKS Proxy en 127.0.0.1:1080 y habilitando Do DNS resolution via SOCKS proxy. Esto fuerza todas las consultas DNS a través del proxy, evitando fugas de DNS. Para la recopilación automatizada, los grupos de navegadores sin interfaz gráfica que usan Puppeteer o Playwright son el estándar. A continuación se muestra un script mínimo de Puppeteer que enruta todo el tráfico a través de un proxy SOCKS5 y deshabilita WebRTC:

const puppeteer = require('puppeteer');
const proxy = 'socks5://127.0.0.1:1080';

const browser = await puppeteer.launch({
  args: [
    `--proxy-server=${proxy}`,
    '--disable-webrtc',
    '--no-sandbox',
    '--disable-setuid-sandbox'
  ]
});
const page = await browser.newPage();
await page.authenticate({ username: 'user', password: 'pass' });
await page.goto('http://malicious.example', { waitUntil: 'networkidle0' });
// Capture screenshot, HAR, DOM snapshot
await page.screenshot({ path: 'screenshot.png' });
await browser.close();

Este enfoque funciona, pero tenga cuidado: muchos navegadores sin interfaz gráfica son detectables mediante navigator.webdriver y la ausencia de chrome.runtime. Use puppeteer-extra-plugin-stealth o los parches de sigilo integrados de Playwright para reducir la huella digital. Incluso así, los kits sofisticados detectan Chrome sin interfaz gráfica verificando la falta de propiedades window.chrome o una longitud anormal de navigator.plugins. La única contramedida fiable es ejecutar un navegador completo (no sin interfaz gráfica) en una máquina virtual con un controlador de pantalla real, pero eso escala mal.

Alternativas a urlscan.io para el análisis autogestionado

urlscan.io es conveniente, pero comparte los metadatos de sus exploraciones con su comunidad y registra su IP. Para investigaciones sensibles, aloje usted mismo una plataforma de captura. PhantomJS está obsoleto; use Playwright con un registrador HAR personalizado y una instancia local de mitmproxy. mitmproxy (--mode socks5 --listen-port 8080) registra todos los pares de solicitud/respuesta y permite la modificación en línea de cabeceras o respuestas. Combínelo con wireshark para el análisis de PCAP. Otra opción es ThreatPinch Lookup, una extensión de Chrome que consulta fuentes locales de inteligencia de amenazas, pero no es una solución de aislamiento completa. Para exploraciones masivas, implemente PhishingKitTracker o un script Python personalizado que use requests con una lista rotatoria de proxies de proxybroker. La compensación: los sistemas autogestionados requieren mantenimiento de grupos de proxies y perfiles de navegador, pero le otorgan control total sobre la retención de datos y evitan filtrar sus objetivos de investigación a terceros.