Utilizzo dello strumento di scansione delle vulnerabilità Kubescape

Introduzione

Kubescape è uno strumento open-source per Kubernetes sviluppato da Armosec utilizzato per l’analisi del rischio, la conformità alla sicurezza, la visualizzazione di RBAC e la scansione delle vulnerabilità delle immagini. Inoltre, Kubescape è in grado di esaminare i manifesti di Kubernetes per individuare potenziali problemi di configurazione che espongono i tuoi deployment al rischio di attacco. Può anche esaminare le chart di Helm, individuare violazioni di RBAC (controllo degli accessi basato sui ruoli), effettuare calcoli del punteggio di rischio e mostrare tendenze di rischio nel tempo.

Caratteristiche chiave di Kubescape:

  • Rilevamento delle misconfigurazioni di Kubernetes e fornire assistenza alla correzione tramite il Portale Cloud di Armosec.
  • Analisi del rischio e tendenze nel tempo tramite il Portale Cloud di Armosec.
  • Includi diversi framework di conformità alla sicurezza, come ArmoBest, NSA, MITRE e Best Practices per DevOps.
  • Supporto per la gestione delle eccezioni, consentendo agli amministratori di Kubernetes di segnalare livelli di rischio accettabili.
  • Si integra con vari strumenti come Jenkins, flussi di lavoro di Github, Prometheus, ecc.
  • Scansione delle immagini: scansiona le immagini per individuare vulnerabilità e vedere, ordinare e filtrare facilmente (quale vulnerabilità patchare prima).
  • Semplifica la complessità di RBAC fornendo un grafico visivo facile da comprendere che mostra la configurazione RBAC nel tuo cluster.

Kubescape può essere eseguito in modi diversi:

Kubescape utilizza diversi framework per rilevare le configurazioni errate come:

È Kubescape gratuito?

Sì, lo strumento e l’edizione della community sono gratuiti per sempre, tranne l’implementazione del backend del portale cloud e forse alcune altre funzionalità avanzate. Vi è anche un limite sul numero massimo di nodi worker che è possibile analizzare per cluster (fino a 10). I dati dei rapporti di scansione sono conservati per un massimo di un mese nel portale cloud di Armo.

Vedi i piani di prezzo per ulteriori informazioni.

È Kubescape open source?

Sì, lo strumento di certo lo è. Puoi visitare la pagina principale di Armo su GitHub per trovare ulteriori dettagli su ciascuna implementazione dei componenti. L’implementazione del backend del portale cloud non è open source.

In questa guida utilizzerai Kubescape per effettuare un’analisi del rischio per la catena di approvvigionamento delle tue applicazioni Kubernetes (immagini dei container, manifesti YAML di Kubernetes). Successivamente, imparerai come intraprendere le azioni appropriate per rimediare alla situazione. Infine, imparerai come integrare Kubescape in un’infrastruttura CI/CD per analizzare le vulnerabilità nelle fasi iniziali dello sviluppo.

Tabella dei contenuti

Prerequisiti

Per completare tutti i passaggi di questa guida, avrai bisogno di:

  1. A working DOKS cluster running Kubernetes version >=1.21 that you have access to. For additional instructions on configuring a DigitalOcean Kubernetes cluster, see: How to Set Up a DigitalOcean Managed Kubernetes Cluster (DOKS).
  2. A DigitalOcean Docker Registry. A free plan is enough to complete this tutorial. Also, make sure it is integrated with your DOKS cluster as explained here.
  3. Kubectl CLI per l’interazione con Kubernetes. Segui queste istruzioni per connetterti al tuo cluster con kubectl e doctl.
  4. Helm, per installare Kubescape nel cluster Kubernetes.
  5. Kubescape CLI per interagire con lo scanner di vulnerabilità Kubescape.
  6. A free Armosec Cloud Portal account used to periodically publish scan results for your Kubernetes cluster to a nice dashboard. Also, the Armosec portal web interface helps you with investigations and risk analysis.
  7. A Slack workspace you own, and a dedicated Slack app to get notified of vulnerability scan issues reported by Kubescape.

Passaggio 1 – Conoscere il CLI di Kubescape

È possibile eseguire la scansione manuale delle vulnerabilità tramite l’interfaccia della riga di comando kubescape. La CLI di kubescape è progettata per essere utilizzata in vari script e automazioni. Un esempio pratico è in un pipeline CI/CD implementata utilizzando vari strumenti come Tekton, Jenkins, GitHub Workflows, ecc.

