Как и любой веб-браузер, Firefox загружает код с недоверенных и потенциально враждебных веб-сайтов и выполняет его на вашем компьютере. Чтобы защитить вас от новых типов атак со стороны злоумышленников и соответствовать принципам безопасности Mozilla, мы решили переработать архитектуру Firefox на настольных платформах.
Site Isolation
Site Isolation основана на новой архитектуре безопасности, которая расширяет существующие механизмы защиты путем разделения веб‑контента и загрузки каждого сайта в собственный процесс операционной системы.
Эта новая архитектура безопасности позволяет Firefox полностью разделять код, исходящий с разных сайтов, и, следовательно, защищать от попыток вредоносных сайтов получить доступ к конфиденциальной информации с других посещаемых вами сайтов.
Подробнее: когда вы открываете веб-сайт и вводите пароль, номер кредитной карты или любую другую чувствительную информацию, вы хотите быть уверены, что эти данные надежно защищены и недоступны злоумышленникам.
В качестве первой линии обороны Firefox применяет множество механизмов безопасности, например политику одинакового происхождения (same-origin policy), которая предотвращает доступ злоумышленников к такой информации, если она загружена в том же приложении. К сожалению, веб развивается, как и техники злоумышленников. Чтобы полностью защитить ваши личные данные, современный веб‑браузер должен обеспечивать защиту не только на уровне приложения, но и полностью разделять адресное пространство памяти разных сайтов — новая архитектура безопасности Site Isolation в Firefox предоставляет такие гарантии.
Почему важно разделять адресное пространство памяти
В начале 2018 года исследователи безопасности раскрыли две крупные уязвимости, известные как Meltdown и Spectre. Исследователи воспользовались фундаментальными предположениями о выполнении команд на современном оборудовании и продемонстрировали, как недоверенный код может получить доступ и читать память в любом месте адресного пространства процесса, даже на таком высокоуровневом языке, как JavaScript (который работает почти на каждом веб‑сайте).
Хотя временные контрмеры, внедренные производителями ОС, процессоров и основными вендорами браузеров, быстро нейтрализовали атаки, они снизили производительность и были задуманы как временные. Когда атаки стали публичными, команды Firefox оперативно снизили точность высокоточных таймеров и отключили API, позволяющие реализовывать такие таймеры, чтобы защитить пользователей.
Далее стало ясно, что необходимо радикально переосмыслить архитектуру безопасности Firefox, чтобы смягчить будущие вариации подобных уязвимостей.
Рассмотрим пример, демонстрирующий, как атакующий может получить доступ к вашим приватным данным при выполнении атаки типа Spectre. Без Site Isolation Firefox может загрузить вредоносный сайт в том же процессе, что и сайт, обрабатывающий конфиденциальную информацию. В худшем случае вредоносный сайт может выполнить атаку, похожую на Spectre, чтобы получить доступ к памяти другого сайта.
Предположим, у вас открыты два сайта — www.my-bank.com и www.attacker.com. При текущей архитектуре веб‑браузеров возможно, что контент с обоих сайтов загружается в один и тот же процесс операционной системы. Что еще хуже, использование атаки по типу Spectre позволило бы attacker.com запросить и получить данные с my-bank.com.
Несмотря на существующие смягчающие меры, единственный способ обеспечить защиту памяти, необходимую для противодействия атакам типа Spectre, — опереться на гарантии безопасности, которые дает изоляция контента разных сайтов посредством разделения процессов операционной системы.
Справка по текущей архитектуре браузера
При запуске Firefox внутренне создается один привилегированный процесс (также известный как родительский процесс), который затем запускает и координирует деятельность множества процессов веб‑контента — родительский процесс является наиболее привилегированным, поскольку ему разрешено выполнять любые действия, которые может выполнять конечный пользователь.
Эта многопроцессная архитектура позволяет Firefox вынести более сложный или менее заслуживающий доверия код в отдельные процессы, большинство из которых имеют ограниченный доступ к ресурсам операционной системы или файлам пользователя. В результате менее привилегированный код должен обращаться к более привилегированному коду для выполнения операций, которые он сам выполнить не может.
Например, процесс контента должен попросить родительский процесс сохранить загружаемый файл, потому что у него нет прав на запись на диск. Иначе говоря, если злоумышленник сумеет скомпрометировать процесс контента, ему дополнительно придется (зло)употреблять одним из API, чтобы убедить родительский процесс действовать от его имени.
Подробно, по состоянию на апрель 2021 года, родительский процесс Firefox запускает фиксированное число процессов: восемь процессов веб‑контента, до двух дополнительных полупривилегированных процессов веб‑контента и четыре вспомогательных процесса для веб‑расширений, операций с GPU, сетевых операций и декодирования медиа.
Хотя разделение контента на восемь процессов уже дает солидную основу, это не удовлетворяет стандартам безопасности Mozilla, потому что позволяет двум совершенно разным сайтам оказаться в одном процессе операционной системы и, следовательно, разделять память процесса. Чтобы устранить это, мы нацелены на архитектуру Site Isolation, которая загружает каждый отдельный сайт в свой собственный процесс.
Без Site Isolation Firefox не разделяет веб‑контент по разным процессам, и разные сайты могут быть загружены в одном процессе.
Предположим, вы открываете несколько сайтов в разных вкладках: www.my-bank.com, www.getpocket.com, www.mozilla.org и www.attacker.com. Возможно, что my-bank.com и attacker.com окажутся загружены в одном процессе операционной системы, что приведет к совместному использованию памяти процесса. Как показано в предыдущем примере, с такой моделью разделения злоумышленник мог бы выполнить атаку, похожую на Spectre, чтобы получить доступ к данным my-bank.com.
Без Site Isolation браузер загрузит встроенные страницы, такие как банковская страница или реклама, в тот же процесс, что и верхнеуровневый документ.
Хотя легко представить, что сайты загружаются в разные вкладки, также возможно, что сайты встраиваются в другие сайты через так называемые субфреймы — если вы когда‑нибудь посещали сайт с рекламой, эти объявления, скорее всего, были субфреймами. Если у вас был личный сайт и вы встроили на него видео с YouTube, это видео было загружено в субфрейм.
В более опасном сценарии вредоносный сайт может встроить легитимный сайт в субфрейм и попытаться обманом заставить вас ввести чувствительные данные. При текущей архитектуре, если страница содержит субфреймы с другого сайта, они обычно находятся в том же процессе, что и внешняя вкладка.
Это приводит к тому, что и страница, и все ее субфреймы разделяют память процесса, даже если субфреймы исходят с разных сайтов. В случае успешной атаки по типу Spectre верхнеуровневый сайт может получить доступ к чувствительной информации субфрейма, к которой он не должен иметь доступа (и наоборот) — новая архитектура безопасности Site Isolation в Firefox существенно затруднит выполнение таких атак вредоносными сайтами.
Как работает Site Isolation в Firefox
При включенной Site Isolation в Firefox для настольных систем каждый уникальный сайт загружается в отдельный процесс. Конкретнее, загрузка “https://mozilla.org” и загрузка “http://getpocket.com” приведет к тому, что Site Isolation поместит эти два сайта в отдельные процессы, потому что они не считаются «same-site» (одного сайта).
Аналогично, “https://getpocket.com” (обратите внимание на разницу между http и https) также будет загружен в отдельный процесс — таким образом в наших примерах все три сайта будут загружаться в разных процессах.
Для полноты картины есть домены, такие как «.github.io» или «.blogspot.com», которые слишком общие, чтобы однозначно определять «сайт». Поэтому мы используем поддерживаемый сообществом список эффективных доменов верхнего уровня (eTLD), чтобы помогать в разграничении сайтов.
Поскольку «github.io» указан в списке eTLD, «a.github.io» и «b.github.io» будут загружены в разные процессы. В наших примерах сайты «www.my-bank.com» и «www.attacker.com» не считаются «same-site» друг с другом и будут изолированы в отдельных процессах.
С Site Isolation Firefox загружает каждый сайт в свой собственный процесс, тем самым изолируя их память друг от друга и опираясь на гарантии безопасности, предоставляемые операционной системой.
Предположим теперь, что вы снова открываете www.attacker.com и www.my-bank.com. Site Isolation распознаёт, что эти два сайта не являются «same-site», и архитектура Site Isolation полностью разделит контент attacker.com и my-bank.com в разные процессы операционной системы.
Это разделение процессов контента разных сайтов обеспечивает защиту памяти, необходимую для безопасного просмотра, затрудняя выполнение атак типа Spectre и, в конечном счете, обеспечивая более безопасный опыт для наших пользователей.
С Site Isolation Firefox загружает субфреймы с разных сайтов в их собственные процессы.
Идентично разделению сайтов по вкладкам, разные сайты, загруженные в субфреймы, также будут разделены. Вернемся к примеру со страницами, содержащими субфреймы: при Site Isolation субфреймы, которые не являются «same-site» с верхнеуровневой страницей, будут загружаться в другом процессе.
В примере выше страница www.attacker.com встраивает страницу с www.my-bank.com, и они загружаются в разные процессы. Наличие верхнеуровневого документа и субфреймов из разных сайтов, загруженных в собственные процессы, гарантирует их изоляцию в памяти, что дает существенные преимущества в безопасности.
Дополнительные преимущества Site Isolation
С внедрением архитектуры Site Isolation мы можем применить дополнительные меры усиления безопасности в Firefox, чтобы защитить вас и ваши данные. Помимо дополнительного уровня защиты от потенциальных угроз, Site Isolation приносит и другие преимущества:
- Размещая больше страниц в отдельных процессах, мы обеспечиваем, что интенсивные вычисления или сборка мусора на одной странице не ухудшат отзывчивость страниц в других процессах.
- Использование большего числа процессов для загрузки сайтов позволяет распределять работу по множеству ядер процессора и эффективнее использовать оборудование.
- Благодаря более тонкому разделению сайтов падение субфрейма или вкладки не повлияет на сайты, загруженные в других процессах, что улучшит стабильность приложения и пользовательский опыт.
Сейчас мы тестируем Site Isolation в настольных сборках Nightly и Beta с частью пользователей и вскоре будем развертывать его для большего числа настольных пользователей. Однако если вы уже хотите воспользоваться улучшенной архитектурой безопасности сейчас, вы можете включить её, установив Nightly или Beta и выполнив следующие шаги:
Чтобы включить Site Isolation в Firefox Nightly:
- Перейдите на about:preferences#experimental
- Установите флажок «Fission (Site Isolation)».
Чтобы включить Site Isolation в Firefox Beta или Release:
- Установите преф в браузере fission.autostart в значение true.
Для технических деталей о том, как мы группируем сайты и субфреймы, вы можете воспользоваться нашим новым инструментом управления процессами, набрав «about:processes» в адресной строке, и следить за проектом Project Fission.
С включенным Site Isolation в Firefox для настольных систем Mozilla повышает свои гарантии безопасности и защищает вас от нового класса вредоносных атак, полагаясь на защиту памяти, обеспечиваемую разделением процессов на уровне ОС для каждого сайта. Если вы хотите помочь в развитии проектов с открытым исходным кодом Mozilla и столкнулись с проблемами при включенном Site Isolation, вы можете сообщить о багах.
Проект Site Isolation (Project Fission) был масштабным многолетним проектом. Спасибо всем талантливым и отличным коллегам, которые внесли вклад в эту работу! Для меня честь работать с людьми, которые горят идеей построить веб, который мы хотим видеть: свободный, инклюзивный, независимый и безопасный. В частности, я благодарю Neha Kochar, Nika Layzell, Mike Conley, Melissa Thermidor, Chris Peterson, Kashav Madan, Andrew McCreight, Peter Van der Beken, Tantek Çelik и Christoph Kerschbaumer за их содержательные комментарии и обсуждения. Наконец, спасибо Morgan Rae Reschenberg за помощь в создании альтернативного текста, отвечающего высоким стандартам наших принципов доступности, чтобы каждый в интернете мог воспользоваться преимуществами Site Isolation.
Старший инженер платформы, работающий над Site Isolation и функциями, связанными с DOM в Firefox.
Спасибо! Пожалуйста, проверьте свой почтовый ящик, чтобы подтвердить подписку. Если вы ранее не подтверждали подписку на рассылку, связанную с Mozilla, возможно, вам нужно будет это сделать. Проверьте ваш почтовый ящик или папку со спамом на наличие письма от нас.
