Volver al Blog
Huella digital

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:

  1. Los hashes de huella de audio permanecen estables al recargar la pagina
  2. La tasa de muestreo de AudioContext coincide con el valor predeterminado de la plataforma del perfil
  3. Diferentes perfiles producen diferentes huellas de audio

Primeros pasos

  1. Descarga BotBrowser desde GitHub
  2. Carga un perfil con --bot-profile
  3. Usa --bot-noise-seed para salida de audio determinista
  4. Verifica con herramientas de prueba de huellas que comprueban AudioContext
#audio#fingerprinting#audiocontext#privacy