Kubescape è progettato per eseguire la scansione di un intero cluster Kubernetes da zero (carichi di lavoro, contenitori, ecc.). Se desiderato, è possibile limitare le scansioni a uno spazio dei nomi specifico. Altre funzionalità includono la scansione dell’host (nodi worker), la scansione di repository locali o remoti (ad es. GitHub), il rilevamento di configurazioni errate nei manifesti YAML di Kubernetes o nei chart di Helm. È possibile selezionare vari framework tramite il comando framework, come ArmoBest, NSA, MITRE, ecc.

Quando la CLI di kubescape viene invocata, scaricherà (o aggiornerà) il database delle vulnerabilità conosciute sul proprio computer locale. Successivamente, avvierà il processo di scansione e riporterà eventuali problemi in un formato specifico. Per impostazione predefinita, verrà stampata una tabella riassuntiva utilizzando l’output standard o la console. Kubescape può generare report anche in altri formati, come JSON, HTML, SARIF, ecc.

È possibile scegliere di inviare i risultati al Portale Cloud di Armosec tramite il flag --submit per memorizzare e visualizzare successivamente i risultati della scansione.

Nota: Non è obbligatorio inviare i risultati della scansione al portale cloud di Armosec. Il grande vantaggio dell’utilizzo del portale è la visibilità, perché ti fornisce accesso a un bel cruscotto dove puoi controllare tutti i report di scansione e il punteggio complessivo del rischio. Ti aiuta anche a lungo termine con indagini e suggerimenti per la correzione.

Alcuni esempi da provare con la CLI di Kubescape:

  • Scansiona un intero cluster Kubernetes e genera un rapporto riassuntivo nella console (output standard):

    kubescape scan
    
  • Utilizza solo uno specifico namespace per la scansione:

    kubescape scan --include-namespaces microservices
    
  • Escludi specifici namespace dalla scansione:

    kubescape scan --exclude-namespaces kube-system,kube-public
    
  • Scansiona uno specifico namespace e invia i risultati al portale cloud di Armosec:

    kubescape scan --include-namespaces default --submit
    
  • Eseguire la scansione del cluster utilizzando un framework specifico (ad esempio, NSA):

    kubescape scan framework nsa --exclude-namespaces kube-system,kube-public
    

Kubescape è in grado di eseguire la scansione degli host del tuo cluster Kubernetes (o nodi lavoratori) anche per le vulnerabilità del sistema operativo. Per abilitare questa funzionalità, è necessario passare il flag --enable-host-scan al CLI di kubescape. Quando questo flag è abilitato, kubescape distribuisce dei sensors nel tuo cluster. I sensors vengono creati utilizzando i DaemonSet di Kubernetes che distribuiscono i Pods su ogni nodo del tuo cluster per eseguire la scansione delle vulnerabilità conosciute. Dopo che il processo di scansione è completato, i sensors vengono rimossi dal tuo cluster (insieme alle risorse Kubernetes associate).

Il CLI di Kubescape fornisce pagine di aiuto per tutte le opzioni disponibili. Il comando seguente può essere utilizzato per stampare la pagina di aiuto principale:

kubescape --help

L’output assomiglia a:

Output
Kubescape is a tool for testing Kubernetes security posture. Docs: https://hub.armo.cloud/docs Usage: kubescape [command] Available Commands: completion Generate autocompletion script config Handle cached configurations delete Delete configurations in Kubescape SaaS version download Download controls-inputs,exceptions,control,framework,artifacts help Help about any command list List frameworks/controls will list the supported frameworks and controls scan Scan the current running cluster or yaml files submit Submit an object to the Kubescape SaaS version version Get current version ...

Ogni comando (o sotto-comando) del CLI di kubescape ha anche una pagina di aiuto associata che può essere accessa tramite kubescape [comando] --help.

Si prega di visitare la pagina ufficiale della documentazione del CLI di kubescape per ulteriori esempi.

Passaggio 2 – Conoscere il Portale Cloud di Armosec

Armosec fornisce un bel portale basato su cloud dove puoi caricare i risultati della scansione Kubescape e eseguire un’analisi del rischio. Questo è abbastanza utile perché vorrai visualizzare e ispezionare ogni report di scansione, prendere le azioni appropriate per rimediare alla situazione e quindi eseguire nuovamente la scansione per verificare i risultati. Avere una buona rappresentazione visiva per ogni report e il punteggio di rischio associato ti aiuta a lungo termine con le indagini e le iterazioni necessarie per risolvere i problemi di sicurezza segnalati.

Puoi creare un account gratuitamente limitato a 10 nodi lavoratore e 1 mese di conservazione dei dati che dovrebbe essere sufficiente nella maggior parte dei casi (ad esempio, per esigenze di test o sviluppo). Puoi leggere di più su come creare l’account cloud kubescape sulla pagina ufficiale della documentazione.

