9 best practice per la sicurezza dei container in DevOps

I container in DevOps non sono un concetto nuovo. Sono sandbox virtuali con tutti gli strumenti necessari per l’esecuzione di microservizi, incluse applicazioni di grandi dimensioni.

Puoi pensare ai contenitori come sistemi di pacchettizzazione che ti consentono (come sviluppatore) di archiviare tutto ciò di cui hai bisogno per eseguire un’applicazione, ad esempio runtime e codici binari, da un punto centralizzato.

I container aiutano gli sviluppatori a spostare le applicazioni da un ambiente all’altro (come spedire un’app da una macchina locale a un ambiente virtuale o spostarla dalla fase iniziale a quella di produzione), eliminando tutti i problemi legati alle diverse impostazioni software e di configurazione degli sviluppatori e della produzione FINE.

Di Statista rapporto sulla tecnologia dei container mostra che il 50% delle organizzazioni del mondo ha adottato l’orchestrazione dei container. Sebbene questa tecnologia abbia aumentato l’adozione in base ai suoi vantaggi, i container potrebbero aprire un gateway per gli attacchi di sicurezza informatica se non controllati.

Dettagli CVEla quintessenza della fonte di dati sulla vulnerabilità della sicurezza, ha registrato 62 vulnerabilità su misura per Docker al momento della stesura di questo documento. Questo non richiede le migliori pratiche degli sviluppatori per affrontare queste insidie ​​e salvaguardare i container per processi DevOps di successo?

Questo post scompone il concetto di sicurezza dei container, evidenzia alcune sfide e ti guida sulle best practice da attuare quando utilizzi la tecnologia dei container.

Che cos’è la sicurezza dei container?

La sicurezza dei container è un processo continuo che utilizza protocolli di sicurezza (strumenti e criteri) per salvaguardare i container e i relativi ambienti da potenziali minacce.

Se deselezionate, le minacce possono danneggiare la tua applicazione, la sua infrastruttura, i tempi di esecuzione, le librerie di sistema, il sistema operativo e il kernel, tra le altre funzionalità.

Considerando che i container sono disponibili in transitori (momentaneamente) e sono pensati anche per distribuzioni dinamiche e scalabilità, c’è bisogno di sicurezza automatizzata e di ogni fase del ciclo di vita dello sviluppo del software (SDLC).

Leggi anche: Introduzione a Kubernetes Kops per principianti

Quali sono le sfide nella sicurezza dei container?

Sebbene i container abbiano molti vantaggi (come l’accelerazione della consegna del software), non sono immuni alle sfide, principalmente perché necessitano di misure di sicurezza (mancano di capacità di autosicurezza).

Questo perché i container accedono all’hardware tramite un sistema operativo ospitato (OS). Significa che un singolo contenitore può avere diverse immagini di contenitore sottostanti che introducono un ambito più ampio per le superfici di attacco, presentando alcune sfide.

La prima è la configurazione del contenitore errata, in cui gli sviluppatori dimenticano di personalizzare e utilizzare le configurazioni del contenitore predefinite che presentano alcune insidie ​​come alcune porte esposte e non sicure che potrebbero non essere l’ideale per la tua applicazione, credenziali trapelate come password e token di autenticazione e rilascio eccessivo dell’autorizzazione a runtime del contenitore (se eseguito come root). Quando non vengono sovrascritte, queste configurazioni predefinite forniscono vie per gli attacchi.

Il prossimo è la vulnerabilità dell’infrastruttura del contenitore. In questo caso, i pacchetti integrati nel contenitore, come il codice dell’applicazione, le librerie e le configurazioni, o quelli nel sistema operativo host, introducono vulnerabilità. La suscettibilità può essere introdotta in qualsiasi fase del ciclo di vita di un’applicazione, ad esempio, quando le dipendenze esterne sono integrate in un’immagine del contenitore, le librerie open source vengono installate come parte dell’applicazione, le immagini di base del contenitore provengono da registri e host di contenitori di terze parti sfruttabili tramite reti ed endpoint.

