Plug-in Code Risk Analyzer per IBM Cloud

Code Risk Analyzer verrà dismesso in tutte le regioni il 12 febbraio 2027. Tuttavia, se una regione non ha un utilizzo attivo di Code Risk Analyzer, il servizio in quella regione può essere interrotto prima. Ulteriori informazioni

L'interfaccia della riga di comando (CLI) di IBM Cloud® fornisce comandi per l'analisi dei rischi del codice. È possibile utilizzare la CLI IBM Cloud per analizzare il codice alla ricerca di vulnerabilità e verificare la conformità con determinate regole. Code Risk Analyzer è disponibile in tutte le regioni di IBM Cloud in cui sono supportate le toolchain.

Utilizzare la CLI per completare le seguenti operazioni:

  • Generare una distinta base (BOM) che elenchi le dipendenze e le informazioni sulle licenze disponibili di tutti i pacchetti OS e applicativi di terze parti. È possibile generare questo output anche nel formato CycloneDX-specific.
  • Scoprire le vulnerabilità nei pacchetti elencati nella distinta base. È inoltre possibile visualizzare il rapporto generato in formato CycloneDX-specific o utilizzare la riparazione automatica delle vulnerabilità per le applicazioni Node.js, Maven o Gradle (Groovy).
  • Analizzare i file di Kubernetes per verificare la conformità a determinate regole.

A partire da gennaio 2024, Code Risk Analyzer utilizzerà i dati sulle vulnerabilità forniti dal progetto open source Clair anziché quelli della società commerciale Snyk Limited. Non è richiesta alcuna azione specifica da parte vostra in seguito a questa modifica. Tuttavia, è possibile osservare alcune differenze nei particolari dei CVE segnalati da Code Risk Analyzer.

Contenuti supportati

Code Risk Analyzer supporta i linguaggi Java™, Node.js, Python e Go. La tabella seguente elenca e descrive i contenuti supportati da Code Risk Analyzer.

Contenuti supportati
Contenuti Descrizione
Java Il repo richiede Maven o Gradle per l'automazione della compilazione. Maven usa il file pom.xml per calcolare le dipendenze e Gradle usa il file build.gradle(.kts). Code Risk Analyzer può automatizzare la correzione sia per Maven che per Gradle (Groovy).
Node.js package-lock.json calcola le dipendenze. Per Node.js, Code Risk analyzer può anche automatizzare la correzione. Assicurarsi che la versione di npm installata corrisponda alla versione di npm del progetto.
Python Le dipendenze sono calcolate utilizzando i file requirements.txt e pyproject.toml.
Golang Supporta la gestione delle dipendenze di go mod e go dep. Per go mod, il file go.sum deve essere presente nel repo. Per go dep, il file Gopkg.lock deve essere presente nel repo.
File Docker Vengono considerati i file con lo schema Dockerfile nel repo. Per le immagini dei contenitori, sono supportate le distro Debian, Red Hat Enterprise Linux®, Alpine, e Ubuntu Linux.
Kubernetes Vengono considerati i file con i suffissi .yaml e .yml. Il valore kind deve essere impostato su Pod, ReplicaSet, ReplicationController, Deployment, Daemonset, Statefulset, Job, CronJob, NetworkPolicy, o Ingress.
Calico Vengono considerati i file con i suffissi .yaml e .yml. Il valore kind deve essere impostato su NetworkPolicy, GlobalNetworkPolicy, Profile, NetworkSet, GlobalNetworkSet, o HostEndpoint.
Terraform Il file di piano di Terraform deve essere generato utilizzando IBM Cloud come provider di Terraform.

Code Risk Analyzer esamina il codice sorgente e le dipendenze delle immagini nei vostri repository alla ricerca di vulnerabilità. La tabella seguente mostra le fonti di informazioni sulle vulnerabilità che Code Risk Analyzer consulta per i diversi tipi di dipendenze.

Dipendenze supportate che Code Risk Analyzer controlla per le vulnerabilità
Dipendenza Versioni supportate Origine delle informazioni particolari di sicurezza
Alpine immagine Tutte le versioni stabili con supporto di sicurezza del fornitore. SecDBAlpine database.
Debian immagine Tutte le versioni stabili con supporto di sicurezza del fornitore.

I CVE sui pacchetti binari associati al pacchetto sorgente Debian linux, come linux-libc-dev, non vengono segnalati. La maggior parte di questi pacchetti binari sono moduli del kernel e del kernel, che non vengono eseguiti nelle immagini del contenitore.

Debian Tracciamento dei bug di sicurezza.
GoogleContainerTools immagine senza distro Tutte le versioni stabili con supporto di sicurezza del fornitore. GoogleContainerTools senza distro
Red Hat® Enterprise Linux® (RHEL) immagine RHEL 6, RHEL/UBI 7, RHEL/UBI 8 e RHEL/UBI 9 Red Hat API dei dati di sicurezza.
Ubuntu immagine Tutte le versioni stabili con supporto di sicurezza del fornitore. Ubuntu CVE Tracker.
Go, npm ( JavaScript ), Maven ( Java ), PyPI ( Python ), RubyGems ( Ruby ), e Packagist (PHP) Tutte le versioni stabili con supporto di sicurezza del fornitore. Database delle vulnerabilità open source.

