Protection de l'empreinte audio avec BotBrowser
Comment BotBrowser controle la sortie de l'API Web Audio au niveau du moteur du navigateur, assurant des signaux audio coherents entre les plateformes.
Le risque pour la vie privee
Le traitement de l'API Web Audio produit une sortie qui varie selon l'appareil et la plateforme, en faisant un signal de suivi. Aucun son n'est joue et aucune permission n'est requise. La sortie depend du materiel audio, du sous-systeme audio du systeme d'exploitation et de la version du navigateur.
La solution BotBrowser
BotBrowser controle la sortie du traitement audio au niveau du moteur du navigateur. Lorsqu'un profil d'empreinte est charge, les signaux audio correspondent a la plateforme cible du profil.
Charger un profil
chrome --bot-profile="/path/to/profile.enc" \
--user-data-dir="$(mktemp -d)"
Les parametres AudioContext, les taux d'echantillonnage et la sortie de traitement s'alignent tous avec la configuration de plateforme du profil.
Sortie deterministe avec graine de bruit
Avec une graine de bruit, les empreintes audio deviennent deterministes. Le meme profil et la meme graine produisent toujours le meme resultat :
chrome --bot-profile="/path/to/profile.enc" \
--bot-noise-seed=12345
Coherence multiplateforme
Un profil Windows fonctionnant sur macOS ou Linux produit une sortie audio coherente avec le sous-systeme audio Windows, pas avec la plateforme hote.
Verification
Apres avoir lance BotBrowser, verifiez la protection audio avec 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();
// Verifier que le taux d'echantillonnage AudioContext correspond au profil
const sampleRate = await page.evaluate(() => {
const ctx = new AudioContext();
return ctx.sampleRate;
});
console.log('Taux d echantillonnage:', sampleRate);
// Recharger et verifier la stabilite
await page.reload();
const sampleRate2 = await page.evaluate(() => {
const ctx = new AudioContext();
return ctx.sampleRate;
});
console.log('Stable:', sampleRate === sampleRate2);
Verifications cles :
- Les hachages d'empreinte audio restent stables apres rechargement de la page
- Le taux d'echantillonnage AudioContext correspond a la valeur par defaut de la plateforme du profil
- Differents profils produisent differentes empreintes audio
Pour commencer
- Telechargez BotBrowser depuis GitHub
- Chargez un profil avec
--bot-profile - Utilisez
--bot-noise-seedpour une sortie audio deterministe - Verifiez avec des outils de test d'empreinte qui verifient AudioContext