Firefox, как и любой другой браузер, может загружать код с ненадёжных и потенциально опасных сайтов, а потом запускать его на компьютере.
Чтобы защитить пользователей и вывести безопасность работы в интернете на новый уровень, команда Mozilla решила переработать свой браузер. Colombo расскажет об этом подробнее.
Новая архитектура безопасности с изоляцией сайтов расширяет существующие механизмы защиты за счёт разделения контента. Теперь под каждый сайт будет создаваться свой отдельный процесс операционной системы. Эта позволит полностью изолировать код с разных сайтов. В частности, обеспечить защиту от вредоносных ресурсов, пытающихся получить доступ к конфиденциальной информации с других площадок, которые посещают пользователи. Например, введённые пароли, номера кредитных карт и т.п.
Для защиты данных Firefox применяет различные механизмы безопасности, например, Правило ограничения домена (Same Origin Policy – «Принцип одинакового источника»), которое ограничивает взаимодействие информации, поступившей из разных источников. То есть предотвращает доступ злоумышленников к информации с других ресурсов, загружаемых в одном и том же приложении. Но этого недостаточно.
Чтобы оградить пользователей от потенциальных угроз, следует полностью разделять пространство памяти, выделенное под разные сайты – новая архитектура Firefox обеспечивает эти гарантии безопасности.
Для защиты от уязвимостей были развёрнуты временные меры противодействия со стороны ОС, ЦП и основных веб-браузеров. Они быстро нейтрализовали атаки, однако привели к снижению производительности. Но это были именно временные заплатки.
Firefox решила коренным образом переделать архитектуру браузера, чтобы оградить пользователей от текущих и будущих версий подобных уязвимостей. На картинке ниже подробно рассматривается пример того, как злоумышленник может получить доступ к личным данным при атаке, подобной Spectre.
С новой архитектурой Firefox загружает каждый сайт в своём собственном процессе, тем самым изолируя их память друг от друга. Например, у пользователя открыто два сайта:
Как показано на картинке выше, со старой архитектурой браузера контент с обоих сайтов может быть загружен в один и тот же процесс операционной системы. Если с сайта
Несмотря на существующие меры безопасности, единственный способ обеспечить полноценную защиту памяти – это изоляция контента с разных сайтов и использование разделения процессов операционной системы.
Родительский процесс является наиболее привилегированным, поскольку ему разрешено выполнять любое действие, которое может выполнить конечный пользователь.
Эта многопроцессорная архитектура позволяла Firefox разделять более сложный или менее надёжный код на отдельные процессы, большинство из которых имеют ограниченный доступ к ресурсам операционной системы или пользовательским файлам. Как следствие, менее привилегированный код должен был запросить более привилегированный код для выполнения операций, которые он сам выполнить не мог.
Например, сайту необходимо запросить у родительского процесса разрешение на сохранение загруженного файла, потому что у него нет разрешения делать запись на диск компьютера. Иными словами, если злоумышленнику удается скомпрометировать процесс, запускаемый сайтом, ему придётся дополнительно обойти один из API-интерфейсов, чтобы убедить родительский процесс действовать от его имени.
Родительский процесс Firefox (по состоянию на апрель 2021 г.) запускал фиксированное количество процессов: восемь процессов веб-контента, до двух дополнительных полу-привилегированных процессов веб-контента и четыре служебных процесса для веб-расширений, операций с графическим процессором, работы в сети и декодирования медиа.
Хотя разделение контента на восемь процессов уже обеспечивало неплохую защиту, оно не соответствовало стандартам безопасности Mozilla, поскольку позволяло двум совершенно разным сайтам работать в одном и том же процессе операционной системы и, следовательно, совместно использовать память процесса. Чтобы избежать этого, Firefox переходит на архитектуру изоляции сайтов, которая загружает каждый сайт в свой собственный процесс.
Что происходит на иллюстрации выше?
Пользователь открывает в разных вкладках сайты:
Ещё один важный момент: без изоляции сайтов браузер будет загружать все всплывающие страницы в том же процессе, что и сайт верхнего уровня.
Субфреймы (реклама, встроенное видео), тоже обрабатываются в общем процессе. В результате вредоносный сайт может получить доступ к субфреймам и конфиденциальной информации, которую вы там вводите. Новая архитектура безопасности изоляции сайтов в Firefox не позволит совершать такие атаки.
Точно так же
Более того, существуют некоторые домены, такие как «.github.io» или «.blogspot.com», которые являются слишком общими, чтобы можно было идентифицировать их, как «сайт». Поэтому для работы с ними Firefox будет использовать поддерживаемый сообществом список доменов верхнего уровня (eTLD), чтобы помочь различать сайты.
Поскольку «github.io» указан как eTLD, «a.github.io» и «b.github.io» будут загружаться в разных процессах. Если вернуться к примерам, о которых говорилось ранее, сайты
Также и с субфреймами. Субфреймы, которые не являются «тем же сайтом», что и страница верхнего уровня, будут загружаться в другом процессе.
На картинке выше видно, что страница
Чтобы включить изоляцию сайта в Firefox Nightly:
Чтобы защитить пользователей и вывести безопасность работы в интернете на новый уровень, команда Mozilla решила переработать свой браузер. Colombo расскажет об этом подробнее.
Новая архитектура безопасности с изоляцией сайтов расширяет существующие механизмы защиты за счёт разделения контента. Теперь под каждый сайт будет создаваться свой отдельный процесс операционной системы. Эта позволит полностью изолировать код с разных сайтов. В частности, обеспечить защиту от вредоносных ресурсов, пытающихся получить доступ к конфиденциальной информации с других площадок, которые посещают пользователи. Например, введённые пароли, номера кредитных карт и т.п.
Для защиты данных Firefox применяет различные механизмы безопасности, например, Правило ограничения домена (Same Origin Policy – «Принцип одинакового источника»), которое ограничивает взаимодействие информации, поступившей из разных источников. То есть предотвращает доступ злоумышленников к информации с других ресурсов, загружаемых в одном и том же приложении. Но этого недостаточно.
Чтобы оградить пользователей от потенциальных угроз, следует полностью разделять пространство памяти, выделенное под разные сайты – новая архитектура Firefox обеспечивает эти гарантии безопасности.
Почему так важно разделение пространства памяти
В начале 2018 года специалисты, исследующие вопросы безопасности, обнаружили две основные уязвимости, известные как Meltdown (аппаратная уязвимость, которая использует ошибку реализации спекулятивного выполнения команд в некоторых процессорах Intel и ARM, из-за которой процессор игнорирует права доступа к страницам.) и Spectre (группа аппаратных уязвимостей большинства процессоров, позволяющая считывать данные через сторонний канал). Специалисты продемонстрировали, как ненадёжный сайт может дать злоумышленникам доступ к памяти процесса даже на таком высокоуровневом языке, как JavaScript (на котором работает почти каждый сайт).Для защиты от уязвимостей были развёрнуты временные меры противодействия со стороны ОС, ЦП и основных веб-браузеров. Они быстро нейтрализовали атаки, однако привели к снижению производительности. Но это были именно временные заплатки.
Firefox решила коренным образом переделать архитектуру браузера, чтобы оградить пользователей от текущих и будущих версий подобных уязвимостей. На картинке ниже подробно рассматривается пример того, как злоумышленник может получить доступ к личным данным при атаке, подобной Spectre.
С новой архитектурой Firefox загружает каждый сайт в своём собственном процессе, тем самым изолируя их память друг от друга. Например, у пользователя открыто два сайта:
Для просмотра ссылки необходимо нажать
Вход или Регистрация
и
Для просмотра ссылки необходимо нажать
Вход или Регистрация
. Как показано на картинке выше, со старой архитектурой браузера контент с обоих сайтов может быть загружен в один и тот же процесс операционной системы. Если с сайта
Для просмотра ссылки необходимо нажать
Вход или Регистрация
произойдёт атака наподобие Spectre, злоумышленники смогут запрашивать и получать доступ к данным с сайта my-bank.com.Несмотря на существующие меры безопасности, единственный способ обеспечить полноценную защиту памяти – это изоляция контента с разных сайтов и использование разделения процессов операционной системы.
Как работала прежняя архитектура браузера
После запуска Firefox создавал один привилегированный процесс (или родительский процесс), который затем запускал и координировал действия нескольких веб-процессов.Родительский процесс является наиболее привилегированным, поскольку ему разрешено выполнять любое действие, которое может выполнить конечный пользователь.
Эта многопроцессорная архитектура позволяла Firefox разделять более сложный или менее надёжный код на отдельные процессы, большинство из которых имеют ограниченный доступ к ресурсам операционной системы или пользовательским файлам. Как следствие, менее привилегированный код должен был запросить более привилегированный код для выполнения операций, которые он сам выполнить не мог.
Например, сайту необходимо запросить у родительского процесса разрешение на сохранение загруженного файла, потому что у него нет разрешения делать запись на диск компьютера. Иными словами, если злоумышленнику удается скомпрометировать процесс, запускаемый сайтом, ему придётся дополнительно обойти один из API-интерфейсов, чтобы убедить родительский процесс действовать от его имени.
Родительский процесс Firefox (по состоянию на апрель 2021 г.) запускал фиксированное количество процессов: восемь процессов веб-контента, до двух дополнительных полу-привилегированных процессов веб-контента и четыре служебных процесса для веб-расширений, операций с графическим процессором, работы в сети и декодирования медиа.
Хотя разделение контента на восемь процессов уже обеспечивало неплохую защиту, оно не соответствовало стандартам безопасности Mozilla, поскольку позволяло двум совершенно разным сайтам работать в одном и том же процессе операционной системы и, следовательно, совместно использовать память процесса. Чтобы избежать этого, Firefox переходит на архитектуру изоляции сайтов, которая загружает каждый сайт в свой собственный процесс.
Что происходит на иллюстрации выше?
Пользователь открывает в разных вкладках сайты:
Для просмотра ссылки необходимо нажать
Вход или Регистрация
,
Для просмотра ссылки необходимо нажать
Вход или Регистрация
,
Для просмотра ссылки необходимо нажать
Вход или Регистрация
и
Для просмотра ссылки необходимо нажать
Вход или Регистрация
. Может так получиться, что my-bank.com и attacker.com будут обрабатываться одним и тем же процессом операционной системы, то есть они будут совместно использовать память этого процесса. Соответственно, злоумышленник может выполнить атаку типа Spectre для доступа к данным с my-bank.com.Ещё один важный момент: без изоляции сайтов браузер будет загружать все всплывающие страницы в том же процессе, что и сайт верхнего уровня.
Субфреймы (реклама, встроенное видео), тоже обрабатываются в общем процессе. В результате вредоносный сайт может получить доступ к субфреймам и конфиденциальной информации, которую вы там вводите. Новая архитектура безопасности изоляции сайтов в Firefox не позволит совершать такие атаки.
Как работает новая архитектура Firefox с изоляцией сайтов
При добавлении Изоляции сайтов в Firefox для настольных ПК каждый уникальный сайт будет создавать свой отдельный процесс. Например, если вы загрузите «https://mozilla.org» и «http://getpocket.com», браузер с изоляцией сайтов разделит их по двум разным процессам операционной системы, поскольку они не являются одним и тем же сайтом.Точно так же
Для просмотра ссылки необходимо нажать
Вход или Регистрация
(обратите внимание, здесь именно протокол https, а не http, как в предыдущем абзаце) также будет загружен в отдельный процесс. То есть все три сайта будут загружаться в разных процессах.Более того, существуют некоторые домены, такие как «.github.io» или «.blogspot.com», которые являются слишком общими, чтобы можно было идентифицировать их, как «сайт». Поэтому для работы с ними Firefox будет использовать поддерживаемый сообществом список доменов верхнего уровня (eTLD), чтобы помочь различать сайты.
Поскольку «github.io» указан как eTLD, «a.github.io» и «b.github.io» будут загружаться в разных процессах. Если вернуться к примерам, о которых говорилось ранее, сайты
Для просмотра ссылки необходимо нажать
Вход или Регистрация
и
Для просмотра ссылки необходимо нажать
Вход или Регистрация
не считаются одним сайтом, поэтому они будут изолированы друг от друга в отдельных процессах. Память также будет изолирована, что гарантирует безопасность данных.Также и с субфреймами. Субфреймы, которые не являются «тем же сайтом», что и страница верхнего уровня, будут загружаться в другом процессе.
На картинке выше видно, что страница
Для просмотра ссылки необходимо нажать
Вход или Регистрация
пытается встроить субфреймом страницу с
Для просмотра ссылки необходимо нажать
Вход или Регистрация
, но она будет загружена в другом процессе. Это гарантирует, что память процессов также будет изолирована.Дополнительные преимущества изоляции сайтов
Новая архитектура не только делает Firefox безопаснее. Она даёт и другие преимущества:- Благодаря тому, что больше страниц помещается в отдельные процессы, выполнение тяжёлых вычислений на одной странице не замедлят работу других страниц.
- Использование большего количества процессов для загрузки веб-сайтов позволяет распределять нагрузку по многим ядрам ЦП и более эффективно использовать «железо».
- Из-за дробления сайтов, сбой одного субфрейма или вкладки не повлияет на сайты, загруженные в других процессах, то есть повышается стабильность приложения.
Планы и перспективы
В настоящее время Firefox тестирует изоляцию сайтов в ночных и бета-версиях браузеров для ПК. Однако воспользоваться улучшенной архитектурой безопасности можно уже сейчас. Для этого нужно загрузить браузер Nightly или Beta и выполнить следующие действия:Чтобы включить изоляцию сайта в Firefox Nightly:
- Перейдите к about: Preferences#Experiment
- Установите флажок «Fission (Site Isolation)».
- Перезагрузите Firefox.
- Перейдите к about: config.
- Установите для параметра `fission.autostart` значение `true `.
- Перезагрузите Firefox.