Encontrando Bots Sigilosos en el Juego del Escondite de Javascript

Rate this content
Bookmark

JavaScript tiene muchos casos de uso - uno de ellos es la detección automatizada de navegadores. Esta es una charla técnica que presenta una visión general del estado del arte de los navegadores automatizados para el fraude publicitario, cómo engañan a muchas soluciones de detección de bots y los métodos únicos que se han utilizado para identificarlos de todos modos.


11 min
20 Jun, 2022

Video Summary and Transcription

La charla aborda los desafíos de detectar y combatir bots en la web. Explora diversas técnicas como la detección del agente de usuario, tokens, el comportamiento de JavaScript y el análisis de la caché. La evolución de los bots y los avances en los navegadores automatizados los han vuelto más flexibles y difíciles de detectar. La charla también destaca el uso de la huella digital de lienzo y la necesidad de personas inteligentes para combatir el problema en constante evolución de los bots.

Available in English

1. Introducción a los Bots en la Web

Short description:

Estoy aquí para preguntar qué está pasando con los bots en la web. Hablaremos sobre detecciones simples, cómo los bots han mejorado. Hablaremos sobre lo que posiblemente sea el mejor bot que está engañando a la mayoría de las soluciones de detección. Y por último, llegaremos a mi parte favorita, que es cómo puedes encontrarlos de todos modos. Mi trabajo consiste en jugar al escondite con estos bots, para que los anunciantes puedan evitarlos. Muchas personas se enfrentan a este problema, como las redes sociales y los vendedores de entradas para conciertos, porque Internet no fue diseñado teniendo en cuenta la detección de bots. Cuando haces eso, sí, historia real, cuando tenía 16 años, los proyectos de productos de la escuela secundaria pueden haber dejado de funcionar en algún sitio. Así que para mejorar Internet, queremos detectarlos. Hablemos de las detecciones. Empezando por lo básico. User agent. ¿Identifica el encabezado de la solicitud HTTP el navegador? Ustedes lo saben. Si es un bot de Python, lo bloqueas. Probablemente no haya un usuario real detrás de eso. Los creadores de bots descubrieron esto, saben cómo ocultar el user agent. Digamos que no ejecutas JavaScript en tu bot.

con los bots en la web. No estoy hablando de los amigables, los de testing. Estoy hablando de los malos. Hablaremos sobre detecciones simples, cómo los bots han mejorado. Hablaremos sobre lo que posiblemente sea el mejor bot que está engañando a la mayoría de las soluciones de detección. Y por último, llegaremos a mi parte favorita, que es cómo puedes encontrarlos de todos modos. Pero antes de todo eso, una de las razones por las que estoy aquí es porque siempre me ha gustado desempacar cosas, y ahora soy el ingeniero inverso de DoubleVerify. Ellos miden anuncios. Pero mi trabajo consiste en jugar al escondite con estos bots, para que los anunciantes puedan evitarlos. Pero no solo los anunciantes y los juegos. También se trata de las redes sociales, los vendedores de entradas para conciertos, muchas personas que enfrentan este problema porque Internet no fue diseñado teniendo en cuenta la detección de bots. En serio. El único estándar real es bots.txt, que le dice a los bots qué pueden y no pueden hacer. Básicamente, es un sistema de honor que pide a las personas buenas que sean amables. Cuando haces eso, sí, historia real, cuando tenía 16 años, los proyectos de productos de la escuela secundaria pueden haber dejado de funcionar en algún sitio. Pero algunas personas realmente lo hacen a propósito y a gran escala, negando el servicio a usuarios reales, utilizando lo que tienen para robar, zapatillas de deporte, infiltrándose en las redes sociales con usuarios falsos. Practico esa parte. Así que para mejorar Internet, queremos detectarlos. Hablemos de las detecciones. Empezando por lo básico. No porque los creadores de bots no puedan jugar con esto, sino porque generalmente son lo primero en lo que te basas cuando desarrollas algo más complicado porque las detecciones simples son bastante directas. User agent. ¿Identifica el encabezado de la solicitud HTTP el navegador? Ustedes lo saben. Si es un bot de Python, lo bloqueas. Probablemente no haya un usuario real detrás de eso. Los creadores de bots descubrieron esto, saben cómo ocultar el user agent. Digamos que no ejecutas JavaScript en tu bot.

2. Detectando Bots con Tokens y Comportamiento de JavaScript

Short description:

Puedes usar tokens y el comportamiento de JavaScript para detectar bots en tu sitio. Las peculiaridades del navegador se pueden utilizar para verificar la verdadera naturaleza de un navegador. Profundizar en JavaScript puede revelar intentos de ocultar algo.

