Отпечатки

Снятие отпечатков WebAuthn: как FIDO2 API раскрывает вашу идентичность

Как возможности аутентификатора WebAuthn и FIDO2 становятся векторами снятия отпечатков и методы контроля сигналов аутентификации.

Документация

Нужна структурированная документация по теме Отпечатки?

Эта статья относится к редакционной библиотеке. Для пошаговой настройки, справки и постоянных обновлений переходите сразу в соответствующий раздел docs.

Введение

WebAuthn (Web Authentication) - это стандарт W3C, обеспечивающий беспарольную аутентификацию с использованием криптографии с открытым ключом. Он позволяет пользователям входить на веб-сайты с помощью биометрических сенсоров, ключей безопасности или платформенных аутентификаторов, встроенных в их устройства. API обеспечивает работу passkeys, ключей безопасности FIDO2 и биометрических приглашений входа, которые стали все более распространенными на современных веб-сайтах.

WebAuthn является значительным улучшением безопасности, заменяя пароли криптографическими учетными данными, устойчивыми к фишингу. Однако API также раскрывает информацию о возможностях аутентификации устройства. Эти сигналы возможностей варьируются по платформам, оборудованию и версиям браузера, и они могут запрашиваться молча без взаимодействия с пользователем или разрешения. Это делает WebAuthn тонким, но эффективным вектором снятия отпечатков, о котором большинство пользователей совершенно не подозревают.

По мере того как passkeys становятся стандартной заменой паролей, запросы WebAuthn будут становиться еще более распространенными в сети. Защита ваших сигналов WebAuthn является все более важным аспектом комплексной защиты отпечатков.

Влияние на конфиденциальность

Снятие отпечатков по возможностям WebAuthn тонко, но эффективно. Сигналы не требуют взаимодействия с пользователем или разрешения. Веб-сайт может молча запросить доступность аутентификатора до начала любого потока входа и использовать ответы для построения профиля устройства. Это происходит в фоне без какого-либо видимого указания пользователю.

Проблемы конфиденциальности включают:

  • Идентификация платформы: Запросы возможностей раскрывают, есть ли у устройства биометрическое оборудование или чипы безопасности. Устройства с Touch ID, Windows Hello, сенсорами отпечатков пальцев и без биометрического оборудования дают разные ответы. Это немедленно сегментирует пользователей по категориям оборудования и сужает их платформенную идентичность.

  • Определение версии браузера: Определенные функции WebAuthn были добавлены в конкретных версиях браузера. Наличие и поведение этих функций раскрывают диапазон версий браузера, даже после того как усилия по сокращению строки User-Agent сделали заголовок User-Agent менее информативным.

  • Обнаружение headless-браузера: Стандартные headless-среды Chrome обычно сообщают, что платформенный аутентификатор недоступен, потому что в headless-контексте нет оборудования безопасности. Это один из сигналов, используемых для идентификации автоматизированных сред, что важно для исследования конфиденциальности и рабочих процессов автоматизированного тестирования.

  • Матрица поддержки функций: Комбинация доступности аутентификатора, поддержки условного посредничества и другой поддержки функций создает матрицу, которая варьируется по платформам. Разные ОС и аппаратные конфигурации создают отличные комбинации функций, добавляя к общему отпечатку.

Исследование 2023 года, изучающее развертывание WebAuthn на топ-50000 сайтов Alexa, обнаружило, что более 20% сайтов запрашивали возможности WebAuthn, даже когда они не предлагали вход на основе WebAuthn. Это предполагает, что запросы возможностей используются для целей помимо аутентификации, потенциально включая снятие отпечатков и профилирование среды.

Почему это важно для вашей конфиденциальности

Молчаливый сбор данных

Запросы возможностей WebAuthn полностью тихие. Нет запроса разрешений, нет значка уведомления и никакого визуального индикатора. Любой веб-сайт может определить возможности аутентификации вашего устройства в момент посещения, до любого взаимодействия с чем-либо на странице. Этот тихий сбор делает снятие отпечатков WebAuthn особенно тревожным.