La visibilità nei carichi di lavoro dei container è una delle maggiori sfide per i container. Ciò è dovuto alla natura altamente dinamica dei contenitori che rende gli strumenti di monitoraggio incapaci di individuare i contenitori in esecuzione e di ispezionarne il comportamento di rete. Una migliore visibilità previene le violazioni e migliora i tempi di risposta all’incidenza se si verificano.

Inoltre, il contenitore è suscettibile se qualsiasi fase della pipeline CI/CD non è sicura, nel codice dell’applicazione o nell’infrastruttura del carico di lavoro del contenitore. Mentre spetta agli sviluppatori occuparsi della sicurezza alla fine del ciclo di vita di un’applicazione, amministrarla in ogni fase dello sviluppo salvaguarda le tue app da questa battuta d’arresto.

Quali strumenti possono risolvere le sfide nella sicurezza dei container?

Puoi garantire che le tue soluzioni aziendali distribuite siano sicure implementando la sicurezza e l’integrità dei container utilizzando gli strumenti di sicurezza. Questi strumenti eseguono la scansione delle vulnerabilità e le monitorano costantemente per attacchi, bug o problemi.

Sia che tu stia cercando strumenti di sicurezza per container open source o un tipo commercializzato, tutti serviranno allo stesso scopo. Funzionano tutti controllando la tua infrastruttura di container e correndo contro vulnerabilità ed esposizioni comuni (CVE).

Ecco alcuni strumenti che puoi provare: Pingsafe Editors Choice, Datadog Cloud SIEM, Anchore, Sophos Cloud-Native Security, Bitdefender GravityZone, Sysdig secure, Aqua Security e RedHat Advanced Cluster Security for Kubernetes.

Leggi anche: 11 scanner di sicurezza per container per trovare le vulnerabilità

Le migliori pratiche per la sicurezza dei container

Nonostante le sfide sopra poste nella sicurezza dei container, ecco un’analisi delle migliori convenzioni che puoi implementare per ottimizzare la sicurezza dei container in tutte le fasi del ciclo di vita dell’applicazione.

Protezione delle tue immagini

Usi le immagini del contenitore per creare contenitori. La minima configurazione errata o azioni dannose possono attivare vulnerabilità nei container in produzione. Puoi contrastare questo:

  • Utilizzo di immagini affidabili: quando non crei le tue immagini da zero, opti sempre per lavorare con immagini provenienti da fonti attendibili. I repository pubblici come Docker Hub hanno immagini, comprese quelle con malware e configurazione errata.
  • Includere solo i componenti necessari: se sono presenti componenti di cui l’applicazione non ha bisogno, sarebbe meglio rimuoverli. Ad esempio, il sistema UNIX presenta naturalmente i binari “awk” e “sed”.
  • Inclusione dell’applicazione nell’immagine del contenitore: un’immagine del contenitore racchiude un sottoinsieme del sistema operativo (SO) e l’applicazione in esecuzione. Per ogni strumento e libreria inseriti nel contenitore, rappresenta una potenziale minaccia. Sarebbe meglio includere l’applicazione nell’immagine del contenitore per risolvere questo problema. Questo viene fatto attraverso un binario compilato staticamente con tutte le dipendenze richieste.

Scansioni automatizzate per vulnerabilità e gestione

La scansione regolare delle vulnerabilità e la gestione del contenitore e degli host aiutano a rilevare le vulnerabilità in qualsiasi fase del ciclo di vita dell’applicazione.

In questo caso, puoi attivare la scansione del codice per rilevare bug e test di sicurezza delle applicazioni statiche (SAST) per trovare vulnerabilità nel codice dell’applicazione. Un’analisi della composizione del software (SCA) può fornire visibilità sui componenti software open source generando una distinta base del software che può essere confrontata con le vulnerabilità open source documentate.

Inoltre, la scansione delle immagini analizza i contenuti e il processo di creazione dell’immagine del contenitore per verificarne la suscettibilità. Con strumenti come Chiara, puoi cercare le vulnerabilità note. In alternativa, utilizza i test dinamici di sicurezza delle applicazioni (DAST), che evidenziano i rischi per la sicurezza in base al comportamento del contenitore. Gli strumenti DAST possono anche eseguire la scansione dell’host, in cui ispezioni i componenti host del contenitore (kernel host e sistema operativo) per la configurazione errata.