ocultar el user agent. Digamos que no ejecutas JavaScript en tu bot. Tal vez crees un token como detección en el sitio. En Azure, asegúrate de que esté creado. Entonces, si tienes un bot que navega en tu sitio y no genera este token, ni ejecuta JavaScript, sabes que algo está saliendo mal. Pero supongamos que sí ejecutan JavaScript. De repente, puedes verificar cómo se comporta el navegador. Probablemente ustedes odian las peculiaridades del navegador. Los creadores de bots también las odian, porque se pueden utilizar para verificar lo que está debajo del capó y no lo que el navegador está informando a simple vista. Y a veces puedes profundizar en JavaScript para ver si alguien está intentando

3. Detectando Bots con User Agent y Pruebas de Comportamiento

Short description:

El user agent, ocultándose con object.define property. Cosas divertidas, atributo malo, artefacto accidental para la detección. Tema del gato y el ratón, ocultando el to string. Formas inteligentes de evitarlo, vectores repetidos. La biblioteca JavaScript creep.js, efectividad limitada. Usando datos, tokens, tokens duplicados, navegaciones sin sentido para atrapar bots. Las cachés como otra vía de detección. Pruebas de comportamiento, frecuencia de clics del usuario.

tratando de ocultar algo. El user agent, ya hablamos de eso. Esa propiedad en el navegador de la ventana va a ser de solo lectura. Entonces los marcadores de bots, van a ocultar eso con object.define property. Miras el descriptor de la propiedad, ves que alguien hizo cosas divertidas allí, tratando de ocultar un user agent. Eso va a ser una imagen sospechosa aquí, ya que tienes un atributo malo que te identifica. Lo arreglas en algo perfectamente normal como el creador de bots accidentalmente deja atrás un artefacto que se puede usar para incriminarte y eso va a ser utilizado para la detección. Esto va a ser un tema común. El juego del gato y el ratón de la detección de bots. Otro ejemplo es que el creador de bots puede anular el to string en algo que están tratando de ocultar. Entonces miras el to string, el to string, ellos también lo ocultan. Hay un juego divertido establecido allí. Formas inteligentes de evitar esto, la idea clave aquí es el tema del gato y el ratón que se repetirá en más detecciones. Digamos que eres realmente bueno en estas tonterías. Creas una biblioteca JavaScript como creep.js para identificar un navegador bajo el capó. Eso solo llega hasta cierto punto porque los creadores de bots pueden ver lo que estás haciendo. Cada vez que los encuentras de alguna manera, van a evolucionar, van a parchar un poco y ahora tenemos que usar algo más. Digamos que en un sitio quieres usar data. Data puede ser complicado porque tienes que lidiar con problemas de privacidad o usuarios indisciplinados que estás testing, pero digamos que tienes un sitio al que los usuarios van solo por el bien de argumento. En cada página pones un token generado que puedes validar si un usuario lo atraviesa. Puedes ver a dónde fue ese usuario. De repente tienes un nuevo campo para atrapar estos bots, tokens duplicados, navegaciones sin sentido, cualquier cosa que te dé la más mínima pista de que alguien tal vez haya preprogramado tu lógica de alguna manera. No es un usuario real navegando. Algunos de ustedes podrían estar pensando, hey, ¿los usuarios también hacen esto? Y eso es absolutamente cierto. Con las cachés y demás. Es por eso que esto no es una prueba concluyente por sí sola, pero las cachés, por ejemplo, también introducen otra vía para la detección de bots. Algunos bots limpian demasiado la caché. Y entraremos en la detección advanced en un momento, pero aún en el ámbito de las detecciones simples de la vieja escuela, las pruebas de comportamiento. ¿Cuántas veces debe hacer clic el usuario?

4. Bots, Cachés y Navegadores Automatizados

Short description:

¿Cuánto hace cada usuario? Y vas a mirar en los extremos y por un lado tienes cero, que va a ser mi padre haciendo clic absolutamente cero veces después de un largo día de trabajo. Pero en el otro extremo, tienes personas haciendo clic 172 veces por segundo. Las cachés se usaban originalmente para distinguir a los humanos de los bots, pero ralentizan a los bots. La evolución de los bots y los avances en los navegadores automatizados los han vuelto más flexibles y difíciles de detectar. Puppeteer, el navegador automatizado de Google, es el líder en el botting, lo que lo hace accesible y difícil de detectar.

