Proteccion de huella de audio con BotBrowser
Como BotBrowser controla la salida de Web Audio API a nivel del motor del navegador, asegurando senales de audio consistentes entre plataformas.
El riesgo de privacidad
El procesamiento de Web Audio API produce una salida que varia segun el dispositivo y la plataforma, convirtiendola en una senal de rastreo. No se reproduce ningun sonido y no se requieren permisos. La salida depende del hardware de audio, el subsistema de audio del SO y la version del navegador.
La solucion de BotBrowser
BotBrowser controla la salida del procesamiento de audio a nivel del motor del navegador. Cuando se carga un perfil de huella digital, las senales de audio coinciden con la plataforma objetivo del perfil.
Cargar un perfil
chrome --bot-profile="/path/to/profile.enc" \
--user-data-dir="$(mktemp -d)"
Los parametros de AudioContext, las tasas de muestreo y la salida de procesamiento se alinean con la configuracion de plataforma del perfil.
Salida determinista con semilla de ruido
Con una semilla de ruido, las huellas de audio se vuelven deterministas. El mismo perfil y semilla siempre producen el mismo resultado:
chrome --bot-profile="/path/to/profile.enc" \
--bot-noise-seed=12345
Consistencia entre plataformas
Un perfil de Windows ejecutandose en macOS o Linux produce una salida de audio consistente con el subsistema de audio de Windows, no con la plataforma host.
Verificacion
Despues de iniciar BotBrowser, verifica la proteccion de audio con Puppeteer:
const { chromium } = require('playwright-core');
const browser = await chromium.launch({
executablePath: '/path/to/botbrowser/chrome',
args: [
'--bot-profile=/path/to/profile.enc',
'--bot-noise-seed=12345',
],
headless: true,
});
const page = await (await browser.newContext()).newPage();
// Verificar que la tasa de muestreo de AudioContext coincide con el perfil
const sampleRate = await page.evaluate(() => {
const ctx = new AudioContext();
return ctx.sampleRate;
});
console.log('Tasa de muestreo:', sampleRate);
// Recargar y verificar estabilidad
await page.reload();
const sampleRate2 = await page.evaluate(() => {
const ctx = new AudioContext();
return ctx.sampleRate;
});
console.log('Estable:', sampleRate === sampleRate2);
Verificaciones clave:
- Los hashes de huella de audio permanecen estables al recargar la pagina
- La tasa de muestreo de AudioContext coincide con el valor predeterminado de la plataforma del perfil
- Diferentes perfiles producen diferentes huellas de audio
Primeros pasos
- Descarga BotBrowser desde GitHub
- Carga un perfil con
--bot-profile - Usa
--bot-noise-seedpara salida de audio determinista - Verifica con herramientas de prueba de huellas que comprueban AudioContext