Защита от обхода контура безопасности Браузера
Некоторые пользователи могут пытаться обойти ограничения, которые компании настраивают для доступа к своим ресурсам. Например, для обхода ограничений может использоваться другой браузер. Защита от обхода контура безопасности Браузера предотвращает такие риски.
Статическая защита
В Браузере для организаций можно фильтровать 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:
-
Установите утилиты openssl, docker и docker-compose.
-
Укажите значения переменных среды в файле
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.
-
-
Запустите скрипт из файла
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
.
YandexBrowserEnforcement
Генерация HTTP-заголовков с помощью политикиПолитика 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
не более, чем на секунду или минуту); -
логировать запросы ко внутренним ресурсам (опционально).