¿en el lado? Digamos en una hora. OK. Entonces, va a haber un pequeño espectro. ¿Cuánto hace cada usuario? Y vas a mirar en los extremos y por un lado tienes cero, que va a ser mi padre haciendo clic absolutamente cero veces después de un largo día de trabajo. Pero en el otro extremo, tienes personas haciendo clic 172 veces por segundo. OK, estamos avanzando ahí. Y también, las cachés. Eso es lo que se nos ocurrió originalmente para distinguir a los humanos de los bots. Puede que te preguntes, hey, ¿por qué no empiezas con eso? La razón es que los bots se entrenan, ellos destruyen absolutamente a los humanos en los simples. Y esto es para las captchas complejas también. Entonces, las captchas no están ahí para prevenir a los bots. Lo que hacen actualmente, la razón por la que las ves, es que ralentizan a los bots. Avanzando, hablemos de cómo los bots mejoraron. Acercándonos a la detección advanced, esa parte, los creadores de bots no han estado durmiendo en su guardia todo este tiempo. Mejoraron, siguen mejorando con cada pequeño parche que evolucionan. Eventualmente, el juego se volvió a su favor. Hace diez años, luchaban con scripts de Python. En noticias recientes, ahora se retuitea públicamente, así que aquí hay un tipo que se queja de esto a Elon Musk. Contáctame en la sesión de preguntas y respuestas si quieres hablar más sobre los buscadores y los sombrereros sobre esto. Estoy en lo correcto en eso. La idea es que la evolución es realmente buena en la mejora gradual y la resolución de problemas. Los bots eventualmente podrían volverse indistinguibles de los humanos por completo. Pero pasando de divagaciones filosóficas a la práctica, los mayores avances técnicos que hicieron los bots en el eso va a ser los navegadores automatizados. Los navegadores automatizados cambiaron el juego, no más solicitudes en Python, estás tomando todo el navegador, ejecutas el DOM en JavaScript, incluso puedes fingir ser el usuario. Los navegadores automatizados se volvieron realmente buenos en su tarea, permiten a los creadores de bots falsificar atributos como el user agent sin dejar el artefacto detrás que normalmente se haría en JavaScript. Eso hace que los bots sean más flexibles, más difíciles de detectar. Las peculiaridades del navegador y todo eso son útiles cuando la solución de automatización del navegador admite el navegador con cualquier peculiaridad que tenga y puedes tomar al usuario también con estas usando JavaScript puro o ganchos del navegador, desplazándote por algunos artículos con Windows Scrolls, aquí hay algunos navegadores automatizados que son buenos para testing pero no seas como algunos de los operadores de bots que descubrí que los usan para esquemas fraudulentos porque no están destinados a ocultar nada, son fáciles de detectar, no, quieres algo en lo que estamos llegando al líder aquí. Quieres algo basado en este chico, Puppeteer. Ese es el navegador automatizado de Google. No es malicioso ni intenta ocultar pero es realmente bueno en su tarea y se hace muy fácil de ampliar, hace todo muy fluido y con eso, todas las piezas encajaron, vemos que los bots se están volviendo mejores, los navegadores automatizados disponibles y los operadores mejorando su juego, así nació el bot rey. Este chico, Puppeteer X-Distill, es el mejor en ocultarse para que pueda ejecutarse headless, lo que significa que no se muestra en la pantalla, aún no se detecta, es increíble, increíblemente fácil de usar, haciendo que el botting realmente bueno sea muy accesible. La comunidad detrás de esto es un ejército que busca incluso las discrepancias más mínimas y, por ejemplo, parchean la concurrencia de hardware, que es la cantidad de procesadores disponibles que tienes, para que puedan escalar las operaciones, ejecutar muchos de estos en la misma computadora sin siquiera levantar sospechas de que hay bots, un campo de juego completamente diferente. Dejaron algunas huellas cuando parchearon este atributo en el prototipo, la gente lo detectó en la pantalla, lo encontraron.

5. Detectando Bots: Canvas Fingerprinting y Más

Short description:

Hablemos sobre el canvas fingerprinting y cómo se puede falsificar. El modo headless de Chromium facilita llenar objetos con valores falsos para la detección. Los bots fáciles pueden ser detectados, pero los bots difíciles requieren técnicas como la concurrencia de hardware, pruebas de comportamiento y análisis de datos. Al analizar los datos del agente de usuario, puedes identificar incluso a los mejores bots. Internet necesita más personas inteligentes para combatir el problema en evolución de los bots.

lo parchearon, lo hicieron rápido. Hablemos sobre algo más difícil de falsificar, el canvas fingerprinting, eso es cuando renderizas dinámicamente un canvas para identificar tu dispositivo junto con el navegador. Debería ser más difícil de falsificar, bam, estos fallos desarrollan una extensión que informa valores falsos utilizando ganchos de JavaScript, así que resuelven prácticamente todo.

