En este documento se explica qué es el benchmark del CIS, cómo se relaciona con Container-Optimized OS (COS), cómo auditar el estado de cumplimiento en la instancia y cómo solucionar problemas en caso de fallo.
Información general
El Center for Internet Security (CIS) publica comparativas de prácticas recomendadas de seguridad para varias plataformas. El benchmark de CIS de Container-Optimized OS es un conjunto de recomendaciones para configurar instancias que usan Container-Optimized OS para mantener una postura de seguridad sólida. Las imágenes de COS x86 y ARM cumplen los estándares del CIS.
Acceder a la comparativa
El benchmark de CIS de Container-Optimized OS está disponible en el sitio web de CIS:
- Ve a la página de descargas de CIS Benchmarks.
- Busca CIS Google Container-Optimized OS Benchmark.
- Haz clic en Descargar PDF.
Niveles de recomendaciones de seguridad
CIS define los siguientes niveles de recomendación para Container-Optimized OS.
Nivel 1
Las recomendaciones de este nivel están pensadas para que se puedan aplicar a la mayoría de los entornos. Este nivel incluye recomendaciones como las siguientes:
- La selección aleatoria del diseño del espacio de direcciones está habilitada
/tmp
no se puede usar para ejecutar archivos binarios ejecutables- El envío de redirección de paquetes está inhabilitado
Nivel 2
Las recomendaciones de este nivel amplían las del nivel 1, lo que da como resultado un entorno de seguridad más estricto. Las recomendaciones de nivel 2 no se aplican necesariamente a todos los casos, ya que pueden requerir cambios en la aplicación. Debes evaluar las recomendaciones de nivel 2 para tu entorno antes de aplicarlas. Este nivel incluye recomendaciones como las siguientes:
- Existen reglas de cortafuegos para todos los puertos abiertos
- No se aceptan redirecciones ICMP ni anuncios de routers
- El tiempo de espera predeterminado del shell de usuario es de 900 segundos o menos
Cómo cumple Container-Optimized OS los CIS Benchmarks
A partir de la versión 97, las imágenes de Container-Optimized OS cumplen el nivel 1 de CIS de forma predeterminada y ofrecen la opción de cumplir el nivel 2 de CIS. También proporcionamos un escáner que puedes usar para auditar tu instancia en función de los niveles de recomendación de CIS.
La configuración de CIS que define las recomendaciones se encuentra en /usr/share/google/security/cis-compliance/cis_config.textproto
. El escáner de CIS usa la configuración para comprobar el estado de cumplimiento de la instancia. Los resultados de cada ejecución del escáner de cumplimiento del nivel de CIS se escriben en /var/lib/google/cis_scanner_scan_result.textproto
. Este archivo se sobrescribe cada vez que se ejecuta el analizador de CIS. Si falla alguna de las comprobaciones de nivel 1 o 2 de CIS, el archivo cis_scanner_scan_result.textproto
contendrá una lista de todas las comprobaciones que no se hayan superado.
Comprobar el estado de cumplimiento de una instancia
Las imágenes de Container-Optimized OS proporcionan los siguientes servicios systemd para comprobar el cumplimiento y la configuración:
- cis-level1.service: está habilitado de forma predeterminada y se inicia al arrancar. Cuando se inicia el servicio, comprueba si la instancia cumple el nivel 1 de CIS.
- cis-level2.service: inhabilitado de forma predeterminada. Este servicio te permite configurar la instancia para que cumpla el nivel 2 de CIS y comprueba el estado de cumplimiento de los niveles 1 y 2.
En las siguientes secciones se explica cómo comprobar el estado de cumplimiento de la instancia y cómo automatizar el proceso de auditoría.
Comprobar el estado de cumplimiento del nivel 1 de CIS
Para comprobar si tu instancia cumple el nivel 1 de CIS, consulta el estado de cis-level1.service
:
systemctl status cis-level1
El resultado debería ser similar al siguiente:
Reading scan config from /usr/share/google/security/cis-compliance/cis_config.textproto
Running scan of 62 benchmarks
Scan status: SUCCEEDED
Found 0 non-compliant benchmarks
Writing scan results to /var/lib/google/cis_scanner_scan_result.textproto
Si se detecta alguna comprobación que no cumple los requisitos, consulta Fallo en la comprobación de cumplimiento de CIS de nivel 1 o 2.
La comprobación cis-level1.service
solo se realiza una vez, cuando se inicia la instancia, para verificar el cumplimiento del nivel 1 de CIS. Para configurar la comprobación periódica del cumplimiento, consulta Comprobación periódica del estado de cumplimiento de CIS.
Configurar el cumplimiento del nivel 2 de CIS y comprobar el estado
Puedes usar el servicio cis-level2
para configurar la instancia de forma que cumpla el nivel 2 de CIS y para comprobar el estado de cumplimiento de los niveles 1 y 2. El servicio systemd admite todas las recomendaciones de nivel 2 del CIS excepto las siguientes:
4.1.1.2 Asegúrate de que Logging se esté ejecutando (ID: logging-service-running)
Esta recomendación está inhabilitada de forma predeterminada, pero se puede volver a habilitar eliminando el ID de la lista de inhabilitación, que se encuentra en el archivo
/etc/cis-scanner/env_vars
. Esta comprobación solo está disponible en las versiones 109 y posteriores. En las fases anteriores, si habilitas el registro tú mismo, cumples esta recomendación. Si deshaces la inhabilitación, al ejecutar el serviciocis-level2
se ejecuta una secuencia de comandos que inicia el registro de fluent-bit. Mantén la opciónlogging-service-running
desactivada si no quieres usar nuestro registro predeterminado o si quieres usar tu propio registro.
En las siguientes recomendaciones, cis-level2
configura la instancia, pero no verifica el estado de cumplimiento:
105 y versiones anteriores:
- 3.3.1.1 Asegurarse de que la política de cortafuegos predeterminada de IPv6 deniega el acceso
- 3.3.1.2. Asegúrate de que el tráfico de bucle de retorno IPv6 esté configurado
- 3.3.1.3 Asegurarse de que las conexiones salientes y establecidas de IPv6 estén configuradas
- 3.3.1.4 Asegurarse de que existen reglas de cortafuegos IPv6 para todos los puertos abiertos
- 3.3.2.1 Asegurarse de que la política de cortafuegos de denegación predeterminada
- 3.3.2.2. Asegúrate de que el tráfico de bucle esté configurado
- 3.3.2.3. Asegúrate de que las conexiones salientes y establecidas estén configuradas
109 y versiones posteriores:
- 3.3.1.4 Asegurarse de que existen reglas de cortafuegos IPv6 para todos los puertos abiertos
El servicio cis-level2
está inhabilitado de forma predeterminada. Para iniciar el servicio, ejecuta el siguiente comando:
systemctl start cis-level2.service
Para comprobar si tu instancia se ha configurado correctamente y cumple las recomendaciones del nivel 2 de CIS, consulta el estado de cis-level2.service
:
systemctl status cis-level2
El resultado debería ser similar al siguiente:
Reading scan config from /usr/share/google/security/cis-compliance/cis_config.textproto
Running scan of 112 benchmarks
Scan status: SUCCEEDED
Found 0 non-compliant benchmarks
Writing scan results to /var/lib/google/cis_scanner_scan_result.textproto
Si la configuración de la instancia falla o se detectan comprobaciones no conformes, consulta la sección Solución de problemas.
El servicio cis-level2
configura la instancia y comprueba el cumplimiento del nivel 2 de CIS solo una vez. Para configurar la comprobación periódica del cumplimiento, consulta Comprobación periódica del estado de cumplimiento de CIS.
Comprobación periódica del estado de cumplimiento de CIS
Las imágenes de Container-Optimized OS incluyen los siguientes servicios para comprobar periódicamente el cumplimiento de CIS:
- cis-compliance-scanner.service: comprueba el estado de cumplimiento en función de las variables de entorno definidas en
/etc/cis-scanner/env_vars
. De forma predeterminada, este servicio comprueba el cumplimiento del nivel 1 de CIS y está inhabilitado. - cis-compliance-scanner.timer: se ejecuta
cis-compliance-scanner.service
periódicamente. El periodo predeterminado es una vez al día.
Configurar el servicio de escáner
El cis-compliance-scanner.service
se encarga de comprobar el estado del cumplimiento de CIS en función de las variables de entorno definidas en /etc/cis-scanner/env_vars
. De forma predeterminada, este servicio comprueba el cumplimiento del nivel 1 de CIS.
Para comprobar si se cumple el nivel 2 de CIS, asigna el valor 2 a la variable de entorno LEVEL en /etc/cis-scanner/env_vars
. El archivo /etc/cis-scanner/env_vars
es similar al siguiente:
# cis-compliance-scanner.service environment variables
# The config file defines which checks to perform by cis_scanner
CONFIG="/usr/share/google/security/cis-compliance/cis_config.textproto"
# Where to store the result of the scan
RESULT="/var/lib/google/cis_scanner_scan_result.textproto"
# Upto which level to scan. It can be 1 or 2
LEVEL="2"
# Extra options that can be passed to cis_scanner
# For valid options, see output of `cis_scanner -h`
EXTRA_OPTIONS=""
Configurar el temporizador
Para configurar la comprobación periódica del cumplimiento, inicia la unidad cis-compliance-scanner.timer
:
systemctl start cis-compliance-scanner.timer
De forma predeterminada, cis-compliance-scanner.timer
se inicia cis-compliance-scanner.service
una vez al día. Para cambiar el periodo de análisis, anula el campo OnUnitActiveSec de la unidad cis-compliance-scanner.timer
:
sudo mkdir /etc/systemd/system/cis-compliance-scanner.timer.d
sudo tee /etc/systemd/system/cis-compliance-scanner.timer.d/override.conf <<EOF
[Unit]
Description=Run CIS Scanner once an hour
[Timer]
OnUnitActiveSec=1h
EOF
En este ejemplo, el periodo del escáner se establece en una vez cada hora.
Para aplicar los cambios, vuelve a cargar las unidades de systemd:
systemctl daemon-reload
Inhabilitar comprobaciones de cumplimiento de CIS específicas
Las recomendaciones de los niveles 1 y 2 del CIS se han creado para que se puedan aplicar a la mayoría de los entornos. Sin embargo ,es posible que algunas recomendaciones no se apliquen a tu entorno específico. Para inhabilitar recomendaciones específicas, usa la variable de entorno EXTRA_OPTIONS en /etc/cis-scanner/env_vars
.
En el siguiente ejemplo, el archivo env_vars
no sigue la recomendación etc-passwd-permissions
:
# cis-compliance-scanner.service environment variables
# The config file defines which checks to perform by cis_scanner
CONFIG="/usr/share/google/security/cis-compliance/cis_config.textproto"
# Where to store the result of the scan
RESULT="/var/lib/google/cis_scanner_scan_result.textproto"
# Upto which level to scan. It can be 1 or 2
LEVEL="1"
# Extra options that can be passed to cis_scanner
# For valid options:`cis_scanner -h`
EXTRA_OPTIONS="--benchmark-opt-out-ids=etc-passwd-permissions"
Automatizar la habilitación y la comprobación del estado de cumplimiento de CIS
Puedes automatizar el proceso de comprobación del cumplimiento de tus instancias mediante cloud-init o la política de SO. En los siguientes ejemplos se muestran algunos casos prácticos de cada herramienta:
- Ejemplo 1: comprueba el cumplimiento del nivel 1 de CIS una vez al día.
- Ejemplo 2: comprueba el cumplimiento del nivel 1 de CIS una vez cada hora.
- Ejemplo 3: comprueba el cumplimiento del nivel 2 de CIS una vez al día.
- Ejemplo 4: Inhabilitar una comprobación de cumplimiento de CIS específica.
Usar cloud-init
Antes de probar los ejemplos siguientes, asegúrate de que sabes cómo configurar una instancia de COS con cloud-init. Para ello, sigue las instrucciones que se indican en el artículo Usar cloud-init con el formato de configuración de Cloud.
Ejemplo 1
La siguiente configuración de ejemplo inicia análisis periódicos de nivel 1 de CIS con el periodo predeterminado de una vez al día.
#cloud-config runcmd: # Check the compliance status of the instance once a day. - systemctl start cis-compliance-scanner.timer
Ejemplo 2
En el siguiente ejemplo se configura la comprobación periódica de nivel 1 de CIS una vez cada hora.
#cloud-config # Override cis-compliance-scanner.timer with 1 hour frequency. write_files: - path: /etc/systemd/system/cis-compliance-scanner.timer.d/override.conf permissions: 0600 owner: root content: | [Unit] Description=Run CIS Scanner once an hour [Timer] OnUnitActiveSec=1h runcmd: # Reload systemd units. - systemctl daemon-reload # Check the compliance status of the instance once an hour. - systemctl start cis-compliance-scanner.timer
Ejemplo 3
En el siguiente ejemplo se configura la comprobación periódica de nivel 2 de CIS con el periodo predeterminado de una vez al día.
#cloud-config runcmd: # Configure the instance for CIS level 2. - systemctl start cis-level2.service # Change the scan level to CIS Level 2. - sed -i 's/^LEVEL=.*$/LEVEL="2"/' /etc/cis-scanner/env_vars # Check the compliance status of the instance once a day. - systemctl start cis-compliance-scanner.timer
Ejemplo 4
En el siguiente ejemplo, se configura el escáner para que se ejecute una vez al día y se inhabilita una recomendación específica de CIS.
#cloud-config runcmd: # Opt-out of the etc-passwd-permissions check. - sed -i 's/^EXTRA.*$/EXTRA_OPTIONS="--benchmark-opt-out-ids=etc-passwd-permissions"/' /etc/cis-scanner/env_vars # Check the compliance of the instance once a day. - systemctl start cis-compliance-scanner.timer
Usar la política de SO
Puedes usar una política de SO para configurar el análisis de CIS Benchmark. Antes de empezar, asegúrate de que conoces la política del SO, incluidos los siguientes aspectos:
- Política de escritura del SO
- Asignación de política de SO
- Ver informes de asignación de políticas de SO
Además, debes añadir las opciones instanceFilter
y rollout
en los ejemplos siguientes para la implementación.
Ejemplo 1
La siguiente configuración de ejemplo inicia análisis periódicos de nivel 1 de CIS con el periodo predeterminado de una vez al día.
Ejemplo 2
En el siguiente ejemplo se configura la comprobación periódica de nivel 1 de CIS una vez cada hora.
Ejemplo 3
En el siguiente ejemplo se configura la comprobación periódica de nivel 2 de CIS con el periodo predeterminado de una vez al día.
Ejemplo 4
En el siguiente ejemplo, se configura el escáner para que se ejecute una vez al día y se inhabilita una recomendación específica de CIS.
Solución de problemas
En esta sección se describe cómo resolver problemas relacionados con el análisis comparativo de CIS.
No se puede configurar una instancia para que cumpla las recomendaciones de nivel 2 de CIS
El servicio cis-level2
primero configura la instancia para que cumpla las recomendaciones de nivel 2 de CIS y, a continuación, comprueba si cumple los niveles 1 y 2 de CIS. Si no se puede configurar la instancia, el servicio cis-level2
se cierra con el siguiente mensaje de error:
Job for cis-level2.service failed because the control process exited with error code.
See "systemctl status cis-level2.service" and "journalctl -xeu cis-level2.service" for details.
Los registros del diario mencionarán las recomendaciones que no se han podido aplicar en la instancia y que han provocado un error en el servicio cis-level2
systemd.
Falla la comprobación de cumplimiento de CIS de nivel 1 o 2
Los resultados del análisis de cada ejecución de la conformidad con el nivel de CIS se escriben en /var/lib/google/cis_scanner_scan_result.textproto
. Si falla alguna de las comprobaciones de nivel 1 o 2 de CIS, el archivo textproto contendrá la lista de todas las comprobaciones que no se hayan superado, como en el siguiente ejemplo:
cat /var/lib/google/cis_scanner_scan_result.textproto
# Output
start_time: {
seconds: 1648241700
nanos: 763152171
}
end_time: {
seconds: 1648241700
nanos: 812992527
}
scanner_version: "1.1.4.3"
benchmark_version: "1.0.0"
status: {
status: SUCCEEDED
}
non_compliant_benchmarks: {
id: "etc-passwd-permissions"
compliance_occurrence: {
non_compliant_files: {
path: "/etc/passwd"
reason: "File permission is 0664, expected the following bits to be set: 0444 and the following bits to be clear: 0133"
}
}
}
compliant_benchmarks: {
id: "etc-passwd-permissions"
compliance_occurrence: {}
}
Para mitigar los errores de comprobación, usa CIS Benchmark y sigue los pasos de la sección Remediation
para que la instancia cumpla los requisitos. Para saber qué recomendación corresponde a una comprobación fallida en la comparativa de CIS, busca el ID non_compliant_benchmark's
en el archivo de configuración del escáner de CIS, que se encuentra en /usr/share/google/security/cis-compliance/cis_config.textproto
.