Профилирование оборудования

Возможности аутентификации вашего устройства привязаны к его оборудованию. Есть ли у вас биометрический сенсор, какой тип оборудования безопасности доступен и какие методы аутентификации поддерживает ваше устройство, раскрываются через запросы WebAuthn. Этот аппаратный профиль постоянен: он не изменяется при очистке cookies, переключении в режим инкогнито или использовании другого профиля браузера.

Будущее passkeys

Индустрия быстро движется к passkeys как замене паролей. Это означает, что запросы возможностей WebAuthn станут еще более частыми в сети. То, что сейчас является случайным сигналом снятия отпечатков, станет рутинным запросом на большинстве веб-сайтов, делая защиту WebAuthn все более необходимой.

Обнаружение headless-среды

Для исследователей конфиденциальности, инженеров автоматизированного тестирования и всех, кто запускает автоматизацию браузера, сигналы WebAuthn представляют специфическую проблему. Стандартные headless-среды лишены оборудования безопасности, создавая ответы о возможностях, отличающиеся от обычных настольных браузеров. Это различие может идентифицировать автоматизированные среды.

Распространенные подходы к защите и их ограничения

VPN и прокси-серверы

VPN не влияют на сигналы возможностей WebAuthn. Доступность аутентификатора - локальное свойство оборудования, не связанное с сетевой маршрутизацией. Два устройства за одним VPN сообщают совершенно разные возможности WebAuthn на основе их локального оборудования.

Инкогнито и приватный просмотр

Режимы приватного просмотра не изменяют ответы о возможностях WebAuthn. Доступность платформенного аутентификатора одинакова в инкогнито и в обычном окне, потому что API запрашивает аппаратные возможности, а не сохраненные данные.

Расширения браузера

Расширения имеют фундаментальные ограничения с защитой WebAuthn:

  • Поверхность обнаружения: Переопределение методов запроса возможностей на уровне JavaScript изменяет их внутренние свойства и обнаруживается через техники инспекции.
  • Функциональное влияние: Некорректное сообщение о доступности платформенного аутентификатора вызывает проблемы, когда веб-сайт пытается инициировать поток аутентификации, полагающийся на сообщаемые возможности.
  • Ограничения области действия: Расширения не могут контролировать, как браузер обрабатывает вызовы создания и получения учетных данных.

Отключение WebAuthn

Полное отключение WebAuthn (удаление API из браузера) само по себе является сильным сигналом. По мере распространения passkeys отсутствие поддержки WebAuthn становится все более редким в современных браузерах и помечает среду как необычную.

Подход BotBrowser на уровне движка

BotBrowser контролирует сигналы возможностей WebAuthn на уровне движка браузера через свою систему профилей. Все запросы, связанные с аутентификатором, возвращают результаты, согласованные с целевой платформой загруженного профиля. Это не JavaScript-переопределение и не расширение браузера. BotBrowser модифицирует внутренние механизмы отчетности о возможностях аутентификатора браузера, чтобы нативные API сами возвращали согласованные с профилем результаты.

Конфигурация аутентификатора на основе профиля

chrome --bot-profile="/path/to/profile.enc" \
       --user-data-dir="$(mktemp -d)"

Профиль определяет полный набор возможностей WebAuthn: доступность платформенного аутентификатора, поддержку условного посредничества, поддерживаемые методы транспорта, поддержку алгоритмов и доступность функций. Все значения захвачены с реальных устройств, обеспечивая внутреннюю согласованность.

Кроссплатформенная согласованность

Запуск профиля macOS на Linux-сервере демонстрирует мощь контроля на уровне движка. Без BotBrowser Linux-сервер сообщает об отсутствии платформенного аутентификатора. С загруженным профилем macOS запросы возможностей сообщают, что платформенный аутентификатор доступен, соответствуя Mac с настроенной биометрической аутентификацией.

Согласованность headed и headless

