May 16, 2020

Антідетектед браузери

Всім привіт я на зв'язку!
Сьогодні обсудимо таку тему як браузери і навіщо вони потрібні арбітражнику.

У цій статті я розповім і покажу на прикладах, аргументовано, без домислів і теорій, як вони палятся, як мінімізувати ризик того щоб Вас попалили, і дам вам мінімальне уявлення про будову кожного з них, щоб ви могли вибрати самі.

Їх буде 4 штуки, я вибрав самі популярні і адекватні

Linken Sphere, AntBrowser, Aezakmi і Indigo (ще в простонароді відомий як "multilogin").

Спочатку теорія

1. Кожен антідетект-браузер зроблений на базі двіжка звичайного браузера. Як правило це Chromium або Firefox. Фундаментальні відмінності у внутрішньому устрої двіжків настільки великі, що за допомогою javascript на сторінці сайт завжди може визначити, у якому насправді двіжку завантажена сторінка сайту, яку ми переглядаємо. Це означає, що антифрод знає, зроблений ваш браузер на основі IE, хрому або фф.

Приклади:

  • Тільки в ИЕ є підтримка ActiveX, об'єкти Debug, document.security, navigator.cpuClass і десятки інших.
  • Тільки в ФФ і Сафарі є підтримка MathML.
  • Тільки в Хромі є shape detection api.
  • Тільки в Хромі і ФФ є підтримка кодека webM в тезі video.

І цей список можна продовжувати нескінченно.

Відмінностей на стільки багато, що для розробників з'явився окремий сайт , що дозволяє перевірити, чи підтримується той чи інший функціонал в різних браузерах.

Звідси перше правило роботи з антидетект-браузером:

Використовуйте UserAgent, відповідний двіжку вашого браузера.

Наприклад, якщо ваш браузер зроблений на Хроміумі, і у Вас макбук, то використовуйте звичайний UserAgent хрому на маку, наприклад Mozilla/5.0 (Macintosh; Intel Mac OS X 10145) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.163 Safari/537.36

2. Залізо (Ваш комп) не повинно бути унікальним. Воно має бути таким же, як у всіх. Характеристики заліза вашого пк відображаються в наступних відбитках:

  • Canvas простої (2d) - з допущеннями не унікальний всередині кожної версії кожної ОС. Відмінності у відбитках народяться з-за різниці механізмів згладжування шрифтів у різних операційних системах.
  • WebGL (він же Canvas-3d) - в цьому випадку картинка відбувається безпосередньо через відеокарту (якщо підтримка 3d-прискорення включена в браузері і ос/виртуалкі), і всередині браузера силами його вбудованого рендерера (якщо підтримка 3d-прискорення в ос недоступна, або в браузері відключена), не унікальний для кожної комбінації "ос+відеокарта+драйвер відеокарти" у разі, якщо є підтримка 3d-прискорення, і не унікальний для кожної комбінації "браузер+ос", якщо підтримка 3d-прискорення відсутня/вимкнена. На вибірці 1кк US-трафа на момент написання статті підтримки 3d-прискорення не було на пк у 16% користувачів.
  • Audio - не унікальний всередині кожної версії аудіо-чіпсету вашого девайса.

Інших способів опізнати ваше залізо через браузер на десктопі, наприклад дізнатися серійний номер жорсткого диска або процесора або кольоровий профіль монітора не існує. На телефонах до списку додається акселерометр (та дані з його калібрування), але це тема окремої статті.

Бажаючі заглибитися в теорію можуть подивитися презентацію розробника гугла (eng) про фингерпринт на основі WebGL, використовуваний в тому числі і в ReCaptcha.

Чим меньше Ваш комп відрізняється від інших тим меньше буде до Вас питаннь, оскільки він "такий же, як і у всіх". Жоден з цих відбитків не дозволяє унікально ідентифікувати ваш пристрій, але дозволяє умовно визначити його "клас" (наприклад "ПК з дискретним відео", або "телефон, ймовірно айфон"). І кращий спосіб тримати ці відбитки правдоподібними - не чіпати їх. Без жартів.

Друге правило роботи з антидетект-браузером:

Не чіпай свої залізні відбитки

3. Коли ми використовуємо проксі іншої країни, неминуче постає питання про зміну мови яка відображаться у Вас на ПК, часового поясу, і можливо набору шрифтів, відповідного вашої локалі (у разі роботи з азіатськими ринками)

