La publication de la version 1.3.0 de la distribution Linux Bottlerocket, développée avec la participation d'Amazon pour le lancement efficace et sécurisé de conteneurs isolés, est annoncée. Les outils et les composants de gestion de cette distribution sont écrits en Rust et sont distribués sous les licences MIT et Apache 2.0. Bottlerocket prend en charge le déploiement dans des clusters Amazon ECS, VMware et AWS EKS Kubernetes, ainsi que la création de builds et d’éditions personnalisées, permettant l'utilisation de divers outils d'orchestration et runtimes pour conteneurs.
La distribution fournit une image système atomique et automatiquement mise à jour, incluant le noyau Linux et un environnement système minimal, ne comprenant que les composants nécessaires au lancement de conteneurs. L'environnement utilise le gestionnaire système systemd, la bibliothèque Glibc, les outils de construction Buildroot, le chargeur d'amorçage GRUB, le configurateur réseau wicked, le runtime pour conteneurs isolés containerd, la plateforme d'orchestration de conteneurs Kubernetes, l'authentificateur aws-iam-authenticator et l'agent Amazon ECS.
Les outils d'orchestration de conteneurs sont fournis dans un conteneur de gestion distinct, qui est activé par défaut et géré via l'API et l'AWS SSM Agent. L'image de base ne comprend pas de shell. serveur SSH et les langages interprétés (comme Python ou Perl) - les outils pour les administrateurs et les outils de débogage sont placés dans un conteneur distinct, qui est désactivé par défaut.
La principale différence par rapport à des distributions similaires, telles que Fedora CoreOS, CentOS/Red Hat Atomic Host, réside dans l'accent mis sur la sécurité maximale afin de renforcer la protection du système contre d'éventuelles menaces, de compliquer l'exploitation des vulnérabilités dans les composants du système d'exploitation, et d'accroître l'isolation des conteneurs. Les conteneurs sont créés à l'aide de mécanismes natifs du noyau Linux - cgroups, espaces de noms et seccomp. Pour une isolation supplémentaire, SELinux est utilisé en mode « enforcing ».
La partition racine est montée en mode lecture seule, tandis que la partition de configuration /etc est montée en tmpfs et restaure son état d'origine après un redémarrage. La modification directe des fichiers dans le répertoire /etc, tels que /etc/resolv.conf et /etc/containerd/config.toml, n'est pas supportée - pour une conservation permanente des paramètres, il convient d'utiliser l'API ou d'externaliser les fonctionnalités dans des conteneurs séparés. Un module dm-verity est utilisé pour la vérification cryptographique de l'intégrité de la partition racine, et en cas de détection d'une tentative de modification des données au niveau du périphérique de bloc, le système redémarre.
La plupart des composants système sont écrits en Rust, qui offre des outils pour une gestion sécurisée de la mémoire, évitant ainsi les vulnérabilités causées par l'accès à la mémoire après sa libération, la déréférenciation de pointeurs nuls et les débordements de tampon. Les modes de compilation par défaut «--enable-default-pie» et «--enable-default-ssp» sont appliqués pour activer la randomisation de l'espace d'adresse des fichiers exécutables (PIE) et protéger contre les débordements de pile via des substituts de canari. Pour les paquets écrits en C/C++, des drapeaux supplémentaires «-Wall», «-Werror=format-security», «-Wp,-D_FORTIFY_SOURCE=2», «-Wp,-D_GLIBCXX_ASSERTIONS» et «-fstack-clash-protection» sont également activés.
Dans cette nouvelle version :
- Des vulnérabilités dans les outils docker et le runtime containerd (CVE-2021-41089, CVE-2021-41091, CVE-2021-41092, CVE-2021-41103) ont été corrigées, liées à une mauvaise configuration des droits d'accès, permettant à des utilisateurs non privilégiés de sortir du répertoire de base et d'exécuter des programmes externes.
- Ajouté à kubelet et pluto de l'IPv6.
- Permet le redémarrage d'un conteneur après modification de ses paramètres.
- Le paquet eni-max-pods a été mis à jour pour prendre en charge les instances Amazon EC2 M6i.
- Dans open-vm-tools, prise en charge des filtres de périphériques, réalisée sur la base des outils Cilium.
- Pour la plateforme x86_64, un mode de démarrage hybride a été réalisé (avec support EFI et BIOS).
- Versions des paquets et dépendances pour Rust mises à jour.
- La prise en charge de la variante de distribution aws-k8s-1.17 basée sur Kubernetes 1.17 a été arrêtée. Il est recommandé d'utiliser la variante aws-k8s-1.21 avec le support de Kubernetes 1.21. Les variantes k8s utilisent des configurations cgroup runtime.slice et system.slice.
Source : opennet.ru
