Deteccion de protocolos: detectar apps instaladas
Cómo los manejadores de protocolo URL como mailto: y slack: revelan aplicaciones instaladas para huella digital, y cómo controlar las respuestas de protocolo.
Quieres la documentación estructurada de Huella digital?
Este artículo forma parte de la biblioteca editorial. Para pasos de configuración, material de referencia y actualizaciones continuas, entra en la sección de docs.
Introducción
Los sistemas operativos permiten a las aplicaciones registrar esquemas de URL personalizados, también conocidos como manejadores de protocolo. Cuando una aplicación como Slack, VS Code, Zoom o Steam se instala, registra un protocolo (como slack://, vscode://, zoommtg:// o steam://) que permite a otras aplicaciones y sitios web lanzarla directamente a través de una URL. Este sistema potencia los enlaces profundos, permitiendo que un sitio web abra una vista específica de una app, se una a una reunión o lance un juego a través de un simple clic en un enlace.
Sin embargo, el mecanismo que hace útiles a los manejadores de protocolo también los convierte en una superficie de huella digital. Los sitios web pueden intentar navegar a URLs de protocolo personalizado y observar la respuesta del navegador. El comportamiento difiere según si la aplicación asociada al protocolo está instalada: el navegador puede mostrar un diálogo para abrir la app, redirigir silenciosamente, mostrar un error o simplemente no hacer nada. Al probar una lista de esquemas de protocolo conocidos, un sitio web puede construir un perfil de qué aplicaciones están instaladas en el dispositivo del visitante, creando una huella digital altamente distintiva.
Impacto en la privacidad
La detección de aplicaciones basada en protocolos es una de las técnicas de huella digital más invasivas para la privacidad porque revela información sobre el entorno de software del usuario en lugar de su hardware. Mientras que las huellas digitales de hardware identifican el dispositivo, las huellas digitales de aplicaciones identifican a la persona y sus actividades.
Las implicaciones de privacidad son significativas:
- Inventario de software: Al probar manejadores de protocolo comunes (Spotify, Discord, Telegram, WhatsApp, Steam, Epic Games, Zoom, Teams, VS Code, Sublime Text y docenas más), un sitio web puede determinar qué aplicaciones están instaladas.
- Perfilado de comportamiento: Las aplicaciones instaladas revelan intereses, profesión y patrones de comportamiento. Un desarrollador con
vscode://,iterm2://ydocker://presenta un perfil diferente al de un gamer consteam://,epicgames://ydiscord://. - Unicidad del dispositivo: La combinación específica de aplicaciones instaladas es altamente única. Incluso entre dispositivos con hardware idéntico, el conjunto de software instalado varía dramáticamente entre usuarios.
- Rastreo entre navegadores: Los manejadores de protocolo se registran a nivel del SO, no del navegador. Esto significa que la misma huella digital de aplicaciones persiste entre todos los navegadores del dispositivo, habilitando el rastreo entre navegadores.
Un estudio de referencia de 2021 por FingerprintJS demostró que la huella digital basada en protocolos podía probar 32 aplicaciones populares en segundos, produciendo una huella digital que identificaba únicamente al 95% de los sujetos de prueba. La técnica funcionaba en Chrome, Firefox, Edge y otros navegadores. La investigación llevó a los proveedores de navegadores a comenzar a implementar mitigaciones, pero la vulnerabilidad fundamental persiste en muchos escenarios.
La técnica es particularmente preocupante porque no requiere permisos y puede realizarse silenciosamente. No hay notificación al usuario de que sus aplicaciones instaladas están siendo sondeadas.
Contexto técnico
Cómo funciona la detección de protocolos
La detección de protocolos explota el comportamiento del navegador al navegar a una URL con un esquema personalizado desconocido o registrado. Se han desarrollado varias técnicas:
Método de navegación por iframe: Un sitio web crea un iframe oculto y establece su src a una URL de protocolo personalizado (p.ej., slack://open). Si Slack está instalado, el navegador intenta manejar la navegación. Si no, el iframe recibe un error. La temporización y el comportamiento de esta respuesta difieren según si el manejador existe.
Método de ventana emergente: Abrir un window.open() a una URL de protocolo personalizado produce un comportamiento diferente dependiendo del registro del manejador. En algunos navegadores, la ventana emergente es consumida por el manejador de la aplicación. En otros, permanece como una ventana en blanco.
Detección de enfoque/desenfoque: Cuando un manejador de protocolo lanza una aplicación externa, la ventana del navegador pierde el enfoque. Al monitorear los eventos blur y focus, un sitio web puede detectar si una aplicación se lanzó exitosamente.
Detección basada en temporización: El tiempo que tarda el navegador en procesar una navegación de protocolo varía según si existe un manejador. Los manejadores instalados producen una respuesta más rápida o más lenta (dependiendo del navegador) que los protocolos no registrados, y esta diferencia de temporización es medible.
Comportamiento específico del navegador
Diferentes navegadores manejan protocolos desconocidos de manera diferente:
- Chrome: Muestra un diálogo preguntando si el usuario quiere abrir la aplicación (para manejadores conocidos) o no hace nada / muestra un error mínimo (para protocolos desconocidos). La presencia y comportamiento del diálogo pueden detectarse programáticamente.
- Firefox: Muestra su propio diálogo de manejador para protocolos registrados y una página de error para los no registrados. El comportamiento de navegación revela el registro del manejador.
- Safari: Ha implementado mitigaciones que limitan el sondeo de protocolos, pero la detección basada en temporización aún funciona en algunos escenarios.
- Edge: Comportamiento similar a Chrome (basado en Chromium), con diálogos adicionales de protocolo.
El problema del scheme flooding
En 2021, investigadores demostraron una técnica llamada "scheme flooding" que explotaba los manejadores de protocolo para identificar de forma confiable a los usuarios a través de múltiples navegadores en el mismo dispositivo. La técnica implicaba probar docenas de esquemas de protocolo en rápida sucesión y medir el patrón de respuesta. Debido a que los manejadores de protocolo son registros a nivel del SO, la huella digital era consistente entre todos los navegadores del dispositivo, anulando las protecciones de privacidad a nivel del navegador.
Desafíos de normalización de temporización
El desafío central en la detección de protocolos es la temporización. Cuando un navegador procesa una navegación a una URL de protocolo personalizado:
- Verifica el registro de manejadores de protocolo del SO
- Si existe un manejador, se prepara para lanzar la aplicación (o mostrar un diálogo)
- Si no existe un manejador, pasa a un estado de error
Los pasos 2 y 3 toman diferentes cantidades de tiempo, y esta diferencia de temporización es la señal principal. Incluso cuando los navegadores intentan normalizar el comportamiento visible (mostrando la misma UI para ambos casos), el tiempo de procesamiento subyacente a menudo difiere.
Listas de aplicaciones instaladas
Los protocolos comunes probados en scripts de huella digital incluyen:
- Comunicación:
slack://,discord://,telegram://,whatsapp://,signal:// - Desarrollo:
vscode://,sublime://,atom://,docker:// - Juegos:
steam://,epicgames://,uplay:// - Productividad:
notion://,evernote://,todoist:// - Multimedia:
spotify://,vlc://,figma:// - Reuniones:
zoommtg://,msteams://,webex://
Cada protocolo adicional probado añade entropía a la huella digital. Probar 30-40 protocolos produce una combinación suficientemente única para una identificación confiable.
Enfoques comunes de protección y sus limitaciones
VPNs y servidores proxy
Las VPNs no tienen efecto en la detección de manejadores de protocolo. El registro de protocolos es una propiedad local del SO, y la detección ocurre completamente dentro del navegador. Las herramientas de privacidad a nivel de red no pueden modificar el comportamiento de los manejadores de protocolo.
Modo incógnito y navegación privada
Los modos de navegación privada no alteran el registro de manejadores de protocolo. Las mismas aplicaciones están instaladas en modo incógnito que en una ventana normal, porque los manejadores de protocolo se registran a nivel del SO, no en el perfil del navegador.
Extensiones de navegador
Las extensiones pueden intentar interceptar la navegación de protocolos:
- Bloquear navegación de iframe: Una extensión puede bloquear todas las navegaciones de protocolo personalizado en iframes, pero esto rompe los enlaces profundos legítimos y es fácilmente detectable porque el comportamiento de bloqueo en sí mismo es observable.
- Normalizar temporización: Las extensiones pueden añadir retrasos a todas las navegaciones de protocolo para normalizar la temporización, pero la sobrecarga de la intercepción de la extensión es en sí misma detectable, y el retraso debe calibrarse cuidadosamente para no romper los enlaces de protocolo legítimos.
- Deshabilitar ventanas emergentes: Bloquear
window.open()para protocolos personalizados previene un método de detección pero rompe el lanzamiento legítimo de aplicaciones.
Mitigaciones del navegador
Los navegadores modernos han implementado algunas protecciones:
- Chrome añadió limitación de velocidad para verificaciones de manejadores de protocolo
- Safari implementó políticas más estrictas de mismo origen para navegación de protocolos
- Firefox añadió requisitos de gesto del usuario para algunos métodos de navegación de protocolo
Estas mitigaciones reducen la efectividad del sondeo rápido de protocolos pero no eliminan las diferencias fundamentales de temporización que permiten la detección.
El enfoque a nivel de motor de BotBrowser
BotBrowser controla el comportamiento de los manejadores de protocolo a nivel del motor del navegador, asegurando que todos los intentos de navegación de protocolo produzcan respuestas uniformes independientemente de qué aplicaciones estén realmente instaladas en el sistema host.
Normalización de temporización
BotBrowser normaliza la temporización del procesamiento de navegación de protocolos para que los protocolos registrados y no registrados produzcan firmas de temporización indistinguibles. Esto elimina la señal principal usada en la huella digital basada en protocolos:
chrome --bot-profile="/path/to/profile.enc" \
--user-data-dir="$(mktemp -d)"
Respuesta de comportamiento uniforme
Más allá de la temporización, BotBrowser asegura que el comportamiento observable (estados de error, eventos de enfoque/desenfoque, estado del iframe) sea consistente para todos los intentos de navegación de protocolo. El navegador no revela si existe un manejador a través de ningún canal de comportamiento.
Enlaces de protocolo legítimos
La protección no bloquea la navegación de protocolos por completo. Cuando un usuario o script de automatización sigue explícitamente un enlace de protocolo como parte de un flujo de trabajo normal, la navegación procede. Solo el comportamiento de sondeo, la enumeración rápida de manejadores de protocolo a través de análisis de temporización y comportamiento, es neutralizado.
Integración con el perfil
La protección de manejadores de protocolo es parte del perfil de huella digital más amplio. Funciona junto con la identificación del SO, las señales de versión del navegador y otros comportamientos específicos de plataforma para mantener una identidad consistente:
chrome --bot-profile="/path/to/profile.enc" \
--bot-noise-seed=42 \
--proxy-server="socks5://user:pass@proxy:1080" \
--user-data-dir="$(mktemp -d)"
Sin filtraciones del entorno host
La garantía clave es que las aplicaciones instaladas en la máquina host no se filtran a través de consultas de manejadores de protocolo. Ya sea que el host tenga Slack, Steam, VS Code o ninguna aplicación personalizada instalada, el comportamiento de los manejadores de protocolo está controlado por el perfil, no por el entorno host.
Configuración y uso
Uso básico por CLI
La protección de manejadores de protocolo es automática al cargar un perfil:
chrome --bot-profile="/path/to/profile.enc" \
--user-data-dir="$(mktemp -d)"
Integración con Playwright
const { chromium } = require('playwright-core');
(async () => {
const browser = await chromium.launch({
executablePath: '/path/to/botbrowser/chrome',
args: [
'--bot-profile=/path/to/profile.enc',
],
headless: true,
});
const context = await browser.newContext({ viewport: null });
const page = await context.newPage();
await page.goto('https://example.com');
// Las consultas de manejadores de protocolo producirán respuestas uniformes
// independientemente de las aplicaciones instaladas en la máquina host
await browser.close();
})();
Integración con Puppeteer
const puppeteer = require('puppeteer-core');
(async () => {
const browser = await puppeteer.launch({
executablePath: '/path/to/botbrowser/chrome',
args: [
'--bot-profile=/path/to/profile.enc',
],
headless: true,
defaultViewport: null,
});
const page = await browser.newPage();
await page.goto('https://example.com');
// Las señales de manejadores de protocolo están controladas por el perfil
await browser.close();
})();
Combinado con protección de identidad de aplicación
Para privacidad completa a nivel de aplicación:
chrome --bot-profile="/path/to/profile.enc" \
--bot-noise-seed=42 \
--bot-config-timezone="Europe/London" \
--bot-config-locale="en-GB" \
--user-data-dir="$(mktemp -d)"
Verificación
Después de lanzar BotBrowser con un perfil, verifica la protección de manejadores de protocolo:
// Probar consistencia de temporización de manejadores de protocolo
async function testProtocolTiming(protocol) {
const start = performance.now();
const iframe = document.createElement('iframe');
iframe.style.display = 'none';
document.body.appendChild(iframe);
return new Promise(resolve => {
iframe.onload = () => {
resolve(performance.now() - start);
document.body.removeChild(iframe);
};
iframe.onerror = () => {
resolve(performance.now() - start);
document.body.removeChild(iframe);
};
iframe.src = `${protocol}://test`;
setTimeout(() => {
resolve(performance.now() - start);
if (iframe.parentNode) document.body.removeChild(iframe);
}, 500);
});
}
// Tanto protocolos registrados como no registrados deberían
// producir temporización similar
const timing1 = await testProtocolTiming('slack');
const timing2 = await testProtocolTiming('nonexistentprotocol12345');
console.log('Slack timing:', timing1);
console.log('Unknown protocol timing:', timing2);
console.log('Difference:', Math.abs(timing1 - timing2));
Qué verificar:
- Las diferencias de temporización entre protocolos conocidos y desconocidos son mínimas (dentro del rango de ruido)
- No se activan eventos de enfoque/desenfoque por sondeos de protocolo
- Las páginas de prueba de detección de protocolos (como SchemeFlood.com) muestran resultados uniformes
- Las aplicaciones instaladas en la máquina host no son detectables a través de consultas de protocolo
Mejores prácticas
-
Usa perfiles completos. La protección de manejadores de protocolo funciona mejor como parte de un perfil integral que controla todas las superficies de huella digital de manera consistente.
-
Prueba contra métodos de detección conocidos. Visita páginas de prueba de huella digital por protocolo para verificar que tu configuración no filtre información de aplicaciones instaladas.
-
Combina con otras protecciones. La detección de manejadores de protocolo se usa frecuentemente junto con la huella digital de Canvas, WebGL y fuentes. Usa un perfil completo para asegurar que todos los vectores estén cubiertos.
-
Mantén los perfiles actualizados. A medida que los navegadores implementan nuevas mitigaciones de manejadores de protocolo y las técnicas de detección evolucionan, los perfiles actualizados aseguran protección continua.
-
Evita instalar aplicaciones innecesarias en el host. Aunque BotBrowser previene las filtraciones de protocolo, minimizar el conjunto de aplicaciones instaladas en el host reduce la superficie de ataque general.
Preguntas frecuentes
¿La detección de protocolo puede identificar versiones específicas de aplicaciones?
Generalmente no. La detección de manejadores de protocolo revela si una aplicación está instalada, no qué versión. Sin embargo, algunas aplicaciones registran esquemas de protocolo específicos de versión, lo que puede reducir el rango de versiones.
¿La detección de protocolo funciona en todos los sistemas operativos?
La técnica funciona en Windows, macOS y Linux, pero el comportamiento específico varía según el SO. Los manejadores de protocolo de Windows se registran en el Registro de Windows. macOS usa declaraciones Info.plist en paquetes de aplicaciones. Linux usa archivos .desktop. BotBrowser normaliza el comportamiento independientemente del SO host.
¿Los sitios web pueden detectar la protección de manejadores de protocolo?
Si la protección se aplica a nivel de JavaScript (interceptando eventos de navegación), la intercepción misma puede detectarse. BotBrowser aplica la protección a nivel del motor, haciendo la normalización invisible para los scripts de página.
¿Esto rompe los enlaces de protocolo legítimos?
No. La protección de BotBrowser se dirige al comportamiento de sondeo usado para huella digital, no a la navegación legítima de protocolos. Cuando un usuario o script sigue explícitamente un enlace de protocolo como parte de un flujo de trabajo normal, la navegación funciona normalmente.
¿Cuántos protocolos se pueden probar en un script de huella digital?
Los scripts de huella digital modernos prueban 20-40 manejadores de protocolo comunes. Cada prueba toma aproximadamente 100-500ms dependiendo del método, por lo que un escaneo completo puede completarse en 5-20 segundos. La normalización de temporización de BotBrowser hace que todas las pruebas produzcan resultados indistinguibles.
¿Es esto lo mismo que el ataque de "scheme flooding"?
El scheme flooding es una implementación específica de la huella digital basada en protocolos, demostrada en 2021. La protección de manejadores de protocolo de BotBrowser aborda el scheme flooding y todos los demás métodos de detección de protocolo controlando el comportamiento subyacente a nivel del motor.
¿Los navegadores móviles soportan la detección de protocolos?
Sí, pero con más restricciones. Los navegadores móviles (particularmente Safari en iOS) tienen políticas más estrictas respecto a la navegación de manejadores de protocolo. Los perfiles de BotBrowser para configuraciones móviles incluyen el comportamiento apropiado de manejo de protocolos para la plataforma móvil objetivo.
¿registerProtocolHandler() tiene algún rol?
La API navigator.registerProtocolHandler() permite a los sitios web registrarse como manejadores de protocolos específicos. Esta es una preocupación separada de la detección de protocolos instalados por aplicaciones. BotBrowser controla tanto las señales de detección como el comportamiento de registro como parte del perfil.
Resumen
Los manejadores de protocolo URL personalizados exponen el inventario de aplicaciones instaladas del usuario, creando una de las superficies de huella digital más distintivas disponibles. La técnica funciona entre navegadores, sobrevive a los modos de navegación privada y revela información personal sobre las actividades e intereses del usuario. BotBrowser controla el comportamiento de los manejadores de protocolo a nivel del motor del navegador, normalizando la temporización y las respuestas de comportamiento para que las aplicaciones instaladas no puedan detectarse a través del sondeo de protocolos. Para protección relacionada, consulta protección de propiedades del navegador, control de huella digital de fuentes y gestión integral de perfiles.
Artículos Relacionados
Lleva BotBrowser de la investigación a producción
Usa estas guías para entender el modelo y después avanzar hacia validación multiplataforma, contextos aislados y despliegue de navegador preparado para escalar.