Ce document explique ce qu'est le benchmark CIS, comment il se rapporte à Container-Optimized OS (COS), comment auditer l'état de conformité dans l'instance et comment résoudre les problèmes en cas de défaillance.
Présentation
Le Center for Internet Security (CIS) publie des benchmarks des bonnes pratiques de sécurité pour diverses plates-formes. Le benchmark CIS de Container-Optimized OS est un ensemble de recommandations pour la configuration d'instances qui utilisent Container-Optimized OS afin de garantir une stratégie de sécurité renforcée. Les images COS x86 et ARM sont toutes deux conformes à la norme CIS.
Accéder au benchmark
Le benchmark CIS de Container-Optimized OS est disponible sur le site Web du CIS :
- Accédez à la page des téléchargements du benchmark CIS.
- Recherchez le benchmark CIS de Google Container-Optimized OS.
- Cliquez sur Télécharger au format PDF.
Niveaux de recommandation de sécurité
CIS définit les niveaux de recommandation suivants pour Container-Optimized OS.
Niveau 1
Les recommandations à ce niveau sont destinées à être appliquées à la majorité des environnements. Ce niveau comprend des recommandations telles que les suivantes :
- La distribution aléatoire de l'espace d'adressage est activée
/tmp
ne peut pas être utilisé pour exécuter des binaires exécutables- L'envoi de la redirection de paquets est désactivé
Niveau 2
Les recommandations à ce niveau étendent celles du niveau 1, ce qui entraîne un environnement de sécurité plus strict. Les recommandations de niveau 2 ne s'appliquent pas nécessairement à tous les cas, car des modifications peuvent être nécessaires. Vous devez évaluer les recommandations du niveau 2 pour votre environnement avant de les appliquer. Ce niveau inclut des recommandations telles que les suivantes:
- Des règles de pare-feu existent pour tous les ports ouverts
- Les redirections ICMP et les annonces de routeur ne sont pas acceptées
- Le délai avant expiration par défaut de la shell utilisateur est de 900 secondes ou moins.
Conformité de Container-Optimized OS avec les benchmarks CIS
À partir du Jalon 97, les images Container-Optimized OS sont conformes par défaut au niveau CIS 1 et offrent la possibilité de se conformer au niveau CIS 2. Nous fournissons également un analyseur que vous pouvez utiliser pour vérifier votre instance par rapport aux niveaux de recommandations CIS.
La configuration CIS qui définit les recommandations est présente sur /usr/share/google/security/cis-compliance/cis_config.textproto
. L'outil d'analyse CIS utilise la configuration pour vérifier l'état de conformité de l'instance. Les résultats de chaque exécution de l'outil d'analyse de la conformité au niveau CIS sont écrits dans /var/lib/google/cis_scanner_scan_result.textproto
. Ce fichier est écrasé à chaque exécution de l'analyseur CIS. Si l'une des analyses CIS de niveau 1 ou 2 échoue, le fichier cis_scanner_scan_result.textproto
contient la liste de toutes les vérifications ayant échoué.
Vérifier l'état de conformité de l'instance
Les images Container-Optimized OS fournissent les services systemd suivants pour le contrôle de conformité et la configuration:
- cis-level1.service: activé par défaut et démarre au démarrage Lorsque le service démarre, il vérifie si l'instance est conforme au niveau CIS 1.
- cis-level2.service: désactivé par défaut. Ce service vous permet de configurer l'instance pour qu'elle soit conforme au niveau 2 du CIS, et de vérifier l'état de conformité vis-à-vis des niveaux 1 et 2.
Les sections suivantes expliquent comment vérifier l'état de conformité de l'instance et automatiser le processus d'audit.
Vérifier l'état de conformité CIS de niveau 1
Pour savoir si votre instance est conforme au niveau 1 du CIS, vérifiez l'état de cis-level1.service
:
systemctl status cis-level1
Le résultat ressemble à ce qui suit :
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 des vérifications non conformes sont détectées, consultez Échec de la vérification de conformité CIS des niveaux 1 et 2.
Le cis-level1.service
ne vérifie la conformité CIS de niveau 1 qu'une seule fois, lorsque le
les instances de VM. Pour configurer des contrôles de conformité périodiques, consultez Vérification périodique de l'état de conformité CIS.
Configurer la conformité CIS de niveau 2 et vérifier l'état
Vous pouvez utiliser le service cis-level2
pour configurer l'instance afin qu'elle soit conforme au niveau CIS 2, et pour vérifier l'état de conformité vis-à-vis des niveaux 1 et 2. Le service systemd est compatible avec toutes les recommandations CIS de niveau 2, sauf les suivantes:
4.1.1.2 Vérifier que Logging est en cours d'exécution (ID: logging-service-running)
Cette recommandation est désactivée par défaut, mais vous pouvez la réactiver en supprimant l'ID de la liste des annonceurs désactivés, qui se trouve dans le fichier
/etc/cis-scanner/env_vars
. Cette vérification n'existe que dans les jalons 109 et versions ultérieures. Lors des étapes précédentes, le fait d'activer Logging vous-même vous permet de respecter cette recommandation. Si vous annulez la désactivation, l'exécution du servicecis-level2
exécute un script qui lance la journalisation fluent-bit. Laissezlogging-service-running
désactivé si vous ne souhaitez pas utiliser notre journalisation par défaut ou si vous souhaitez utiliser votre propre journalisation.
Pour les recommandations suivantes, le service cis-level2
configure l'instance, mais ne vérifie pas son état de conformité :
105 et versions antérieures:
- 3.3.1.1 Garantir la stratégie de pare-feu de refus par défaut pour IPv6
- 3.3.1.2 Assurez-vous que le trafic de bouclage IPv6 est configuré
- 3.3.1.3 Assurez-vous que les connexions sortantes et établies IPv6 sont configurées
- 3.3.1.4 Vérifier que des règles de pare-feu IPv6 existent pour tous les ports ouverts
- 3.3.2.1 Assurez-vous que la stratégie de pare-feu de refus par défaut est activée
- 3.3.2.2 Assurez-vous que le trafic de bouclage est configuré
- 3.3.2.3 Vérifier que les connexions sortantes et établies sont configurées
109 et versions ultérieures:
- 3.3.1.4 Vérifier que des règles de pare-feu IPv6 existent pour tous les ports ouverts
Le service cis-level2
est désactivé par défaut. Pour démarrer le service, exécutez la commande suivante :
systemctl start cis-level2.service
Pour savoir si votre instance est correctement configurée et conforme aux recommandations de niveau 2 du CIS, vérifiez l'état de cis-level2.service
:
systemctl status cis-level2
Le résultat ressemble à ce qui suit :
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 configuration de l'instance échoue ou si des vérifications non conformes sont détectées, consultez la section Dépannage.
Le service cis-level2
configure l'instance et ne vérifie la conformité CIS de niveau 2 qu'une seule fois. Pour configurer des contrôles de conformité périodiques, consultez Vérification périodique de l'état de conformité CIS.
Vérification périodique de l'état de conformité CIS
Les images Container-Optimized OS incluent les services suivants pour vérifier régulièrement la conformité aux normes CIS :
- cis-compliance-scanner.service: vérifie l'état de conformité en fonction des variables d'environnement définies dans
/etc/cis-scanner/env_vars
. Par défaut, ce service vérifie la conformité au niveau 1 du CIS et est désactivé. - cis-compliance-scanner.timer: exécute
cis-compliance-scanner.service
régulièrement. La période par défaut est d'une fois par jour.
Configurer le service d'analyse
Le cis-compliance-scanner.service
est chargé de vérifier l'état de la conformité CIS en fonction des variables d'environnement définies dans /etc/cis-scanner/env_vars
. Par défaut, ce service vérifie la conformité CIS de niveau 1.
Pour vérifier la conformité CIS de niveau 2, définissez la variable d'environnement LEVEL dans /etc/cis-scanner/env_vars
sur 2. Le fichier /etc/cis-scanner/env_vars
se présente comme suit:
# 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=""
Configurer le minuteur
Pour configurer une analyse périodique de la conformité, démarrez l'unité cis-compliance-scanner.timer
:
systemctl start cis-compliance-scanner.timer
Par défaut, cis-compliance-scanner.timer
démarre le cis-compliance-scanner.service
une fois par jour. Pour modifier la période d'analyse, remplacez le champ OnUnitActiveSec de l'unité 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
Dans cet exemple, la période d'analyse est définie sur une fois par heure.
Pour appliquer les modifications, actualisez les unités systemd:
systemctl daemon-reload
Désactiver des contrôles de conformité CIS spécifiques
Les recommandations de niveau 1 et de niveau 2 du CIS sont conçues pour s'appliquer à la plupart des environnements. Cependant ,certaines recommandations peuvent ne pas être applicables à votre environnement spécifique. Pour désactiver des recommandations spécifiques, utilisez la variable d'environnement EXTRA_OPTIONS dans /etc/cis-scanner/env_vars
.
L'exemple de fichier env_vars
suivant désactive la recommandation 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"
Automatiser l'activation et la vérification de l'état de conformité CIS
Vous pouvez automatiser le processus de vérification de la conformité de vos instances à l'aide de cloud-init ou des règles d'OS. Les exemples suivants illustrent des cas d'utilisation de chaque outil:
- Exemple 1: Vérifier la conformité CIS de niveau 1 une fois par jour.
- Exemple 2: Vérifier la conformité CIS de niveau 1 une fois par heure
- Exemple 3: Vérifier la conformité CIS de niveau 2 une fois par jour.
- Exemple 4 : Désactivation d'une vérification de conformité CIS spécifique
Utiliser cloud-init
Avant d'essayer les exemples suivants, assurez-vous de savoir comment configurer une instance COS avec cloud-init en suivant les instructions de la section Utiliser cloud-init avec le format Cloud Config.
Exemple 1
L'exemple de configuration suivant lance une analyse CIS périodique de niveau 1 avec la période par défaut d'une fois par jour.
#cloud-config runcmd: # Check the compliance status of the instance once a day. - systemctl start cis-compliance-scanner.timer
Exemple 2
L'exemple suivant configure une analyse CIS de niveau 1 périodique toutes les heures.
#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
Exemple 3
L'exemple suivant configure des analyses CIS périodiques de niveau 2 avec la période par défaut d'une fois par jour.
#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
Exemple 4
L'exemple suivant configure l'outil d'analyse pour qu'il s'exécute une fois par jour et désactive une recommandation CIS spécifique.
#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
Utiliser une règle d'OS
Vous pouvez utiliser une règle d'OS pour configurer l'analyse comparative CIS. Avant de commencer, assurez-vous de connaître les règles relatives au système d'exploitation, y compris les suivantes:
- Écrire une règle d'OS
- Attribution de règles d'OS
- Afficher les rapports sur l'attribution des règles d'OS
De plus, vous devez ajouter les options instanceFilter
et rollout
dans
les exemples suivants pour le déploiement.
Exemple 1
L'exemple de configuration suivant lance une analyse CIS périodique de niveau 1 avec la période par défaut d'une fois par jour.
Exemple 2
L'exemple suivant configure une analyse CIS de niveau 1 périodique toutes les heures.
Exemple 3
L'exemple suivant configure des analyses CIS périodiques de niveau 2 avec la période par défaut d'une fois par jour.
Exemple 4
L'exemple suivant configure l'analyseur pour qu'il s'exécute une fois par jour et désactive une recommandation spécifique du CIS.
Dépannage
Cette section explique comment résoudre les problèmes liés à l'analyse des benchmarks CIS.
Échec de la configuration d'une instance pour respecter les recommandations CIS de niveau 2
Le service cis-level2
configure d'abord l'instance pour qu'elle respecte les normes CIS
recommandations de niveau 2, puis vérifie la conformité avec les niveaux 1 et 2 de CIS. Si la configuration de l'instance échoue, le service cis-level2
se ferme et le message d'erreur suivant s'affiche:
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.
Les journaux de journal mentionnent les recommandations qui n'ont pas pu être appliquées sur l'instance et qui ont entraîné l'échec du service systemd cis-level2
.
Échec de la vérification de conformité CIS de niveau 1 ou 2
Les résultats de l'analyse pour chaque exécution de la conformité au niveau CIS sont écrits dans /var/lib/google/cis_scanner_scan_result.textproto
. Si l'une des analyses CIS de niveau 1 ou 2 échoue, le fichier textproto contient la liste de tous les contrôles ayant échoué, comme dans l'exemple suivant:
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: {}
}
Pour limiter le risque d'échec des vérifications, utilisez le benchmark CIS et suivez les étapes de la section Remediation
pour en savoir plus sur l'échec de la vérification et rendre l'instance conforme. Pour identifier la recommandation correspondant à un échec de vérification dans le benchmark CIS, recherchez l'ID non_compliant_benchmark's
dans le fichier de configuration de l'analyseur CIS situé à l'adresse /usr/share/google/security/cis-compliance/cis_config.textproto
.