UNTRUSTEDCODE/etccredsnetSANDBOXno access outside

Zona de arena

10 lectura mínimaSeguridad

Sandboxing es el patrón de seguridad que permite que su navegador ejecute JavaScript desde cualquier sitio, su teléfono ejecute aplicaciones de cualquier desarrollador y su computadora portátil abra archivos adjuntos de correo electrónico, todo sin que esos programas puedan leer el archivo de su cuenta bancaria. Es la capa tecnológica que convirtió el código no confiable de una vulnerabilidad en una característica.

El cuerpo completo del artículo se proporciona en inglés a continuación.

Sandboxing es la práctica de ejecutar código dentro de un entorno restringido que le impide acceder a recursos fuera de sus límites. El sandbox limita qué archivos puede leer, qué conexiones de red puede realizar, con qué otros procesos puede comunicarse y qué llamadas al sistema puede invocar. Si el código resulta ser malicioso o tiene errores, el daño está contenido.

Por qué es importante el sandboxing

La informática moderna depende de la ejecución de código en el que no confiamos plenamente:

  • JavaScript de cualquier sitio web que visite su navegador
  • Aplicaciones móviles de tiendas de aplicaciones (verificadas pero no formalmente) verificado)
  • Extensiones de navegador, complementos IDE, dependencias en su código
  • Macros en documentos, scripts adjuntos al correo electrónico
  • Cargas de trabajo de contenedores en infraestructura de nube

Sin sandboxing, cada uno de estos sería un ataque de robo de credenciales esperando a suceder. El sandboxing es lo que permite que el modelo funcione.

Cómo se construyen los sandboxes

Las técnicas de implementación, en capas:

  • Aislamiento de procesos. Cada pestaña en un navegador moderno es un proceso de sistema operativo independiente. El kernel del navegador arbitra lo que el proceso puede hacer.
  • seccomp-bpf en Linux: filtro aplicado por el kernel sobre qué llamadas al sistema puede realizar un proceso. El sandbox declara las llamadas al sistema que necesita (lectura, escritura, mmap, etc.) y el kernel rechaza todo lo demás.
  • Espacios de nombres y capacidades en Linux: vistas aisladas del sistema de archivos, procesos, red, etc. Los contenedores se construyen a partir de estas primitivas.
  • App Sandbox en macOS/iOS: derechos declarativos que describen qué capacidades necesita una aplicación (acceso a la cámara, red, rutas específicas). Las aplicaciones sin derechos no pueden acceder a esas funciones.
  • AppContainer / Windows Sandbox: modelo de aislamiento equivalente de Microsoft.
  • Aislamiento de sitios en Chrome y Firefox: procesos separados por origen, lo que evita que el JavaScript de un sitio lea la memoria de otro sitio, incluso si se realiza un exploit a nivel de kernel. encontrado.

Zonas de pruebas del navegador en detalle

El navegador es la zona de pruebas más pública y más atacada de la informática. El kernel del navegador se ejecuta como un proceso confiable. Cada proceso de renderizado (uno o más por pestaña) se ejecuta como un proceso que no es de confianza y con capacidades mínimas. El renderizador puede:

  • Asignar memoria
  • Comunicarse con el kernel del navegador a través de IPC para operaciones muy específicas
  • Renderizar en un búfer de gráficos
  • Ejecutar JavaScript y WebAssembly

It no puedo:

  • Abrir archivos fuera de su directorio sandbox
  • Hablar con destinos de red arbitrarios (el kernel del navegador realiza esas conexiones)
  • Generar otros procesos
  • Leer la memoria de otros procesos

Los proveedores de navegadores pagan decenas de millones en recompensas por errores específicamente para vulnerabilidades de escape de sandbox. La recompensa individual más lucrativa en Chrome (más de $ 200,000) se otorga por una cadena completa que escapa del sandbox.

Sandboxing de aplicaciones móviles

iOS y Android llevan el sandbox a su extremo lógico: cada aplicación se ejecuta en su propio UID, ve su propia vista del sistema de archivos y puede comunicarse con otras aplicaciones solo a través de estrechos canales IPC mediados por el sistema operativo (Intentos en Android, esquemas de URL y AppExtensions en iOS). El sistema operativo solicita al usuario permisos de estilo de capacidad (cámara, micrófono, contactos) en tiempo de ejecución. El resultado: el malware en un teléfono está mucho más contenido que en una computadora de escritorio.

WebAssembly y el nuevo sandbox

