Información general sobre la seguridad

En esta página se ofrece una descripción general de las funciones de seguridad de Container-Optimized OS que se ejecuta en Google Cloud.

Seguridad del SO

Basado en Chromium OS, Container-Optimized OS de Google implementa varios principios de diseño de seguridad para proporcionar una plataforma bien configurada para ejecutar servicios de producción.

Tamaño mínimo del SO

Este es el elemento principal de la seguridad de Container-Optimized OS. Como Container-Optimized OS está optimizado para ejecutar contenedores y los contenedores empaquetan sus propias dependencias, podemos eliminar los paquetes innecesarios y, de este modo, minimizar la superficie de ataque del SO.

Sistema de archivos raíz inmutable e inicio verificado

El sistema de archivos raíz de Container-Optimized OS siempre se monta como de solo lectura. Además, su suma de comprobación se calcula en tiempo de compilación y el kernel la verifica en cada arranque. Este mecanismo evita que los atacantes "tomen posesión" de la máquina mediante cambios locales permanentes. Además, varios otros montajes no son ejecutables de forma predeterminada. Consulta Filesystem para obtener más información.

Configuración sin reconocimiento del estado

Aunque tener un sistema de archivos raíz de solo lectura es bueno para la seguridad, dificulta el uso del sistema. Por ejemplo, necesitamos poder crear y añadir usuarios para iniciar sesión en el sistema. Para solucionar este problema, personalizamos el sistema de archivos raíz de forma que /etc/ se pueda escribir, pero no tenga estado. De esta forma, puedes escribir ajustes de configuración en tiempo de ejecución, pero esos ajustes no se conservan entre reinicios. Por lo tanto, cada vez que se reinicia un nodo de Container-Optimized OS, empieza desde cero. Algunos datos, como los directorios de inicio, los registros y las imágenes de Docker de los usuarios, se conservan tras los reinicios, ya que no forman parte del sistema de archivos raíz.

Kernel reforzado

Container-Optimized OS habilita varias funciones del kernel para reforzar la seguridad, como la arquitectura de medición de integridad (IMA), la auditoría, el aislamiento de la tabla de páginas del kernel (KPTI) y algunos módulos de seguridad de Linux (LSMs) de Chromium OS. Además, Container-Optimized OS admite funciones de seguridad como seccomp y AppArmor, que permiten aplicar políticas de seguridad más detalladas.

Valores predeterminados centrados en la seguridad

Container-Optimized OS proporciona otro nivel de protección al ofrecer valores predeterminados orientados a la seguridad para varias funciones. Esto incluye elementos como los ajustes de sysctl que inhabilitan ptrace y BPF sin privilegios, bloquean el cortafuegos, etc. Estos valores predeterminados, cuando se aplican automáticamente a una flota de instancias, ayudan a proteger todo el clúster, el proyecto y la organización.

Actualizaciones automáticas

La función de actualizaciones automáticas de Container-Optimized OS permite aplicar parches de seguridad a las máquinas virtuales en ejecución de forma oportuna. Cuando Kubernetes Engine gestiona Container-Optimized OS, las actualizaciones automáticas de los nodos logran un equilibrio entre seguridad y estabilidad.

Sistema de archivos

La siguiente es una lista de rutas en el sistema de archivos de la imagen de nodo de Container-Optimized OS, junto con sus propiedades y el uso recomendado:

Ruta Propiedades Finalidad
/
  • Solo lectura
  • Ejecutable
El sistema de archivos raíz está activado como solo lectura para mantener la integridad. El kernel verifica la integridad del sistema de archivos raíz durante el arranque y se niega a arrancar si se producen errores.
/home
/var
  • editable
  • No ejecutable
  • Con reconocimiento del estado
Estas rutas se usan para almacenar datos que se conservan durante la vida útil del disco de arranque. Se montan desde /mnt/stateful_partition.
/var/lib/google
/var/lib/docker
/var/lib/toolbox
  • editable
  • Ejecutable
  • Con reconocimiento del estado