Problemi noti con Code Risk Analyzer

Code Risk Analyzer non è in grado di scoprire le vulnerabilità dei pacchetti applicativi che non utilizzano uno schema di versioning, come major.minor.patch. Ad esempio, non sono supportate le versioni pre-release o quelle che contengono metadati di compilazione.

Prerequisiti

  • Installa la CLI IBM Cloud. Per istruzioni, vedere Download di IBM Cloud CLI.

  • Installare il plug-in Code Risk Analyzer CLI eseguendo il seguente comando:

ibmcloud plugin install cra
  • Assicurarsi di poter accedere a una catena di strumenti in una delle regioni supportate. Non è necessario che la toolchain abbia degli strumenti. Per ulteriori informazioni sulle toolchain, vedi Creazione di una toolchain da un'applicazione.

  • Specificare l'ID della catena di strumenti impostando la variabile d'ambiente TOOLCHAIN_ID:

export TOOLCHAIN_ID=e22195a5-11e3-44ba-9533-e7c18a3a61a7
  • Accedere a una regione specifica di IBM Cloud eseguendo il seguente comando, dove [region] è la regione in cui è stata creata la catena di strumenti.
ibmcloud login -r [region]
  • Opzionalmente, per migliorare il controllo e la sicurezza dei dati quando si utilizza la CLI, è possibile utilizzare percorsi privati per gli endpoint di IBM Cloud. Per prima cosa è necessario abilitare il routing e l'inoltro virtuale nel proprio account, quindi è possibile abilitare l'uso degli endpoint del servizio privato IBM Cloud. Per ulteriori informazioni sull'impostazione dell'account per supportare l'opzione di connettività privata, vedere Abilitazione di VRF ed endpoint di servizio.

Usare il seguente comando per accedere a un endpoint privato, dove [region] è la regione in cui è stata creata la catena di strumenti.

ibmcloud login -a private.cloud.ibm.com -r [region]

Comandi di utilizzo della CLI

Si ricevono notifiche sulla riga di comando quando sono disponibili aggiornamenti della CLI di IBM Cloud e dei plug-in. Assicuratevi di mantenere aggiornata la vostra CLI per poter utilizzare i comandi più recenti. È possibile visualizzare la versione corrente di tutti i plug-in installati eseguendo il comando ibmcloud plugin list.

Guida all'analizzatore di rischio del codice

Il comando seguente visualizza l'elenco dei comandi di Code Risk Analyzer:

ibmcloud cra --help

Guida al comando Code Risk Analyzer

Il seguente comando visualizza i dettagli dei flag utilizzati con un comando. Utilizzare ibmcloud cra --help per visualizzare i comandi disponibili.

ibmcloud cra <command> --help

Distinta base (BOM)

Il comando bom-generate accede agli artefatti nel percorso della directory specificata ed esegue una ricerca approfondita per identificare tutte le dipendenze, comprese quelle transitive. Il comando identifica anche le licenze con cui queste dipendenze sono distribuite. Viene creata una distinta base che cattura un'istantanea di tutte le dipendenze. È possibile generare la distinta base nel formato standard o nel formato SBOM di CycloneDX's.

ibmcloud cra bom-generate

Requisiti del comando della distinta base

Il comando bom-generate dipende da alcuni comandi esterni:

  • Se il percorso contiene file Docker, questo comando estrae le immagini di base e le immagini di compilazione per ogni fase di compilazione in ogni file Docker. In questo scenario, il comando bom-generate richiede che siano disponibili i comandi Docker cli e tar.
  • Se il percorso contiene file Maven, questo comando usa mvn per costruire un elenco di dipendenze. In questo scenario, il comando bom-generate richiede che il comando mvn sia disponibile.
  • Se il percorso contiene i file Gradle, questo comando usa gradle per costruire un elenco di dipendenze. In questo scenario, il comando bom-generate richiede che il comando gradle sia disponibile.
  • Se il percorso contiene i file Node.js package-json e questo comando viene usato per generare un file package-lock.json corrispondente, il comando bom-generate utilizza npm per costruire il file package-lock.json. In questo scenario, il comando richiede che sia disponibile il comando npm.
  • Se il percorso contiene i file Python requirements.txt o pyproject.toml, il comando utilizza pip per generare le dipendenze del pacchetto. In questo scenario, il comando bom-generate richiede che il comando pip sia disponibile. Sono supportate sia la versione 2 di Python che la versione 3 di Python.

Se si usa Dockerfiles, assicurarsi di accedere al registro dei container da cui estrarre le immagini di base.

Se il file Docker richiede ARGS, impostare un singolo ARG come variabile d'ambiente prima di eseguire il comando. Ad esempio, se il file Docker utilizza un ARG IAM_USER, esportare una variabile d'ambiente denominata IAM_USER: export IAM_USER='value'. La CLI passa automaticamente queste variabili d'ambiente al comando docker build.

