Questa pagina fornisce una panoramica delle funzionalità di sicurezza di Container-Optimized OS in esecuzione su Google Cloud.
Sicurezza del sistema operativo
Basato su Chromium OS, Container-Optimized OS di Google implementa diversi principi di progettazione della sicurezza per fornire una piattaforma ben configurata per l'esecuzione di servizi di produzione.
Impronta del sistema operativo minima
Questo è il cuore della sicurezza di Container-Optimized OS. Poiché Container-Optimized OS è ottimizzato per l'esecuzione di container e i container pacchettizzano le proprie dipendenze, possiamo eliminare i pacchetti non necessari e ridurre al minimo la superficie di attacco del sistema operativo.
File system di root immutabile e avvio verificato
Il file system principale di Container-Optimized OS viene sempre montato come di sola lettura. Inoltre, il checksum viene calcolato in fase di compilazione e verificato dal kernel ad ogni avvio. Questo meccanismo impedisce agli aggressori di "possedere" la macchina tramite modifiche locali permanenti. Inoltre, diversi altri mount non sono eseguibili per impostazione predefinita. Per ulteriori dettagli, consulta Sistema file.
Configurazione stateless
Sebbene un file system di root di sola lettura sia utile per la sicurezza, rende il sistema difficile da usare. Ad esempio, dobbiamo essere in grado di creare e aggiungere utenti per accedere al sistema. Per risolvere il problema, personalizziamo il filesystem di primo livello in modo che /etc/
sia scrivibile, ma senza stato. In questo modo puoi scrivere le impostazioni di configurazione in fase di esecuzione, ma queste impostazioni non vengono mantenute dopo i riavvii. Pertanto, ogni volta che un nodo Container-Optimized OS si riavvia, inizia da un nuovo inizio. Alcuni dati, come le home directory degli utenti, i log e le immagini Docker, rimangono invariati dopo i riavvii, in quanto non fanno parte del file system principale.
Kernel con misure di sicurezza avanzate
Container-Optimized OS abilita diverse funzionalità del kernel per il rafforzamento della sicurezza, tra cui Integrity Measurement Architecture (IMA), Audit, Kernel Page Table Isolation (KPTI) e alcuni moduli di sicurezza Linux (LSM) di Chromium OS. Inoltre, Container-Optimized OS supporta funzionalità di sicurezza come seccomp e AppArmor che consentono di applicare criteri di sicurezza più granulari.
Valori predefiniti incentrati sulla sicurezza
Container-Optimized OS offre un altro livello di hardening fornendo valori predefiniti incentrati sulla sicurezza per diverse funzionalità. Sono incluse, ad esempio, le impostazioni sysctl che disattivano ptrace e BPF non privilegiati, bloccano il firewall e così via. Questi valori predefiniti, se applicati automaticamente a un parco risorse di istanze, contribuiscono a proteggere l'intero cluster, il progetto e l'organizzazione.
Aggiornamenti automatici
La funzionalità di aggiornamenti automatici di Container-Optimized OS consente di inviare tempestivamente le patch di sicurezza alle VM in esecuzione. Quando il sistema operativo ottimizzato per i container è gestito da Kubernetes Engine, gli upgrade automatici dei nodi trovano un equilibrio tra sicurezza e stabilità.
Filesystem
Di seguito è riportato un elenco di percorsi nel sistema di file dell'immagine del nodo Container-Optimized OS, insieme alle relative proprietà e all'utilizzo consigliato:
Percorso | Proprietà | Finalità |
---|---|---|
/ |
|
Il file system principale viene montato in sola lettura per mantenere l'integrità. Il kernel verifica l'integrità del file system principale durante l'avvio e si rifiuta di avviarsi in caso di errori. |
/home /var |
|
Questi percorsi sono destinati alla memorizzazione di dati permanenti per tutta la durata del
disco di avvio. Sono montati da /mnt/stateful_partition . |
/var/lib/google /var/lib/docker /var/lib/toolbox |
|
Questi percorsi sono le directory di lavoro per i pacchetti Compute Engine (ad esempio il servizio Account Manager), Docker e Toolbox. |
/var/lib/cloud |
|
Questo percorso è la directory di lavoro del pacchetto cloud-init . |
/etc |
|
In genere contiene la configurazione (ad esempio,
i servizi systemd definiti tramite cloud-init ).
È buona norma acquisire lo stato desiderato delle istanze in
cloud-init , poiché cloud-init viene applicato quando viene creata una nuova istanza e quando un'istanza viene riavviata. |
/tmp |
|
In genere viene utilizzato come spazio temporaneo e non deve essere utilizzato per archiviare dati permanenti. |
/mnt/disks |
|
Puoi montare i dischi permanenti nelle directory sotto /mnt/disks . |
Firewall
Per impostazione predefinita, Container-Optimized OS è configurato per eliminare tutte le connessioni TCP/UDP in entrata tranne SSH sulla porta 22. Consulta la sezione Configurazione del firewall host per scoprire come modificare l'impostazione predefinita per aprire altre porte.
Accesso alle istanze
Per impostazione predefinita, Container-Optimized OS non contiene account utente accessibili. Gli account utente e le chiavi SSH vengono gestiti tramite metadati dell'istanza o del progetto o OS Login. OS Login ti consente di gestire l'accesso alle istanze utilizzando IAM. Consente un controllo dell'accesso più granulare (sudo e non sudo), chiavi SSH identificabili e criteri di accesso dell'organizzazione.
Il daemon SSH è configurato per non consentire l'autenticazione basata su password e gli accessi come utente root. Tuttavia, ciò non impedisce agli utenti di ottenere i privilegi di root utilizzando sudo dopo l'accesso, a meno che l'account utente non sia gestito con l'accesso all'OS.
Sicurezza dell'infrastruttura
Oltre alle varie funzionalità di hardening nel sistema operativo stesso, il team di Container-Optimized OS prende molto sul serio la catena di approvvigionamento del software e dà la priorità alla sicurezza dell'infrastruttura durante lo sviluppo, la compilazione e il deployment delle immagini, in base a anni di esperienza sia di Chromium OS sia di Google in generale.
Creato da sorgente in Google
Ogni pacchetto in Container-Optimized OS, incluso il kernel Linux stesso, viene compilato dal codice sorgente dei repository di codice di ChromiumOS. Ciò significa che sappiamo esattamente cosa viene inserito nel sistema operativo, chi lo ha controllato, in quale versione è stato introdotto e così via. Ci consente inoltre di correggere e aggiornare rapidamente qualsiasi pacchetto nel caso in cui venga scoperta una vulnerabilità a qualsiasi livello.
Rilevamento e risposta continui delle vulnerabilità (CVE)
Un sistema di scansione delle CVE ci avvisa ogni volta che viene rilevata una vulnerabilità nel kernel o in un pacchetto del sistema operativo. Si tratta dello stesso sistema utilizzato per rilevare vulnerabilità in Android e Chromium OS. Il team di Container-Optimized OS risponde con priorità per rilasciare le release con patch. Il team di Container-Optimized OS collabora anche con il team di risposta agli incidenti di Google per rendere rapidamente disponibili patch di sicurezza più ampie in Container-Optimized OS.
Procedura di test e qualifica
Prima di pubblicare una nuova immagine del sistema operativo ottimizzata per i container su Google Cloud, la testiamo su più livelli, tra cui i test di fuzz del kernel di syzkaller, i test Kubernetes a livello di cluster, i test di integrazione con le funzionalità di Compute Engine e diversi benchmark sul rendimento. Ciò garantisce la stabilità e la qualità delle nostre release.