DataDome

Détection de Headless Chrome : Spotlight sur Puppeteer-Extra-Plugin-Stealth

Table des matières

Le mode headless du navigateur Google Chrome, alias Headless Chrome, est incroyablement populaire depuis son lancement en 2017. Un outil très utile pour exécuter des tests automatisés, Headless Chrome est également extrêmement pratique pour automatiser le trafic Web malveillant, càd les bots.

Ici, nous allons examiner les navigateurs headless, Headless Chrome, et les technologies utilisées par les développeurs de robots pour éviter la détection, en mettant l’accent sur une bibliothèque appelée « puppeteer-extra-plugin-stealth ».

Qu’est-ce qu’un navigateur headless ?

L’interface utilisateur graphique (GUI) d’un programme est appelée tête. Un navigateur headless est un navigateur sans GUI, ce qui signifie qu’il n’affiche rien sur l’écran. Au lieu de contrôler les actions du navigateur via GUI, les utilisateurs contrôlent les navigateurs headless via les instructions de code.

Sous la surface, les navigateurs headless se comportent comme les autres navigateurs. Cela les rend très pratiques pour les développeurs, qui bénéficient de toutes les fonctionnalités de vrais navigateurs, mais ont besoin beaucoup moins de CPU/RAM.

Les navigateurs Headless peuvent être utilisés pour exécuter des tests à grande échelle des applications Web, naviguer entre les pages sans interférence humaine, valider les fonctions JavaScript, et bien plus encore. Le navigateur headless le plus populaire est Headless Chrome.

Malheureusement, les navigateurs headless sont également utilisés pour automatiser les tâches malveillantes. Les cas d’utilisation les plus courants sont le scraping, le remplissage d’informations d’identification/la prise de compte, l’augmentation des impressions d’annonces et la numérisation des vulnérabilités sur un site Web.

Qu’est-ce que Puppeteer ?

Pour instrumentaliser Headless Chrome, les développeurs peuvent utiliser CDP (Chrome DevTools Protocol) ou un framework de niveau supérieur. Un de ces framework est Puppeteer, une bibliothèque NodeJS qui fournit une API de haut niveau pour contrôler Headless Chrome ou Chromium sur le protocole DevTools.

Puppeteer aide les développeurs de bot à créer leurs bots plus rapidement, car il fournit déjà des fonctions pour de nombreuses tâches clés telles que la navigation sur une page, l’attente qu’un élément CSS soit visible, etc. Un wrapper léger appelé « puppeteer-extra » intensifie Puppeteer avec la fonctionnalité du plugin, comme détaillé ci-dessous.

Le succès de Puppeteer a incité d’autres à faire de même. En 2020, Microsoft a publié Playwright (créé par l’équipe derrière Puppeteer), un framework d’automatisation qui permet aux développeurs d’effectuer des tests sur plusieurs navigateurs.

Puppeteer peut-il être détecté ?

Pour les développeurs de bot, la fonctionnalité la plus utile de Puppeteer est qu’elle fournit des fonctionnalités complètes du navigateur en plus d’exécuter Chrome en mode headless sur un serveur. De cette manière, le contenu JavaScript sera exécuté, et la requête semble provenir d’un navigateur Chrome régulier.

Par défaut, Headless Chrome expose le fait qu’il soit automatisé via la propriété “navigator.webdriver”. Mais les acteurs malveillants ont rapidement trouvé des moyens de contourner cela, et de contourner les techniques d’empreinte digitale communes en appliquant des techniques de falsification simples.

Néanmoins, l’instrumentation de Headless Chrome avec un framework tel que Puppeteer laisse toujours des traces qui permettent de le détecter en tant qu’utilisateur non humain. Même si Chrome et Headless Chrome sont extrêmement similaires, il existe des différences subtiles dans l’empreinte digitale du navigateur qui peuvent être utilisées pour les distinguer.

En effet, quelques jours après la sortie de Headless Chrome, j’ai démontré qu’il était relativement simple de faire la distinction entre un navigateur Chrome authentique utilisé par les humains et les navigateurs Headless Chrome.

Puppeteer-extra-plugin-stealth à la rescousse ?

Bien sûr, les développeurs de bots ne pouvaient pas accepter que les bots créés avec Headless Chrome et Puppeteer soient détectés en raison des indices dans leurs empreintes digitales de navigateur. Une réponse ? Puppeteer-extra-plugin-stealth.

Le plugin furtif expose une API similaire à Puppeteer, ce qui le rend pratique pour les développeurs de bots qui utilisent déjà Puppeteer. Son principal objectif est de masquer l’état du navigateur headless en effacant les différences d’empreintes digitales subtiles entre Headless Chrome et les navigateurs Chrome standard (utilisés par les humains).

Par exemple, le plugin furtif effacera les différences telles que “navigator.webdriver = true”, en utilisant l’indicateur –disable-blink-features=AutomationControlled lors du lancement de Headless Chrome.

Le plugin furtif écrase l’objet natif « navigator.plugins » pour qu’il apparaisse humain :