È anche possibile specificare esplicitamente il flag DOCKERBUILDFLAGS. Per esportare DOCKERBUILDFLAGS con il flag ARGS Docker, digitate il seguente comando:

export DOCKERBUILDFLAGS="--build-arg IAM_USER --build-arg API_KEY"

Opzioni del comando BOM

La tabella seguente elenca le opzioni di comando che si possono utilizzare per generare una distinta base con il comando bom-generate.

Opzioni di comando per la generazione di una distinta base
Opzioni comando Obbligatorio o facoltativo Descrizione
--path Obbligatorio Il percorso della directory del progetto da analizzare.
-r, --report Obbligatorio Il nome del file in cui memorizzare il report della distinta base.
-a, --asset-type Facoltativo I controlli di sicurezza da eseguire (applicazioni, immagine, os, tutti). Per impostazione predefinita, questa opzione è impostata su all. L'opzione apps viene usata per limitare la ricerca ai pacchetti applicativi. L'opzione image è usata per limitare la ricerca alle immagini di base utilizzate nei file Docker. L'opzione os è usata per limitare la scoperta alle sole fasi di costruzione nei file Docker. È possibile specificare più valori utilizzando una virgola per delimitare i valori, come ad esempio -a os,image,apps.
-p, --prev-report Facoltativo Utilizzare il report della distinta base precedente per velocizzare il comando. Ad esempio, se un file Docker non è stato aggiornato dall'ultimo rapporto generato, il comando salta il rilevamento dei pacchetti da quel file Docker. Lo stesso scenario si applica ad altri file manifest, come il file package-lock.json.
-c, --dockerbuildcontext Facoltativo Se specificato, CRA utilizza la directory nel parametro percorso come contesto di compilazione Docker durante la scansione della fase di compilazione.
-o, --output Facoltativo Selezionare il formato della distinta base. È possibile generare l'output del formato in formato Standard BOM (standard) o in formato CycloneDX's SBOM (cyclonedx). Il valore predefinito è standard. È possibile memorizzare entrambi i formati inserendo ciascun formato separato da una virgola senza spazi.
-f, --dockerbuildflags Facoltativo Personalizzare il comando Docker build per la scansione dello stadio di compilazione. Invece di usare questo flag da riga di comando, si può specificare il valore in una variabile d'ambiente chiamata DOCKERBUILDFLAGS. Per impostazione predefinita, questa opzione di comando è impostata su ''. Se si utilizza questa opzione, assicurarsi che sia l'ultimo flag fornito al comando.
-d, --dockerfilepattern Facoltativo Lo schema per identificare il file Docker nel repo.
-g, --gradle.excludeconfigurations Facoltativo Escludere le configurazioni di Gradle, ad esempio: runtimeClasspath,testCompileClasspath. Per impostazione predefinita, questa opzione di comando è impostata su ''.
-l, --gradleprops Facoltativo Personalizzare il comando Gradle con le proprietà per la scansione delle dipendenze di Gradle.
-m, --maven.excludescopes Facoltativo Escludere gli ambiti di Maven, ad esempio: test,compile. Esempio: 'test,compile'. Per impostazione predefinita, questa opzione di comando è impostata su ''.
-n, --nodejs.createpackagelock Facoltativo Abilita l'attività di creazione del file package-lock.json per i progetti node.js.
--region Facoltativo La regione ibmcloud in cui si trova la catena di strumenti.
--toolchainid Facoltativo L'ID della catena di strumenti di destinazione da utilizzare.
-v, --verbose Facoltativo Abilita i messaggi di log verbosi.

Ignorare i file

Se il percorso contiene il file .cra/.fileignore, i file specificati nel file .fileignore non vengono analizzati per le dipendenze. Il file .fileignore deve seguire le regole dei file .gitignore. Simile al file .gitignore, il file .fileignore può includere commenti, directory da ignorare, file da ignorare e altri schemi.

Il seguente esempio di file .fileignore mostra come escludere gli script bash, i node_modules e il Dockerfile.

# Ignore nested functional_tests directory
**/functional_tests

