È stata pubblicata la versione 1.3.0 del distribuitore Linux Bottlerocket, sviluppato con la partecipazione di Amazon per l'avvio efficace e sicuro di contenitori isolati. Gli strumenti e i componenti di gestione del distribuitore sono scritti in Rust e distribuiti sotto le licenze MIT e Apache 2.0. Bottlerocket supporta l'avvio in cluster Amazon ECS, VMware e AWS EKS Kubernetes, oltre alla creazione di build e edizioni personalizzate che consentono l'uso di diversi strumenti di orchestrazione e runtime per contenitori.
La distribuzione fornisce un'immagine di sistema atomica e automaticamente aggiornabile, che include il kernel Linux e un ambiente di sistema minimo, comprensivo solo dei componenti necessari per l'esecuzione dei container. Nell'ambiente sono coinvolti il gestore di sistema systemd, la libreria Glibc, l'ambiente di build Buildroot, il bootloader GRUB, il configuratore di rete wicked, il runtime per container isolati containerd, la piattaforma di orchestrazione dei container Kubernetes, l'autenticatore aws-iam-authenticator e l'agente Amazon ECS.
Gli strumenti per l'orchestrazione dei container sono forniti in un container di gestione separato, attivato di default e gestito tramite API e AWS SSM Agent. Nell'immagine di base non è presente una shell. server SSH e linguaggi interpretati (ad esempio, non ci sono Python o Perl) — gli strumenti per l'amministratore e gli strumenti di debug sono stati spostati in un container di servizio separato, che per impostazione predefinita è disattivato.
La principale differenza rispetto a distribuzioni simili, come Fedora CoreOS, CentOS/Red Hat Atomic Host, è l'orientamento primario a fornire la massima sicurezza nel contesto del rafforzamento della protezione del sistema contro potenziali minacce, complicando l'esploitazione di vulnerabilità nei componenti del sistema operativo e aumentando l'isolamento dei container. I container sono creati utilizzando i meccanismi standard del kernel Linux — cgroups, spazi dei nomi e seccomp. Per ulteriore isolamento, nella distribuzione viene utilizzato SELinux in modalità "enforcing".
La partizione di root è montata in modalità di sola lettura, mentre la partizione di configurazione /etc è montata in tmpfs e ripristina lo stato originale dopo il riavvio. La modifica diretta dei file nella directory /etc, come /etc/resolv.conf e /etc/containerd/config.toml, non è supportata: per la conservazione permanente delle impostazioni è necessario utilizzare l'API o spostare la funzionalità in contenitori separati. Per la verifica crittografica dell'integrità della partizione di root è coinvolto il modulo dm-verity, e in caso di tentativi di modifica dei dati a livello di dispositivo blocco, il sistema viene riavviato.
La maggior parte dei componenti di sistema è scritta in linguaggio Rust, che fornisce strumenti per un'attività sicura in memoria, evitando vulnerabilità causate da accessi a aree di memoria dopo il loro rilascio, dereferenziazione di puntatori nulli e fuoriuscita dai limiti del buffer. Durante la compilazione, per impostazione predefinita vengono applicati i flag di compilazione "--enable-default-pie" e "--enable-default-ssp" per attivare la randomizzazione degli spazi di indirizzi dei file eseguibili (PIE) e la protezione da overflow dello stack attraverso l'inserimento di marcatori di canarini. Per i pacchetti scritti in C/C++, vengono attivati anche i flag "-Wall", "-Werror=format-security", "-Wp,-D_FORTIFY_SOURCE=2", "-Wp,-D_GLIBCXX_ASSERTIONS" e "-fstack-clash-protection."
Nel nuovo rilascio:
- Risolte vulnerabilità nel toolkit docker e nel runtime containerd (CVE-2021-41089, CVE-2021-41091, CVE-2021-41092, CVE-2021-41103) legate a una scorrettezza nell'impostazione dei permessi, consentendo agli utenti non privilegiati di uscire dalla directory di base ed eseguire programmi esterni.
- Aggiunta in kubelet e pluto supporto IPv6.
- È stata fornita la possibilità di riavviare il container dopo la modifica delle sue impostazioni.
- Aggiunta nel pacchetto eni-max-pods il supporto per le istanze Amazon EC2 M6i.
- In open-vm-tools è stato aggiunto il supporto per i filtri dei dispositivi, implementato sulla base del toolkit Cilium.
- Per la piattaforma x86_64 è stata implementata una modalità ibrida di avvio (con supporto EFI e BIOS).
- Aggiornate le versioni dei pacchetti e le dipendenze per il linguaggio Rust.
- Sospesa la supporto per la variante del pacchetto aws-k8s-1.17 basato su Kubernetes 1.17. È consigliato utilizzare la variante aws-k8s-1.21 con supporto per Kubernetes 1.21. Nelle varianti k8s sono state utilizzate le impostazioni cgroup runtime.slice e system.slice.
Fonte: opennet.ru