Є три основних способи підмінити в браузері через javascript значення мов, часового поясу, розширення екрану і тд:

  • переписати ці функції у ісходному коді браузера, до його використання. Це самий надійний і самий складний спосіб.
  • залізти в працюючий процес вкладки і перехоплювати звернення до потрібних функцій в реальному часі. Технічно складно, оскільки зміщення і адреси функцій плавають з кожним оновленням браузера.
  • перезаписати потрібні нам значення прямо на сторінці через javascript, після ініціалізації сторінки, яку ми переглядаємо. Найпростіший в реалізації, але бридкий спосіб, оскільки зробити це непомітно дійсно складно. Як? Я покажу далі, майже всі антідетект-браузери вибрали цей шлях, чим і підставили нас з Вами.

Третє правило антідетект-браузера:

Не чіпай і не змінюй через javascript нічого на сторінці/сайті

Знову звернемося до теорії, щоб зрозуміти, як сайт/антифрод може визначити, що параметри браузера підмінені через javascript. Найчастіше нам потрібно підміняти мову ОС-операційної системи, щоб вона співпадала з гео. Крім того, що вона передається на сайт в заголовку Accept-Language, вона доступна для js через змінну navigator.language.

Властивості об'єкта navigator не можна просто перезаписати, тому що вони доступні тільки для читання.

Read-only-об'єкти в javascript взагалі реалізуються через створення у об'єкта пустого setter-a і не пустого getter-a, що повертає потрібне значення. По-цьому у нас завжди залишається можливість перезаписати такі об'єкти через виклик Object.defineProperty:

Ми можемо привласнити змінюваному об'єкту value, а можемо навісити на нього свій getter, перезаписавши його рідний, і зберегти таким чином "нативное" read-only поведінку цього об'єкту:

Вуа-ля, ми підмінили потрібне нам значення. Але що ж могло піти не так?

Все пішло не так. Спочатку такі об'єкти як navigator, screen і деякі інші не мають власних властивостей, а копіюють всі властивості від конструктора старшого брата (об'єктів Navigator і Screen відповідно). А виклик Object.defineProperty на будь-якому з цих об'єктів створює у них власні властивості:

Таким чином будь-який сайт/антіфрод просто викликавши одну строку коду if (Object.getOwnPropertyNames (navigator) [0]) alert ( 'fake parameters detected'); може визначити, що параметри нашого браузера - фальшивка. І в цей момент весь наворочені захист і емуляція стає безполезною.

Йдем далі

Для створення профілів я вибирав дефалтні настройки, без проксі, з мінімально-можливими підмінами відбитків (екран, кольоровість і вся інша херня)

Indigo

Варіант, зібраний на базі хромиум, з кодовою назвою "Mimic". Самий мощно зроблений браузер з усіх, а також єдиний браузер, в якому підміна параметрів реалізована в ісходніках, а не через js. Нічого ніде не криво, нічого не палится, крім оцієї фігні що я напишу нижче...

На чому палится

1. Виключений http3 протокол, який за замовчуванням доступний в хромі з 2013 року. Кожен сайт бачить тип з'єднання і протокол (http1.1, h2 або http / 2 + quic, він же http3), за яким до нього звертаються. І в разі, якщо до сайту, що підтримує http3 йде звернення від хрому, але по http2, чи це звернення йде через проксі, або це не справжній хром. І перший і другий висновки, зроблені анти-фрод системою - погані для нас.

2. При відображенні тексту в якості моноширинного шрифту використовується шрифт Times, який не є моноширинним. У дикій природі це неможливо і це очевидна ознака підміни шрифтів. Моноширинний шрифт - той, у якого ширина всіх символів (наприклад w і i) однакова, наприклад Courier new. Згідно зі специфікацією при вказівці в стилях елемента font-family: monospace; браузер повинен взяти один з доступних моноширинних шрифтів (в системі хоча б один такий шрифт полюбому доступний).

Невідповідність шрифту сайт може визначити відмалювати його на канвасі, і помірявши, чи збігається ширина символу 'і w, наприклад. Різницю ви можете помітити самі на скріншоті вище. У випадку з Indigo будь-який сайт (антіфрод) може побачити, що використовується фальшивий шрифт, а не рідний системний.

На цьому з Indigo все.

Linken Sphere

Антідетект на базі хроміум. Найдорожчий з усіх, і самий рекламований. У його толстовках приходять на інтерв'ю в "Люди-Pro", і його піарять в журналі "Хакер". Останній раз він оновлювався 13/09/2019 (десь трохи більше ніж пів року тому) і ось тут починається неподобство.