BotBrowser поддерживает согласованное поведение WebAuthn как в headed, так и в headless-режимах. Значения профиля применяются независимо от режима отображения, устраняя типичную ситуацию, когда headless-браузеры сообщают о других возможностях аутентификатора, чем headed.

# Headless-режим с полными сигналами WebAuthn
chrome --bot-profile="/path/to/profile.enc" \
       --headless \
       --user-data-dir="$(mktemp -d)"

Настройка и использование

Базовое использование через CLI

Защита WebAuthn автоматическая при загрузке профиля:

chrome --bot-profile="/path/to/profile.enc" \
       --user-data-dir="$(mktemp -d)"

Интеграция с Playwright

const { chromium } = require('playwright-core');

(async () => {
  const browser = await chromium.launch({
    executablePath: '/path/to/botbrowser/chrome',
    args: [
      '--bot-profile=/path/to/profile.enc',
    ],
    headless: true,
  });

  const context = await browser.newContext({ viewport: null });
  const page = await context.newPage();

  // Проверка соответствия сигналов WebAuthn профилю
  const webauthnInfo = await page.evaluate(async () => {
    const results = {};
    if (window.PublicKeyCredential) {
      results.available = true;
      results.platformAuth = await PublicKeyCredential
        .isUserVerifyingPlatformAuthenticatorAvailable();
      if (PublicKeyCredential.isConditionalMediationAvailable) {
        results.conditionalUI = await PublicKeyCredential
          .isConditionalMediationAvailable();
      } else {
        results.conditionalUI = 'not supported';
      }
    } else {
      results.available = false;
    }
    return results;
  });

  console.log('WebAuthn signals:', webauthnInfo);
  await browser.close();
})();

Интеграция с Puppeteer

const puppeteer = require('puppeteer-core');

(async () => {
  const browser = await puppeteer.launch({
    executablePath: '/path/to/botbrowser/chrome',
    args: [
      '--bot-profile=/path/to/profile.enc',
    ],
    headless: true,
    defaultViewport: null,
  });

  const page = await browser.newPage();
  await page.goto('about:blank');

  // Подтверждение активности защиты WebAuthn
  const authInfo = await page.evaluate(async () => ({
    publicKeyCredential: !!window.PublicKeyCredential,
    platformAuth: window.PublicKeyCredential
      ? await PublicKeyCredential
          .isUserVerifyingPlatformAuthenticatorAvailable()
      : false,
  }));

  console.log('Authenticator info:', authInfo);
  await browser.close();
})();

Сочетание с полным профилем

Для комплексной согласованности идентичности:

chrome --bot-profile="/path/to/profile.enc" \
       --bot-noise-seed=42 \
       --proxy-server="socks5://user:pass@proxy:1080" \
       --bot-config-timezone="America/Los_Angeles" \
       --bot-config-locale="en-US" \
       --user-data-dir="$(mktemp -d)"

Проверка

После запуска BotBrowser с профилем убедитесь, что ваши сигналы WebAuthn правильно защищены:

  1. Доступность платформенного аутентификатора возвращает значение, согласованное с платформой профиля. Профиль macOS с биометрическим оборудованием должен сообщать о доступности, а профиль настольного Linux обычно должен сообщать о недоступности.

  2. Поддержка условного посредничества соответствует возможностям версии браузера профиля. Эта функция была введена в конкретных версиях браузера, поэтому ответ должен соответствовать целевой версии профиля.

  3. Согласованность headed и headless поддерживается. Запустите те же запросы в обоих режимах и подтвердите идентичные результаты.

  4. Межпрофильная дифференциация присутствует. Разные платформенные профили должны создавать разные ответы WebAuthn, демонстрируя, что значения поступают из профиля, а не из хост-системы.

  5. Инструменты тестирования отпечатков не показывают несоответствий между сигналами WebAuthn и другими платформенными индикаторами.