Una volta creato l’account, viene generato un ID utente univoco che puoi utilizzare per caricare i risultati della scansione per quell’account specifico. Ad esempio, potresti avere un’automazione specifica come un pipeline CI/CD dove è necessario caricare i risultati della scansione, quindi l’ID utente associato è richiesto per distinguere tra più tenant.

Per ogni rapporto di scansione caricato sul tuo account cloud Armosec, viene aggiunto un nuovo record di cronologia contenente l’elenco dei problemi trovati e il punteggio di rischio associato. In questo modo è possibile ottenere tendenze e i grafici associati mostrano l’evoluzione del punteggio di rischio nel tempo. Inoltre, viene generato anche un elenco con i problemi di sicurezza più gravi nel cruscotto principale.

La figura seguente illustra queste funzionalità:

Comprensione del valore del punteggio di rischio di Kubescape

Ogni volta che viene eseguita una scansione, Kubescape verifica le risorse per potenziali rischi di sicurezza utilizzando controlli interni. Un Controllo Kubescape è un concetto utilizzato dallo strumento kubescape per indicare i test utilizzati sotto sotto per controllare un particolare aspetto del tuo cluster (o delle risorse in fase di scansione). Andando avanti, un framework è una raccolta di controlli o test utilizzati internamente per eseguire la scansione delle tue risorse particolari per problemi. Quindi, a seconda del framework utilizzato, viene eseguito un diverso insieme di controlli (tuttavia, alcuni test condividono alcune cose in comune). Infine, a seconda del fattore di rischio associato a ciascun test, viene calcolato il punteggio finale.

Il punteggio finale è un numero positivo che va da 0 a 100%. Un valore più basso indica il punteggio migliore, mentre un valore più alto indica il peggiore. Quindi, se vuoi essere prudente, dovresti puntare al valore più basso possibile. In pratica, un punteggio di rischio uguale o inferiore al 30% dovrebbe essere un buon punto di partenza.

Assistenza alla Rimedio per le Segnalazioni di Problemi di Sicurezza

Un’altra utile funzionalità fornita dal portale cloud di Armosec è l’assistenza alla rimedio per i problemi di sicurezza. Significa che ricevi una raccomandazione su come risolvere ciascun problema di sicurezza trovato dallo scanner kubescape. Questo è molto importante perché semplifica il processo e chiude il cerchio per ciascuna iterazione che devi eseguire per risolvere ciascun problema di sicurezza segnalato.

La seguente immagine illustra meglio questo processo:

Per ciascun problema di sicurezza segnalato, viene visualizzata un’icona di attrezzo chiave inglese, su cui puoi fare clic per ottenere assistenza alla risoluzione:

Successivamente, si apre una nuova finestra che fornisce dettagli su ciascun oggetto Kubernetes interessato, evidenziato in colore verde:

Puoi fare clic su ciascun controllo come C-0018, C-0030, C-0086, ecc. e indagare sui problemi evidenziati. Ti verranno presentate delle suggerimenti su come risolvere ciascun problema di sicurezza. Quello che rimane è seguire gli indizi e risolvere ciascun problema di sicurezza.

Attivazione della Scansione del Cluster dall’Interfaccia Web

Il portale cloud di Armo offre la possibilità di avviare scansioni del cluster dall’interfaccia web anche se il grafico Helm dei componenti cloud di Armo è distribuito nel vostro cluster DOKS (discusso nel passaggio successivo). Sia la configurazione che la scansione delle immagini possono essere avviate con un solo clic nel portale. Affinché questa funzionalità funzioni, è necessario attendere che i componenti cloud di Armo finiscano di eseguire la scansione del cluster in background e caricare i risultati.

Attivare una scansione della configurazione è possibile navigando alla pagina di scansione della configurazione e facendo clic sul pulsante Scansione. La seguente immagine mostra come completare questo compito:

È anche possibile impostare o modificare l’orario attuale per la scansione automatica se desiderato facendo clic sul pulsante Orario nella finestra pop-up che appare dopo aver fatto clic sul pulsante Scansione. Utilizzando la stessa finestra, è possibile selezionare quali framework di controllo utilizzare per la scansione. La seguente immagine mostra come completare i compiti:

Passaggio 3 – Configurazione delle Scansioni Automatiche di Kubescape per DOKS

