Protection des signaux DRM avec BotBrowser
Comment BotBrowser contrôle EME, Widevine et les signaux de capacité DRM au niveau du moteur pour prévenir le fingerprinting basé sur DRM sur différentes plateformes.
Introduction
Encrypted Media Extensions (EME) est une spécification W3C qui permet aux navigateurs d'interagir avec des modules de déchiffrement de contenu (CDM) pour la lecture de médias protégés par DRM. Le CDM le plus répandu est Widevine de Google, intégré à Chrome, Firefox, Edge et la plupart des navigateurs basés sur Chromium. EME permet à des services comme Netflix et Disney+ de diffuser du contenu protégé directement dans le navigateur.
L'API EME permet aux sites de demander quels systèmes de clés DRM un navigateur prend en charge, à quel niveau de sécurité et avec quelles combinaisons de codecs. Ces réponses varient selon la plateforme, la version du navigateur, le matériel et la version du module Widevine, ce qui en fait une source riche de signaux de fingerprinting accessibles sans permission utilisateur.
Impact sur la confidentialité
Le fingerprinting basé sur les capacités DRM est préoccupant car il révèle des informations plateformes profondes difficiles à obtenir autrement. Les signaux incluent :
- Support des systèmes de clés : Widevine, PlayReady, FairPlay, ClearKey. PlayReady est typiquement Windows-only, FairPlay sur Apple.
- Niveau de sécurité : Widevine a des niveaux (L1 hardware-backed, L3 software-only) indiquant la présence d'un TEE matériel.
- Chaînes de robustness :
SW_SECURE_CRYPTO,SW_SECURE_DECODE,HW_SECURE_CRYPTO,HW_SECURE_DECODE,HW_SECURE_ALL— dépendant du dispositif. - Capacités codecs dans le contexte DRM : le support DRM peut différer du support média général.
Des travaux académiques montrent que les requêtes EME seules peuvent distinguer des dizaines de configurations de plateforme et, combinées à d'autres signaux, augmentent fortement la possibilité d'identification unique. Ces requêtes sont rapides (<50ms), ne nécessitent pas de permissions et n'ont pas d'indicateurs visibles.
Contexte technique
Flux EME
Le flux standard pour la lecture DRM :
navigator.requestMediaKeySystemAccess(keySystem, configs)demande l'accès au système de clés.- Si supporté, le navigateur retourne un
MediaKeySystemAccessdécrivant les capacités. - Création de
MediaKeysliés au CDM. - Attachement des
MediaKeysà unHTMLMediaElementpour déchiffrement à la lecture.
L'étape 1 est critique pour le fingerprinting : le navigateur évalue la configuration demandée et renvoie la meilleure correspondance.
Identifiants de systèmes de clés
com.widevine.alpha(Widevine)com.microsoft.playready(PlayReady)com.apple.fps(FairPlay)org.w3.clearkey(ClearKey)
La présence/absence de ces systèmes est un fort indicateur de plateforme.
Niveaux de robustness
De l'ordre croissant : chaîne vide, SW_SECURE_CRYPTO, SW_SECURE_DECODE, HW_SECURE_CRYPTO, HW_SECURE_DECODE, HW_SECURE_ALL. Le niveau maximal dépend du TEE et de l'intégration Widevine.
Détection des environnements headless
Headless Chrome standard n'inclut pas le CDM Widevine, donc requestMediaKeySystemAccess('com.widevine.alpha', ...) échoue en headless ; cette absence est un puissant signal de navigation automatisée.
Détails des objets de configuration
Les objets peuvent inclure initDataTypes, audioCapabilities, videoCapabilities, distinctiveIdentifier, persistentState — chacun produisant des réponses dépendant de la plateforme.
Approches de protection communes et leurs limites
VPNs et proxies
Ne changent rien aux requêtes EME qui s'exécutent localement côté CDM.
Navigation privée
Ne modifie pas les réponses DRM.
Extensions
Elles ne peuvent pas ajouter un CDM natif ni altérer silencieusement les réponses sans être détectées ; bloquer l'API casse la lecture DRM.
Contournements pour headless
Tenter de simuler Widevine par stub échoue lors des échanges de clés réels.
Approche de BotBrowser au niveau moteur
BotBrowser contrôle les signaux DRM au niveau du moteur pour garantir que les requêtes EME renvoient des résultats cohérents avec le profil chargé.
Configuration DRM basée sur profil
chrome --bot-profile="/path/to/profile.enc" \
--user-data-dir="$(mktemp -d)"
Le profil encapsule systèmes de clés, robustness, combinaisons de codecs et autres métadonnées, capturés depuis des appareils réels pour assurer la cohérence.
Widevine en mode headless
BotBrowser maintient la disponibilité de Widevine en headless, neutralisant ce vecteur de détection.
chrome --bot-profile="/path/to/profile.enc" \
--headless \
--user-data-dir="$(mktemp -d)"
Identité DRM cohérente multiplateforme
Un profil Windows exécuté sur un serveur Linux rapportera des caractéristiques DRM compatibles Windows (Widevine + PlayReady, niveaux de robustness appropriés, support codec aligné avec Windows Media Foundation).
Configuration et utilisation
CLI basique
chrome --bot-profile="/path/to/profile.enc" \
--user-data-dir="$(mktemp -d)"
Intégration Playwright / Puppeteer
Les exemples de code sont inchangés et utilisables avec le binaire BotBrowser.
Vérification
Vérifiez la disponibilité des key systems attendus via navigator.requestMediaKeySystemAccess() et confirmez la cohérence des getConfiguration() entre modes et redémarrages.
Bonnes pratiques
- Utiliser un profil complet et cohérent.
- Vérifier Widevine en headless.
- Assurer la correspondance entre le profil et les fonctionnalités DRM attendues pour la plateforme.
- Protéger les capacités codec conjointement au DRM.
FAQ et résumé
Headless Chrome n'inclut généralement pas Widevine ; DRM réduit l'espace de candidats lors de l'identification et BotBrowser maîtrise les signaux pour limiter la détection basée sur EME.
title: "Protection des signaux DRM avec BotBrowser" description: "Comment BotBrowser controle les reponses EME et Widevine a travers les profils d'empreinte pour des signaux DRM coherents entre les plateformes." date: "2025-07-30" locale: fr category: fingerprint tags: ["drm", "widevine", "eme", "fingerprinting", "privacy"] published: true
Le risque pour la vie privee
L'API Encrypted Media Extensions (EME) permet aux sites web d'interroger le support des systemes de cles DRM sans aucune permission utilisateur. Les reponses revelent des informations specifiques a l'appareil : systemes de cles supportes, niveaux de securite et capacites de codecs. Ces signaux varient par plateforme et ne changent pas entre les sessions.
La solution BotBrowser
BotBrowser gere les signaux lies au DRM a travers son systeme de profils. Lorsqu'un profil est charge, toutes les reponses EME s'alignent avec la plateforme cible et la configuration du navigateur du profil.
Configuration DRM basee sur le profil
chrome --bot-profile="/path/to/profile.enc" \
--user-data-dir="$(mktemp -d)"
Le profil controle quels systemes de cles apparaissent comme supportes, quels niveaux de robustesse sont rapportes et comment le navigateur repond aux requetes de capacite.
Widevine en mode headless
Les navigateurs headless standard manquent souvent de support Widevine, ce qui est en soi un signal fort. BotBrowser maintient la disponibilite de Widevine en mode headless, de sorte que les requetes de capacite DRM retournent les memes resultats avec ou sans fenetre visible.
Coherence multiplateforme
Un profil Windows Chrome fonctionnant sur un serveur Linux rapporte des caracteristiques DRM appropriees pour Windows, y compris le niveau de securite correct, les valeurs de robustesse et les capacites de codecs.
Verification
Apres avoir charge un profil, verifiez les signaux DRM :
const { chromium } = require('playwright-core');
const browser = await chromium.launch({
executablePath: '/path/to/botbrowser/chrome',
args: [
'--bot-profile=/path/to/profile.enc',
],
headless: true,
});
const page = await (await browser.newContext()).newPage();
const drmInfo = await page.evaluate(async () => {
const config = [{
initDataTypes: ['cenc'],
videoCapabilities: [{
contentType: 'video/mp4; codecs="avc1.42E01E"',
robustness: 'SW_SECURE_DECODE'
}],
}];
try {
const access = await navigator.requestMediaKeySystemAccess(
'com.widevine.alpha', config
);
return { widevine: true, config: access.getConfiguration() };
} catch {
return { widevine: false };
}
});
console.log('Signaux DRM:', JSON.stringify(drmInfo, null, 2));
Verifications cles :
- La disponibilite de Widevine correspond a la plateforme du profil
- Les niveaux de robustesse sont coherents entre le mode headless et avec fenetre
- Differents profils produisent des reponses distinctes et appropriees pour la plateforme
Pour commencer
- Telechargez BotBrowser depuis GitHub
- Chargez un profil avec
--bot-profilepour appliquer la protection des signaux DRM - Verifiez que les reponses EME correspondent a la plateforme cible du profil
- Consultez la documentation pour les details de configuration des profils