Screenshot of code to demonstrate puppeteer-extra-plugin-stealth.

Par défaut, cet attribut est présent sur les navigateurs Chrome authentiques, mais pas sur les navigateurs Headless Chrome.

Les créateurs du plugin ont fait beaucoup d’efforts pour s’assurer que la manière avec laquelle ils remplacent cette propriété semble légitime en imitant des objets natifs de manière réaliste. Ils ne remplacent pas seulement la propriété « navigator.plugins » avec un objet Array simple. Au lieu de cela, ils essaient de donner l’impression que l’objet a le type approprié (PluginArray), ainsi que toutes les mêmes propriétés, qu’un véritable navigateur Chrome aurait :

Screenshot of code to demonstrate puppeteer-extra-plugin-stealth.

Détection de puppeteer-extra-plugin-stealth :

Si le développeur de bot choisit un agent utilisateur qui est quelque peu réaliste, les empreintes digitales HTTP/TLS ne sont plus utiles pour détecter puppeteer-extra-plugin-stealth. Puisque le plugin est basé sur un navigateur headless, les empreintes digitales seront cohérentes.

Les principales techniques qui sont utiles pour détecter le plugin furtif sont :

  • Un puissant moteur de détection de comportement.
  • Réputation IP/session avancée.
  • Empreinte digitale du navigateur JavaScript avancée.

Alors que les deux premières techniques nous permettent de détecter que le navigateur est instrumenté, elles ne nous aident pas à lier l’activité de session spécifiquement à puppeteer-extra-plugin-stealth. Elles nous aident « uniquement » à signaler la demande comme venant d’un bot.

Cependant, en utilisant les techniques d’empreinte digitale du navigateur JavaScript avancées, nous pouvons toujours détecter les signatures ou les « effets secondaires » causés par la façon dont puppeteer-extra-plugin-stealth surpasse certaines propriétés natives.

D’une part, Google travaille à détecter les bots avec reCAPTCHA, mais d’autre part, ils ont créé Headless Chrome. La solution de Google pour bloquer les bots n’est pas efficace contre leur propre technologie. Pour l’instant, DataDome est la seule solution que j’ai testée qui peut détecter Headless Chrome.

Guillaume Hausser, PDG de Listforge

Les principaux avantages sont que nous pouvons détecter le bot à sa première exécution JavaScript, et que nous pouvons lier la session de bot spécifiquement à puppeteer-extra-plugin-stealth. Cela aide à améliorer notre compréhension du plugin lui-même, des outils et des offres bot-as-a-service qui l’utilisent.

Puppeteer-Extra-Plugin-ReCAPTCHA

Puppeteer-extra-plugin-stealth est utilisé spécifiquement pour forger l’empreinte digitale du navigateur, mais puppeteer-extra offre également d’autres fonctionnalités de plugin. Le plus populaire est puppeteer-extra-plugin-recaptcha, un plugin de ferme CAPTCHA.

Screenshot of code to demonstrate puppeteer-extra-plugin-stealth.

Comme nous pouvons le voir sur la capture d’écran ci-dessous, les utilisateurs ont juste besoin de fournir leur clé d’API pour la ferme de CAPTCHA 2Captcha et le plugin leur permet de passer les CAPTCHA en utilisant un simple appel API :

Screenshot of code to demonstrate puppeteer-extra-plugin-stealth.

Parce que DataDome détecte avec précision puppeteer-extra-plugin-stealth, cependant, nous pouvons bloquer ces bots avant qu’ils aient une chance de passer les CAPTCHA.

Pourquoi la détection de puppeteer-extra-plugin-stealth est-elle importante

Puppeteer-extra-plugin-stealth est très populaire parmi les développeurs de bot. Chaque semaine, le moteur de détection DataDome signale ~40 millions de demandes directement liées à Puppeteer extra stealth.

Puppeteer-extra-plugin-stealth request count vs. timestamp graph.

La popularité du plugin est également démontrée par le nombre d’étoiles du dépôt (3.6K) et le nombre de fourches (452) au moment de l’écriture de cet article.

Screenshot of code to demonstrate puppeteer-extra-plugin-stealth.

En outre, l’équipe de recherche sur les menaces de DataDome a constaté que nombre des fournisseurs de bot-as-a-service les plus populaires, tels que Bright Data, ScrapingBee et ScraperAPI, se fient à puppeteer-extra-plugin-stealth (lorsque les utilisateurs choisissent d’exécuter JavaScript).

La capacité à détecter rapidement et avec précision puppeteer-extra-plugin-stealth nous permet de protéger efficacement nos clients contre les attaques qui utilisent BaaS. Cela nous permet également de signaler les proxys résidentiels qu’ils utilisent comme étant exploités par les bots, ce qui est un signal utile utilisé par nos modèles d’apprentissage automatique pour identifier d’autres bots.

La détection des empreintes digitales du plugin furtif, puis des sessions et des IPs liés, permettent à DataDome de bloquer plus de 50 millions de demandes malveillantes chaque semaine !