Sandboxing¶
📖 Definición¶
Sandboxing es una técnica de seguridad que consiste en ejecutar un programa, un proceso, un navegador, un script o incluso una aplicación completa dentro de un entorno restringido y aislado del resto del sistema. El objetivo es limitar su capacidad de interactuar con recursos críticos del host, reducir el impacto de un fallo o de un código malicioso y controlar de forma explícita qué archivos, redes o llamadas al sistema puede utilizar.
En esencia, el sandbox actúa como una «caja de seguridad»: todo lo que ocurre dentro de él está sometido a políticas estrictas de ejecución, privilegios, red, almacenamiento y observabilidad. Si un componente se ve comprometido, el daño potencial queda acotado al propio sandbox y no se extiende libremente al sistema operativo o a otros servicios.
Importante
El sandboxing no elimina la vulnerabilidad en sí, pero sí reduce drásticamente su radio de impacto y ayuda a contener amenazas, análisis de malware, ejecución de código no confiable y errores de configuración.
⚙️ ¿Cómo funciona? / Principios fundamentales¶
La efectividad del sandboxing se basa en combinar varias capas de contención y control:
- Aislamiento del proceso: Se utiliza separación de espacios de ejecución, como namespaces y control de montaje, para que el proceso vea solo un subconjunto del sistema de archivos, de la red y de otros recursos.
- Reducción de privilegios: La aplicación se ejecuta como un usuario no privilegiado, con capacidades mínimas y sin permisos administrativos sobre el sistema host.
- Filtrado de llamadas al sistema: Técnicas como seccomp-bpf, AppArmor o SELinux bloquean o permiten únicamente las syscalls necesarias para el software.
- Límites de recursos: Se imponen restricciones de CPU, memoria, E/S, número de procesos y uso de red para evitar abuso o denegación de servicio.
- Monitoreo y auditoría: Se registran eventos, accesos y comportamientos para detectar desviaciones o intentos de escape del sandbox.
graph TD
A[Aplicación o código no confiable] --> B[Sandbox]
B --> C[Sistema de archivos aislado]
B --> D[Red limitada]
B --> E[Syscalls filtradas]
B --> F[Privilegios reducidos]
F --> G[Host protegido]
🛡️ Tipos de sandboxing¶
| Tipo | Descripción | Ejemplo común |
|---|---|---|
| Sandbox de navegador | Aísla páginas web, scripts y plugins del sistema operativo. | Chrome / Chromium / Firefox |
| Sandbox de aplicación | Ejecuta un programa en un entorno con permisos y acceso mínimos. | Ejecutables de usuarios, plugins, visualizadores |
| Sandbox de contenedores | Aísla procesos mediante namespaces, cgroups y políticas de seguridad. | Docker, Kubernetes, OCI |
| Máquina virtual | Aísla completamente el sistema operativo en un hipervisor. | QEMU, Hyper-V, VMware |
| Sandbox de malware / análisis | Permite ejecutar código sospechoso sin poner en riesgo el entorno real. | Entornos de análisis de malware |
🎯 Ejemplo práctico o escenario de demostración¶
Un entorno de contenedores puede reforzar el sandboxing con políticas de seguridad para evitar que una aplicación comprometida acceda al anfitrión o a otros servicios.
docker run --privileged --network host --pid host \
--cap-add SYS_ADMIN \
-v /:/host \
vulnerable-app:latest
En este caso, el contenedor tiene casi todo el poder del host. Un fallo de seguridad o ejecución de código malicioso podría escalar el impacto de forma significativa.
docker run --rm --read-only \
--network none \
--cap-drop ALL \
--security-opt no-new-privileges:true \
--pids-limit 128 \
--memory 256m \
app-sandboxed:latest
Aquí el contenedor queda aislado por defecto: sin privilegios, sin acceso de red, con límites de memoria y procesos, y sin posibilidad de elevar permisos durante la ejecución.
🛡️ Medidas de mitigación y buenas prácticas¶
- Reducir privilegios de forma explícita: evitar ejecutarse como
rooty eliminar capacidades innecesarias. - Aplicar perfiles de seguridad: usar
seccomp,AppArmoroSELinuxpara limitar syscalls y accesos del proceso. - Aislar redes: desactivar acceso externo o restringir el tráfico por políticas de red mínimas.
- Usar sistemas de archivos de solo lectura: cuando sea posible, evitar escritura en el sistema de archivos del contenedor o aplicación.
- Reforzar límites de recursos: definir límites de memoria, CPU, procesos y E/S para reducir el riesgo de abuso o denegación de servicio.
- Monitorizar comportamiento: disponer de registros, métricas, alertas y análisis de anomalías para detectar abusos del sandbox.
- Mantener imágenes y dependencias actualizadas: los parches de kernel, bibliotecas y runtimes reducen la superficie de explotación.