Лучшие практики

  1. Используйте платформенно-подходящие профили. Профиль macOS должен сообщать о доступности биометрического аутентификатора. Профиль настольного Linux обычно должен сообщать о недоступности. Профили BotBrowser захвачены с реальных устройств, поэтому это выравнивание встроено.

  2. Проверяйте headless-поведение. При работе в headless-режиме подтвердите, что сигналы WebAuthn соответствуют поведению headed-режима для того же профиля.

  3. Учитывайте экосистему passkeys. По мере распространения passkeys запросы возможностей WebAuthn станут более частыми. Убедитесь, что ваши профили включают соответствующую поддержку условного посредничества для современных версий браузера.

  4. Выравнивайте с другими платформенными сигналами. Доступность WebAuthn должна быть согласована со свойствами navigator, User-Agent и другими ОС-специфичными сигналами в профиле.

  5. Сочетайте с комплексной защитой. WebAuthn - один из многих векторов снятия отпечатков. Для полной защиты используйте полный профиль BotBrowser, охватывающий все поверхности отпечатков.

Часто задаваемые вопросы

Работает ли снятие отпечатков WebAuthn без взаимодействия пользователя?

Да. Запросы возможностей - это пассивные запросы, не требующие взаимодействия пользователя, разрешений и не создающие запросов. Любой веб-сайт может определить возможности аутентификации вашего устройства молча и мгновенно.

Могут ли веб-сайты обнаружить, что сигналы WebAuthn контролируются?

Если контроль применяется на уровне JavaScript (переопределение нативных методов), он может быть обнаружен. BotBrowser применяет контроль на уровне движка, так что нативные методы сами возвращают контролируемые значения без JavaScript-модификаций для обнаружения.

Поддерживает ли BotBrowser реальные потоки аутентификации WebAuthn?

Защита WebAuthn BotBrowser фокусируется на сигналах возможностей, пассивных запросах, которые веб-сайты используют для снятия отпечатков и профилирования среды. Реальные потоки аутентификации (создание учетных данных, подписание вызовов) требуют реального взаимодействия с аутентификатором, что является отдельной задачей от защиты отпечатков.

Как это связано с passkeys?

Passkeys используют API WebAuthn. Сигналы возможностей, контролируемые BotBrowser (доступность платформенного аутентификатора, поддержка условного посредничества), являются теми же сигналами, которые запрашивают реализации passkeys. Контроль этих сигналов обеспечивает согласованную отчетность независимо от среды хоста.

Различаются ли сигналы WebAuthn между версиями Chrome?

Да. Определенные функции были введены в конкретных версиях Chrome. Профили BotBrowser версионированы и включают соответствующий набор функций WebAuthn для целевой версии браузера.

Может ли headless-среда быть идентифицирована только через WebAuthn?

С стандартным headless Chrome - да. Отсутствие платформенного аутентификатора в headless-режиме создает ответ, отличающийся от обычных настольных браузеров. BotBrowser устраняет это, поддерживая согласованные с профилем сигналы WebAuthn в обоих режимах.

Итоги

Сигналы возможностей WebAuthn раскрывают информацию о платформе, оборудовании и версии браузера, которая служит постоянным вектором снятия отпечатков. Доступность платформенного аутентификатора, поддержка условного посредничества и более широкая матрица функций варьируются по устройствам и ОС, создавая отличительный сигнал, не требующий взаимодействия с пользователем. По мере того как passkeys становятся стандартом для веб-аутентификации, эти запросы будут становиться все более частыми. BotBrowser контролирует все сигналы WebAuthn на уровне движка через свою систему профилей, обеспечивая кроссплатформенную и headed/headless согласованность. Ваша идентичность WebAuthn аутентична, стабильна и полностью выровнена с каждым другим аспектом вашего отпечатка браузера. По связанной защите см. Защита свойств Navigator, Предотвращение обнаружения автоматизации и Комплексное управление профилями.

#Webauthn#Fido#fingerprinting#Authentication#Privacy#Passkeys

Переведите BotBrowser из исследований в продакшн

Используйте эти руководства, чтобы понять модель, а затем перейти к кроссплатформенной валидации, изолированным контекстам и масштабируемому браузерному развертыванию.