На чому палится

1. Насправді він зібраний на базі хромиум від ~ 2018 року:

а значить ми не тільки позбавлені не найпотрібніших речей, типу підтримки apng, VP9 і AV1 кодеків, але і відкриті до безлічі вразливостей, які були виправлені в хромі за ці роки.

2. Так само, як і в Indigo не працює підтримка http3.

3. Всі параметри підробляються після ініціалізації сторінки за допомогою javascript, і будь-який сайт може це бачити (за допомогою методу, який я описав вище):

Паршиво.

Але чи можна зробити гірше? Подивимося

AntBrowser

Антідетект на базі ФФ, яуий себе позиціонує як інструмент для роботи з ру-сервісами типу Авіто.

На чому палится

1. По скільки браузер на базі ФФ, всі спроби показати себе як хром будуть провалені, через різницю в вдіжках на який вони зроблені. Наявність змінної window.chrome - якраз така невдала спроба.

На сторінці одночасно присутній об'єкт window.chrome і об'єкти sidebar, screen.mozLockOrientation, navigator.oscpu, які однозначно вказують, що двіжок браузера - ФФ

2. Так само як і в Indigo використовується фарш з шрифтів. І використовується звичайний шрифт замість моноширинного:

3. Всі змінні на сторінці підміняються через javascript:

Разработчик питався виправити ситуацію, і підміняв НЕ властивості самого об'єкта navigator, а властивості у прототипу його конструктора navigator.constructor.prototype.

І це б спрацювало, якби їх геттери не містили десятки кілобайт обфусцірованного коду, який доступний кожному сайту чи антіфроду.

4. На кожній сторінці в dom-дереві до тегу додається параметр data-acxscriptallow = "true", який вказує, що на сторінці запущено розширення для браузера AudioContext Fingerprint Defender. Тобто код цього розширення був зідраний і доданий в антідетект "як є". Чи можна зробити ще гірше?

AEZAKMI

Антідетект на основі хроміум.

Позиціонується як "Cheat Code for Your Anonimity". На старті при створенні профілю розробники намагаються утримати нас від можливості злити реальні webGL-відбитки, дозволяючи лише створення профілю з відключеною підтримкою 3d-прискорення:

"ANGLE" в назві вказує на відсутність підтримки 3d-прискорення в браузері але на цьому гарні новини закінчуються.

На чому палится

1. Браузер з коробки запускається з прапором --disable-web-security. Це на стільки погано, на скільки взагалі може бути.

Запущений таким чином хром відключає CORS і будь-який сайт може звернутися, наприклад, до facebook.com і отримати всі наші дані профілю. І Вам торба.

2.Так само, як і в випадку з AntBrowser, на кожній сторінці до тегу додаються параметри data-cbscriptallow = "true" і data-acxscriptallow = "true", які вказують на присутність коду від розширень для спуфинга canvas і audio відбитків.

3. Масив плагінів підробляється криво і не має поля власної довжини:

Це однозначно вказує на те, що список плагінів фальшивий.

4. На кожній сторінці в глобальну змінну webglResponseStr поміщається весь поточний конфіг профілю браузера ціляком:

У цих даних містяться в тому числі:

  • ім'я поточного профілю
  • ваш логін на сайті AEZAKMI
  • всі дані по використовуваному проксі: proxyIp, proxyPort, proxyUser, proxyPassword у відкритому вигляді.

І до цих даних має доступ будь-який сайт, який ви відкриєте в цьому браузері.

Пдведем ітог, AEZAKMI - це будка самогубці, ціною в 70 $ на місяць. Короче шляпа пацани😅

Висновок

Чи справді все на стільки погано на ринку браузерів? Так, на даний момент, безумовно все паршиво. Настільки безвідповідальне ставлення більшості розробників браузерів до своїх клієнтів і їх матеріалу - це не те, що нам потрібно, але все ж користуватись можна.

Ринку необхідні знання, прозорість і конкуренція. В душі я чекаю, що з'явиться більше гравців, які керуються принципом "нормально роби - нормально буде", а не "і так зайде".

"Так яким браузером користуватися-то?".

Моя відповідь - "ніяким", Але ... ... зручність, яку приносить управління десятками профілів з однієї програми підкуповує, і якщо вам все ж потрібен саме антідетект-браузер, на даний момент беріть Indigo - за нього з деякими припущеннями не соромно.

Розповів ніби усе що хотів, вибачаюсь що два дні писав статтю.