Анонимность
September 13, 2020

Выбираем худший антидетект-браузер

Проверим 4 топовых антидетект браузера: Linken Sphere, AntBrowser, Aezakmi и Indigo. Многие из нас задавались вопросом «какой антидетект-браузер выбрать?», и главное: «как выбирать?». Проблема в том, что в виду высокой сложности эмуляции чужой системы все антидетект-браузеры палятся. В этой статье мы рассмотрим, как они палятся, как минимизировать запал, а также я дам вам минимальное представление об устройстве каждого из них, чтобы вы могли выбрать сами.

Итак, сегодня рассмотрим эти 4 браузера:

Linken Sphere, AntBrowser, Aezakmi и Indigo (он же «multilogin»).

Сначала теория. Нужно понимать, что каждый антидетект-браузер сделан на базе движка обычного браузера. Как правило, это Chromium или Firefox. Фундаментальные различия во внутреннем устройстве движков столь велики, что с помощью javascript на странице сайт всегда может определить, в каком на самом деле движке загружена страница сайта, которую мы просматриваем. Это значит, что антифрод знает, сделан ли ваш браузер на основе IE, хрома или фф.

Примеры:

  • только в ИЕ есть поддержка ActiveX, объекты Debug, document.security, navigator.cpuClass и десятки других,
  • только в ФФ и Сафари есть поддержка MathML,
  • только в Хроме есть shape detection api,
  • только в Хроме и ФФ есть поддержка кодека webM в теге video,

И этот список можно продолжать бесконечно. Различий настолько много, что появился отдельный сайт http://caniuse.com/, позволяющий проверить, поддерживается ли тот или иной функционал в разных браузерах. Отсюда первое правило работы с антидетект-браузером: используйте UserAgent, соответствующий движку вашего антидетекта. Например, если ваш антидетект сделан на Хромиуме, и ваша ось — это мак, то используйте самый обычный UserAgent хрома на маке, например Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.163 Safari/537.36

Железо не должно быть уникальным. Оно должно быть «таким же, как у всех». Характеристики железа вашего пк отражаются в следующих отпечатках:

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

Других способов опознать ваше железо через браузер на десктопе, например, узнать серийник жесткого диска, процессора или цветовой профиль монитора, не существует. На мобильных к списку добавляется акселерометр (и данные по его калибровке), но это тема отдельной статьи. Желающие углубиться в теорию могут посмотреть презентацию разработчика гугла https://elie.net/publication/picasso-lightweight-device-class-fingerprinting-for-web-clients/ (eng) про фингерпринт на основе WebGL, используемый в том числе и в ReCaptcha.

Чем менее уникальный каждый из этих отпечатков, тем меньше к вашему устройству вопросов, т.к. оно «такое же, как и все». Ни один из этих отпечатков не позволяет уникально идентифицировать ваше устройство, но позволяет условно определить его «класс» (например «ПК с дискретным видео», или «телефон, вероятно айфон»). И лучший способ держать эти отпечатки правдоподобными — не трогать их. Без шуток.

Второе правило работы с антидетект-браузером: не трогай свои железные отпечатки.

Когда мы используем прокси другой страны, неизбежно встает вопрос о смене отображаемого языка, часового пояса, и возможно набора шрифтов, соответствующего вашей локали (в случае работы с азиатскими рынками). Есть три основных способа подменить в браузере возвращаемые через 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. Ничего нигде не торчит, ничего не палится, кроме…

  • Выключен http3 протокол, который поумолчанию доступен в хроме с 2013 года. Каждый сайт видит тип соединения и протокол (http1.1, h2 или http/2+quic, он же http3), по которому к нему обращаются. И в случае, если к сайту, поддерживающему http3 идет обращение от хрома, но по http2, то или это обращение идет через прокси, или это не настоящий хром. И первый и второй выводы, сделанные антифрод системой — плохи для нас.
  • При отрисовке текста в качестве моноширинного шрифта используется шрифт Times, который не является моноширинным. В дикой природе это невозможно и это очевидный признак подмены шрифтов. Моноширинный шрифт — тот, у которого ширина всех символов (например w и i) одинаковая, например Courier new. Согласно спецификации при указании в стилях элемента font-family: monospace; браузер должен взять один из доступных моноширинных шрифтов (в системе хотя бы один такой шрифт обязательно доступен).