Kubescape può essere configurato per eseguire automaticamente la scansione dell’intero cluster Kubernetes a intervalli di tempo specifici, oppure ogni volta che viene distribuita una nuova immagine dell’applicazione. È necessario distribuire Componenti del Cluster Armo nel tuo cluster Kubernetes utilizzando Helm per ottenere questa funzionalità. È inoltre necessario un account Portale Cloud di Armosec per caricare e ispezionare i risultati.

Il chart di Helm di Armo installa lavori cron che attivano una scansione delle vulnerabilità sia per l’intero cluster Kubernetes che per le immagini dei contenitori. L’intervallo di ogni lavoro cron è configurabile nel file dei valori di Helm.

Provisionamento dei Componenti del Cluster Armo su DOKS

Passaggi per distribuire kubescape nel tuo cluster Kubernetes utilizzando Helm:

  1. Aggiungi il repo Helm e elenca i chart disponibili:
helm repo add armo https://armosec.github.io/armo-helm/
helm repo update armo
helm search repo armo

L’output assomiglia al seguente:

Output
NAME CHART VERSION APP VERSION DESCRIPTION armo/armo-cluster-components 1.7.15 v1.7.15 ARMO Vulnerability Scanning

Nota:
Il chart di interesse è armo/armo-cluster-components, che installerà i componenti Armo nel tuo cluster Kubernetes. Visita la pagina del repository armo-helm per ulteriori dettagli su questo chart.

  1. Recupera il tuo ID utente dell’account Armo utilizzando la CLI di kubescape (necessario nel prossimo passaggio):
kubescape config view

L’output assomiglia a:

{
"accountID": "c952b81f-77d5-4afb-80cc-59b59ec2sdfr"
}

Nota:Se non hai mai utilizzato la CLI di kubescape per inviare i risultati della scansione al portale cloud di Armosec, il comando sopra non funzionerà. In questo caso, è necessario accedere al portale e ottenere l’ID dell’account come spiegato qui.

  1. Installa i componenti del cluster Armo Kubescape utilizzando Helm – verrà creata anche un’area dedicata armo-system (assicurati di sostituire i segnaposto <> di conseguenza):
ARMO_KUBESCAPE_CHART_VERSION="1.7.15"
helm install armo armo/armo-cluster-components \
--version "$ARMO_KUBESCAPE_CHART_VERSION" \
--namespace armo-system \
--create-namespace \
--set clusterName="$(kubectl config current-context)" \
--set accountGuid=<YOUR_ARMO_ACCOUNT_ID>

–create-namespace \

Nota:Viene utilizzata una versione specifica per il grafico Helm armo-cluster-components. In questo caso, è stata selezionata la versione 1.7.15, che corrisponde al rilascio 1.7.15 dei componenti del cluster Armo (vedi l’output da Step 1.). È una pratica consigliata, in generale, bloccare su una versione specifica. Questo aiuta ad ottenere risultati prevedibili e consente il controllo della versione tramite Git.

kubectl get deployments -n armo-system

Ora controlla se tutti i deployment dei componenti del cluster Armo sono attivi e in esecuzione:

Output
NAME READY UP-TO-DATE AVAILABLE AGE armo-collector 1/1 1 1 5d6h armo-kubescape 1/1 1 1 5d6h armo-notification-service 1/1 1 1 5d6h armo-vuln-scan 1/1 1 1 5d6h armo-web-socket 1/1 1 1 5d6h

L’output assomiglia a:

Tutti i componenti del cluster Armo dovrebbero essere attivi e in esecuzione.

  • Infine, dopo qualche minuto, dovresti essere in grado di visualizzare i report di scansione del cluster disponibili nel portale cloud, come:
  • Risultati della scansione della configurazione:
  • Risultati della scansione dell’immagine:

Risultati del visualizzatore RBAC:

Per ulteriori informazioni, visita la pagina scansione delle vulnerabilità del cluster dalla documentazione ufficiale.

Modifica dei valori di Helm per il grafico dei componenti del cluster Armo

Puoi modificare il comportamento del grafico dei componenti del cluster Armo modificando il file dei valori di Helm fornito in questa guida.

  • È possibile modificare le seguenti impostazioni:
  • Intervalli di scansione tramite i valori armoScanScheduler e armoKubescapeScanScheduler.

Nuovo trigger di scansione dell’immagine tramite il valore triggerNewImageScan.

L’elenco completo dei valori che possono essere personalizzati secondo le tue esigenze è disponibile nel file dei valori dell’helm chart ufficiale.

ARMO_KUBESCAPE_CHART_VERSION="1.7.15"
helm upgrade armo armo/armo-cluster-components \
  --version "$ARMO_KUBESCAPE_CHART_VERSION" \
  --namespace armo-system \
  --set clusterName="$(kubectl config current-context)" \
  --set accountGuid=<YOUR_ARMO_ACCOUNT_ID> \
  -f <YOUR_CUSTOM_HELM_VALUES_FILE_HERE>

