Выпущена версия 21.5.1. В ней содержится множество изменений связанных с анонимностью браузера. Давайте рассмотрим их подробнее:
Современные браузеры поддерживают апи для работы со звуком. Используя методы этого апи сайт может генерировать и обрабатывать звук, а также получать доступ к бинарным данным. По аналогии с Canvas и WebGL, данные звука также содержат небольшие отличия в зависимости от железа, браузера и системы. Эти отличия могут быть использованы чтобы идентифицировать вас среди других пользователей сайта даже при использовании прокси. В новой версии поддерживается смена отпечатка аудио - BAS добавляет разные шаблоны шума в возвращаемые данные при каждой смене отпечатка. Кроме того, данное апи также дает доступ к разным системным параметрам связанных со звуком. BAS подменяет эти параметры, значения берутся из реальных устройств при помощи сервиса FingerprintSwitcher.
Подробнее о б этой технике можно прочитать в этой статье http://randomwalker.info/publications/OpenWPM_1_million_site_tracking_measurement.pdf пункт 6.4.
На этом сайте можно получить отпечаток аудио для вашего браузера https://audiofingerprint.openwpm.com/
Сайт может получать данные об языке системы несколькими способами. Это заголовок Accept-Language, navigator.language и navigator.languages, а также некоторые методы апи для интернализации. Эти свойства могут содержать не один, а несколько языков, также заголовок Accept-Language имеет разный формат в зависимости от системы. Эти отличия служат одним из факторов для отпечтака браузера. После небольшого теста обнаружилось, что на 20000 пользователей приходится 751 уникальных значений поля Accept-Language. Конечно, заменять эти поля на реальные значение из другого устройства было бы неправильным, потому что это создало бы несоответствие между языком системы и текущим прокси. Поэтому был разработан алгоритм, который "соединяет" страну/язык текущего ип и формат реальных полей из реального устройства. Например, если оригинальный заголовок был таким ru-RU,en-US;q=0.9, а прокси находится в Германии, то результат будет таким de-DE,en-US;q=0.9. Алгоритм корректно сохраняет формат и удаляет ненужные языки, например, такое поле ru, uk;q=0.8, be;q=0.8, en;q=0.7, *;q=0.01 будет заменено таким de, en;q=0.8, *;q=0.01. Текущий ип, страна и язык получаются при применении прокси.
Подробнее о поле Accept-Language https://tools.ietf.org/html/rfc7231#section-5.3.5
Результаты тестирования алгоритма https://pastebin.com/raw/mmgVmbyb
Одним из свойств железа к которым сайт имеет доступ через javascript является заряд аккумулятора. Исследования в статье приведенной ниже показывают, что данная информация не опасна для пользователя, поскольку позволяет отслеживать его только в краткосрочной перспективе. Действительно, заряд аккумулятора постоянно меняется, а предсказать какие значения будут через длительное время невозможно. Тем не менее, для отслеживания массовых действий такой метод может быть полезен. Представьте, что вы запускаете BAS с ноутбука, а сайт видит как одновременно проходят тысячи регистраций с устройства, заряд которого равен 56%, а до конца зарядки осталось 35 минут. Конечно, можно запускать софт только на стационарном устройстве или полностью заряженном ноутбуке, но это тоже может быть подозрительно при применении мобильных отпечатков. Поэтому было решено эмулировать зарядку/разрядку аккумулятора, а также все события и возвращаемые апи значения на устройствах, который имеют аккумулятор. Информацию о его наличие предоставляет сервис FingerprintSwitcher. Вот как это может выглядеть: https://i.imgur.com/tDnZFDl.png на графике видно, что значения постепенно уменьшаются.
Статья об отпечатках аккумулятора https://eprint.iacr.org/2015/616.pdf
Результаты работы апи для вашего браузера https://fingerprints.bablosoft.com/battery Не удалось найти сервис, который показывает значения в динамике, поэтому сделал свой.
BAS использует некоторое количество вспомогательного кода для поиска элментов, внедрения решения рекапчи и другого. Раньше софт можно было обнаружить по наличию этого функционала, поэтому в новой версии он спрятан, все имена функций генерируются для каждого потока разные. Переработан механизм внедрения отпечатков, если раньше BAS полагался на использование конструкций вида Object.defineProperty, то сейчас подмена происходит внутри браузера. Старый метод используется только для изменения списка плагинов и в местах где это абсолютно необходимо. Например, Chrome, в отличие от Firefox не поддерживает апи для работы с VR шлемами. Поэтому для эмуляции этого функционала приходится использовать javascript. Обход некоторых других методов, которые используются для определения движка браузера также преписаны на с++.
Была улучшена эмуляция работы с мышью. Теперь при перемещении к элементу невидимому на экране используется колесо мыши, а не javascript как раньше. Если элемент находится далеко за пределами видимой области, скорость скрола намного быстрее, чем если бы он был совсем рядом. При этом перемещения происходят "рывками", как у реальных пользователей. Вот как это выглядит https://i.imgur.com/IdH2edf.gifv. Первоначальное положение курсора выбирается случайно, а не в левом верхнем углу как раньше. Увеличена частота генерации событий связанных с перемещением мыши.
Эмуляция порядка заголовков временно не работала при переходе к туннелированию. Сейчас этот функцинал возвращен. Порядок заголовков берется из реального устройства.
Добавлена возможность сохранять отпечаток в папке профиля и загружать его от туда при применении профиля. При получении информации о текущем профиле можно узнать, содержит ли он отпечаток, результат будет возвращен в переменную HAS_FINGERPRINT.
Был полностью переписан алгоритм замены шрифтов. Раньше BAS внедрялся в процесс браузера "на лету" и подменял некоторые системные вызовы, сейчас тот же эффект достигается за счет изменения исходного кода браузера. Новая реализация позволяет менять набор шрифтов не перезагружая браузер, а также избавится от некоторых багов. Сейчас для полноценной работы желательно, чтобы на машине, на которой запускается BAS было установлено как можно шрифтов, в будущем новые шрифты будут генерироваться самостоятельно за счет добавления шума.
Добавлена поддержка туннелирования флеш. Это означает, что абсолютно все запросы, которые делает процесс флеш будут проходить через заданный прокси. Следует понимать, что флеш обладает гораздо большими возможностями чем javscript и поэтому его включение - удар по анонимности. В BAS скорее всего не будут применятся техники для того, чтобы сделать флеш более безопасным, как это делается с javscript потому что его поддержка будет прекращена Adobe в 2020 году https://theblog.adobe.com/adobe-flash-update/ Если элемент с флеш меньше определенного размера Chrome просит пользователя подтвердить его запуск, в новой BAS версии сделано так, пользователь автоматически соглашается это сделать(если флеш включен).
Проверить ип возвращаемый через флеш можно на этом сайте https://whatleaks.com/
Некоторые другие изменения не касающиеся отпечтаков:
Веб интерфейс теперь может использовать localStorage для хранения настроек софта между запусками.
Bызов метода BAS_API из Node.js теперь генерирует исключение в случае ошибки. Теперь можно сделать так:
try
{
await BAS_API(`load("wrongurl11111.com")!`)
}catch(e)
{
console.log(`Что-то пошло не так: ${e}`)
}
Новая настройка для приложений с защитой: "Разрешать запускать только один экземпляр приложения".
Исполняемые файлы BAS теперь подписаны. Это позволит быстрее проходить проверку SmartScreen на Windows 10, также избежать ложноположительных срабатываний антивирусов.
Заново переписан механизм перетягивания блоков за пределы рабочей области(при обновлении браузера он перестал работать).
Исправлено множество багов, среди которых:
Исправлен баг с установкой referrer и перенаправлениями страницы.
Сетевые ошибки при загрузке проекта в скомпилированных скриптах теперь не сообщают урл сервера.
Исправлено исчезновение прошлого проекта после неудачной загрузке.
При переходе на новую версию BAS, старые проекты будут работать по старому, если вы хотите использовать новый функционал, то нужно начать редактировать действия 'Прокси', 'Применить отпечаток' и 'Получить отпечаток' и нажать на Ok ничего не меняя.
Это не все изменения находящиеся в разработке, до конца года планируется выпустить новый аддон для BAS - FingerprintDetector.