WebAssembly se diseñaron desde el principio con el sandboxing como una propiedad de primera clase. Un módulo WASM no tiene llamadas al sistema propias; todo tiene que ser proporcionado por el entorno host (WASI para API de estilo de llamada al sistema, API web en navegadores). Esto convierte a WASM en un fuerte candidato para ejecutar complementos que no son de confianza dentro de aplicaciones confiables, un caso de uso que anteriormente requería un gran aislamiento de procesos. Herramientas como wasmtime y wasmer utilizan este modelo.

Cuando fallan los sandboxes

Las vulnerabilidades de escape del sandbox son reales y apreciadas. Los modos de falla recurrentes:

  • Errores en la superficie del kernel. Incluso los procesos restringidos por seccomp a veces pueden explotar errores del kernel a los que se puede acceder a través de llamadas al sistema permitidas.
  • Errores de IPC. Las interfaces que utiliza el sandbox para comunicarse con el proceso del intermediario son en sí mismas una superficie de ataque.
  • Canales laterales. Spectre y Meltdown demostró que las optimizaciones de la CPU podían filtrar datos a través de los límites del proceso. Los sandboxes modernos mitigan esto, pero el problema subyacente sigue siendo una preocupación a nivel de hardware.
  • Errores de perfil de sandbox. Los operadores a veces aflojan los perfiles de sandbox para que el software funcione, abriendo agujeros accidentalmente.

Sandboxing es una defensa probabilística: eleva el nivel de explotación, no lo elimina. La defensa en profundidad combina el sandboxing con otras medidas (lenguajes seguros para la memoria, desinfectantes, reducción de la superficie de ataque).

Qué significa el sandboxing para usted

Para los usuarios finales, el sandboxing es en su mayor parte invisible. La implicación práctica: mantener actualizados los navegadores y los sistemas operativos, ya que los escapes del sandbox son las correcciones de seguridad de mayor prioridad. Evite deshabilitar las funciones de la zona de pruebas (algunos usuarios de Linux desactivan los perfiles seccomp, algunos usuarios avanzados desactivan las banderas de la zona de pruebas de Chrome) a menos que comprenda las consecuencias. Los navegadores se envían reforzados de forma predeterminada; el valor predeterminado es correcto para casi todos los usuarios.

Preguntas frecuentes

¿Es el sandboxing lo mismo que la virtualización?
Se superponen pero no son idénticos. La virtualización ejecuta sistemas operativos completos dentro de un emulador; el aislamiento está en el nivel de virtualización de hardware. El sandboxing generalmente ejecuta procesos dentro del mismo sistema operativo con restricciones impuestas por el kernel. La virtualización es más pesada pero proporciona un aislamiento más fuerte; Los diseños modernos a menudo combinan ambos (VM Firecracker para servidores sin servidor, gVisor para contenedores).
¿El sandboxing ralentiza las cosas?
Gastos generales modestos: normalmente un porcentaje de un solo dígito para el filtrado de llamadas al sistema, un poco más para el aislamiento de procesos. El costo de rendimiento se ha reducido activamente mediante soporte de hardware (Intel CET, ARM PAC), por lo que los entornos sandbox modernos son esencialmente gratuitos para la mayoría de las cargas de trabajo.
¿Puede una VPN escapar de su zona de pruebas?
El software de cliente VPN normalmente necesita más privilegios que las aplicaciones de espacio aislado: configuran el enrutamiento y las interfaces de red. En macOS e iOS utilizan API específicas (marco NetworkExtension) para hacer esto de forma segura. El cliente VPN en sí tiene privilegios; los datos que fluyen a través de él son opacos para otras aplicaciones.
¿Ejecutar código en un contenedor Docker es lo mismo que hacer sandboxing?
Los contenedores Docker utilizan espacios de nombres de Linux y seccomp para el aislamiento, que es una forma de espacio aislado. El aislamiento es más débil que el de los entornos limitados basados ​​en virtualización (los contenedores comparten el núcleo del host) y más débil que el de los entornos limitados de espacio de usuario que prohíben la mayoría de las llamadas al sistema (los contenedores permiten muchas). Para cargas de trabajo que no son de confianza, proyectos como gVisor o Kata Containers envuelven un aislamiento más fuerte alrededor de Docker UX.
¿Por qué Chrome usa tanta memoria?
Aislamiento del sitio. Cada origen se ejecuta en su propio proceso: 50 pestañas de sitios diferentes significan 50 procesos, cada uno con su propia sobrecarga de memoria. El costo es RAM; el beneficio es que el exploit de una pestaña no puede leer los datos de otra pestaña (contraseñas, sesiones). Chrome moderno pone más esfuerzo en optimizaciones de memoria compartida para reducir el impacto, pero la arquitectura inherentemente intercambia memoria por seguridad.
Explicación del sandboxing: cómo los navegadores y los sistemas operativos contienen código que no es de confianza