Per applicare le modifiche, è necessario aggiornare la versione corrente del chart di Helm tramite (assicurati di sostituire i segnaposto <> di conseguenza):

Passaggio 4 – Utilizzo di Kubescape per eseguire la scansione delle vulnerabilità della configurazione di Kubernetes in un flusso di lavoro CI/CD

Come beneficeresti dall’incorporare uno strumento di scansione della conformità alla sicurezza nel tuo flusso di lavoro CI/CD e evitare situazioni spiacevoli in un ambiente di produzione?

Tutto inizia a livello di base, dove inizia lo sviluppo del software. In generale, si desidera utilizzare un ambiente dedicato per ogni fase. Quindi, nelle prime fasi dello sviluppo, quando il codice dell’applicazione cambia molto spesso, si dovrebbe utilizzare un ambiente di sviluppo dedicato (chiamato di solito ambiente inferiore). Successivamente, l’applicazione viene perfezionata nell’ambiente di QA, dove i team di QA effettuano test manuali e/o automatizzati. Successivamente, se l’applicazione ottiene l’approvazione del team di QA, viene promossa negli ambienti superiori, come il staging, e infine in produzione. In questo processo, in cui l’applicazione viene promossa da un ambiente all’altro, viene eseguito un pipeline dedicato, che analizza continuamente gli artefatti dell’applicazione e calcola il punteggio di rischio per la sicurezza. Se il punteggio non raggiunge una soglia specifica, il pipeline fallisce immediatamente e la promozione degli artefatti dell’applicazione in produzione viene interrotta nelle prime fasi.

Quindi, lo strumento di scansione della sicurezza (ad esempio, kubescape) agisce come un guardiano, fermare gli artefatti indesiderati nel tuo ambiente di produzione fin dalle prime fasi dello sviluppo. Allo stesso modo, i pipeline degli ambienti superiori utilizzano kubescape per consentire o vietare agli artefatti dell’applicazione di entrare nella fase finale di produzione.

Implementazione del flusso di lavoro CI/CD di GitHub Actions

In questo passaggio, imparerai come creare e testare un esempio di pipeline CI/CD con scansione delle vulnerabilità integrata tramite i flussi di lavoro di GitHub. Per apprendere i fondamenti dell’utilizzo di GitHub Actions con DigitalOcean Kubernetes, consulta questo tutorial.

La pipeline fornita nella sezione seguente costruisce e distribuisce l’applicazione game-2048-example dal repository kubernetes-sample-apps di DigitalOcean.

  1. In una panoramica generale, il workflow di esempio CI/CD fornito nel repository Kubernetes-sample-apps è composto dalle seguenti fasi:
  2. Fase di costruzione e test dell’applicazione – costruisce gli artefatti principali dell’applicazione e esegue test automatizzati.
  3. Fase di scansione Kubescape – esegue la scansione delle vulnerabilità note nei manifesti YAML di Kubernetes associati all’applicazione. Agisce come un gate, e lo stato finale della pipeline (pass/fail) dipende da questo passaggio. In caso di fallimento, viene inviata anche una notifica Slack.
  4. Fase di costruzione e push dell’immagine dell’applicazione – costruisce e contrassegna l’immagine dell’applicazione utilizzando l’ultimo SHA del commit git. Successivamente, l’immagine viene pushata su DOCR.

Fase di distribuzione dell’applicazione – distribuisce l’applicazione su Kubernetes (DOKS).

Il diagramma seguente illustra ogni job della pipeline e le relative fasi con le azioni (viene mostrata solo la configurazione rilevante):

  • Nota:
  • Nel caso dei progetti basati su kustomize, è meglio rendere il manifesto finale tramite il comando kubectl kustomize </percorso/al/file/kustomization> per catturare e analizzare tutto (incluso le risorse remote). D’altra parte, può essere difficile identificare quale risorsa Kubernetes deve essere patchata. Questo è dovuto al fatto che il file di manifesto risultante è composto da tutte le risorse da applicare. Questo è come funziona Kustomize: raccoglie tutti i frammenti di configurazione da ogni sovrapposizione e li applica su una base per costruire il composto finale.

Puoi anche dire a Kubescape di scansionare l’intera cartella dove conservi le tue configurazioni kustomize (la guida attuale si basa su questo approccio). In questo modo, è più facile identificare quale risorsa deve essere corretta nel tuo repository. Le risorse remote utilizzate da kustomize devono essere corrette a monte. Inoltre, le secret e le ConfigMaps di Kubernetes generate tramite kustomize non vengono catturate.

