Panoramica sulla sicurezza

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 offrire una piattaforma ben configurata per l'esecuzione dei servizi di produzione.

Ingombro minimo del sistema operativo

Questo è il fulcro della sicurezza Container-Optimized OS. Poiché Container-Optimized OS è ottimizzato per eseguire container e pacchetti che pacchettizzano le proprie dipendenze, possiamo ridurre i pacchetti non necessari e ridurre così al minimo la superficie di attacco del sistema operativo.

File system radice immutabile e avvio verificato

Il file system radice di Container-Optimized OS viene sempre montato in sola lettura. Inoltre, il checksum viene calcolato al momento della compilazione e verificato dal kernel a ogni avvio. Questo meccanismo impedisce agli utenti malintenzionati di "possedere" la macchina attraverso modifiche locali permanenti. Inoltre, molti altri montaggi non sono eseguibili per impostazione predefinita. Per maggiori dettagli, consulta File system.

Configurazione stateless

Anche se avere un file system radice di sola lettura è 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 questo problema, personalizziamo il file system principale in modo che /etc/ sia accessibile in scrittura ma stateless. Questo consente di scrivere le impostazioni di configurazione in fase di esecuzione, ma queste non vengono mantenute durante i riavvii. Pertanto, ogni volta che un nodo Container-Optimized OS si riavvia, inizia da uno slate chiaro. Alcuni dati, come le home directory, i log e le immagini Docker degli utenti, rimangono invariati dopo i riavvii, poiché non fanno parte del file system radice.

Kernel con protezione avanzata

Container-Optimized OS abilita diverse funzionalità del kernel per rafforzare la sicurezza, tra cui l'Integrity Measurement Architecture (IMA), Audit, l'isolamento della tabella delle pagine del kernel (KPTI) e alcuni moduli di sicurezza Linux (LSM) da 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 ulteriore livello di protezione, fornendo valori predefiniti incentrati sulla sicurezza per diverse funzionalità. Ciò include, ad esempio, impostazioni sysctl che disabilitano ptrace e BPF senza privilegi, bloccano il firewall e così via. Se applicati automaticamente a un parco risorse, questi valori predefiniti contribuiscono a proteggere l'intero cluster, il progetto e l'organizzazione.

Aggiornamenti automatici

La funzionalità di aggiornamento automatico di Container-Optimized OS consente la distribuzione tempestiva delle patch di sicurezza alle VM in esecuzione. Quando Container-Optimized OS è gestito da Kubernetes Engine, gli upgrade automatici dei nodi trovano un equilibrio tra sicurezza e stabilità.

Filesystem

Di seguito è riportato un elenco dei percorsi nel file system di immagini dei nodi di Container-Optimized OS, insieme alle relative proprietà e all'utilizzo consigliato:

Percorso Proprietà Finalità
/
  • sola lettura
  • eseguibile
Il file system principale è montato in sola lettura per mantenere l'integrità. Il kernel verifica l'integrità del file system radice di integrità durante l'avvio e si rifiuta di avviarlo in caso di errori.
/home
/var
  • scrivibile
  • non eseguibile
  • stateful
Questi percorsi sono destinati all'archiviazione dei dati persistenti per tutta la durata del disco di avvio. Sono montati da /mnt/stateful_partition.
/var/lib/google
/var/lib/docker
/var/lib/toolbox
  • scrivibile
  • eseguibile
  • stateful
Questi percorsi sono directory di lavoro per i pacchetti di Compute Engine, ad esempio il servizio di gestione degli account, Docker e Toolbox rispettivamente.
/var/lib/cloud
  • scrivibile
  • eseguibile
  • apolide
  • tmpfs
Questo percorso è la directory di lavoro del pacchetto cloud-init.
/etc
  • scrivibile
  • non eseguibile
  • apolide
  • tmpfs
In genere memorizza la configurazione (ad esempio, i servizi systemd definiti tramite cloud-init). È una buona idea acquisire lo stato desiderato delle istanze in cloud-init, in quanto cloud-init viene applicato quando un'istanza viene appena creata e quando viene riavviata.
/tmp
  • scrivibile
  • non eseguibile
  • apolide
  • tmpfs
In genere viene utilizzato come spazio temporaneo e non deve essere utilizzato per archiviare dati permanenti.
/mnt/disks
  • scrivibile
  • eseguibile
  • apolide
  • tmpfs
Puoi montare i dischi permanenti in directory in /mnt/disks.

Firewall

Per impostazione predefinita, Container-Optimized OS è configurato in modo da eliminare tutte le connessioni TCP/UDP in entrata, ad eccezione di SSH, sulla porta 22. Consulta Configurazione del firewall host per informazioni su come modificare l'impostazione predefinita per aprire più porte.

Accesso all'istanza

Per impostazione predefinita, Container-Optimized OS non contiene account utente accessibili. Gli account utente e le chiavi SSH sono gestiti tramite i metadati dell'istanza o del progetto o OS Login. OS Login ti consente di gestire l'accesso alle istanze mediante IAM. Consente un controllo dell'accesso più granulare (sudo o 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 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 OS Login.

Sicurezza dell'infrastruttura

Oltre a varie funzionalità di protezione avanzata del sistema operativo, il team di Container-Optimized OS prende sul serio la catena di fornitura del software e dà priorità alla sicurezza dell'infrastruttura durante lo sviluppo, la creazione e il deployment di immagini, sulla base di anni di esperienza sia di Chromium OS che di Google in generale.

Creato da Google

Ogni pacchetto in Container-Optimized OS, incluso il kernel Linux stesso, viene creato a partire dal codice sorgente dei repository di codice ChromiumOS. Ciò significa che sappiamo esattamente cosa succede nel sistema operativo, chi l'ha eseguito il check-in, in quale versione è stato introdotto e così via. Ciò ci permette anche di applicare rapidamente le patch e aggiornare qualsiasi pacchetto qualora venga rilevata una vulnerabilità, a qualsiasi livello.

Analisi e risposta continue delle vulnerabilità (CVE)

Un sistema di analisi CVE ci avvisa ogni volta che viene rilevata una vulnerabilità nel kernel o in qualsiasi pacchetto del sistema operativo. Si tratta dello stesso sistema utilizzato per rilevare le vulnerabilità in Android e Chromium OS. Il team Container-Optimized OS risponde con priorità alle release con patch. Il team di Container-Optimized OS collabora anche con il team di risposta agli incidenti di Google per rendere disponibili rapidamente patch di sicurezza più ampie in Container-Optimized OS.

Procedura di test e qualifica

Prima di pubblicare una nuova immagine di Container-Optimized OS in Google Cloud, la testiamo a più livelli, tra cui il test fuzz del kernel da parte di syzkaller, i test Kubernetes a livello di cluster, i test di integrazione con le funzionalità di Compute Engine e diversi benchmark delle prestazioni. Ciò garantisce la stabilità e la qualità delle nostre release.