Випущено версію 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. Звісно, замінювати ці поля на реальні значення з іншого пристрою було б неправильним, тому що це створило б невідповідність між мовою системи і поточним проксі. Тому було розроблено алгоритм, який "з'єднує" країну/мову поточного ip і формат реальних полів з реального пристрою. Наприклад, якщо оригінальний заголовок був таким 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. Поточний ip, країна і мова отримуються при застосуванні проксі.
Детальніше про поле Accept-Language https://tools.ietf.org/html/rfc7231#section-5.3.5 Результати тестування алгоритму https://pastebin.com/raw/mmgVmbyb
Однією з властивостей заліза до яких сайт має доступ через javascript є заряд акумулятора. Дослідження в статті наведеній нижче показують, що ця інформація не небезпечна для користувача, оскільки дозволяє відстежувати його лише в короткостроковій перспективі. Дійсно, заряд акумулятора постійно змінюється, а передбачити які значення будуть через тривалий час неможливо. Проте, для відстеження масових дій такий метод може бути корисним. Уявіть, що ви запускаєте BAS з ноутбука, а сайт бачить як одночасно проходять тисячі реєстрацій з пристрою, заряд якого дорівнює 56%, а до кінця зарядки залишилося 35 хвилин. Звісно, можна запускати софт лише на стаціонарному пристрої або повністю зарядженому ноутбуці, але це теж може бути підозрілим при застосуванні мобільних відбитків. Тому було вирішено емулювати зарядку/розрядку акумулятора, а також усі події і повертані апі значення на пристроях, які мають акумулятор. Інформацію про його наявність надає сервіс FingerprintSwitcher. Ось як це може виглядати: на графіку видно, що значення поступово зменшуються.
Стаття про відбитки акумулятора https://eprint.iacr.org/2015/616.pdf Результати роботи апі для вашого браузера https://fingerprints.bablosoft.com/battery Не вдалося знайти сервіс, який показує значення в динаміці, тому зробив свій.
BAS використовує деяку кількість допоміжного коду для пошуку елементів, впровадження розв'язання рекапчі та іншого. Раніше софт можна було виявити за наявністю цього функціоналу, тому в новій версії він прихований, усі імена функцій генеруються для кожного потоку різні. Перероблено механізм впровадження відбитків, якщо раніше BAS покладався на використання конструкцій виду Object.defineProperty, то зараз підміна відбувається всередині браузера. Старий метод використовується лише для зміни списку плагінів і в місцях де це абсолютно необхідно. Наприклад, Chrome, на відміну від Firefox не підтримує апі для роботи з VR шоломами. Тому для емуляції цього функціоналу доводиться використовувати javascript. Обхід деяких інших методів, які використовуються для визначення рушія браузера також переписано на с++.
Було покращено емуляцію роботи з мишею. Тепер при переміщенні до елемента невидимого на екрані використовується колесо миші, а не javascript як раніше. Якщо елемент перебуває далеко за межами видимої області, швидкість скролу набагато швидша, ніж якби він був зовсім поруч. При цьому переміщення відбуваються "ривками", як у реальних користувачів. Ось як це виглядає. Первісне положення курсора вибирається випадково, а не в лівому верхньому куті як раніше. Збільшено частоту генерації подій пов'язаних з переміщенням миші.
Емуляція порядку заголовків тимчасово не працювала при переході до тунелювання. Зараз цей функціонал повернено. Порядок заголовків береться з реального пристрою.
Додано можливість зберігати відбиток у папці профілю і завантажувати його звідти при застосуванні профілю. При отриманні інформації про поточний профіль можна дізнатися, чи містить він відбиток, результат буде повернено у змінну HAS_FINGERPRINT.
Було повністю переписано алгоритм заміни шрифтів. Раніше BAS впроваджувався в процес браузера "на льоту" і підмінював деякі системні виклики, зараз той самий ефект досягається за рахунок зміни вихідного коду браузера. Нова реалізація дозволяє змінювати набір шрифтів не перезавантажуючи браузер, а також позбутися деяких багів. Зараз для повноцінної роботи бажано, щоб на машині, на якій запускається BAS було встановлено якомога більше шрифтів, у майбутньому нові шрифти будуть генеруватися самостійно за рахунок додавання шуму.
Додано підтримку тунелювання флеш. Це означає, що абсолютно всі запити, які робить процес флеш будуть проходити через заданий проксі. Слід розуміти, що флеш має набагато більші можливості ніж javascript і тому його увімкнення - удар по анонімності. У BAS скоріш за все не будуть застосовуватися техніки для того, щоб зробити флеш безпечнішим, як це робиться з javascript тому що його підтримку буде припинено Adobe у 2020 році https://theblog.adobe.com/adobe-flash-update/ Якщо елемент з флеш менший за певний розмір Chrome просить користувача підтвердити його запуск, у новій версії BAS зроблено так, користувач автоматично погоджується це зробити (якщо флеш увімкнено).
Перевірити ip повертаний через флеш можна на цьому сайті https://whatleaks.com/
Деякі інші зміни, що не стосуються відбитків:
Веб-інтерфейс тепер може використовувати localStorage для зберігання налаштувань софту між запусками.
Виклик методу BAS_API з Node.js тепер генерує виняток у разі помилки. Тепер можна зробити так:
try await BAS_API(load("wrongurl11111.com")!) catch(e) console.log(Щось пішло не так: $e) Нове налаштування для застосунків із захистом: "Дозволяти запускати лише один екземпляр застосунку".
Виконувані файли BAS тепер підписані. Це дозволить швидше проходити перевірку SmartScreen на Windows 10, а також уникнути хибнопозитивних спрацьовувань антивірусів.
Заново переписано механізм перетягування блоків за межі робочої області (при оновленні браузера він перестав працювати).
Виправлено безліч багів, серед яких:
Виправлено баг зі встановленням referrer і перенаправленнями сторінки. Мережеві помилки при завантаженні проекту в скомпільованих скриптах тепер не повідомляють url сервера. Виправлено зникнення попереднього проекту після невдалого завантаження.
При переході на нову версію BAS, старі проекти працюватимуть по-старому, якщо ви хочете використовувати новий функціонал, то потрібно почати редагувати дії 'Проксі', 'Застосувати відбиток' і 'Отримати відбиток' і натиснути на Ok нічого не змінюючи.
Це не всі зміни, що перебувають у розробці, до кінця року планується випустити новий аддон для BAS - FingerprintDetector.