Descripción general

En esta página, se proporciona una descripción general de las características de seguridad de Container-Optimized OS que se ejecuta en Google Cloud.

Seguridad del SO

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

Huella mínima del SO

Se trata de algo fundamental para la seguridad de Container-Optimized OS. Dado que Container-Optimized OS está optimizado para ejecutar contenedores y que los contenedores empaquetan sus propias dependencias, podemos cortar los paquetes innecesarios y, por lo tanto, minimizar la superficie de ataque del SO.

Inicio verificado y sistema de archivos raíz inmutable

El sistema de archivos raíz de Container-Optimized OS se activa como solo lectura. Además, su suma de verificación se calcula en el momento de la compilación y se verifica mediante el kernel en cada arranque. Este mecanismo evita que los atacantes "se adueñen" de la máquina a través de cambios locales permanentes. Asimismo, otras activaciones no son ejecutables de forma predeterminada. Consulta Sistema de archivos para obtener más detalles.

Configuración sin estado

Si bien tener un sistema de archivos raíz de solo lectura es bueno para la seguridad, esto hace que el sistema sea difícil de usar. Por ejemplo, se necesita poder crear y agregar usuarios para acceder al sistema. Para abordar esta cuestión, se personaliza el sistema de archivos raíz de modo que /etc/ puede escribirse, pero queda sin estado. Esto te permite escribir ajustes de configuración en el entorno de ejecución, pero esos ajustes no persisten en los reinicios. Por lo tanto, cada vez que se inicia un nodo de Container-Optimized OS, se empieza de nuevo. Determinados datos como, por ejemplo, los directorios de inicio de los usuarios, los registros y las imágenes de Docker persisten en los reinicios, dado que ya no forman parte del sistema de archivos raíz.

Kernel endurecido de seguridad

Container-Optimized OS habilita varias funciones de kernel de endurecimiento de la seguridad, incluida la arquitectura de medición de integridad (IMA), la auditoría, el aislamiento de tablas de páginas de kernel (KPTI) y algunos módulos de seguridad de Linux (LSM) 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 endurecimiento; para ello, brinda valores predeterminados orientados a la seguridad para varias características. Esto incluye, por ejemplo, la configuración sysctl, que inhabilita ptrace y BPF sin privilegios, bloquea el firewall, y así sucesivamente. Estos valores predeterminados, cuando se aplican automáticamente a una flota de instancias, ayudan a proteger el clúster, el proyecto y la organización en su totalidad.

Actualizaciones automáticas

La función de actualizaciones automáticas de Container-Optimized OS permite la entrega oportuna de parches de seguridad a las VM en ejecución. Cuando Kubernetes Engine administra 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 las rutas del sistema de archivos de imagen del nodo de Container-Optimized OS, junto con sus propiedades y uso recomendado:

Ruta Propiedades Propósito
/
  • solo lectura
  • ejecutable
El sistema de archivos raíz se activa como solo lectura a fin de mantener su integridad. El kernel verifica la integridad del sistema de archivos raíz durante el arranque y, en caso de encontrar errores, no inicia el sistema.
/home
/var
  • admite escritura
  • no ejecutable
  • con estado
El objetivo de estas rutas es almacenar los datos que se mantienen durante toda la vida del disco de arranque. Se activan desde /mnt/stateful_partition.
/var/lib/google
/var/lib/docker
/var/lib/toolbox
  • admite escritura
  • ejecutable
  • con estado
Estas rutas son directorios de trabajo que funcionan para los paquetes de Compute Engine (por ejemplo, el servicio de administrador de cuentas), Docker y Toolbox, respectivamente.
/var/lib/cloud
  • admite escritura
  • ejecutable
  • sin estado
  • tmpfs
Esta ruta es el directorio de trabajo del paquete cloud-init.
/etc
  • admite escritura
  • no ejecutable
  • sin estado
  • tmpfs
Por lo general, conserva tu configuración (por ejemplo, los servicios systemd definidos a través de cloud-init). Es una buena idea capturar el estado deseado de tus instancias en cloud-init, ya que cloud-init se aplica cuando una instancia acaba de crearse y cuando se reinicia.
/tmp
  • admite escritura
  • no ejecutable
  • sin estado
  • tmpfs
Por lo general, se usa como espacio temporal y no se debe usar para almacenar datos persistentes.
/mnt/disks
  • admite escritura
  • ejecutable
  • sin estado
  • tmpfs
Puedes activar discos persistentes en los directorios de /mnt/disks.

Firewall

Según la configuración predeterminada, Container-Optimized OS se configura para descartar todas las conexiones TCP/UDP entrantes, con excepción de SSH en el puerto 22. Consulta Cómo configurar el firewall del host para obtener información sobre cómo cambiar la configuración predeterminada para abrir más puertos.

Acceso a instancias

Según la configuración predeterminada, Container-Optimized OS no contiene ninguna cuenta de usuario accesible. Las cuentas de usuario y las claves SSH se administran a través de metadatos de instancias o proyectos o el Acceso al SO. El Acceso al SO te permite administrar el acceso a las instancias con la IAM. Permite un control de acceso más detallado (sudo frente a no sudo), claves SSH identificables y una política de acceso organizacional.

El daemon de SSH está configurado para inhabilitar la autenticación basada en contraseña y los accesos raíz. Sin embargo, esto no impide que los usuarios obtengan privilegios raíz con el comando sudo después de acceder, a menos que la cuenta de usuario se administre con Acceso al SO.

Seguridad de la infraestructura

Además de varias funciones de protección en el 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, implementar y compilar imágenes, según los años de experiencia de Chromium OS y Google en general.

Compilado desde la fuente en Google

Cada paquete en Container-Optimized OS, incluido el propio kernel de Linux, se compila desde la fuente en los repositorios de código de Chromium OS. Esto significa que sabemos exactamente qué está ocurriendo en el SO, quién lo registró, en qué versión se ingresó, entre otras opciones. También nos permite realizar parches y actualizaciones con rapidez en cualquier paquete si se descubre una vulnerabilidad en cualquier nivel.

Respuesta y análisis de vulnerabilidades continuas (CVE)

Un sistema de análisis de CVE nos alerta cuando se descubre una vulnerabilidad en el kernel o en cualquier paquete del SO. Este es el mismo sistema que se usa para detectar vulnerabilidades en Android y Chromium OS. El equipo de Container-Optimized OS responde con prioridad para realizar actualizaciones con parches. El equipo de Container-Optimized OS también trabaja con el equipo de respuesta ante incidentes de Google para hacer que los parches de seguridad más amplios estén disponibles rápidamente en Container-Optimized OS.

Proceso de prueba y calificación

Antes de publicar una imagen nueva de Container-Optimized OS en Google Cloud, se la prueba en varios niveles, esto incluye la prueba fuzz de kernel por syzkaller, pruebas de Kubernetes a nivel de clúster, pruebas de integración con características de Compute Engine, y varias comparativas de rendimiento. Esto asegura la estabilidad y la calidad de nuestros lanzamientos.