AliExpress тайно снимает отпечаток браузера через WebAudio и мешает Bluetooth-наушникам
Автор блога рассказывает о странной проблеме с Bluetooth-наушниками, которые поддерживают функцию multipoint, одновременное подключение сразу к двум устройствам. Обычно наушники играют музыку с телефона, а уведомления и звук с YouTube воспроизводятся через компьютер, и так работает без сбоев, до того момента, пока в Firefox или Chrome (другие браузеры не проверялись) не открывается домашняя страница AliExpress. Вскоре после её загрузки звук с телефона перестаёт воспроизводиться, а закрытие вкладки AliExpress сразу всё исправляет. Отключение звука на вкладке, в самом браузере или в Windows не помогает, при этом на странице не видно ни видео, ни музыки, ни какого-либо другого медиаконтента, этого оказалось достаточно, чтобы разобраться, в чём тут дело.
Первой мыслью было автовоспроизводящееся видео товара или реклама, поэтому первым делом были проверены обычные подозреваемые: элементы
Это сработало: во время записи в режиме бездействия домашняя страница AliExpress создавала два объекта AudioContext, оба переходили в рабочее состояние и оба подключали узлы к AudioContext.destination, и всё это при по-прежнему полном отсутствии элементов
Оба скрипта строят похожий граф Web Audio: пилообразный осциллятор (sawtooth oscillator) → AnalyserNode → ScriptProcessorNode → GainNode, выставленный в ноль → AudioContext.destination. Осциллятор генерирует заранее известную форму волны, AnalyserNode измеряет результат уже после того, как его обработала аудиоподсистема браузера, а скрипт считывает данные о частоте. GainNode выставлен в ноль, так что пользователь не должен ничего услышать, но граф всё равно подключён к системному аудиовыходу, а значит браузер продолжает активно его обрабатывать, даже если итоговая громкость нулевая. Это принципиально отличается от автовоспроизведения видео: здесь нет медиаэлемента, который могла бы остановить обычная кнопка отключения звука вкладки, с точки зрения страницы она выполняет полноценную обработку звука в реальном времени. На технике автора, судя по всему, этого оказалось достаточно, чтобы Firefox или Windows держали Bluetooth-аудиотракт активным и не давали Bluetooth-наушникам с функцией multipoint переключиться обратно на телефон.
По мнению автора, это похоже на фингерпринтинг устройства. WebAudio-тест, не единственный замер в этих скриптах: в коде также нашлись запросы или измерения рендеринга canvas и вызовов toDataURL(), сведений о WebGL-рендерере, поддерживаемых расширениях и точности шейдеров, вывода аудиоосциллятора и анализатора, размеров экрана и вьюпорта, соотношения пикселей устройства (device pixel ratio), числа ядер процессора и объёма памяти устройства, установленных плагинов браузера, поддерживаемых аудио- и видеоформатов, поведения WebRTC, тайминга производительности браузера, событий мыши, касаний, фокуса и прокрутки, движения и ориентации устройства, а также свойств, обычно указывающих на автоматизацию браузера. В коде есть и логика сериализации и шифрования результатов с последующей отправкой на серверы телеметрии Alibaba через fetch() или sendBeacon(). В сумме это довольно полный отпечаток браузера и устройства. Аудиофингерпринтинг работает потому, что небольшие различия между версиями браузеров, операционными системами, аудиобиблиотеками и оборудованием дают чуть разные результаты обработки одного и того же сгенерированного сигнала: сам по себе такой сигнал не всегда однозначно определяет устройство, но становится куда полезнее в сочетании с данными canvas, WebGL, оборудования, таймингов и взаимодействия со страницей. В более поздней правке к посту автор указывает на отдельный разбор WebAudio-кода за авторством разработчика Firefox tomrittervg.
Что именно AliExpress делает с полученными данными на своих серверах, из браузера не видно, автор прямо признаёт, что не может это проверить: отпечаток может использоваться как постоянный идентификатор устройства, а может быть лишь одним из сигналов для оценки риска мошенничества или бота. У AliExpress хватает причин отличать обычных покупателей от автоматических или подозрительных клиентов и отслеживать поведение пользователей: площадке приходится бороться со взломом аккаунтов, фейковыми аккаунтами, скрапингом, автоматическими покупками, платёжным мошенничеством, накруткой отзывов и злоупотреблением купонами и промоакциями для новых клиентов, а заодно собранные данные о поведении помогают в маркетинге. Куки для этой цели не так надёжны, их можно удалить, скопировать или подменить, тогда как отпечаток из множества независимых замеров браузера подделать согласованно намного сложнее. Данные о взаимодействии со страницей также помогают понять, управляет ли браузером человек или автоматика, это может снижать число случаев мошенничества и позволять доверенным покупателям проходить дальше без капчи на каждой странице, хотя и сам AliExpress от капчи с ИИ-генерацией не отказывается.
Автор пишет, что не хочет, чтобы обычная страница интернет-магазина втихую задействовала графику, звук, WebRTC, данные об оборудовании и датчики движения для отслеживания поведения, тем более с таким раздражающим побочным эффектом, как блокировка музыки. Проверка показала: если заблокировать оба скрипта, домашняя страница AliExpress по-прежнему нормально загружается, а во время контрольной записи новые объекты AudioContext и подключения к destination не появляются. В Firefox автор пользуется официальным расширением uBlock Origin (его автор, Raymond Hill) и добавляет в пользовательские фильтры два правила, которые блокируют запросы к collina.js (путь /g/AWSC/uab/) и fireyejs.js (путь /g/AWSC/fireyejs/) на assets.aliexpress-media.com, но только когда их запрашивает домен aliexpress.com. После добавления правил нужно закрыть уже открытые вкладки AliExpress: заблокированный скрипт не останавливает уже созданный аудиоконтекст, поэтому в старой вкладке проблема никуда не денется.
Автор подчёркивает, что правила фильтра намеренно узкие, они блокируют только эти два конкретных семейства скриптов и только когда их запрашивает AliExpress, и не исключает, что в будущем они перестанут работать, если сайт изменит скрипты. Поскольку эти скрипты, судя по всему, связаны с системой защиты от мошенничества, их блокировка может обернуться дополнительными капчами или проблемами при входе в аккаунт и оформлении заказа; сам автор планирует временно отключать правила, если AliExpress откажется пропустить легитимный вход или платёж. Итог: домашняя страница AliExpress незаметно создаёт два работающих графа Web Audio из сильно обфусцированных скриптов безопасности Alibaba как часть куда более крупного отпечатка браузера, а нулевой по громкости, но подключённый к системному аудиовыходу граф на технике автора удерживал Bluetooth-аудиотракт активным и не давал наушникам с функцией multipoint переключиться обратно на телефон, при этом отключение звука вкладки не помогало, поскольку обычного медиаэлемента для отключения там просто не было. После блокировки collina.js и fireyejs.js через uBlock Origin скрытые аудиоконтексты перестали появляться, и музыка с телефона больше не прерывалась при просмотре AliExpress.
Ключевые факты
- Домашняя страница AliExpress тайно создаёт два объекта AudioContext, их создают скрипты collina.js (версия 1.140.0) и fireyejs.js (версия 1.231.67) из каталога AWSC, часть инструментов Alibaba для защиты браузера и борьбы со злоупотреблениями.
- Аудиограф, пилообразный осциллятор → AnalyserNode → ScriptProcessorNode → GainNode, выставленный в ноль → системный аудиовыход, не производит слышимого звука, но всё равно подключён к AudioContext.destination, из-за чего браузер продолжает активно его обрабатывать.
- На технике автора это удерживало Bluetooth-аудиотракт активным настолько, что наушники с функцией multipoint не могли переключиться обратно с компьютера на телефон, а обычное отключение звука вкладки, браузера или Windows не помогало, медиаэлемента, который можно было бы заглушить, на странице попросту не было.
- Те же скрипты дополнительно измеряют рендеринг canvas, параметры WebGL, размеры экрана, число ядер процессора и объём памяти, установленные плагины, поведение WebRTC, движения мыши и устройства и другие признаки, и шифруют, а затем отправляют всё это на серверы телеметрии Alibaba как единый отпечаток браузера и устройства.
- Блокировка collina.js и fireyejs.js двумя пользовательскими правилами uBlock Origin убрала скрытые аудиоконтексты и вернула нормальное переключение Bluetooth, но, по предупреждению автора, может обернуться лишними капчами или проблемами при входе и оплате, поскольку скрипты, похоже, завязаны на систему защиты от мошенничества.
Почему это важно
AliExpress, один из крупнейших в мире сайтов онлайн-покупок, и его домашняя страница незаметно строит развёрнутый отпечаток браузера и устройства: два скрипта Alibaba (collina.js и fireyejs.js из каталога AWSC) создают на странице два объекта AudioContext, которые генерируют пилообразный сигнал и анализируют, как его обработал браузер, и всё это без единого элемента
Кому это важно
Пользователям AliExpress и других сервисов Alibaba, которые не подозревают, что домашняя страница задействует их звуковую подсистему ради слежки. Владельцам Bluetooth-наушников с функцией multipoint, которые сталкивались с необъяснимыми сбоями переключения между устройствами и не догадывались, что причина, в открытой вкладке интернет-магазина. Разработчикам браузеров и исследователям приватности, которые изучают методы фингерпринтинга: у истории уже есть продолжение, отдельный разбор WebAudio-части от разработчика Firefox tomrittervg, добавленный правкой к посту. И командам, которые строят собственные системы анти-фрода и защиты от ботов, история на живом примере показывает, как далеко заходят подобные скрипты и какие у такого подхода есть побочные эффекты.
Как это применить
Практический рецепт из поста, заблокировать оба семейства скриптов расширением uBlock Origin: в пользовательские фильтры добавляются два правила, которые перехватывают запросы к collina.js (путь /g/AWSC/uab/) и fireyejs.js (путь /g/AWSC/fireyejs/) на assets.aliexpress-media.com, но только когда их запрашивает домен aliexpress.com. После добавления правил все уже открытые вкладки AliExpress нужно закрыть: блокировка скрипта не останавливает уже созданный аудиоконтекст, поэтому в старой вкладке проблема никуда не денется. По проверке автора, при заблокированных скриптах домашняя страница AliExpress загружается и работает как обычно, а новых объектов AudioContext и подключений к destination во время контрольной записи не появляется. Оговорка: правила намеренно узкие и завязаны на конкретные имена и пути файлов, если AliExpress их переименует или перестроит, фильтр придётся обновлять; а поскольку скрипты, судя по всему, связаны с анти-фрод системой площадки, их блокировка может обернуться лишними капчами или проблемами при входе в аккаунт и оформлении заказа, в этом случае автор советует временно отключать правила.
Можно ли доверять
Источник, личный блог, пост написан от первого лица, имя автора нигде не указано (в тексте есть только домен блога, а не имя человека). Это разбор одного конкретного случая на одной технике автора, проверенный только в Firefox и Chrome, другие браузеры, мобильные приложения и чужие устройства не тестировались. При этом выводы опираются не на догадки, а на прямые технические доказательства: перехвачены сами вызовы конструктора AudioContext и метода AudioNode.connect(), в обфусцированном коде найдены конкретные версии скриптов (collina.js 1.140.0, fireyejs.js 1.231.67), а находка эмпирически подтверждена, после блокировки скриптов скрытые аудиоконтексты пропали, и Bluetooth снова переключается нормально. Есть и независимое продолжение: отдельный разбор того, что именно фингерпринтит этот WebAudio-код, от разработчика Firefox tomrittervg (добавлено более поздней правкой к посту). Но ни AliExpress, ни Alibaba в тексте никак не прокомментировали и не подтвердили назначение скриптов; что именно происходит с собранными данными на серверах компании, используются ли они как постоянный идентификатор устройства, как один из сигналов анти-фрод системы или как-то ещё, из браузера не видно, и автор прямо говорит, что не может это ни доказать, ни исключить. Сколько времени эти скрипты уже работают на сайте и когда их развернули, в посте тоже не указано.
Риски и подводные камни
Главный риск для пользователя не в самом слежении, а в его непрозрачности: без специального инструментария вроде перехвата конструкторов Web Audio обнаружить скрытую обработку звука невозможно, а обычные средства, отключение звука вкладки, браузера или системы, не действуют, потому что отключать формально нечего. Отдельный риск для тех, кто решит заблокировать скрипты: поскольку они, по всей видимости, часть анти-фрод системы, блокировка может привести к дополнительным капчам или сбоям при входе в аккаунт и оплате заказа, и тогда правила придётся временно отключать. Сам способ блокировки хрупкий, правила завязаны на конкретные имена файлов и пути, и при следующем обновлении скриптов на стороне AliExpress они могут перестать работать. И главное: WebAudio-тест, лишь один из множества замеров в составе куда большего отпечатка (canvas, WebGL, параметры оборудования, тайминги, поведенческие данные вроде движений мыши и устройства), которые шифруются и уходят на серверы телеметрии Alibaba, а что происходит с этими данными дальше и как долго они хранятся, из браузера пользователя проверить нельзя.