Улучшение sandbox-изоляции в Firefox

В недавно выпущенном релизе Firefox 60 была существенно улучшена sandbox-изоляция для платформы Linux, но к сожалению данное новшество не было отражено в официальном списке изменений. Процессы обработки контента, в которых осуществляется отрисовка web-страниц и выполнение JavaScript-кода, теперь лишены возможности прямой установки сетевых соединений и использования Unix-сокетов для обращения к локальным сервисам, таким как PulseAudio. Также теперь блокируются любые обращения к System V IPC (исключение сделано только для взаимодействия с fglrx и VirtualGL). В настройках about: config блокирование сетевого доступа ассоциировано с четвёртым уровнем изоляции в параметре security.sandbox.content.level.

Sandbox-изоляция значительно усложняет эксплуатацию уязвимостей в web-движке и вынуждает для проведения атаки на систему применять более сложные комбинации, охватывающие несколько уязвимостей в разных подсистемах. Блокирование сетевого доступа в процессах обработки контента позволяет исключить все нештатные пути отправки трафика, например, при включении работы через прокси в настройках доступ теперь возможен только через прокси, даже в случае эксплуатации уязвимости и попытки прямой установки соединения (особенно изменение актуально для защиты от атак по деанонимизации пользователей Tor Browser). Не менее важна блокировка доступа через unix-сокеты, так как эта возможность позволяет обратиться от имени пользователя к локальным сервисам, RPC-интерфейс которых допускает команды, в результате которых можно выполнить код в системе.

Блокировка реализована через запрет системных вызовов, таких как connect, и помещение процесса в отдельное пространство имён идентификаторов пользователя (user namespaces), по аналогии с тем как реализуется изоляция для контейнеров. Исключение сделано только для протокола X11, который применяется для отображения графики и приёма событий ввода (в будущих выпусках планируют реализовать защиту и для канала связи с X11).

Помимо ограничения сети в прошлых выпусках Firefox также была применена изоляция доступа к файловой системе (используется chroot в пустой каталог), ограничен доступ дочерних процессов Firefox к системным вызовам (используется Seccomp-bpf), ограничено взаимодействие со сторонними процессами, исключён доступ к разделяемой памяти и видеоподсистеме.

В обычных условиях для настройки sandbox в Firefox требуется предоставление полномочий CAP_SYS_ADMIN, CAP_SYS_CHROOT и CAP_SET (UG)ID, которых достаточно для получения полноценных прав пользователя root. Применение user namespaces позволяет получить необходимые права в отдельном окружении без поднятия привилегий основного процесса. Но из-за обилия уязвимостей, которые можно эксплуатировать только при включенном user namespaces, данную возможность часто отключают, например, по умолчанию user namespaces отключен в Debian и Red Hat Enterprise Linux, но активен в Ubuntu и Fedora.

Полный текст статьи читайте на OpenNet