Защита от обхода контура безопасности Браузера
Некоторые пользователи могут пытаться обойти ограничения, которые компании настраивают для доступа к своим ресурсам. Например, для обхода ограничений может использоваться другой браузер. Защита от обхода контура безопасности Браузера предотвращает такие риски.
Статическая защита
В Браузере для организаций можно фильтровать 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; -
PUT:corp/enrollment-host/secret— получение Браузером актуального значенияsecretв формате JSON. В заголовкеAuthorizationнужно передатьenrollment-token; -
PUT:corp/enrollment-host/secrets— получение плагином прошлого, актуального и будущего значений секрета в формате 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не более, чем на секунду или минуту); -
логировать запросы ко внутренним ресурсам (опционально).