Защита от обхода контура безопасности Браузера

Поддерживается в:
Десктопная версия
Мобильная версия

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

Статическая защита

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

  • YandexExtCorpBrowserHeader — добавляет фиксированный заголовок X-Yandex-Extcorpbrowser: X во все запросы Браузера, кроме запросов CONNECT.

  • YandexCustomHeader — добавляет во все запросы Браузера заголовок, который произвольно задается администратором.

Примечание

Политики YandexExtCorpBrowserHeader и YandexCustomHeader доступны в мобильной версии Браузера для организаций.

Настройка статических заголовков

Чтобы статические заголовки добавлялись во все HTTPS-запросы, включите политику YandexExtCorpBrowserHeader.

Windows

Задайте политике значение Enabled.

Linux

Задайте политике значение true:

"YandexExtCorpBrowserHeader": true 
Android

Задайте политике значение Enabled.

Чтобы во все запросы добавлялся заголовок, произвольно заданный администратором, настройте политику YandexCustomHeader.

Windows

Задайте в политике произвольный заголовок.

Пример значения:

Example Custom Header
Linux

Задайте в политике произвольный заголовок.

Пример значения:

"YandexCustomHeader": "Example Custom Header"
Android

Задайте в политике произвольный заголовок.

Пример значения:

"Example Custom Header"
iOS

Задайте в политике произвольный заголовок.

Пример значения:

"Example Custom Header"

Динамическая защита

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

Работа с Enrollment Host

Важно

Микросервер Enrollment Host предоставляется заказчику в базовом состоянии и не является самостоятельным продуктом. Поэтому мы рекомендуем использовать индивидуальные настройки на уровне сети организации для запуска сервиса генерации заголовков.

Enrollment Host — микросервер, предоставляемый заказчику Яндексом и необходимый для динамической генерации заголовков в HTTPS-запросах. Во время первой авторизации или после длительного отсутствия пользователь запрашивает у Enrollment Host enrollment_token и session_id. Затем сервис каждый раз проверяет эти значения, чтобы предоставить пользователю актуальный secret (секрет). Секрет — это регулярно обновляющийся параметр, используемый в шифровании заголовков.

Для запуска Enrollment Host предоставляются следующие файлы:

  • docker-compose.yml с переменными среды;

  • tar-файлы с сервером и образами postgres, envoy и registry;

  • load.sh — скрипт для запуска.

Чтобы развернуть Enrollment Host:

  1. Установите утилиты openssl, docker и docker-compose.

  2. Укажите значения переменных среды в файле docker-compose.yml:

    • SECRET_ROTATION_PERIOD_SEC — период обновления значения секрета в секундах (обязательная переменная);

    • ENROLLMENT_TOKEN_SALT — произвольная строка длиной не менее 16 символов для генерации и проверки enrollment_token (обязательная переменная);

    • DATABASE_USER — пользователь в базе данных postgres, под которым в этой базе данных авторизуется Enrollment Host (обязательно при самостоятельном развертывании);

    • DATABASE_NAME — база данных postgres для состояния Enrollment Host (обязательно при самостоятельном развертывании);

    • DATABASE_PASSWORD — пароль от базы данных postgres (обязательно при самостоятельном развертывании);

    • DATABASE_PORT — порт на хосте базы данных postgres (обязательно при самостоятельном развертывании);

    • DATABASE_HOSTS — список хостов базы данных postgres, к которым Enrollment Host может подключаться (обязательно при самостоятельном развертывании). Должен быть указан хотя бы один хост с доступом для чтения и записи;

    • LOG_FILE — название файла JSON для отгрузки логов сервиса (опциональная переменная);

    • LOG_URL — URL, на который отправляется POST-запрос с логами (опциональная переменная);

    • AUTH_BEARER_TOKEN — токен авторизации плагина перед Enrollment Host для получения списка секретов (опциональная переменная);

    • ENROLLMENT_TOKEN_LIFE_TIME_DAY — время жизни enrollment_token в днях (опциональная переменная). По умолчанию имеет значение 30.

  3. Запустите скрипт из файла load.sh. Для этого в командной строке запустите команду bash ./load.sh.

Для получения данных из Enrollment Host используются следующие запросы:

  • POST: corp/enrollment-host/enrollment-token — получение enrollment_token в формате JSON;

  • POST: corp/enrollment-host/access-token — получение access_token в формате JSON;

  • GET: corp/enrollment-host/secret — получение Браузером актуального значения secret в формате JSON. В заголовке Authorization нужно передать enrollment-token;

  • GET: corp/enrollment-host/ — получение плагином прошлого, актуального и будущего значений секрета в формате JSON. В заголовке Authorization нужно передать AUTH_BEARER_TOKEN.

Генерация HTTP-заголовков с помощью политики YandexBrowserEnforcement

Политика YandexBrowserEnforcement имеет 2 режима защиты и добавляет в HTTPS-запросы следующие динамические заголовки:

  • Для режима HMAC:

    • X-Ybe-Timestamp (timestamp) — текущее время в формате Unix.

    • X-Ybe-Id (session_id) — идентификатор пользовательской сессии.

    • X-Ybe-Hmac, которые формируются на основе побитовых операций над значениями X-Ybe-Timestamp, X-Ybe-Id и secret.

  • Для режима JWT:

    • X-Ybe-Authorization — строка с данными токена, полученная Браузером. Имеет вид Bearer <строка>.

    • X-Ybe-DeviceId — идентификатор устройства (UUID в виде hex-строки длиной 32 символа).

    • X-Ybe-Id — идентификатор сессии (UUID в виде hex-строки длиной 32 символа).

Кроме того, политика настраивает следующие параметры взаимодействия с сервисом Enrollment Host:

  • используемый режим защиты;

  • URL'ы коммуникации с сервисом Enrollment Host;

  • время жизни получаемых от Enrollment Host данных;

  • фильтры URL'ов, в запросах на которых можно добавлять дополнительные заголовки (опционально).

Плагин фильтрации трафика

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

  • быстро рассчитывать и проверять заголовки всех входящих запросов для всех актуальных секретов;

  • удалять заголовки из запросов;

  • обеспечивать доступность запросов для получения enrollment_token и secret без проверки заголовка;

  • с нужной периодичностью получать актуальное значение секрета из Enrollment Host;

  • хранить 3 значения секрета:

    • предыдущее, поскольку обновление секретов Браузерами происходит асинхронно;

    • текущее;

    • следующее — на случай, если Браузер получит это значение раньше обновления информации самого плагина;

  • проверять, что timestamp попадает в интервал доверия, который можно конфигурировать (например, что время проверяющего плагина отличается от X-Ybe-Timestamp не более, чем на секунду или минуту);

  • логировать запросы ко внутренним ресурсам (опционально).