Quiero tomarme el tiempo para explicar solo uno de estos antes de pasar rápidamente a los demás, el Chromium aquí, cuando está en modo headless, no termina el Chrome.csi, la aplicación Chrome, todas esas cosas de performance, para pensar, ¿puede detectar a Puppeteer cuando está en modo headless con esto? De repente, no tan rápido, amigo, llenan cada objeto con valores falsos como este, navigator Chrome, tiempos de carga, runtime, aplicación, y así sucesivamente, cualquier cosa que se pueda usar para la detección, lo están haciendo muy fácil de usar, molestan elegantemente, recuerda, los CAPTCHA son solo dos líneas aquí, un poco de dinero, y lo resuelven. Y todo esto va a ser solo con estas dos líneas aquí. Todo de lo que hablamos, muy fácil de usar, las pruebas de bots no pudieron encontrarlo, simplemente cuelgan la detección de bots en su repositorio, pero prometo que, llegaremos a lo que realmente funciona, esa parte, lo hice en 10 minutos, está bien. Obviamente, no puedo especificar demasiado aquí, pero comencemos con la parte fácil. Los bots fáciles son fáciles de detectar. Voy a mencionar tres formas de enfrentar a los bots difíciles. Esto será rápido, pero lo diré más de lo que hay por ahí. Comenzando con cosas como la concurrencia de hardware, todavía hay más artefactos de JavaScript que se pueden encontrar si sabes dónde buscar. Sin embargo, estos se están volviendo cada vez más raros, así que no contaría con ellos a largo plazo, pero la ventaja aquí es que son muy claros.

Lo que mantendremos en mente es las pruebas de comportamiento y el análisis de datos a nivel de sesión. Las pruebas de comportamiento que aún funcionan generalmente observan las discrepancias del contexto de la ventana que interactúan con el DOM, y el análisis de datos puede tomar muchas formas, por ejemplo, digamos que seleccionas perfectamente el agente de usuario , la pregunta es qué valor pones allí, mira este gráfico, ese es el agente de usuario al navegar a una aplicación, cada punto es cuántas personas navegaron con ese agente de usuario específico, dirías que hay cierta variación aquí, pero esto es cómo se supone que debe verse. La línea azul es casi plana, así que probablemente sea porque el bot se las arregló para variar correctamente el agente de usuario, pero se equivocó completamente en la parte del peso. Probablemente solo estén produciendo estos al azar. Los sitios normales no hacen esto, y aquí tienes una forma de detectar incluso al mejor bot. Entonces, al principio te pregunté qué pasa con los bots en la web. No puedo decirte con certeza, pero lo que sí sé es que están mejorando, necesitamos más personas inteligentes como tú para estar conscientes para que Internet se convierta en un lugar mejor. Gracias y no dudes en contactarme.

Check out more articles and videos

We constantly think of articles and videos that might spark Git people interest / skill us up or help building a stellar career

TechLead Conference 2023TechLead Conference 2023
35 min
A Framework for Managing Technical Debt
Let’s face it: technical debt is inevitable and rewriting your code every 6 months is not an option. Refactoring is a complex topic that doesn't have a one-size-fits-all solution. Frontend applications are particularly sensitive because of frequent requirements and user flows changes. New abstractions, updated patterns and cleaning up those old functions - it all sounds great on paper, but it often fails in practice: todos accumulate, tickets end up rotting in the backlog and legacy code crops up in every corner of your codebase. So a process of continuous refactoring is the only weapon you have against tech debt.In the past three years, I’ve been exploring different strategies and processes for refactoring code. In this talk I will describe the key components of a framework for tackling refactoring and I will share some of the learnings accumulated along the way. Hopefully, this will help you in your quest of improving the code quality of your codebases.