Mentre le misure di cui sopra vengono adottate nel processo in corso di un ciclo di vita di un contenitore, è possibile abbracciare la filosofia del “spostamento a sinistra”. Significa implementare la sicurezza fin dall’inizio del ciclo di vita dello sviluppo. Un buon strumento se scegli questo approccio è Curiosità.

Protezione dei registri dei contenitori

I registri dei contenitori sono un modo centralizzato efficiente per archiviare le immagini e distribuirle. Spesso le organizzazioni dispongono di migliaia di immagini archiviate in registri pubblici o privati. Esistono diverse misure per garantire che tutti i membri del team e i collaboratori utilizzino immagini prive di vulnerabilità.

In primo luogo, l’implementazione di un controllo dell’accesso degli utenti (per i registri privati) stabilisce chi può pubblicare e accedere alle immagini. Sebbene si tratti di una misura di sicurezza di base, impedisce a persone non autorizzate di pubblicare, modificare o eliminare le tue immagini.

La misura successiva è firmare le tue immagini che lega ogni immagine alla persona che l’ha firmata, rendendo difficile sostituire un’immagine con una compromessa. Puoi usare il Attendibilità del contenuto Docker tecniche per apporre firme digitali ai dati inviati e ricevuti dalle anagrafiche. Infine, ricorda che la scansione delle tue immagini (continuamente) aiuta a rilevare eventuali vulnerabilità critiche.

Monitoraggio dei contenitori

Puoi ottimizzare la visibilità nei carichi di lavoro dei container tramite gli strumenti di osservabilità. Gli strumenti dovrebbero essere in grado di monitorare e testare le vulnerabilità in tutti i componenti e consentire la registrazione del tempo degli eventi reali per gli ambienti containerizzati.

Gli strumenti di osservabilità rilevano le minacce controllando metriche e registri da tutti i componenti dello stack di container e analizzandoli per eventuali anomalie. Con questo approccio, sei in grado di correggere immediatamente le configurazioni errate una volta identificate.

Per raccogliere le metriche sull’utilizzo delle risorse, utilizza strumenti come cAdvisor o kube-state-metrics. Per monitorare l’attività dei container e le prestazioni dei tuoi cluster, utilizza strumenti come Grafana o Prometheus.

Se vuoi analizzare il traffico di rete tra i container, usa Wireshark o tcpdump. Se utilizzi un servizio Kubernetes gestito come (AKS), usa Monitoraggio di Azure per tenere traccia delle risorse e delle minacce alla sicurezza.

Inoltre, Azure Log Analytics può raccogliere e analizzare le risorse AKS. Se scegli Amazon EKS, Amazon CloudTrail è utile per la registrazione e la visione; usa Amazon Cloud Watch.

Implementazione della sicurezza di rete

Le misure di controllo della sicurezza della rete possono aiutare a salvaguardare dall’accesso non autorizzato ai container. Il criterio utilizzato qui è la segmentazione della rete che isola i contenitori, limitandoli ad accedere solo ai servizi necessari.

Se stai eseguendo le tue applicazioni containerizzate su Kubernetes, puoi utilizzare i criteri di rete K8s per configurare il traffico pod in entrata e in uscita nei cluster. Questo, a sua volta, limita il traffico a pod specifici in base alle etichette.

La sicurezza del livello di trasporto (TLS) può essere aumentata per la comunicazione pod. Puoi optare per le tecniche TLS o SSL (Secure Sockets Layer) per la comunicazione sicura tra il server API e altri componenti. I bilanciatori del carico sono una buona soluzione se vuoi anche limitare l’ingresso di traffico nei tuoi cluster.

Se i tuoi cluster dispongono di microservizi, puoi garantire un traffico sicuro tramite strumenti mesh di servizi come Meshery o Linkerd. Infine, proteggi la tua rete se utilizzi un cloud prodder per ospitare i tuoi cluster.