Come si fa a interrompere il processo se un certo livello di conformità alla sicurezza non viene raggiunto?

La CLI di Kubescape fornisce un flag chiamato --fail-threshold a questo scopo. Questo flag si correla con il punteggio complessivo di rischio calcolato dopo ogni scansione. Puoi interrompere o far passare il processo in base al valore della soglia e fermare il rilascio dell’applicazione se le condizioni non sono soddisfatte.

La figura seguente illustra il flusso per il pipeline CI/CD di esempio utilizzato in questa guida:

  1. Segui i seguenti passaggi per creare e testare il workflow CI/CD di kubescape fornito nel repository GitHub kubernetes-sample-apps:
  2. 1. Forka il repository GitHub kubernetes-sample-apps.
  3. SLACK_WEBHOOK_URL – contiene il tuo URL webhook in entrata di Slack utilizzato per le notifiche della scansione di kubescape.
  4. Naviga nella scheda Azioni del tuo repository forkato e seleziona il flusso di lavoro Esempio di CI/CD di Kubescape del Gioco 2048:

A new entry should appear in below list after clicking the Run Workflow green button. Select the running workflow to observe pipeline progress:

Fai clic sul pulsante Esegui flusso di lavoro e lascia i valori predefiniti:

Il pipeline fallirà e si interromperà quando viene eseguito il lavoro kubescape-nsa-security-check. Ciò è previsto perché il valore di soglia predefinito di 30 per il punteggio complessivo di rischio è inferiore al valore desiderato. Dovresti inoltre ricevere una notifica di Slack con i dettagli sull’esecuzione del flusso di lavoro:

Nel prossimo passaggio, imparerai come investigare il rapporto di scansione di kubescape per risolvere i problemi, abbassare il punteggio di rischio e superare il pipeline.

Passaggio 5 – Investigare i Risultati della Scansione di Kubescape e Risolvere i Problemi Segnalati

Ogni volta che la soglia del valore del punteggio di rischio non viene raggiunta, il flusso di lavoro di GitHub di game-2048 fallirà e verrà inviata una notifica Slack con ulteriori dettagli.

Il flusso di lavoro game-2048 esegue un controllo di sicurezza (la scansione dell’immagine locale non è supportata) – controlli di configurazione errata dei manifest di Kubernetes. Il lavoro kubescape-nsa-security-check viene utilizzato a questo scopo. Il comando equivalente di kubescape utilizzato è – kubescape scan framework nsa /percorso/al/progetto/kubernetes/manifests.

- name: Scan Kubernetes YAML files
  run: |
    kubescape scan framework nsa kustomize/ \
      -t ${{ github.event.inputs.kubescape_fail_threshold || env.KUBESCAPE_FAIL_THRESHOLD }} \
      --submit --account=${{ secrets.ARMOSEC_PORTAL_ACCOUNT_ID }}
  working-directory: ${{ env.PROJECT_DIR }}

Nella sezione sottostante è mostrata la logica principale del lavoro kubescape-nsa-security-check:

–submit –account=${{ secrets.ARMOSEC_PORTAL_ACCOUNT_ID }}

La configurazione sopra indicata dice al CLI di Kubescape di avviare una nuova scansione per tutti i manifesti di Kubernetes presenti nella directory kustomize/ utilizzando il framework NSA. Specifica anche quale livello di soglia utilizzare tramite il flag -t, e di inviare i risultati finali al portale cloud di Armo (il flag –submit in congiunzione con –acount).

Pertanto, abbassando il valore del punteggio di rischio e superando il flusso di lavoro consiste nell’indagare e correggere i problemi segnalati dal lavoro kubescape-nsa-security-check. Successivamente, imparerai come affrontare i problemi di sicurezza segnalati da questo lavoro.

A new browser window opens showing in detail each control and description. You will also be presented with required actions to remediate the issue (highlighted in green color):

Per verificare il report dello stato, puoi fare clic sul link dei risultati della scansione di Kubescape ricevuto dalla notifica di Slack ricevuta. Quindi, fai clic sul pulsante di scansione REPOSITORIES SCAN dal menu di sinistra nel portale cloud di Armo. Ora, fai clic sull’ingresso kubernetes-sample-apps dalla lista:

---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: game-2048
spec:
  replicas: 1
  selector:
    matchLabels:
      app: game-2048
  strategy:
    type: RollingUpdate
  template:
    metadata:
      labels:
        app: game-2048
    spec:
      containers:
        - name: backend
           Successivamente, fai clic sull'ingresso deployment.yaml, e poi premi sull'icona del tool chiave inglese dalla parte superiore destra: 
          image: registry.digitalocean.com/sample-apps/2048-game:latest
          ports:
            - name: http
              containerPort: 8080
          resources:
            requests:
              cpu: 100m
              memory: 50Mi
            limits:
              cpu: 200m
              memory: 100Mi
          securityContext:
            readOnlyRootFilesystem: true
            runAsNonRoot: true
            allowPrivilegeEscalation: false
            capabilities:
              drop:
                - all

Dopo aver raccolto tutte le informazioni dal report di scansione, puoi procedere ed editare il file deployment.yaml dal tuo repository (posizionato nella sottocartella game-2048-example/kustomize/resources). Le correzioni sono già state apportate, devi solo decommentare le ultime righe dal file. Il file deployment.yaml finale dovrebbe apparire come segue:

# Sostituisci i segnaposto `<>` con le informazioni del tuo registro Docker

  • Nota :
    Le suggerimenti C-0055 sono stati omessi in questo esempio per semplicità. Puoi leggere di più sulla modalità di calcolo sicuro in Kubernetes qui.
  • Cosa è cambiato? Sono stati applicati i seguenti aggiornamenti di sicurezza:
  • readOnlyRootFilesystem – esegue l’immagine del contenitore in modalità di sola lettura (non è possibile modificare i file tramite kubectl exec nel contenitore).
  • runAsNonRoot – esegue come utente non root definito dalla direttiva USER nel file Dockerfile del progetto game-2048.

allowPrivilegeEscalation – impostando allowPrivilegeEscalation su false si garantisce che nessun processo figlio di un contenitore possa ottenere più privilegi rispetto al suo genitore.

capabilities.drop – Per rendere i contenitori più sicuri, è necessario fornire loro il minor numero di privilegi necessari per eseguire. Nella pratica, si eliminano per impostazione predefinita tutte le capacità, quindi si aggiungono gradualmente le capacità richieste. Puoi leggere di più sulla sicurezza dei contenitori in questo articolo scritto da Armosec.

A few final checks can be performed as well on the Kubernetes side to verify if the reported issues were fixed:

  1. Infine, effettua il commit delle modifiche per il file deployment.yaml e pusha sul ramo principale. Dopo aver attivato manualmente il flusso di lavoro, questa volta dovrebbe completarsi con successo:
  2. Verifica se il deployment di game-2048 ha un filesystem in sola lettura (immutebile) scrivendo il file index.html dell’applicazione:

Verifica se il contenitore viene eseguito come utente non root (dovrebbe stampare un numero intero diverso da zero – ad esempio, 1000):

kubectl exec -it deployment/game-2048 -n game-2048 -- id -u

Verifica se il contenitore viene eseguito come utente non root (dovrebbe stampare un numero intero diverso da zero – ad esempio, 1000):

Se tutti i controlli passano, hai applicato con successo le raccomandazioni di sicurezza richieste.

Gestione delle eccezioni

Ci sono situazioni in cui non vuoi che il punteggio di rischio finale venga influenzato da alcuni problemi segnalati che il tuo team considera sicuri da ignorare. Kubescape offre una funzionalità integrata per gestire le eccezioni e superare questa situazione.

A more efficient approach is where you integrate vulnerability scan tools directly in your favorite IDE (or Integrated Development Environment). This way, you can detect and fix security issues ahead of time in the software development cycle.

Puoi leggere di più su questa funzionalità qui.

  1. Kubescape per IDE
  2. Kubescape offre supporto per l’integrazione dell’IDE tramite le seguenti estensioni:

estensione Visual Studio Code.

estensione Kubernetes Lens.

I plugin sopra aiutano a rilevare e risolvere i problemi nelle prime fasi dello sviluppo, eliminando così frustrazioni, costi e vulnerabilità di sicurezza nei sistemi di produzione. Inoltre, aiuta a ridurre le iterazioni e lo sforzo umano nel lungo periodo. Come esempio, per ogni problema di sicurezza segnalato dalla tua automazione CI/CD è necessario tornare indietro e risolvere il problema nel codice, eseguire il commit delle modifiche, attendere nuovamente l’automazione CI/CD, quindi ripetere in caso di fallimento.

Puoi leggere ulteriori informazioni su queste funzionalità navigando alla pagina della documentazione di Kubescape, quindi cercando nella sezione INTEGRAZIONI.

on:
  push:
    branches: [ master ]
  pull_request:
    branches: [ master ]

Passaggio 6 – Attivazione automatica del flusso di lavoro CI/CD di Kubescape

