En este documento, se explica qué es la comparativa de 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 fallas.
Descripción general
El Center for Internet Security (CIS) lanza comparativas de prácticas recomendadas de seguridad para varias plataformas. La comparativa de CIS para Container-Optimized OS es un conjunto de recomendaciones para configurar instancias que usan Container-Optimized OS para lograr una posición de seguridad sólida. Tanto las imágenes de COS x86 como las de ARM cumplen con la CIS.
Accede a la comparativa
La comparativa de CIS para Container-Optimized OS está disponible en el sitio web de CIS:
- Ve a la página de descargas de las comparativas de CIS.
- Busca CIS Google Container-Optimized OS Benchmark (Comparativa de CIS para Container-Optimized OS).
- Haz clic en Download PDF (Descargar PDF).
Niveles de recomendación de seguridad
CIS define los siguientes niveles de recomendación para Container-Optimized OS.
Nivel 1
Las recomendaciones en este nivel están diseñadas para que se apliquen a la mayoría de los entornos. Este nivel incluye recomendaciones como las siguientes:
- La aleatorización del diseño del espacio de direcciones está habilitada
- No se puede usar
/tmp
para ejecutar objetos binarios ejecutables. - El envío de redireccionamiento de paquetes está inhabilitado
Nivel 2
Las recomendaciones de este nivel extienden las del nivel 1, lo que da como resultado un entorno de seguridad más estricto. Las recomendaciones de nivel 2 no necesariamente se aplican a todos los casos, ya que pueden requerir cambios en la aplicación. Debes evaluar las recomendaciones del nivel 2 para tu entorno antes de aplicarlas. Este nivel incluye recomendaciones como las siguientes:
- Existen reglas de firewall para todos los puertos abiertos
- No se aceptan redireccionamientos ICMP ni anuncios de router.
- El tiempo de espera predeterminado de la shell del usuario es de 900 segundos o menos.
Cómo cumple Container-Optimized OS con las comparativas de CIS
A partir del evento importante 97, las imágenes de Container-Optimized OS cumplen con el nivel 1 de CIS de forma predeterminada y proporcionan una opción para cumplir con 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 verificar el estado de cumplimiento de la instancia. Los resultados de cada ejecución del escáner de cumplimiento de nivel CIS se escriben en /var/lib/google/cis_scanner_scan_result.textproto
. Este archivo se reemplaza en cada ejecución del escáner de CIS. Si falla alguna de las verificaciones de nivel 1 o 2 de CIS, el archivo cis_scanner_scan_result.textproto
contendrá una lista de todas las verificaciones que fallaron.
Verifica el estado de cumplimiento de la instancia
Las imágenes de Container-Optimized OS proporcionan los siguientes servicios de systemd para la verificación de cumplimiento y la configuración:
- cis-level1.service: Está habilitado de forma predeterminada y se inicia durante el inicio. Cuando se inicia el servicio, verifica si la instancia cumple con el nivel 1 de CIS.
- cis-level2.service: Inhabilitado de forma predeterminada. Este servicio te permite configurar la instancia para que cumpla con el nivel 2 del CIS y verifica el estado de cumplimiento en el nivel 1 y el nivel 2.
En las siguientes secciones, se explica cómo verificar el estado de cumplimiento de la instancia y cómo automatizar el proceso de auditoría.
Verifica el estado de cumplimiento del nivel 1 de CIS
Para ver si tu instancia cumple con el nivel 1 de la CIS, verifica el estado de cis-level1.service
:
systemctl status cis-level1
El resultado es similar a este:
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 encuentran controles que no cumplen con los requisitos, consulta Falla la verificación de cumplimiento de nivel 1 o 2 de CIS.
cis-level1.service
verifica el cumplimiento del nivel 1 de CIS solo una vez, cuando se inicia la instancia. Para configurar la verificación de cumplimiento periódica, consulta Verificación periódica del estado de cumplimiento de CIS.
Configura el cumplimiento del nivel 2 de CIS y verifica el estado
Puedes usar el servicio cis-level2
para configurar la instancia de modo que cumpla con el nivel 2 del CIS y verificar el estado de cumplimiento en el nivel 1 y el nivel 2. El servicio systemd admite todas las recomendaciones del nivel 2 de CIS excepto las siguientes:
4.1.1.2 Asegúrate de que el registro esté en ejecución (ID: logging-service-running)
Esta recomendación está inhabilitada de forma predeterminada, pero se puede volver a habilitar si se borra el ID de la lista de inhabilitación, que se encuentra en el archivo
/etc/cis-scanner/env_vars
. Esta verificación solo existe en los eventos importantes 109 y versiones posteriores. En hitos anteriores, habilitar el registro personal te permite cumplir con esta recomendación. Si deshaces la inhabilitación, ejecutar el serviciocis-level2
ejecutará una secuencia de comandos que inicia el registro de Fluent-bit. Mantén inhabilitada la opciónlogging-service-running
si no quieres usar nuestro registro predeterminado o si quieres usar tu propio registro.
En las siguientes recomendaciones, el servicio cis-level2
configura la instancia, pero no verifica el estado de cumplimiento:
105 y menos:
- 3.3.1.1 Asegúrate de que la política de denegación de firewall de IPv6 sea predeterminada
- 3.3.1.2 Asegúrate de que el tráfico de bucle invertido de IPv6 esté configurado
- 3.3.1.3 Asegúrate de que las conexiones IPv6 salientes y establecidas estén configuradas
- 3.3.1.4 Asegúrate de que las reglas de firewall de IPv6 existan para todos los puertos abiertos
- 3.3.2.1 Asegúrate de tener una política de denegación de firewall predeterminada
- 3.3.2.2 Asegúrate de que el tráfico de bucle invertido 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 Asegúrate de que las reglas de firewall de IPv6 existan 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 ver si tu instancia se configuró correctamente y cumple con las recomendaciones del nivel 2 del CIS, verifica el estado de cis-level2.service
:
systemctl status cis-level2
El resultado es similar a este:
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 encuentran verificaciones que no cumplen con los requisitos, consulta Solución de problemas.
El servicio cis-level2
configura la instancia y verifica el cumplimiento del nivel 2 de CIS solo una vez. Para configurar la verificación de cumplimiento periódica, consulta Verificación periódica del estado de cumplimiento de CIS.
Verificación periódica del estado de cumplimiento de CIS
Las imágenes de Container-Optimized OS incluyen los siguientes servicios para verificar periódicamente el cumplimiento de CIS:
- cis-compliance-scanner.service: Verifica el estado de cumplimiento según las variables de entorno definidas en
/etc/cis-scanner/env_vars
. De forma predeterminada, este servicio verifica el cumplimiento del nivel 1 de CIS y está inhabilitado. - cis-compliance-scanner.timer: Ejecuta
cis-compliance-scanner.service
de forma periódica. El período predeterminado es una vez al día.
Configura el servicio de escáner
cis-compliance-scanner.service
es responsable de verificar el estado de cumplimiento de CIS según las variables de entorno definidas en /etc/cis-scanner/env_vars
. De forma predeterminada, este servicio verifica el cumplimiento del nivel 1 de CIS.
Para verificar el cumplimiento del nivel 2 de CIS, establece la variable de entorno LEVEL en /etc/cis-scanner/env_vars
en 2. 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=""
Configura el temporizador
Para configurar el escaneo de cumplimiento periódico, inicia la unidad cis-compliance-scanner.timer
:
systemctl start cis-compliance-scanner.timer
De forma predeterminada, cis-compliance-scanner.timer
inicia cis-compliance-scanner.service
una vez al día. Para cambiar el período 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, se establece el período del escáner en una vez por hora.
Para aplicar los cambios, vuelve a cargar las unidades de systemd:
systemctl daemon-reload
Inhabilitar verificaciones de cumplimiento específicas de CIS
Las recomendaciones de nivel 1 y 2 del CIS están diseñadas para que se apliquen 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 de archivo env_vars
, se inhabilita 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"
Automatiza la habilitación y la verificación del estado de cumplimiento de CIS
Puedes automatizar el proceso de verificación de cumplimiento de tus instancias con cloud-init o la política del SO. En los siguientes ejemplos, se muestran algunos casos de uso con cada herramienta:
- Ejemplo 1: Verifica el cumplimiento del CIS de nivel 1 una vez al día.
- Ejemplo 2: Verifica el cumplimiento del nivel 1 de CIS una vez por hora.
- Ejemplo 3: Verifica el cumplimiento del nivel 2 de CIS una vez al día.
- Ejemplo 4: Inhabilitar una verificación de cumplimiento específica de CIS
Usa cloud‑init
Antes de probar los siguientes ejemplos, asegúrate de estar familiarizado con la configuración de una instancia de COS con cloud-init. Para ello, sigue las instrucciones que se indican en Usa cloud-init con el formato de configuración de Cloud.
Ejemplo 1
En el siguiente ejemplo de configuración, se inicia el análisis periódico de CIS en el nivel 1 con el período 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 el análisis periódico de CIS en el nivel 1 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 el análisis periódico de CIS en el nivel 2 con el período 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
Cómo usar la política del SO
Puedes usar una política del SO para configurar el análisis de CIS Benchmark. Antes de comenzar, asegúrate de estar familiarizado con la Política de SO, incluido lo siguiente:
- Cómo escribir una política del SO
- Asignación de políticas del SO
- Cómo ver los informes de asignación de políticas del SO
Además, debes agregar las opciones instanceFilter
y rollout
en los siguientes ejemplos para la implementación.
Ejemplo 1
En el siguiente ejemplo de configuración, se inicia el análisis periódico de CIS en el nivel 1 con el período predeterminado de una vez al día.
Ejemplo 2
En el siguiente ejemplo, se configura el análisis periódico de CIS en el nivel 1 una vez cada hora.
Ejemplo 3
En el siguiente ejemplo, se configura el análisis periódico de CIS en el nivel 2 con el período 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.
Soluciona problemas
En esta sección, se describe cómo resolver problemas relacionados con el análisis de comparativas de CIS.
No se puede configurar una instancia para que cumpla con las recomendaciones del nivel 2 de CIS.
El servicio cis-level2
primero configura la instancia para que cumpla con las recomendaciones del nivel 2 de CIS y, luego, verifica el cumplimiento del nivel 1 y 2 de CIS. En caso de que falle la configuración de la instancia, el servicio cis-level2
se cerrará 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.
En los registros del diario, se mencionarán las recomendaciones que no se aplicaron en la instancia y que provocaron el error del servicio systemd cis-level2
.
No se pasa la verificación de cumplimiento del nivel 1 o 2 de CIS
Los resultados de la búsqueda de cada ejecución de cumplimiento del nivel CIS se escriben en /var/lib/google/cis_scanner_scan_result.textproto
. Si falla alguna de las verificaciones de nivel 1 o 2 de CIS, el archivo textproto contendrá la lista de todas las verificaciones que fallaron, 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 las verificaciones que fallaron, usa la comparativa de CIS y sigue los pasos de la sección Remediation
para la verificación que falló para que la instancia cumpla con los requisitos. Para saber qué recomendación corresponde a una verificació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, ubicado en /usr/share/google/security/cis-compliance/cis_config.textproto
.