React Summit 2023React Summit 2023
24 min
Debugging JS
As developers, we spend much of our time debugging apps - often code we didn't even write. Sadly, few developers have ever been taught how to approach debugging - it's something most of us learn through painful experience.  The good news is you _can_ learn how to debug effectively, and there's several key techniques and tools you can use for debugging JS and React apps.
Node Congress 2022Node Congress 2022
26 min
It's a Jungle Out There: What's Really Going on Inside Your Node_Modules Folder
Top Content
Do you know what’s really going on in your node_modules folder? Software supply chain attacks have exploded over the past 12 months and they’re only accelerating in 2022 and beyond. We’ll dive into examples of recent supply chain attacks and what concrete steps you can take to protect your team from this emerging threat.
You can check the slides for Feross' talk here.
React Advanced Conference 2022React Advanced Conference 2022
22 min
Monolith to Micro-Frontends
Top Content
Many companies worldwide are considering adopting Micro-Frontends to improve business agility and scale, however, there are many unknowns when it comes to what the migration path looks like in practice. In this talk, I will discuss the steps required to successfully migrate a monolithic React Application into a more modular decoupled frontend architecture.
React Advanced Conference 2023React Advanced Conference 2023
22 min
Power Fixing React Performance Woes
Next.js and other wrapping React frameworks provide great power in building larger applications. But with great power comes great performance responsibility - and if you don’t pay attention, it’s easy to add multiple seconds of loading penalty on all of your pages. Eek! Let’s walk through a case study of how a few hours of performance debugging improved both load and parse times for the Centered app by several hundred percent each. We’ll learn not just why those performance problems happen, but how to diagnose and fix them. Hooray, performance! ⚡️

Workshops on related topic

React Summit Remote Edition 2021React Summit Remote Edition 2021
87 min
Building a Shopify App with React & Node
Top Content
WorkshopFree
Shopify merchants have a diverse set of needs, and developers have a unique opportunity to meet those needs building apps. Building an app can be tough work but Shopify has created a set of tools and resources to help you build out a seamless app experience as quickly as possible. Get hands on experience building an embedded Shopify app using the Shopify App CLI, Polaris and Shopify App Bridge.We’ll show you how to create an app that accesses information from a development store and can run in your local environment.
React Summit 2023React Summit 2023
56 min
0 to Auth in an hour with ReactJS
WorkshopFree
Passwordless authentication may seem complex, but it is simple to add it to any app using the right tool. There are multiple alternatives that are much better than passwords to identify and authenticate your users - including SSO, SAML, OAuth, Magic Links, One-Time Passwords, and Authenticator Apps.
While addressing security aspects and avoiding common pitfalls, we will enhance a full-stack JS application (Node.js backend + React frontend) to authenticate users with OAuth (social login) and One Time Passwords (email), including:- User authentication - Managing user interactions, returning session / refresh JWTs- Session management and validation - Storing the session securely for subsequent client requests, validating / refreshing sessions- Basic Authorization - extracting and validating claims from the session token JWT and handling authorization in backend flows
At the end of the workshop, we will also touch other approaches of authentication implementation with Descope - using frontend or backend SDKs.
JSNation 2022JSNation 2022
41 min
Build a chat room with Appwrite and React
WorkshopFree
API's/Backends are difficult and we need websockets. You will be using VS Code as your editor, Parcel.js, Chakra-ui, React, React Icons, and Appwrite. By the end of this workshop, you will have the knowledge to build a real-time app using Appwrite and zero API development. Follow along and you'll have an awesome chat app to show off!
GraphQL Galaxy 2021GraphQL Galaxy 2021
164 min
Hard GraphQL Problems at Shopify
WorkshopFree
At Shopify scale, we solve some pretty hard problems. In this workshop, five different speakers will outline some of the challenges we’ve faced, and how we’ve overcome them.

Table of contents:
1 - The infamous "N+1" problem: Jonathan Baker - Let's talk about what it is, why it is a problem, and how Shopify handles it at scale across several GraphQL APIs.
2 - Contextualizing GraphQL APIs: Alex Ackerman - How and why we decided to use directives. I’ll share what directives are, which directives are available out of the box, and how to create custom directives.
3 - Faster GraphQL queries for mobile clients: Theo Ben Hassen - As your mobile app grows, so will your GraphQL queries. In this talk, I will go over diverse strategies to make your queries faster and more effective.
4 - Building tomorrow’s product today: Greg MacWilliam - How Shopify adopts future features in today’s code.
5 - Managing large APIs effectively: Rebecca Friedman - We have thousands of developers at Shopify. Let’s take a look at how we’re ensuring the quality and consistency of our GraphQL APIs with so many contributors.
JSNation 2023JSNation 2023
57 min
0 To Auth In An Hour For Your JavaScript App
WorkshopFree
Passwordless authentication may seem complex, but it is simple to add it to any app using the right tool.
We will enhance a full-stack JS application (Node.js backend + Vanilla JS frontend) to authenticate users with One Time Passwords (email) and OAuth, including:
- User authentication – Managing user interactions, returning session / refresh JWTs- Session management and validation – Storing the session securely for subsequent client requests, validating / refreshing sessions
At the end of the workshop, we will also touch on another approach to code authentication using frontend Descope Flows (drag-and-drop workflows), while keeping only session validation in the backend. With this, we will also show how easy it is to enable biometrics and other passwordless authentication methods.