Se si usa Azure Kubernetes Service (AKS), usare i gruppi di sicurezza di rete (NSG) per la gestione del traffico. Se utilizzi Amazon Elastic Kubernetes Service (EKS), la soluzione migliore sarebbero i gruppi di sicurezza del cloud privato virtuale (VPC) di Amazon.

Riduzione degli attacchi di superficie

Ridurre al minimo la superficie degli attacchi ha due vantaggi; maggiore velocità del servizio e riduzione del rischio di violazioni della sicurezza.

Utilizzando una build in più fasi, puoi creare immagini leggere con un piccolo attacco di superficie e tempi di avvio e prestazioni migliorati. Ci sono diverse soluzioni per farlo. Se utilizzi Linux, puoi utilizzare Alpine Linux, BusyBox o Tiny Core Linux.

Per Ubuntu, c’è Ubuntu Minimal. Puoi anche utilizzare Scratch, un’immagine Docker speciale, essenzialmente un contenitore aperto, per creare immagini minimaliste dall’inizio.

Limitazione dei privilegi del contenitore

Il principio impiegato qui comporta la fornitura di un’autorizzazione minima per eseguire un determinato compito. Quando i contenitori vengono eseguiti come root, concedono a un utente vari privilegi operativi come l’installazione di pacchetti o l’alimentazione delle operazioni di lettura-scrittura sul sistema operativo.

Il rischio è che gli aggressori possano sfruttare l’escalation di potenza al runtime del container se compromesso. Stando così le cose, ci sono due soluzioni praticabili. Puoi eseguire i container in modalità rootless o limitare le capacità del kernel LINUX solo a quelle necessarie per il carico di lavoro del container.

Gestire i segreti in sicurezza

I file di configurazione del contenitore e della finestra mobile devono essere privi di segreti. I segreti includono certificati, password, chiavi API (Application Program Interface) e token. E mentre questa è la migliore pratica, vedrai spesso questi segreti codificati nel processo di compilazione o nelle immagini del codice sorgente.

In tali casi, i dati sensibili entrano nei contenitori e vengono memorizzati nella cache nei livelli contenitori intermedi anche quando i contenitori sono stati rimossi. Per questi casi, l’approccio migliore è distribuire una soluzione di gestione dei segreti come Gestore dei segreti di AWS E Volta per archiviare e gestire le credenziali segrete.

Potenziare la tua squadra

Come ultima misura di sicurezza, è fondamentale educare il tuo team sulle migliori pratiche di sicurezza. Ciò significa che tutti i giocatori della tua squadra possono identificare e rispondere alle minacce alla sicurezza.

Un buon modo per implementare questo è aggiungere la sicurezza dei container ai processi di onboarding del tuo team. L’offerta di formazione pratica, apprendimento continuo e valutazioni periodiche della sicurezza distingue il tuo team DevOps fornendogli trend di sicurezza aggiornati.

Pensieri finali

La sicurezza dei container è un processo continuo cruciale del ciclo di vita dello sviluppo del software. L’approccio migliore a questa query consiste nell’incorporare la sicurezza dal codice dell’applicazione al runtime del contenitore, al sistema operativo host e all’infrastruttura di rete sottostante.

Puoi realizzarlo seguendo un piano strategico che prevede la verifica dei contenitori e l’utilizzo solo di quelli provenienti da fonti attendibili. Intraprendi l’indurimento dei container per assicurarti che contengano solo i servizi necessari. Instillare metodi di registrazione facilmente attuabili tramite strumenti di monitoraggio. Segmenta la tua rete in modo che i container siano separati dall’intera infrastruttura.

Firma sempre le tue immagini per convalidare l’input e l’output dei dati attraverso i tuoi servizi. Inoltre, dovresti eseguire regolarmente scansioni e test di penetrazione per verificare eventuali vulnerabilità e intraprendere immediatamente azioni correttive. E man mano che il panorama tecnologico si evolve, rimani sempre aggiornato con le ultime pratiche di sicurezza.

Successivamente, controlla come automatizzare la sicurezza.