разница видна даже на глаз

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

Linken Sphere

Антидетект на базе хромиума. Самый дорогой из всех, и самый рекламируемый. В его толстовках приходят на интервью в «Люди-Pro», и его пиарят в журнале «Хакер». На самом деле он собран на базе хромиума от ~2018 года:

А это значит, что мы не только лишены не самых нужных вещей, типа поддержки apng, VP9 и AV1 кодеков, но и открыты к множеству уязвимостей, которые были исправлены в хроме за эти годы. Помимо этого, так же, как и в Indigo, не работает поддержка http3.

Все параметры подделываются после инициализации страницы с помощью javascript, и любой сайт может это видеть (с помощью метода, который я описал выше):

что тут скажешь…

Паршиво. Но можно ли сдедать хуже? Посмотрим

AntBrowser

Антидетект на базе ФФ, позиционарующий себя как инструмент для работы с ру-сервисами типа Авито и Юлы. На чем палится:

  • Поскольку браузер на базе ФФ, все попытки представиться хромом будут провалены, из-за разницы в устройстве движков. Наличие переменной window.chrome — как раз такая неудачная попытка. На странице одновременно присутствует объект window.chrome и объекты sidebar, screen.mozLockOrientation, navigator.oscpu, которые однозначно указывают, что движок браузера — ФФ
  • Так же, как и в Indigo используется фарш из шрифтов. И используется обыкновенный шрифт вместо моноширинного:
  • Все переменные на странице подменяются через javascript:

Разработчик пытался исправить ситуацию и подменял не свойства самого объекта navigator, а свойства у прототипа его конструктора navigator.constructor.prototype. И это бы сработало, если бы их геттеры не содержали десятки килобайт обфусцированного кода, который доступен каждому сайту/антифроду.

  • На каждой странице в dom-дереве к тегу <html> добавляется параметр data-acxscriptallow="true", который указывает, что на странице запущено расширение для браузера AudioContext Fingerprint Defender. То есть код этого расширения был содран и добавлен в антидетект «как есть».

Можно ли сделать еще хуже?

AEZAKMI

Антидетект на основе хромиума. Позиционируется как «Cheat Code for Your Anonimity». На старте при создании профиля разработчики пытаются удержать нас от возможности слить реальные webGL-отпечатки, разрешая только создание профиля с отключенной поддержкой 3d-ускорения:

«ANGLE» в названии указывает на отсутствие поддержки 3d-ускорения в браузере. Но на этом хорошие новости заканчиваются.

На чем палится:

  • Браузер из коробки запускается с флагом —disable-web-security. Это настолько плохо, насколько вообще может быть.

Запущенный таким образом хром не только отключает CORS, но и дает сайтам понимание, что что-то у вас, наверное, не так.

  • Так же, как и в случае с AntBrowser, на каждой странице к тегу <html> добавляются параметры data-cbscriptallow="true" и data-acxscriptallow="true", которые указывают на присутствие кода от расширений для спуфинга canvas и audio отпечатков.
  • Массив плагинов подделывается криво и не имеет поля собственной длины:

Это однозначно указывает на то, что список плагинов фальшивый.

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

В этих данных содержатся в том числе:

  • Имя текущего профиля
  • Ваш логин на сайте AEZAKMI
  • Все данные по используемому прокси: proxyIp, proxyPort, proxyUser, proxyPassword в открытом виде.

И к этим данным имеет доступ любой сайт, который вы откроете в этом антидетекте. Резюмируя, AEZAKMI — это будка самоубийцы, ценой в 70$ в месяц.

Заключение

Действительно ли все настолько плохо на рынке антидетектов? Да, на данный момент, безусловно, все паршиво. Но зачастую именно антидетект - лучшее решение, которое можно и нужно использовать, однако с головой.

INVISIBLE - Юмор и мануалы по анонимности!
HIDDEN_PEOPLE - Самый анонимный чат в Telegram!