Alignement de l’image Ubuntu Azure Kubernetes Service (AKS) avec le benchmark CIS (Center for Internet Security)

En tant que service sécurisé, Azure Kubernetes Service (AKS) est conforme aux normes SOC, ISO, PCI DSS et HIPAA. Cet article décrit la configuration de sécurité du système d’exploitation appliquée à l’image Ubuntu utilisée par AKS. Cette configuration de sécurité s’appuie la base de référence de sécurité Linux Azure qui s’aligne sur le benchmark CIS. Pour plus d’informations sur la sécurité AKS, consultez Concepts de sécurité pour les applications et les clusters dans AKS (Azure Kubernetes Service). Pour plus d’informations sur la sécurité AKS, consultez Concepts de sécurité pour les applications et les clusters dans AKS (Azure Kubernetes Service). Pour plus d’informations sur le point de référence CIS, consultez Points de référence CIS (Center for Internet Security). Pour plus d’informations sur les bases de référence de sécurité Azure pour Linux, consultez Base de référence de sécurité Linux.

Ubuntu LTS 18.04

Les clusters AKS sont déployés sur des machines virtuelles hôtes, qui exécutent un système d’exploitation doté de configurations sécurisées intégrées. Ce système d’exploitation est utilisé pour les conteneurs s’exécutant sur AKS. Le système d’exploitation hôte est basé sur une image Ubuntu 18.04.LTS sur laquelle sont appliquées des configurations de sécurité.

Dans le cadre du système d’exploitation optimisé pour la sécurité :

  • AKS fournit un système d’exploitation hôte optimisé pour la sécurité par défaut, mais aucune option pour sélectionner un autre système d’exploitation.
  • Le système d’exploitation hôte optimisé pour la sécurité est conçu et géré spécifiquement pour AKS. Il n’est pas pris en charge en dehors de la plateforme AKS.
  • Certains pilotes de module de noyau inutiles ont été désactivés dans le système d’exploitation pour réduire la surface d’attaque.

Notes

Azure applique aux hôtes de machines virtuelles AKS des correctifs quotidiens (y compris de sécurité) sans lien avec les benchmarks CIS.

L’objectif de la configuration sécurisée intégrée dans le système d’exploitation hôte est de réduire la surface d’attaque et d’optimiser le déploiement sécurisé de conteneurs.

Voici les résultats des recommandations Benchmark CIS Ubuntu 18.04 LTS v2.1.0.

Les recommandations peuvent avoir les raisons suivantes :

  • Impact potentiel de l’opération : la suggestion n’a pas été appliquée, car elle aurait un effet négatif sur le service.
  • Couverte ailleurs : la recommandation est couverte par un autre contrôle dans le calcul cloud Azure.

Voici les règles CIS implémentées :

