Улучшение sandbox-изоляции в Firefox
Как сообщает opennet.ru в недавно выпущенном релизе 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.