Puoi impostare il flusso di lavoro per attivarsi automaticamente su ogni commit o PR contro il ramo principale, decommentando le seguenti righe nella parte superiore del file game-2048-kubescape.yaml:

Dopo aver modificato il file, esegui il commit delle modifiche sul tuo ramo principale e dovresti essere pronto.

Passaggio 7 – Abilitazione delle Notifiche Slack per il Monitoraggio Continuo

L’automazione della scansione delle vulnerabilità che hai implementato finora è un buon punto di partenza ma non perfetto. Perché?

Un problema dell’approccio attuale è che non si sa mai quando vengono segnalati nuovi problemi per le risorse che hai già distribuito nei tuoi ambienti. In altre parole, hai valutato i rischi per la sicurezza e adottato le misure per correggere i problemi in un momento specifico – quando è stata eseguita la tua automazione CI/CD.

Ma cosa succede se nel frattempo vengono segnalati nuovi problemi e la tua applicazione è nuovamente vulnerabile?

La funzione di monitoraggio di Kubescape ti aiuta a gestire le nuove vulnerabilità, che vengono costantemente divulgate. Quando combinata con l’integrazione di Slack, puoi prendere azioni immediate per correggere i problemi appena divulgati che potrebbero influenzare la tua applicazione in un ambiente di produzione.

  1. Il portale cloud di Armo supporta l’integrazione di Slack per l’invio di avvisi in tempo reale dopo ogni scansione del cluster. Questa funzionalità richiede l’installazione del grafico Helm dei componenti cloud di Armo nel tuo cluster DOKS come spiegato in Passaggio 3 – Configurazione delle Scansioni Automatiche di Kubescape per DOKS.
  2. Abilitando gli avvisi di Slack, riceverai notifiche importanti riguardanti le vulnerabilità rilevate nel tuo cluster DOKS, come:
  3. Vulnerabilità dei nodi lavoratori (livello del sistema operativo).

Vulnerabilità dell’immagine del contenitore.

  • Configurazioni errate di Kubernetes per vari tipi di risorse come deployment, pod, ecc.
  • Prima di tutto, è necessario creare un’applicazione Slack. Quindi, è necessario concedere le seguenti autorizzazioni al tuo bot di Slack nella pagina di OAuth & Autorizzazioni:
  • channels:join – Unisciti ai canali pubblici in uno spazio di lavoro.
  • channels:read – Visualizza informazioni di base sui canali pubblici in uno spazio di lavoro.
  • groups:read – Visualizza informazioni di base sui canali privati a cui è stata aggiunta la tua app Slack.
  • chat:write – Invia messaggi come @< Nome della tua app Slack >.

im:read – Visualizza informazioni di base sui messaggi diretti a cui è stata aggiunta la tua app Slack.

mpim:read – Visualizza informazioni di base sui messaggi diretti di gruppo a cui è stata aggiunta la tua app Slack.

Successivamente, vai alla pagina delle impostazioni del tuo account sul portale cloud di Armo (icona ingranaggio in alto a destra). Da lì, seleziona la pagina delle integrazioni, quindi Slack.

Ora, incolla il tuo token di autorizzazione Slack (può essere trovato nella pagina OAuth & Autorizzazioni dalla pagina della tua App Slack) nel campo di input Inserisci Token. Infine, seleziona come essere notificato e il canale Slack dove devono essere inviate le notifiche. Clicca sul pulsante Imposta Notifiche e sei a posto. Nell’immagine sottostante sono illustrate i dettagli:

Dopo aver configurato l’integrazione Slack, dovresti ricevere notifiche periodiche dopo ogni scansione del cluster sul canale designato:

Se ricevi notifiche simili a quelle sopra, hai configurato con successo l’integrazione Slack di Armosec Kubescape.

Conclusione

In questa guida, hai imparato come utilizzare uno degli strumenti di scansione di vulnerabilità Kubernetes più popolari – Kubescape. Hai anche imparato come eseguire la scansione del cluster e del repository (manifesti YAML) utilizzando la CLI di Kubescape. Poi, hai imparato come integrare lo strumento di scansione delle vulnerabilità in un pipeline CI/CD tradizionale implementato utilizzando i flussi di lavoro di GitHub.

Infine, hai imparato come investigare i report di scansione delle vulnerabilità, applicare correzioni per rimediare alla situazione e ridurre il punteggio di rischio al minimo tramite un esempio pratico – l’applicazione game-2048 dal repository kubernetes-sample-apps.

Source:
https://www.digitalocean.com/community/developer-center/using-the-kubescape-vulnerability-scan-tool