# Ignore bash scripts
**/*.sh

# This should allow this one file
!test/gatling_tests/loginTobx.sh

# Ignore node_modules
node_modules

# Exclude the dockerfile from scanning
Dockerfile

Impostazione di contesti di costruzione multipli Docker

Quando si lavora con più file Docker all'interno di un singolo progetto, si potrebbe voler definire contesti di compilazione separati per ogni file Docker. Questo si può ottenere usando un file .cra/.dockerbuildcontext, che è un file JSON che mappa i percorsi dei file Docker con i corrispondenti contesti di compilazione.

Se nella cartella del progetto esiste un file .cra/.dockerbuildcontext, i comandi di compilazione di CRA Docker useranno i percorsi specificati in questo file come contesti di compilazione per i file Docker associati. Le chiavi dell'oggetto JSON rappresentano i percorsi relativi ai file Docker, mentre i valori specificano i percorsi relativi ai rispettivi contesti di compilazione.

Ecco un esempio di file .dockerbuildcontext che definisce contesti di compilazione diversi per più file Docker:

{
  "Dockerfile": "./",
  "path/to/different/Dockerfile": "./another/Path"
}

Esempio

I seguenti frammenti di codice mostrano come utilizzare il comando bom-generate:

ibmcloud cra bom-generate --path PATH --report REPORT [--asset-type ASSET-TYPE] [--dockerbuildcontext] [--dockerbuildflags DOCKERBUILDFLAGS] [--dockerfilepattern DOCKERFILEPATTERN] [--gradle.excludeconfigurations GRADLE.EXCLUDECONFIGURATIONS] [--maven.excludescopes MAVEN.EXCLUDESCOPES] [--nodejs.createpackagelock] [--prev-report PREV-REPORT] [--region REGION] [--toolchainid TOOLCHAINID] [--verbose]
ibmcloud cra bom --path . --report bomreport.json

Scansione delle vulnerabilità

Il comando vulnerability-scan riceve in ingresso una distinta base nel formato standard e rileva le vulnerabilità nei pacchetti delle applicazioni e nei pacchetti del sistema operativo elencati nella distinta base. Sulla base delle informazioni sulle minacce raccolte da più fonti di vulnerabilità ed esposizioni comuni (CVE), vengono fornite raccomandazioni di correzione mirate. Code Risk Analyzer può anche eseguire la riparazione automatica dei pacchetti vulnerabili solo per le applicazioni basate su Node.js. È possibile generare questo rapporto anche nel formato standard o nel formato VEX (Vulnerability Exploitability Exchange) di CycloneDX's.

ibmcloud cra vulnerability-scan

Opzioni del comando di scansione delle vulnerabilità

La tabella seguente elenca le opzioni per l'utilizzo del comando vulnerability-scan.

Opzioni di comando per l'esecuzione di una scansione delle vulnerabilità
Opzioni comando Obbligatorio o facoltativo Descrizione
-b, --bom Obbligatorio Il percorso del file della distinta base generata con il comando bom-generate. La distinta base deve essere in formato standard.
-a, --autofix Facoltativo Risolve tipi specifici di vulnerabilità delle app. Questa opzione è disponibile solo per le applicazioni Node.js, Maven e Gradle.
-f, --commentfile Facoltativo Specifica il file in cui viene creato il rapporto markdown. Questo comando è disponibile solo con autofix.
-c, --cveignore Facoltativo Il percorso del file CVE Ignore che contiene l'elenco dei CVE da ignorare.
-e, --excludedev Facoltativo Specifica che non si desidera che il comando riporti le CVE per le dipendenze di sviluppo.
--force Facoltativo Forza l'aggiornamento dei pacchetti dei nodi di primo livello, anche se la versione principale è diversa. Questo comando è disponibile solo con autofix.
--include-nofix Facoltativo Includere o escludere la segnalazione di CVE che non hanno rimedi noti. Per impostazione predefinita, questa opzione è impostata su app. L'opzione app è usata per includere solo i CVE dei pacchetti di applicazioni senza correzioni. L'opzione os è usata per includere solo i CVE dei pacchetti OS senza correzioni. L'opzione all viene utilizzata per includere i CVE dei pacchetti di applicazioni e di sistemi operativi senza correzioni. L'opzione none viene utilizzata per escludere i CVE dei pacchetti di applicazioni e di sistemi operativi senza correzioni.
--path Richiesto se --autofix è abilitato Il percorso della directory del progetto da analizzare. Questo comando è disponibile solo con autofix.
--region Facoltativo La regione ibmcloud per la catena di strumenti.
-r, --report Facoltativo Il percorso del report generato.
-o, --output Facoltativo Seleziona il formato del rapporto CVE. È possibile generare l'output del formato in formato Standard CVE (standard) o in formato CycloneDX's VEX (cyclonedx). Il valore predefinito è standard.
-s, --strict Facoltativo Quando vengono trovate delle vulnerabilità, il comando fallisce (stato di uscita 2).
--toolchainid Facoltativo L'ID della catena di strumenti di destinazione.

Ignorare le vulnerabilità

Se viene specificato il parametro -c o --cveignore, il comando cerca quel file e non riporta le CVE specificate nel file. È possibile configurare i CVE in modo da ometterli a tempo indeterminato fino a quando non sarà disponibile un rimedio o fino a una data di scadenza specificata.

L'esempio seguente mostra uno schema JSON per il file .cveignore:

[
    {
        "cve": "string",
	    "alwaysOmit": "bool",
	    "untilRemediationAvailable": "bool",
	    "expiration": "string"
    }
]

Per ogni voce del file .cveignore sono supportate le seguenti proprietà:

  • cve- La vulnerabilità da omettere. Il valore di questa proprietà è un ID CVE.
  • alwaysOmit- Se questa proprietà è impostata su true, la vulnerabilità viene omessa finché non viene modificata. Questa proprietà ha la precedenza sui valori delle altre proprietà.
  • untilRemediationAvailable- Se questa proprietà è impostata su true, la vulnerabilità viene omessa finché non è disponibile un percorso di correzione. Se è disponibile un rimedio, la vulnerabilità non viene omessa e viene visualizzato un messaggio. Questa proprietà ha la precedenza sul valore della proprietà di scadenza.
  • expiration- Se questa proprietà è impostata su true e la data di scadenza non è stata raggiunta, la vulnerabilità viene omessa. Se la data di scadenza viene raggiunta, la vulnerabilità non viene omessa e viene visualizzato un messaggio. Per definire questa proprietà, utilizzare il formato orario RFC3339 (yyyy-MM-ddTHH:mm:ss[+-]Z).

Il Code Risk Analyzer utilizza solo queste proprietà definite. È possibile aggiungere proprietà senza alcun effetto sulle funzioni. Se una vulnerabilità definita in .cveignore non viene omessa, viene generato un log che ne spiega il motivo. Se una vulnerabilità definita nel file .cveignore viene omessa, non viene visualizzata alcuna registrazione individuale. Il numero di omissioni e l'elenco degli ID delle vulnerabilità, con il nome del pacchetto, che sono stati omessi, vengono registrati al termine di un report.

Il seguente frammento di codice mostra un esempio di file .cveignore:

[
    {
        "cve": "CVE-2021-27290",
        "alwaysOmit": true
    },
    {
        "cve": "CVE-2020-8244",
        "untilRemediationAvailable": true,
    }
]

Esempio

I seguenti frammenti di codice mostrano come utilizzare il comando vulnerability-scan:

ibmcloud cra vulnerability-scan --bom BOM [--cveignore CVEIGNORE] [--report REPORT] [--excludedev] [--include-nofix app,os,all,none] [--region REGION] [--strict] [--toolchainid TOOLCHAINID] [--output OUTPUTFILE]
ibmcloud cra cve --bom ./bom-file.json --cveignore ./cveignore-example.json --report ./output-vulnerability-report.json --excludedev --include-nofix all --strict

Distribuzione

Il comando deployment-analyze esegue controlli di configurazione sui manifesti di distribuzione Kubernetes.

ibmcloud cra deployment-analyze

Questo comando fornisce una guida prescrittiva per stabilire una postura di configurazione sicura per i contenitori Docker. Il Code Risk Analyzer utilizza queste configurazioni di sicurezza come punto di riferimento e identifica i controlli di sicurezza da verificare negli artefatti di distribuzione, come i file .yaml, per le applicazioni Kubernetes. Questo comando fornisce anche una valutazione del rischio per ogni guasto del controllo.

La tabella seguente elenca i controlli che è possibile implementare all'interno di DevSecOps,, come individuati da CIS Docker 1.13.0. Vengono aggiunti altri controlli basati su riferimenti open source del Kubernetes Common Configuration Scoring System(KCCSS).

Controlli di sicurezza
ID Regola Rischio
5.3 Assicurarsi che i contenitori non abbiano la capacità di CAP_SYS_ADMIN. Alto
5.3 Assicurarsi che i contenitori non abbiano la capacità di CAP_NET_RAW. Alto
5.4 Assicurarsi che non vengano utilizzati contenitori privilegiati. Alto
5.5 Assicurarsi che le directory sensibili del sistema host non siano montate sui container. Medio
5.7 Assicurarsi che le porte privilegiate non siano mappate all'interno dei container. Basso
5.9 Assicurarsi che lo spazio dei nomi di rete dell'host non sia condiviso. Medio
5.10 Assicurarsi che l'uso della memoria per il contenitore sia limitato. Medio
5.11 Assicurarsi che sul contenitore sia impostata la priorità della CPU appropriata. Medio
5.12 Assicurarsi che il file system principale del contenitore sia montato in sola lettura. Medio
5.15 Assicurarsi che lo spazio dei nomi dei processi dell'host non sia condiviso. Medio
5.16 Assicurarsi che lo spazio dei nomi IPC dell'host non sia condiviso. Medio
5.31 Assicurarsi che la presa Docker non sia montata all'interno di contenitori. Alto
Assicurarsi che i contenitori non consentano l'allocazione non sicura delle risorse della CPU. Medio
Assicurarsi che i contenitori non consentano l'escalation dei privilegi. Medio
Assicurarsi che i contenitori non espongano parti non sicure di /proc. Medio
Assicurarsi che i container non siano esposti attraverso una porta host condivisa. Medio

Opzioni del comando di distribuzione

La tabella seguente elenca le opzioni di comando che si possono utilizzare per il comando deployment-analyze.

Opzioni di comando per l'analisi della distribuzione.
Opzioni comando Obbligatorio o facoltativo Descrizione
--path Obbligatorio Il percorso della directory del progetto da analizzare.
-r, --report Obbligatorio Il nome del file in cui creare il report.
-f, --fileignore Facoltativo Il percorso del file .fileignore.
-s, --strict Facoltativo I risultati del comando fallito (stato di uscita 2) quando vengono rilevati rischi di distribuzione.

Esempio

I seguenti frammenti di codice mostrano come utilizzare il comando deployment-analyze:

ibmcloud cra deployment-analyze --path PATH --report REPORT [--fileignore FILE_IGNORE] [--strict]
ibmcloud cra depl --path ./sampleDir --report deployment-report.json --strict

NetworkPolicy analisi

Si tratta di una funzione beta disponibile a scopo di valutazione e di test.

Il comando netpol-analyze esegue controlli di configurazione sui manifesti Kubernetes e Calico NetworkPolicy.

ibmcloud cra netpol-analyze

Questo comando verifica la configurazione della connettività di un'applicazione Kubernetes rispetto al controllo NIST SP 800-53 SC-7(5 ). Verifica che la connettività di ogni carico di lavoro sia controllata da almeno una risorsa NetworkPolicy e che le porte non sicure siano bloccate sia in ingresso che in uscita.

Il comando netpol-analyze può anche fornire un rapporto di connettività per l'applicazione analizzata, mostrando tutte le connessioni consentite tra i carichi di lavoro dell'applicazione. È possibile utilizzare questo report come prova di conformità o per aiutare a risolvere i problemi di connettività. Si può anche usare questo comando per fornire i risultati di lint per le politiche di rete analizzate e poi usare questi risultati per migliorare l'efficienza e la leggibilità delle politiche di rete. In alcuni casi, i risultati di lint possono anche indicare un errore nelle definizioni dei criteri di rete.

NetworkPolicy opzioni del comando di analisi

La tabella seguente elenca le opzioni di comando che si possono utilizzare per il comando netpol-analyze.

Opzioni di comando per l'analisi dei criteri di rete
Opzioni comando Obbligatorio o facoltativo Descrizione
--path Obbligatorio Il percorso della directory del progetto da analizzare.
-r, --report Obbligatorio Il nome del file in cui creare il rapporto di conformità.
-c, --connectivity Facoltativo Il nome del file in cui creare il rapporto di connettività.
-l, --lint Facoltativo Il nome del file in cui creare il rapporto di lint.
-s, --strict Facoltativo Se si riscontrano rischi di connettività, il comando fallisce (stato di uscita 2).

Esempio

I seguenti esempi di codice mostrano come utilizzare il comando netpol-analyze:

ibmcloud cra netpol-analyze --path PATH --report REPORT [--connectivity CONNFILE] [--lint LINTFILE] [--strict]
ibmcloud cra np --path ./sampleDir --report netpol-report.json --strict

Immagine dell'analizzatore di rete

Il comando netpol-analyze viene eseguito come parte di IBM 's Network Config Analyzer(NCA). Poiché questo comando esegue NCA come immagine di Docker, è necessario installare Docker sul computer.

L'immagine URL per il Network Policy Analyzer è icr.io/continuous-delivery/cra/nca.

Se l'immagine dell'analizzatore non è già presente nel registro locale, il comando netpol-analyze estrae l'immagine più recente dell'analizzatore (comprese le correzioni per eventuali vulnerabilità) dal sito globale IBM Cloud® Container Registry.

Utilizzo di Code Risk Analyzer nelle pipeline Tekton

È possibile utilizzare il task task-cra nelle pipeline Tekton. Utilizza la definizione della pipeline Tekton quando crei una richiesta pull, un trigger manuale o emetti un commit. È anche possibile creare i propri task Tekton ed eseguire il Code Risk Analyzer da questi task.

Utilizzo di Code Risk Analyzer in DevSecOps

È possibile utilizzare Code Risk Analyzer in DevSecOps. La tabella seguente elenca e descrive i parametri di Code Risk Analyzer supportati per DevSecOps.

Per ulteriori informazioni sui comandi di utilità dipendenti richiesti dall'immagine della pipeline per eseguire il comando bom-generate, vedere Requisiti della distinta base. Se mancano dei comandi, si può usare il parametro cra-custom-script-path per fare riferimento a uno script che li installi.

DevSecOps Parametri basati su Code Risk Analyzer
Nome Immettere Descrizione Obbligatorio o facoltativo
artifactory-dockerconfigjson SEGRETO Il file base64-encoded Docker config.json memorizza le informazioni sulle credenziali per Artifactory. Facoltativo
immagine di base-autenticazione-utente text Le credenziali per l'immagine di base del file Docker dell'applicazione che è richiesto dalla scansione di Code Risk Analyzer. Facoltativo
immagine-base-autenticazione-e-mail text Le credenziali per l'immagine di base del file Docker dell'applicazione che è richiesto dalla scansione di Code Risk Analyzer. Facoltativo
immagine di base-autenticazione-host text Le credenziali per l'immagine di base del file Docker dell'applicazione che è richiesto dalla scansione di Code Risk Analyzer. Facoltativo
immagine-base-autenticazione-password SEGRETO Le credenziali per l'immagine di base del file Docker dell'applicazione che è richiesto dalla scansione di Code Risk Analyzer. Facoltativo
cra-cveignore-percorso text Il percorso del file cveignore, relativo alla radice del repo dell'applicazione. Il percorso predefinito dei file è .cra/.cveignore. Facoltativo
cra-percorso dello script personalizzato text Il percorso di uno script personalizzato che viene eseguito prima della scansione di Code Risk Analyzer. Questo script è stato creato per fornire l'opzione di impostare le variabili di ENV nel contesto dello strumento Code Risk Analyzer BOM. Facoltativo
cra-docker-buildflags text Il comando di compilazione personalizzato Docker per la scansione dello stadio di compilazione. Questo parametro è vuoto per impostazione predefinita. Facoltativo
cra-docker-build-contesto text Se specificato, Code Risk Analyzer usa la directory nel parametro path come contesto di compilazione di Docker. Facoltativo
cra-escludi-dipendenze-di-sviluppo text Specifica se escludere le dipendenze dev dalla scansione (true o false). Il valore predefinito è false. Facoltativo
cra-gradle-escludi-configurazioni text Specifica le configurazioni di Gradle da cui escludere le dipendenze nella scansione. Ad esempio, runtimeClasspath,testCompileClasspath. Questo parametro è vuoto per impostazione predefinita. Facoltativo
cra-maven-escludi-ambiti text Specifica da quali ambiti Maven escludere le dipendenze durante la scansione. Ad esempio, test,compile. Questo parametro è vuoto per impostazione predefinita. Facoltativo
cra-nodejs-creare-pacchetto-blocco text Abilita la scoperta di Code Risk Analyzer per costruire il file package-lock.json per i repository node.js. Questo parametro è impostato di default su false. Facoltativo
chiave-api-ibmcloud SEGRETO La chiave API di IBM Cloud® che interagisce con lo strumento CLI di ibmcloud. Obbligatorio
pipeline-dockerconfigjson SEGRETO Il file base64-encoded Docker config.json che estrae le immagini da un registro privato. Facoltativo
onepipeline-dockerconfigjson SEGRETO Obsoleto. Il file base64-encoded Docker config.json che estrae le immagini da un registro privato. Facoltativo
debug-pipeline selezionare L'interruttore della modalità di debug della pipeline. Facoltativo
opt-in-cra-correzione automatica text Consente a Code Risk Analyzer di eseguire il comando cra auto remediation (true o false). Il valore predefinito è false. Questo comando è supportato solo nella pipeline di conformità continua. Facoltativo
opt-in-cra-auto-remediation-enabled-repos text Specifica l'elenco dei nomi dei depositi separati da virgole da abilitare per il comando cra auto remediation. Questo parametro viene considerato solo se opt-in-cra-auto-remediation è impostato su true ed è supportato solo nella pipeline di conformità continua. Facoltativo
opt-in-cra-auto-remediation-force text Forza il comando cra auto remediation ad aggiornare i pacchetti anche se la versione principale è diversa dalla versione del pacchetto vulnerabile corrente (true o false). Questo parametro viene considerato solo se opt-in-cra-auto-remediation è impostato su true ed è supportato solo nella pipeline di conformità continua. Facoltativo

Esempi di script personalizzati per DevSecOps

Se il vostro file Docker richiede ARGS, potete usare il parametro cra-custom-script-path per impostare un singolo ARG come variabile d'ambiente prima di eseguire il comando. Il percorso dello script personalizzato è il percorso di uno script che risiede nel progetto dell'utente. Ad esempio, se il file Docker utilizza IAM_USER ARG, esportare una variabile d'ambiente all'interno dello script denominata IAM_USER: export IAM_USER='value'. Se l'ARG richiesto dal file Docker è impostato come proprietà dell'ambiente all'interno della toolchain, si può usare get_env per ottenere il valore. In questo caso, è possibile esportare una variabile d'ambiente all'interno dello script IAM_USER: export IAM_USER=$(get_env iam_user_environment_property_name). Il task run-cra acquisisce automaticamente queste variabili d'ambiente e le passa ai comandi di compilazione di Docker.

L'esempio seguente mostra come utilizzare la variabile cra-custom-script per esportare la variabile ENV:

#!/usr/bin/env bash

if [[ "${PIPELINE_DEBUG:-0}" == 1 ]]; then
    trap env EXIT
    env | sort
    set -x
fi

export IAM_USER=$(get_env iam_user_environment_property_name)

È inoltre possibile utilizzare il parametro cra-custom-script-path per scenari in cui le versioni dello strumento immagine di base DevSecOps potrebbero essere obsolete, in base al progetto. Ad esempio, è possibile aggiornare comandi come pip/pip3 per scoprire i pacchetti Python che richiedono una versione successiva di pip.

L'esempio seguente mostra come utilizzare cra-custom-script per aggiornare la versione di pip:

#!/usr/bin/env bash

if [[ "${PIPELINE_DEBUG:-0}" == 1 ]]; then
    trap env EXIT
    env | sort
    set -x
fi

python3 -m pip install --upgrade pip

Se il file Docker utilizza un'immagine da un registro privato Docker, è possibile usare il parametro cra-custom-script-path per autenticarsi a un registro privato Docker prima di eseguire Code Risk Analyzer e consentire a Code Risk Analyzer di prelevare l'immagine per la scansione.

L'esempio seguente mostra come utilizzare cra-custom-script per autenticarsi al registro del contenitore ibmcloud:

#!/usr/bin/env bash

if [[ "${PIPELINE_DEBUG:-0}" == 1 ]]; then
    trap env EXIT
    env | sort
    set -x
fi

ibmcloud cr login

Debug dell'analizzatore di rischio del codice in DevSecOps

Per facilitare il debug, è possibile eseguire il Code Risk Analyzer localmente come interfaccia a riga di comando (CLI) sul proprio computer locale. Per informazioni sull'esecuzione del comando ibmcloud cra bom-generate per generare una distinta base, vedere Distinta base(BOM). Dopo aver generato la distinta base, utilizzare il comando ibmcloud cra cve per elencare eventuali vulnerabilità. Per ulteriori informazioni sull'esecuzione del comando ibmcloud cra cve, vedere Scansione delle vulnerabilità.

Assicurarsi che il task run-cra non contenga errori. Se il task contiene errori, verificare se la pipeline utilizza la versione corrente di DevSecOps. Se il problema non si risolve controllando la versione di DevSecOps,, gli esempi seguenti forniscono alcuni errori comuni e le soluzioni proposte.

FAILED
Error executing docker pull cmd: [docker pull us.icr.io/opentoolchain/ibmnode:14ubisecure]

È possibile verificare l'accesso al registro privato. Se non si dispone dell'accesso, è possibile utilizzare il parametro cra-custom-script-path e specificare il percorso di uno script personalizzato che viene eseguito prima che Code Risk Analyzer si autentichi al registro privato.

FAILED
Error executing docker build cmd for stage-0: exit status 1

Se il file Docker richiede ARGS, il comando docker build per le fasi di compilazione fallisce a causa della mancanza di ARGS. Il sito cra-custom-script-path è necessario per impostare gli ARGS come variabili d'ambiente. Per ulteriori informazioni sull'impostazione dello script personalizzato, vedere Esempi di script personalizzati per DevSecOps.

FAILED
Error executing docker build cmd for stage-0: exit status 1
...
COPY file-to-copy.js file-to-copy.js:
------
failed to compute cache key: "/file-to-copy.js" not found: not found

Per impostazione predefinita, il comando Code Risk Analyzer bom-generate costruisce i file Docker dal contesto della posizione del file Docker stesso. Se si desidera costruire i file Docker dal contesto della directory principale del progetto, usare il parametro cra-docker-build-context per consentire a Code Risk Analyzer di costruire i file Docker da questo contesto.

Rimozione dei dati memorizzati di Code Risk Analyzer

Il plug-in Code Risk Analyzer non memorizza alcun dato del cliente nei suoi database. Tuttavia, le versioni precedenti di Code Risk Analyzer Tekton memorizzavano in modo sicuro i risultati delle scansioni delle vulnerabilità nel suo database.

Per richiedere la rimozione dei dati dei clienti eventualmente memorizzati nel Code Risk Analyzer, contattare l 'assistenza IBM.

FAQ

Ottenete le risposte alle domande più frequenti sull'uso di Code Risk Analyzer CLI.

Come si può determinare il motivo del fallimento della CLI?

Prima di chiamare la CLI di Code Risk Analyzer, impostare la variabile d'ambiente IBMCLOUD_TRACE su true per attivare il log di debug.

export IBMCLOUD_TRACE=true

Osservare le chiamate API e le risposte visualizzate nel log per determinare il motivo esatto del fallimento.

Come si può eseguire il debug di un comando BOM che non riesce a estrarre un'immagine di base da un registro privato.

Assicurarsi di essersi autenticati con il registro in cui risiede l'immagine di base usando il comando ibmcloud cr login o il comando docker login.

Come si può eseguire il debug di un comando BOM che non riesce ad analizzare un file Docker?

  • Verificate che il file Docker non abbia problemi eseguendo il comando docker build e verificando che passi.
  • Se il file Docker richiede il passaggio di ARG, assicurarsi che ARG sia impostato come variabile d'ambiente. È anche possibile utilizzare la variabile d'ambiente DOCKERBUILDFLAG.
  • Autenticare con il registro che contiene le immagini di base.

Vedo risultati falsi positivi inaspettati. Cosa devo fare?

Eseguire la pipeline DevSecOps Continuous Deployment (CD) per generare una SBOM aggiornata nell'armadietto delle prove. In questo modo si potrebbe risolvere una potenziale causa di falsi positivi derivante dalla presenza di un SBOM più vecchio generato dalla pipeline DevSecOps Continuous Compliance (CC).

Perché la gravità della segnalazione o del problema è diversa da quella del link di vulnerabilità associato?

Poiché la nostra fonte di informazioni sulle vulnerabilità è cambiata di recente, potreste notare che la gravità associata a una particolare vulnerabilità è cambiata. Code Risk Analyzer determina la gravità ottimale in base al calcolo di tutte le fonti di vulnerabilità.