Numéro de paragraphe CIS Description de la recommandation Statut Motif
1 Installation initiale
1.1 Configuration du système de fichiers
1.1.1 Désactiver les systèmes de fichiers inutilisés
1.1.1.1 Vérifier que le montage des systèmes de fichiers cramfs est désactivé Réussite
1.1.1.2 Vérifier que le montage des systèmes de fichiers freevxfs est désactivé Réussite
1.1.1.3 Vérifier que le montage des systèmes de fichiers jffs2 est désactivé Réussite
1.1.1.4 Vérifier que le montage des systèmes de fichiers HFS est désactivé Réussite
1.1.1.5 Vérifier que le montage des systèmes de fichiers HFS Plus est désactivé Réussite
1.1.1.6 Vérifier que le montage des systèmes de fichiers UDF est désactivé Échec Impact opérationnel potentiel
1.1.2 Vérifier que /tmp est configuré Échec
1.1.3 Vérifier que l’option nodev est définie sur la partition /tmp Échec
1.1.4 Vérifier que l’option nosuid est définie sur la partition /tmp Réussite
1.1.5 Vérifier que l’option noexec est définie sur la partition /tmp Réussite
1.1.6 Vérifier que /dev/shm est configuré Réussite
1.1.7 Vérifier que l’option nodev est définie sur la partition /dev/shm Réussite
1.1.8 Vérifier que l’option nosuid est définie sur la partition /dev/shm Réussite
1.1.9 Vérifier que l’option noexec est définie sur la partition /dev/shm Échec Impact opérationnel potentiel
1.1.12 Vérifier que la partition /var/tmp inclut l’option nodev Réussite
1.1.13 Vérifier que la partition /var/tmp inclut l’option nosuid Réussite
1.1.14 Vérifier que la partition /var/tmp inclut l’option noexec Réussite
1.1.18 Vérifier que la partition /home inclut l’option nodev Réussite
1.1.19 Vérifier que l’option nodev est définie sur les partitions de médias amovibles Non applicable
1.1.20 Vérifier que l’option nosuid est définie sur les partitions de médias amovibles Non applicable
1.1.21 Vérifier que l’option noexec est définie sur les partitions de médias amovibles Non applicable
1.1.22 Vérifier que le sticky bit est défini sur tous les répertoires accessibles en écriture Échec Impact opérationnel potentiel
1.1.23 Désactiver le montage automatique Réussite
1.1.24 Désactiver le stockage USB Réussite
1.2 Configurer les mises à jour logicielles
1.2.1 Vérifier que les référentiels du gestionnaire de package sont configurés Réussite Couverte ailleurs
1.2.2 Vérifier que les clés GPG sont configurées Non applicable
1.3 Vérification de l’intégrité du système de fichiers
1.3.1 Vérifier que AIDE est installé Échec Couverte ailleurs
1.3.2 Vérifier que l’intégrité du système de fichiers est régulièrement contrôlée Échec Couverte ailleurs
1.4 Paramètres de démarrage sécurisé
1.4.1 Vérifier que les autorisations définies sur la configuration du bootloader ne sont pas remplacées Échec
1.4.2 Vérifier que le mot de passe du bootloader est défini Échec Non applicable
1.4.3 Vérifier que les autorisations sur la configuration du chargeur de démarrage sont configurées. Échec
1.4.4 Garantir l’authentification requise pour le mode mono-utilisateur Échec Non applicable
1.5 Renforcement supplémentaire des processus
1.5.1 Vérifier que la prise en charge XD/NX est activée Non applicable
1.5.2 Vérifier que la distribution aléatoire de l’espace d’adressage (ASLR, Address Space Layout Randomization) est activée Réussite
1.5.3 Vérifier que la préliaison est désactivée Réussite
1.5.4 Vérifier que les vidages de cœur sont limités Réussite
1.6 Contrôle d’accès obligatoire
1.6.1 Configurer AppArmor
1.6.1.1 Vérifier que AppArmor est installé Réussite
1.6.1.2 Vérifier que AppArmor est activé dans la configuration du bootloader Échec Impact opérationnel potentiel
1.6.1.3 Vérifier que tous les profils AppArmor sont en mode Application ou Plainte Réussite
1.7 Bannières d’avertissement de ligne de commande
1.7.1 Vérifier que le message du jour est correctement configuré Réussite
1.7.2 Vérifier que des autorisations sont configurées sur /etc/issue.net Réussite
1.7.3 Vérifier que des autorisations sont configurées sur /etc/issue Réussite
1.7.4 Vérifier que les autorisations sont configurées sur /etc/motd Réussite
1.7.5 Vérifier que la bannière d’avertissement de connexion à distance est correctement configurée Réussite
1.7.6 Vérifier que la bannière d’avertissement de connexion locale est correctement configurée Réussite
1.8 Gestionnaire d’affichage GNOME
1.8.2 Vérifier que la bannière d’avertissement GDM est configurée Réussite
1.8.3 Vérifier que disable-user-list est activé Réussite
1.8.4 Vérifier que XDCMP n’est pas activé Réussite
1,9 Vérifier que les mises à jour, les correctifs et les logiciels de sécurité supplémentaires sont installés Réussite
2 Services
2.1 Services à usage spécial
2.1.1 Synchronisation de l’heure
2.1.1.1 Vérifier que la synchronisation de l’heure est utilisée Réussite
2.1.1.2 Vérifier que systemd-timesyncd est configuré Non applicable AKS utilise ntpd pour la synchronisation de l’heure
2.1.1.3 Vérifier que chrony est configuré Échec Couverte ailleurs
2.1.1.4 Vérifier que ntp est configuré Réussite
2.1.2 Vérifier que le système de fenêtre X n’est pas installé Réussite
2.1.3 Vérifier que le serveur Avahi n’est pas installé Réussite
2.1.4 Vérifier que CUPS n’est pas installé Réussite
2.1.5 Vérifier que le serveur DHCP n’est pas installé Réussite
2.1.6 Vérifier que le serveur LDAP n’est pas installé Réussite
2.1.7 Vérifier que NFS n’est pas installé Réussite
2.1.8 Vérifier que le serveur DNS n’est pas installé Réussite
2.1.9 Vérifier que le serveur FTP n’est pas installé Réussite
2.1.10 Vérifier que le serveur HTTP n’est pas installé Réussite
2.1.11 Vérifier que les serveurs IMAP et POP3 ne sont pas installés Réussite
2.1.12 Vérifier que Samba n’est pas installé Réussite
2.1.13 Vérifier que le serveur proxy HTTP n’est pas installé Réussite
2.1.14 Vérifier que le serveur SNMP n’est pas installé Réussite
2.1.15 Vérifier que l’agent de transfert de courrier est configuré pour le mode local uniquement Réussite
2.1.16 Vérifier que le service rsync n’est pas installé Échec
2.1.17 Vérifier que le serveur NIS n’est pas installé Réussite
2,2 Clients de service
2.2.1 Vérifier que le client NIS n’est pas installé Réussite
2.2.2 Vérifier que le client rsh n’est pas installé Réussite
2.2.3 Vérifier que le client de communication n’est pas installé Réussite
2.2.4 Vérifier que le client telnet n’est pas installé Échec
2.2.5 Vérifier que le client LDAP n’est pas installé Réussite
2.2.6 Vérifier que RPC n’est pas installé Échec Impact opérationnel potentiel
2.3 Vérification que les services non essentiels sont supprimés ou masqués Réussite
3 Configuration réseau
3.1 Désactivation des protocoles et appareils réseau inutilisés
3.1.2 Vérifier que les interfaces sans fil sont désactivées Réussite
3.2 Paramètres réseau (hôte uniquement)
3.2.1 Vérifier que l’envoi de redirection de paquets est désactivé Réussite
3.2.2 Vérifier que le transfert IP est désactivé Échec Non applicable
3.3 Paramètres réseau (hôte et routeur)
3.3.1 Vérifier que les paquets acheminés par la source ne sont pas acceptés Réussite
3.3.2 Vérifier que les redirections ICMP ne sont pas acceptées Réussite
3.3.3 Vérifier que les redirections ICMP sécurisées ne sont pas acceptées Réussite
3.3.4 Vérifier que les paquets suspects sont consignés dans un journal Réussite
3.3.5 Vérifier que les demandes ICMP de diffusion sont ignorées Réussite
3.3.6 Vérifier que les réponses ICMP erronées sont ignorées Réussite
3.3.7 Vérifier que le filtrage par chemin inverse est activé Réussite
3.3.8 Vérifier que les cookies SYN TCP sont activés Réussite
3.3.9 Vérifier que les annonces de routeur IPv6 ne sont pas acceptées Réussite
3.4 Protocoles réseau rares
3,5 Configuration du pare-feu
3.5.1 Configurer UncomplicatedFirewall
3.5.1.1 Vérifier que ufw est installé Réussite
3.5.1.2 Vérifier que iptables-persistent n’est pas installé avec ufw Réussite
3.5.1.3 Vérifier que le service ufw est activé Échec Couverte ailleurs
3.5.1.4 Vérifier que le trafic de bouclage ufw est configuré Échec Couverte ailleurs
3.5.1.5 Vérifier que les connexions sortantes ufw sont configurées Non applicable Couverte ailleurs
3.5.1.6 Vérifier qu’il existe des règles de pare-feu ufw pour tous les ports ouverts Non applicable Couverte ailleurs
3.5.1.7 Vérifier la stratégie de pare-feu Refus par défaut de ufw Échec Couverte ailleurs
3.5.2 Configurer nftables
3.5.2.1 Vérifier que nftables est installé Échec Couverte ailleurs
3.5.2.2 Vérifier que ufw est désinstallé ou désactivé avec nftables Échec Couverte ailleurs
3.5.2.3 Vérifier que les tables iptables sont vidées avec les tables nftables Non applicable Couverte ailleurs
3.5.2.4 Vérifier qu’il existe une table nftables Échec Couverte ailleurs
3.5.2.5 Vérifier qu’il existe des chaînes de base nftables Échec Couverte ailleurs
3.5.2.6 Vérifier que le trafic de bouclage nftables est configuré Échec Couverte ailleurs
3.5.2.7 Vérifier que les connexions sortantes et établies nftables sont configurées Non applicable Couverte ailleurs
3.5.2.8 Vérifier la stratégie de pare-feu Refus par défaut de nftables Échec Couverte ailleurs
3.5.2.9 Vérifier que le service nftables est activé Échec Couverte ailleurs
3.5.2.10 Vérifier que les règles nftables sont permanentes Échec Couverte ailleurs
3.5.3 Configurer iptables
3.5.3.1 Configurer les logiciels iptables
3.5.3.1.1 Vérifier que les packages iptables sont installés Échec Couverte ailleurs
3.5.3.1.2 Vérifier que nftables n’est pas installé avec iptables Réussite
3.5.3.1.3 Vérifier que ufw est désinstallé ou désactivé avec iptables Échec Couverte ailleurs
3.5.3.2 Configurer iptables IPv4
3.5.3.2.1 Vérifier la stratégie de pare-feu Refus par défaut de iptables Échec Couverte ailleurs
3.5.3.2.2 Vérifier que le trafic de bouclage iptables est configuré Échec Non applicable
3.5.3.2.3 Vérifier que les connexions sortantes et établies iptables sont configurées Non applicable
3.5.3.2.4 Vérifier qu’il existe des règles de pare-feu iptables pour tous les ports ouverts Échec Impact opérationnel potentiel
3.5.3.3 Configurer ip6tables IPv6
3.5.3.3.1 Vérifier la stratégie de pare-feu Refus par défaut de ip6tables Échec Couverte ailleurs
3.5.3.3.2 Vérifier que le trafic de bouclage ip6tables est configuré Échec Couverte ailleurs
3.5.3.3.3 Vérifier que les connexions sortantes et établies ip6tables sont configurées Non applicable Couverte ailleurs
3.5.3.3.4 Vérifier qu’il existe des règles de pare-feu ip6tables pour tous les ports ouverts Échec Couverte ailleurs
4 Journalisation et audit
4,1 Configurer la comptabilité système (auditd)
4.1.1.2 Vérifier que l’audit est activé
4.1.2 Configurer la rétention de données
4,2 Configuration de la journalisation
4.2.1 Configurer rsyslog
4.2.1.1 Vérifier que rsyslog est installé Réussite
4.2.1.2 Vérifier que le service rsyslog est activé Réussite
4.2.1.3 Vérifier que la journalisation est configurée Réussite
4.2.1.4 Vérifier que les autorisations de fichier par défaut rsyslog sont configurées Réussite
4.2.1.5 Vérifier que rsyslog est configuré pour envoyer des journaux à un hôte de journal distant Échec Couverte ailleurs
4.2.1.6 Vérifier que les messages rsyslog distants ne sont acceptés que sur les hôtes de journal désignés Non applicable
4.2.2 Configurer journald
4.2.2.1 Vérifier que journald est configuré pour envoyer des journaux à rsyslog Réussite
4.2.2.2 Vérifier journald est configuré pour compresser les fichiers journaux volumineux Échec
4.2.2.3 Vérifier que journald est configuré pour écrire des fichiers journaux sur un disque persistant Réussite
4.2.3 Vérifier que les autorisations sont configurées sur tous les fichiers journaux Échec
4.3 Vérification que logrotate est configuré Réussite
4.4 Vérification que logrotate affecte les autorisations appropriées Échec
5 Accès, authentification et autorisation
5,1 Configuration de planificateurs de travaux basés sur le temps
5.1.1 Vérifier que le démon cron est activé et en cours d’exécution Réussite
5.1.2 Vérifier que des autorisations sont configurées sur /etc/crontab Réussite
5.1.3 Vérifier que les autorisations sont configurées sur /etc/cron.hourly Réussite
5.1.4 Vérifier que les autorisations sont configurées sur /etc/cron.daily Réussite
5.1.5 Vérifier que les autorisations sont configurées sur /etc/cron.weekly Réussite
5.1.6 Vérifier que les autorisations sont configurées sur /etc/cron.monthly Réussite
5.1.7 Vérifier que les autorisations sont configurées sur /etc/cron.d Réussite
5.1.8 Vérifier que cron est restreint aux utilisateurs autorisés Échec
5.1.9 Vérifier que at est restreint aux utilisateurs autorisés Échec
5.2 Configuration de sudo
5.2.1 Vérifier que sudo est installé Réussite
5.2.2 Vérifier que les commandes sudo utilisent pty Échec Impact opérationnel potentiel
5.2.3 Vérifier qu’il existe un fichier journal sudo Échec
5.3 Configuration du serveur SSH
5.3.1 Vérifier que les autorisations sont configurées sur /etc/ssh/sshd_config Réussite
5.3.2 Vérifier que les autorisations sont configurées sur les fichiers de clé d’hôte privé SSH Réussite
5.3.3 Vérifier que les autorisations sont configurées sur les fichiers de clé d’hôte public SSH Réussite
5.3.4 Assurez-vous que l’accès SSH est limité. Réussite
5.3.5 Vérifier que SSH LogLevel est approprié Réussite
5.3.7 Vérifier que SSH MaxAuthTries est défini sur une valeur inférieure ou égale à 4 Réussite
5.3.8 Vérifier que SSH IgnoreRhosts est activé Réussite
5.3.9 Vérifier que SSH HostbasedAuthentication est désactivé Réussite
5.3.10 Vérifier que la connexion racine SSH est désactivée Réussite
5.3.11 Vérifier que SSH PermitEmptyPasswords est désactivé Réussite
5.3.12 Vérifier que SSH PermitUserEnvironment est désactivé Réussite
5.3.13 Vérifier que seuls des chiffrements forts sont utilisés Réussite
5.3.14 Vérifier que seuls des algorithmes MAC forts sont utilisés Réussite
5.3.15 Vérifier que seuls des algorithmes d’échange de clés forts sont utilisés Réussite
5.3.16 Vérifier que l’intervalle du délai d’inactivité SSH est configuré Échec
5.3.17 Vérifier que SSH LoginGraceTime est défini sur une minute ou moins Réussite
5.3.18 Vérifier que la bannière d’avertissement SSH est configurée Réussite
5.3.19 Vérifier que SSH PAM est activé Réussite
5.3.21 Vérifier que SSH MaxStartups est configuré Échec
5.3.22 Vérifier que SSH MaxSessions est limité Réussite
5.4 Configuration de PAM
5.4.1 Vérifier que les critères de création de mot de passe sont configurés Réussite
5.4.2 Vérifier que le verrouillage est configuré lors d’échecs de tentatives de mot de passe Échec
5.4.3 Vérifier que la réutilisation des mots de passe est limitée Échec
5.4.4 Vérifier que l’algorithme de hachage de mot de passe est SHA-512. Réussite
5.5 Comptes d’utilisateur et environnement
5.5.1 Définir les paramètres de suite de mots de passe mis en mémoire fantôme
5.5.1.1 Vérifier que le nombre minimal de jours entre les changements de mot de passe est configuré Réussite
5.5.1.2 Vérifier que l’expiration du mot de passe est de 365 jours maximum Réussite
5.5.1.3 Vérifier que le délai en jours de l’avertissement d’expiration du mot de passe est de 7 minimum Réussite
5.5.1.4 Vérifier que le verrouillage de mot de passe inactif est de 30 jours ou moins Réussite
5.5.1.5 Vérifier que la date du dernier changement de mot de passe de tous les utilisateurs se trouve dans le passé. Échec
5.5.2 Vérifier que les comptes système sont sécurisés Réussite
5.5.3 Vérifier que le groupe par défaut pour le compte racine est GID 0. Réussite
5.5.4 Vérifier que le masque umask d’utilisateur par défaut est 027 ou plus restrictif Réussite
5.5.5 Vérifier que le délai d’expiration de l’interpréteur de commandes utilisateur par défaut est de 900 secondes maximum Échec
5.6 Vérification que la connexion racine est limitée à la console système Non applicable
5.7 Vérifier que l’accès à la commande su est restreint Échec Impact opérationnel potentiel
6 Maintenance du système
6.1 Autorisations des fichiers système
6.1.2 Vérifier que les autorisations sont configurées sur /etc/passwd Réussite
6.1.3 Vérifier que les autorisations sont configurées sur /etc/passwd- Réussite
6.1.4 Vérifier que les autorisations sont configurées sur /etc/group Réussite
6.1.5 Vérifier que les autorisations sont configurées sur /etc/group- Réussite
6.1.6 Vérifier que les autorisations sont configurées sur /etc/shadow Réussite
6.1.7 Vérifier que les autorisations sont configurées sur /etc/shadow- Réussite
6.1.8 Vérifier que les autorisations sont configurées sur /etc/gshadow Réussite
6.1.9 Vérifier que les autorisations sont configurées sur /etc/gshadow- Réussite
6.1.10 Vérifier qu’il n’existe aucun fichier accessible en écriture Échec Impact opérationnel potentiel
6.1.11 Vérifier qu’il n’existe aucun fichier ni répertoire sans propriétaire Échec Impact opérationnel potentiel
6.1.12 Vérifier qu’il n’existe aucun fichier ni répertoire non groupé Échec Impact opérationnel potentiel
6.1.13 Auditer les exécutables SUID Non applicable
6.1.14 Auditer les exécutables SGID Non applicable
6.2 Paramètres des utilisateurs et des groupes
6.2.1 Vérifier que les comptes présents dans /etc/passwd utilisent des mots de passe mis en mémoire fantôme Réussite
6.2.2 Vérifier que les champs de mot de passe ne sont pas vides Réussite
6.2.3 Vérifier que tous les groupes dans /etc/passwd existent dans /etc/group. Réussite
6.2.4 Vérifier que les répertoires de base de tous les utilisateurs existent. Réussite
6.2.5 Vérifier que les utilisateurs sont propriétaires de leurs répertoires de base. Réussite
6.2.6 Vérifier que les autorisations des répertoires de base des utilisateurs sont de 750 ou sont plus restrictives Réussite
6.2.7 Vérifier que les fichiers dot des utilisateurs ne sont pas accessibles en écriture à un groupe ou à tout le monde Réussite
6.2.8 Vérifier qu’aucun utilisateur n’a de fichiers .netrc. Réussite
6.2.9 Vérifier qu’aucun utilisateur n’a de fichiers .forward. Réussite
6.2.10 Vérifier qu’aucun utilisateur n’a de fichiers .rhosts. Réussite
6.2.11 Vérifier que la racine est le seul compte UID 0. Réussite
6.2.12 Garantir l’intégrité du PATH racine Réussite
6.2.13 Vérifier qu’il n’existe pas de doublons d’UID. Réussite
6.2.14 Vérifier qu’il n’existe pas de doublons de GID. Réussite
6.2.15 Vérifier qu’il n’existe aucun nom d’utilisateur en double. Réussite
6.2.16 Vérifier qu’il n’existe aucun nom de groupe en double Réussite
6.2.17 Vérifier que le groupe fantôme est vide. Réussite

Étapes suivantes

Pour plus d’informations sur la sécurité AKS, consultez les articles suivants :