# Aislamiento de sitio

El aislamiento de sitios es una característica de ciertos navegadores web que permite aislar sitios de origen cruzado entre sí. La característica fue propuesta originalmente por Reis et al. en 2009, con iteraciones posteriores de Microsoft, en la forma de implementación de la función en el navegador de investigación Gazelle. Sin embargo, la función no logró ganar terreno debido a problemas relacionados con su implementación y problemas de rendimiento.
En 2018, tras la publicación de las vulnerabilidades Spectre y Meltdown al público, Google comenzó a trabajar para agregar aislamiento de sitios en Chrome, lo que finalmente culminó con el lanzamiento de la función en 2019. En 2021, Firefox también lanzó su propia versión de aislamiento de sitios en la que habían estado trabajando con el nombre en clave Project Fission.
A pesar de los beneficios de seguridad de esta función, los investigadores también han encontrado problemas de seguridad en torno a varios aspectos de esta función. Estos incluyen problemas con la protección percibida contra ataques transitorios como Spectre y Meltdown, así como nuevos ataques de sincronización y agotamiento de recursos habilitados por esta característica.

## Antecedentes

Hasta 2017, la arquitectura de seguridad predominante de los principales navegadores se adhería al modelo de proceso por instancia. Esto implicaba que el navegador comprendiera distintos procesos de espacio aislado, incluido el proceso del navegador, el proceso de GPU, el proceso de red y el proceso de renderizado. El proceso de representación singular se conectaría con otros servicios privilegiados cuando fuera necesario para ejecutar acciones elevadas al visualizar una página web.
Aunque este modelo evitó con éxito los problemas asociados con el acceso de JavaScript malicioso al sistema operativo, carecía de la capacidad de aislar adecuadamente los sitios web entre sí. A pesar de estas preocupaciones, la adopción de un modelo más robusto enfrentó una tracción limitada debido a problemas percibidos con los modelos más nuevos, particularmente aquellos relacionados con el rendimiento y la memoria.
Sin embargo, en 2017, la divulgación de los exploits de Spectre y Meltdown alteró este panorama. Si bien anteriormente el acceso a la memoria restringida era un proceso relativamente complicado que requería un renderizador comprometido, la vulnerabilidad de Spectre hizo que fuera mucho más fácil acceder a la memoria arbitraria. Esto expuso los problemas del modelo de seguridad de proceso por instancia, ya que al usar JavaScript, el sitio web podía leer casi toda la memoria en el proceso de renderizado, incluida la memoria que almacena información potencialmente confidencial de páginas de origen cruzado previamente renderizadas. En consecuencia, se requería una nueva arquitectura de seguridad que permitiera separar la representación de diferentes páginas web en procesos completamente aislados.

## Historia

A lo largo de los años, se han propuesto múltiples versiones de la arquitectura de aislamiento del sitio. En 2009, Reis et al. propuso la primera versión del modelo de proceso por sitio para aislar páginas web en función del origen web de la página. Posteriormente, esto fue mejorado por el navegador de investigación Gazelle, que separaba marcos de documentos específicos según su principal web, una barrera de seguridad que correspondía con el documento específico que se estaba cargando. Casi al mismo tiempo, también se estaba trabajando en el OP (que más tarde se convertiría en el navegador OP2), IBOS, Tahoma y el navegador SubOS, todos los cuales proponían diferentes paradigmas para resolver el problema de la separación de procesos entre sitios.

## Implementación moderna

En 2019, Google Chrome publicó un documento de conferencia en USENIX Security 2019 que detallaba los cambios en su modelo de seguridad de navegador existente en respuesta a una investigación reciente que demuestra que el ataque Spectre podría usarse dentro del proceso de renderizado del navegador. El artículo propuso cambios al modelo que se basaron en gran medida en el trabajo de Reis et al. en 2009. La implementación de Chrome del aislamiento de sitios utilizaría los orígenes web como principal diferenciador de un «sitio» a nivel de proceso. Además, el equipo de Chrome también implementó la idea de que los marcos de los sitios web se ejecuten fuera de proceso, una característica sugerida por el navegador web Gazelle, así como por los navegadores web OP y OP2. Esto requirió una importante reingeniería del código de manejo de procesos de Chrome, lo que requirió más de 4000 confirmaciones durante un período de 5 años por parte de 320 contribuyentes.
La implementación del aislamiento de sitios por parte de Chrome les permitió eliminar múltiples ataques universales de secuencias de comandos entre sitios (uXSS), lo que permitió a los atacantes comprometer la política del mismo origen. El equipo de Chrome descubrió que los 94 ataques uXSS reportados entre 2014 y 2018 quedarían ineficaces si se implementara el aislamiento del sitio. Además de esto, el equipo de Chrome también afirmó que su implementación del aislamiento del sitio sería eficaz para prevenir diversas variaciones del grupo de ataques de sincronización Spectre y Meltdown que dependían de que el espacio de direcciones de la víctima estuviera en el mismo proceso que el proceso del atacante.
En marzo de 2021, Firefox anunció que también implementaría el aislamiento de sitios. Esta característica había estado en desarrollo durante varios meses bajo el nombre en clave Proyecto Fisión. La implementación de Firefox repitió algunas de las fallas que se habían encontrado en la implementación de Chrome, es decir, el hecho de que páginas web similares aún eran vulnerables a los ataques uXSS. Al igual que en Chrome, el proyecto también requirió una reescritura del código de manejo del proceso en Firefox.

## Recepción

Históricamente, el aislamiento de sitios sólo lo han implementado los navegadores de investigación. Esto se debió a que se consideró que el enfoque consumía muchos recursos y memoria debido al aumento en la cantidad de espacio de memoria ocupado por los procesos. Esto también se reflejó en las implementaciones del mundo real. La implementación del aislamiento del sitio por parte de Chrome requirió en promedio uno o dos núcleos más que lo mismo sin el aislamiento del sitio. Además, los ingenieros que trabajaron en el proyecto de aislamiento del sitio observaron un aumento del 10 al 13 por ciento en el uso de la memoria cuando se utilizó el aislamiento del sitio.
Chrome fue el primer navegador web importante de la industria en adoptar el aislamiento de sitios como defensa contra uXSS y ataques de ejecución transitoria. Para ello, superaron múltiples obstáculos de rendimiento y compatibilidad y, al hacerlo, iniciaron un esfuerzo en toda la industria para mejorar la seguridad del navegador. Sin embargo, a pesar de esto, el aislamiento del sitio no se considera una solución milagrosa. En particular, se ha descubierto que la capacidad del aislamiento del sitio para defenderse contra ataques de sincronización es incompleta. En 2021, Agarwal et al. Pudieron desarrollar un exploit llamado Spook.js que fue capaz de romper las defensas Spectre de Chrome y filtrar datos a través de páginas web en diferentes orígenes. Ese mismo año, los investigadores de Microsoft pudieron aprovechar el aislamiento del sitio para realizar una variedad de ataques de sincronización que les permitieron filtrar información de origen cruzado mediante la manipulación cuidadosa de los protocolos de comunicación entre procesos empleados por el aislamiento del sitio.
En 2023, investigadores de la Universidad del Ruhr de Bochum demostraron que podían aprovechar la arquitectura de proceso requerida por el aislamiento del sitio para agotar los recursos del sistema y también realizar ataques avanzados como el envenenamiento de DNS.