Estas rutas son directorios de trabajo de los paquetes de Compute Engine (por ejemplo, el servicio de gestión de cuentas), Docker y Toolbox, respectivamente.
/var/lib/cloud
  • editable
  • Ejecutable
  • Sin reconocimiento del estado
  • Tmpfs
Esta ruta es el directorio de trabajo del paquete cloud-init.
/etc
  • editable
  • Ejecutable
  • Sin reconocimiento del estado
  • Tmpfs
Normalmente, contiene tu configuración (por ejemplo, systemd servicios definidos mediante cloud-init). Es recomendable registrar el estado deseado de tus instancias en cloud-init, ya que cloud-init se aplica cuando se crea una instancia y cuando se reinicia.
/tmp
  • Editable
  • No ejecutable
  • Sin reconocimiento del estado
  • Tmpfs
Se suele usar como espacio de almacenamiento temporal y no se debe usar para almacenar datos persistentes.
/mnt/disks
  • editable
  • Ejecutable
  • Sin reconocimiento del estado
  • Tmpfs
Puedes activar discos persistentes en directorios de /mnt/disks.

Cortafuegos

De forma predeterminada, Container-Optimized OS está configurado para rechazar todas las conexiones TCP/UDP entrantes, excepto SSH en el puerto 22. Consulta Configurar el cortafuegos del host para saber cómo cambiar el valor predeterminado y abrir más puertos.

Acceso a la instancia

De forma predeterminada, Container-Optimized OS no contiene ninguna cuenta de usuario accesible. Las cuentas de usuario y las claves SSH se gestionan mediante metadatos de instancia o de proyecto o OS Login. OS Login te permite gestionar el acceso a las instancias con la gestión de identidades y accesos. Permite un control de acceso más preciso (sudo frente a no sudo), claves SSH identificables y una política de inicio de sesión de la organización.

El daemon SSH está configurado para no permitir la autenticación basada en contraseñas ni los inicios de sesión de administrador. Sin embargo, esto no impide que los usuarios obtengan privilegios de superusuario con sudo después de iniciar sesión, a menos que la cuenta de usuario se gestione con Inicio de sesión del SO.

Seguridad de la infraestructura

Además de las diversas funciones de protección del propio SO, el equipo de Container-Optimized OS también se toma en serio la cadena de suministro de software y prioriza la seguridad de la infraestructura al desarrollar, compilar e implementar imágenes, basándose en años de experiencia tanto de Chromium OS como de Google en general.

Creado a partir del código fuente en Google

Cada paquete de Container-Optimized OS, incluido el propio kernel de Linux, se compila a partir del código fuente de los repositorios de código de ChromiumOS. Esto significa que sabemos exactamente qué se incluye en el SO, quién lo ha registrado, en qué versión se ha introducido, etc. También nos permite aplicar parches y actualizar rápidamente cualquier paquete en caso de que se descubra una vulnerabilidad en cualquier nivel.

Análisis y respuesta continuos de vulnerabilidades (CVE)

Un sistema de análisis de CVEs nos avisa cada vez que se descubre una vulnerabilidad en el kernel o en cualquier paquete del SO. Se trata del mismo sistema que se usa para detectar vulnerabilidades en Android y Chromium OS. El equipo de Container-Optimized OS responde con prioridad para lanzar versiones parcheadas. El equipo de Container-Optimized OS también colabora con el equipo de respuesta a incidentes de Google para que los parches de seguridad más amplios estén disponibles rápidamente en Container-Optimized OS.

Proceso de prueba y cualificación

Antes de publicar una nueva imagen de Container-Optimized OS en Google Cloud, la probamos en varios niveles, incluidas las pruebas de fuzzing del kernel con syzkaller, las pruebas de Kubernetes a nivel de clúster, las pruebas de integración con las funciones de Compute Engine y varias pruebas de rendimiento. De esta forma, se garantiza la estabilidad y la calidad de nuestras versiones.