Code Risk Analyzer-Plug-in für IBM Cloud

Der Code Risk Analyzer wird am 12. Februar 2027 in allen Regionen eingestellt. Wenn jedoch in einer Region Code Risk Analyzer nicht aktiv genutzt wird, kann der Dienst in dieser Region früher eingestellt werden. Weitere Informationen

Die Befehlszeilenschnittstelle (CLI) von „ IBM Cloud® “ bietet Befehle für die Code-Risikoanalyse. Mit der IBM Cloud-Befehlszeilenschnittstelle können Sie Ihren Code im Hinblick auf Sicherheitslücken und die Einhaltung bestimmter Regeln analysieren. Code Risk Analyzer ist in allen IBM Cloud Regionen verfügbar, in denen Toolchains unterstützt werden.

Verwenden Sie die Befehlszeilenschnittstelle, um die folgenden Aufgaben auszuführen:

  • Generieren Sie eine Stückliste, die die Abhängigkeiten und verfügbaren Lizenzinformationen aller Betriebssystempakete und Anwendungspakete von Drittanbietern auflistet. Sie können diese Ausgabe auch im Format CycloneDX-specific erzeugen.
  • Entdecken Sie Schwachstellen in Paketen, die in der Stückliste aufgeführt sind. Sie können den generierten Bericht auch im Format CycloneDX-specific anzeigen oder die automatische Behebung von Schwachstellen für Node.js, Maven oder Gradle (Groovy) Anwendungen verwenden.
  • Analysieren Sie Kubernetes-Dateien auf Konformität mit bestimmten Regeln.

Ab Januar 2024 verwendet Code Risk Analyzer Schwachstellendaten, die vom Open-Source-Projekt Clair bereitgestellt werden, anstelle von Daten des kommerziellen Unternehmens Snyk Limited. Diese Änderung erfordert keine besonderen Maßnahmen Ihrerseits. Sie können jedoch einige Unterschiede in den Einzelheiten der von Code Risk Analyzer gemeldeten CVEs feststellen.

Unterstützter Inhalt

Code Risk Analyzer unterstützt die Sprachen Java™, Node.js, Python und Go. In der folgenden Tabelle sind die Inhalte aufgeführt und beschrieben, die Code Risk Analyzer unterstützt.

Unterstützter Inhalt
Content Beschreibung
Java Das Repo erfordert Maven oder Gradle für die Build-Automatisierung. Maven verwendet die Datei pom.xml, um Abhängigkeiten zu berechnen, und Gradle verwendet die Datei build.gradle(.kts). Code Risk Analyzer kann die Behebung sowohl für Maven als auch für Gradle (Groovy) automatisieren.
Node.js package-lock.json datei berechnet die Abhängigkeiten. Unter Node.js kann Code Risk Analyzer auch die Behebung automatisieren. Stellen Sie sicher, dass die installierte npm-Version mit der npm-Version des Projekts übereinstimmt.
Python Die Abhängigkeiten werden mit Hilfe der Dateien requirements.txt und pyproject.toml berechnet.
Golang Unterstützt die go mod- und go dep-Abhängigkeitsverwaltung. Für go mod muss sich die Datei go.sum im Repository befinden. Für go dep muss sich die Datei Gopkg.lock im Repository befinden.
Dockerfiles Dateien mit dem Dockerfile-Muster im Repository werden berücksichtigt. Für Container-Images werden die Distros Debian, Red Hat Enterprise Linux®, Alpine, und Ubuntu Linux unterstützt.
Kubernetes Dateien mit den Suffixen .yaml und .yml werden berücksichtigt. Der Wert kind muss auf Pod, ReplicaSet, ReplicationController, Deployment, Daemonset, Statefulset, Job, CronJob, NetworkPolicy, oder Ingress gesetzt werden.
Calico Dateien mit den Suffixen .yaml und .yml werden berücksichtigt. Der Wert kind muss auf NetworkPolicy, GlobalNetworkPolicy, Profile, NetworkSet, GlobalNetworkSet oder HostEndpoint gesetzt werden.
Terraform Die Terraform-Plandatei muss mit IBM Cloud als Terraform-Provider generiert werden.

Code Risk Analyzer untersucht Quellcode und Image-Abhängigkeiten in Ihren Repositories auf Schwachstellen. Die folgende Tabelle zeigt die Quellen von Schwachstelleninformationen, die Code Risk Analyzer für verschiedene Arten von Abhängigkeiten konsultiert.

Unterstützte Abhängigkeiten, die Code Risk Analyzer auf Schwachstellen überprüft
Abhängigkeit Unterstützte Versionen Quelle der Sicherheitshinweise
Alpine bild Alle stabilen Versionen mit Unterstützung der Herstellersicherheit. Alpine SecDB datenbank.
Debian bild Alle stabilen Versionen mit Unterstützung der Herstellersicherheit.

CVEs auf Binärpaketen, die mit dem Debian Quellpaket linux verbunden sind, wie z.B. linux-libc-dev, werden nicht gemeldet. Bei den meisten dieser Binärpakete handelt es sich um Kernel und Kernelmodule, die nicht in Container-Images ausgeführt werden.

Debian Sicherheitsfehler-Tracker.
GoogleContainerTools unverfälschtes Bild Alle stabilen Versionen mit Unterstützung der Herstellersicherheit. GoogleContainerTools ohne Vertriebsweg
Red Hat® Enterprise Linux® (RHEL) Bild RHEL 6, RHEL/UBI 7, RHEL/UBI 8 und RHEL/UBI 9 Red Hat Sicherheitsdaten-API.
Ubuntu bild Alle stabilen Versionen mit Unterstützung der Herstellersicherheit. Ubuntu CVE-Tracker.
Go, npm ( JavaScript ), Maven ( Java ), PyPI ( Python ), RubyGems ( Ruby ), und Packagist (PHP) Alle stabilen Versionen mit Unterstützung der Herstellersicherheit. Open-Source-Datenbank für Schwachstellen.

Bekannte Probleme bei Code Risk Analyzer

Code Risk Analyzer kann keine Schwachstellen in Anwendungspaketen erkennen, die kein Versionssteuerungsschema wie major.minor.patch verwenden. Beispielsweise werden Vorabversionen oder Versionen, die Buildmetadaten enthalten, nicht unterstützt.

Voraussetzungen

  • Installieren Sie die IBM Cloud-Befehlszeilenschnittstelle. Anweisungen finden Sie in IBM Cloud -CLI herunterladen.

  • Installieren Sie das Plug-in für die Befehlszeilenschnittstelle von Code Risk Analyzer, indem Sie den folgenden Befehl ausführen:

ibmcloud plugin install cra
  • Stellen Sie sicher, dass Sie in einer der unterstützten Regionen auf eine Toolchain zugreifen können. Die Toolchain muss keine Tools enthalten. Weitere Informationen zu Toolchains finden Sie unter Toolchain über eine App erstellen.

  • Geben Sie die Toolchain-ID an, indem Sie die Umgebungsvariable TOOLCHAIN_ID festlegen:

export TOOLCHAIN_ID=e22195a5-11e3-44ba-9533-e7c18a3a61a7
  • Melden Sie sich bei einer bestimmten Region von IBM Cloud an, indem Sie den folgenden Befehl ausführen, wobei [region] die Region ist, in der die Toolchain erstellt wurde.
ibmcloud login -r [region]
  • Optional: Für eine bessere Kontrolle und Sicherheit Ihrer Daten bei der Verwendung von CLI können Sie private Routen zu IBM Cloud Endpunkten verwenden. Zuerst müssen Sie Virtual Routing and Forwarding (VRF) in Ihrem Konto aktivieren. Anschließend können Sie die Verwendung von privaten IBM Cloud-Serviceendpunkten aktivieren. Weitere Informationen zum Einrichten Ihres Kontos zwecks Unterstützung der Option der privaten Konnektivität enthält der Abschnitt VRF und Serviceendpunkte aktivieren.

Verwenden Sie den folgenden Befehl, um sich bei einem privaten Endpunkt anzumelden, wobei [region] die Region ist, in der die Toolchain erstellt wurde.

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

Befehle zur Verwendung der CLI

Sie erhalten Benachrichtigungen über die Befehlszeile, wenn Aktualisierungen für die IBM Cloud -CLI und Plug-ins verfügbar sind. Stellen Sie sicher, dass Sie Ihre Befehlszeilenschnittstelle aktuell halten, damit Sie die neuesten Befehle verwenden können. Mit dem Befehl ibmcloud plugin list können Sie die aktuelle Version aller installierten Plug-ins anzeigen.

Code Risk Analyzer-Hilfe

Der folgende Befehl zeigt die Liste der Code Risk Analyzer-Befehle an:

ibmcloud cra --help

Hilfe zum Code Risk Analyzer-Befehl

Der folgende Befehl zeigt die Details der Flags an, die mit einem Befehl verwendet werden. Verwenden Sie ibmcloud cra --help , um die verfügbaren Befehle anzuzeigen.

ibmcloud cra <command> --help

Stückliste (BOM)

Der Befehl bom-generate greift auf Artefakte im angegebenen Verzeichnispfad zu und führt eine tiefe Erkennung aus, um alle Abhängigkeiten, einschließlich transitiver Abhängigkeiten, zu ermitteln. Der Befehl identifiziert auch die Lizenzen, unter denen diese Abhängigkeiten verteilt werden. Es wird eine Stückliste erstellt, die eine Momentaufnahme aller Abhängigkeiten enthält. Sie können die Stückliste im Standardformat oder im CycloneDX's SBOM-Format erstellen.

ibmcloud cra bom-generate

Voraussetzungen für BOM-Befehle

Der Befehl bom-generate hängt von bestimmten externen Befehlen ab:

  • Wenn der Pfad Dockerfiles enthält, extrahiert dieser Befehl Basisimages und Build-Images für jede Build-Stage in jeder Dockerfile. In diesem Szenario erfordert der Befehl bom-generate , dass die Befehle Docker cli und tar verfügbar sind.
  • Wenn der Pfad Maven-Dateien enthält, verwendet dieser Befehl mvn zum Erstellen einer Liste mit Abhängigkeiten. In diesem Szenario erfordert der Befehl bom-generate, dass der Befehl mvn verfügbar ist.
  • Wenn der Pfad Gradle -Dateien enthält, verwendet dieser Befehl gradle , um eine Liste mit Abhängigkeiten zu erstellen. In diesem Szenario erfordert der Befehl bom-generate, dass der Befehl gradle verfügbar ist.
  • Wenn der Pfad Node.js package-json -Dateien enthält und dieser Befehl verwendet wird, um eine entsprechende package-lock.json -Datei zu generieren, verwendet der Befehl bom-generate npm , um die Datei package-lock.json zu erstellen. In diesem Szenario erfordert der Befehl, dass der Befehl npm verfügbar ist.
  • Wenn der Pfad die Dateien Python requirements.txt oder pyproject.toml enthält, verwendet der Befehl pip, um die Paketabhängigkeiten zu erzeugen. In diesem Szenario setzt der Befehl bom-generate voraus, dass der Befehl pip verfügbar ist. Sowohl Python Version 2 als auch Python Version 3 werden unterstützt.

Wenn Sie Dockerfiles verwenden, stellen Sie sicher, dass Sie sich bei Ihrer Container-Registry anmelden, aus der die Basisimages extrahiert werden sollen.

Wenn Ihre Dockerfile ARGS erfordert, legen Sie eine einzelne ARG als Umgebungsvariable fest, bevor Sie den Befehl ausführen. Wenn die Dockerfile beispielsweise eine IAM_USER -ARG verwendet, exportieren Sie eine Umgebungsvariable namens IAM_USER: export IAM_USER='value'. Die Befehlszeilenschnittstelle übergibt diese Umgebungsvariablen automatisch an den Befehl docker build .

Sie können das Flag DOCKERBUILDFLAGS auch explizit angeben. Geben Sie den folgenden Befehl ein, um DOCKERBUILDFLAGS mit dem Docker-Flag ARGS zu exportieren:

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

BOM-Befehlsoptionen

In der folgenden Tabelle sind die Befehlsoptionen aufgelistet, die Sie zur Erstellung einer Stückliste mit dem Befehl bom-generate verwenden können.

Befehlsoptionen für die Erstellung einer Stückliste
Befehlsoptionen Erforderlich oder optional Beschreibung
--path Erforderlich Der zu scannende Projektverzeichnispfad.
-r, --report Erforderlich Der Name der Datei, in der der Stücklistenbericht gespeichert werden soll
-a, --asset-type Optionale Die auszuführenden Sicherheitsprüfungen (Apps, Image, Betriebssystem, alle). Diese Option ist standardmäßig auf all gesetzt. Die Option apps wird verwendet, um die Erkennung auf Anwendungspakete zu beschränken. Mit der Option image wird die Erkennung auf Basisimages beschränkt, die in Dockerfiles verwendet werden. Die Option os wird verwendet, um die Erkennung nur auf Buildphasen in Dockerfiles zu beschränken. Sie können mehrere Werte angeben, indem Sie die Werte durch Kommas voneinander trennen, z. B. -a os,image,apps.
-p, --prev-report Optionale Verwenden Sie den vorherigen Stücklistenbericht, um den Befehl zu beschleunigen. Wenn beispielsweise eine Dockerfile seit der letzten Generierung des Berichts nicht aktualisiert wurde, überspringt der Befehl die Erkennung von Paketen aus dieser Dockerfile. Dasselbe Szenario gilt für andere Manifestdateien wie die Datei package-lock.json .
-c, --dockerbuildcontext Optionale Falls angegeben, verwendet CRA das Verzeichnis im Pfadparameter als Docker-Buildkontext während des Buildphasenscans.
-o, --output Optionale Wählen Sie das Format des Stücklistenberichts aus. Sie können die Formatausgabe im Standardstücklistenformat (standard) oder im SBOM-Format von CycloneDX (cyclonedx) generieren. Der Standardwert ist standard. Sie können beide Formate speichern, indem Sie jedes Format durch ein Komma ohne Leerzeichen getrennt eingeben.
-f, --dockerbuildflags Optionale Passen Sie den Docker-Buildbefehl für das Scannen der Buildphase an. Anstatt dieses Befehlszeilenflag zu verwenden, können Sie den Wert in einer Umgebungsvariable namens DOCKERBUILDFLAGS angeben. Diese Befehlsoption ist standardmäßig auf '' gesetzt. Wenn Sie diese Option verwenden, stellen Sie sicher, dass es sich um das letzte Flag handelt, das für den Befehl angegeben wird.
-d, --dockerfilepattern Optionale Das Muster zum Identifizieren der Dockerfile im Repository.
-g, --gradle.excludeconfigurations Optionale Schließen Sie die Gradle -Konfigurationen aus, z. B. runtimeClasspath,testCompileClasspath. Diese Befehlsoption ist standardmäßig auf '' gesetzt.
-l, --gradleprops Optionale Passen Sie den Befehl Gradle mit Eigenschaften für die Überprüfung von Abhängigkeiten an Gradle an.
-m, --maven.excludescopes Optionale Schließen Sie die Maven-Bereiche aus, z. B. test,compile. Beispiel: 'test, compile'. Diese Befehlsoption ist standardmäßig auf '' gesetzt.
-n, --nodejs.createpackagelock Optionale Aktivieren Sie die Task zum Erstellen der Datei package-lock.json für node.js-Projekte.
--region Optionale Die ibmcloud -Region, in der sich die Toolchain befindet
--toolchainid Optionale Die zu verwendende Ziel-Toolchain-ID
-v, --verbose Optionale Aktivieren Sie ausführliche Protokollnachrichten.

Dateien werden ignoriert

Wenn der Pfad die Datei .cra/.fileignore enthält, werden Dateien, die in der Datei .fileignore angegeben sind, nicht nach Abhängigkeiten durchsucht. Die Datei .fileignore muss den Regeln der Datei .gitignore entsprechen. Ähnlich wie die Datei .gitignore kann auch die Datei .fileignore Kommentare, zu ignorierende Verzeichnisse, zu ignorierende Dateien und andere Muster enthalten.

Die folgende Beispieldatei vom Typ .fileignore veranschaulicht, wie Bash-Scripts, Elemente vom Typ node_modules und die Dockerfile-Datei ausgeschlossen werden.

# 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

Mehrere Docker Build-Kontexte einstellen

Wenn Sie mit mehreren Dockerdateien innerhalb eines einzelnen Projekts arbeiten, möchten Sie möglicherweise für jede Dockerdatei einen eigenen Build-Kontext definieren. Dies kann durch die Verwendung einer .cra/.dockerbuildcontext-Datei erreicht werden, einer JSON-Datei, die die Pfade der Dockerdateien den entsprechenden Build-Kontexten zuordnet.

Wenn in Ihrem Projektverzeichnis eine Datei .cra/.dockerbuildcontext existiert, verwenden die CRA Docker Build-Befehle die in dieser Datei angegebenen Pfade als Build-Kontext für die zugehörigen Dockerdateien. Die Schlüssel im JSON-Objekt stellen die relativen Pfade zu den Dockerdateien dar, während die Werte die relativen Pfade zu den jeweiligen Build-Kontexten angeben.

Hier ist ein Beispiel für eine .dockerbuildcontext Datei, die verschiedene Build-Kontexte für mehrere Dockerdateien definiert:

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

Beispiel

Die folgenden Codeausschnitte zeigen, wie der Befehl bom-generate verwendet wird:

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

Scan auf Sicherheitslücken

Der Befehl vulnerability-scan erwartet eine Stückliste im Format standard als Eingabe und erkennt Schwachstellen in Anwendungs- und Betriebssystempaketen, die in der Stückliste aufgeführt sind. Auf der Grundlage umfangreicher Bedrohungsdaten, die aus verschiedenen Quellen für gemeinsame Schwachstellen und Gefährdungen (CVEs) gesammelt wurden, werden gezielte Empfehlungen zur Behebung von Schwachstellen gegeben. Code Risk Analyzer kann auch automatische Korrekturen an verwundbaren Paketen nur für Node.js basierte Anwendungen durchführen. Sie können diesen Bericht auch im Standardformat oder im CycloneDX's Vulnerability Exploitability Exchange (VEX)-Format erstellen.

ibmcloud cra vulnerability-scan

Befehlsoptionen für Schwachstellenscans

In der folgenden Tabelle sind die Optionen für die Verwendung des Befehls vulnerability-scan aufgelistet.

Befehlsoptionen für die Durchführung einer Prüfung auf Sicherheitsrisiken
Befehlsoptionen Erforderlich oder optional Beschreibung
-b, --bom Erforderlich Der Dateipfad der Stückliste, die mit dem Befehl bom-generate erstellt wurde. Diese Stückliste muss im Format standard vorliegen.
-a, --autofix Optionale Behebt bestimmte Arten von Anwendungsschwachstellen. Diese Option ist nur für die Anwendungen Node.js, Maven und Gradle verfügbar.
-f, --commentfile Optionale Gibt die Datei an, in der der Markdown-Bericht erstellt wird. Dieser Befehl ist nur mit autofix verfügbar.
-c, --cveignore Optionale Der Dateipfad der CVE-Ignorierungsdatei, die die Liste der zu ignorierenden CVEs enthält.
-e, --excludedev Optionale Gibt an, dass der Befehl keine CVEs für Entwicklungsabhängigkeiten melden soll.
--force Optionale Erzwingt eine Aktualisierung für Pakete der obersten Ebene, auch wenn die Hauptversion eine andere ist. Dieser Befehl ist nur mit autofix verfügbar.
--include-nofix Optionale Schließen Sie die Meldung von CVEs, für die keine Abhilfemaßnahmen bekannt sind, ein oder aus. Diese Option ist standardmäßig auf app gesetzt. Die Option app wird verwendet, um nur CVEs von Anwendungspaketen ohne Korrekturen einzuschließen. Die Option os wird verwendet, um nur CVEs von Betriebssystempaketen ohne Korrekturen einzuschließen. Die Option all wird verwendet, um sowohl CVEs für Anwendungen als auch für Betriebssystempakete ohne Korrekturen einzuschließen. Die Option none wird verwendet, um sowohl CVEs für Anwendungen als auch für Betriebssystempakete auszuschließen, die nicht behoben wurden.
--path Erforderlich, wenn --autofix aktiviert ist Der zu scannende Projektverzeichnispfad. Dieser Befehl ist nur mit autofix verfügbar.
--region Optionale Die Region ibmcloud für die Toolchain.
-r, --report Optionale Der Pfad zum generierten Bericht.
-o, --output Optionale Wählt das CVE-Berichtsformat aus. Sie können die Formatausgabe im CVE-Standardformat (standard) oder im VEX-Format von CycloneDX (cyclonedx) generieren. Der Standardwert ist standard.
-s, --strict Optionale Führt zu einem Befehlsfehler (Exitstatus 2), wenn Schwachstellen gefunden werden.
--toolchainid Optionale Die ID der Ziel-Toolchain.

Schwachstellen werden ignoriert

Wenn der Parameter -c oder --cveignore angegeben ist, sucht der Befehl nach dieser Datei und meldet die in der Datei angegebenen CVEs nicht. Sie können die CVEs so konfigurieren, dass sie unbegrenzt ausgelassen werden, bis eine Korrektur verfügbar ist oder bis ein angegebenes Ablaufdatum erreicht ist.

Das folgende Beispiel zeigt ein JSON-Schema für die Datei .cveignore:

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

Die folgenden Eigenschaften werden für jeden Eintrag in der Datei .cveignore unterstützt:

  • cve - Die Sicherheitslücke, die ausgelassen werden soll. Der Wert dieser Eigenschaft ist eine CVE-ID.
  • AlwaysOmit -Wenn diese Eigenschaft auf truegesetzt ist, wird die Sicherheitslücke ausgelassen, bis sie geändert wird. Diese Eigenschaft hat Vorrang vor anderen Eigenschaftswerten.
  • untilRemediationVerfügbar -Wenn diese Eigenschaft auf truegesetzt ist, wird die Sicherheitslücke ausgelassen, bis ein Korrekturpfad verfügbar ist. Wenn eine Korrektur verfügbar wird, wird die Sicherheitslücke nicht ausgelassen und eine Nachricht angezeigt. Diese Eigenschaft hat Vorrang vor dem Wert für die Ablaufeigenschaft.
  • Ablauf -Wenn diese Eigenschaft auf true gesetzt ist und das Ablaufdatum nicht erreicht wird, wird die Sicherheitslücke übergangen. Wenn das Ablaufdatum erreicht ist, wird die Sicherheitslücke nicht ausgelassen und eine Nachricht angezeigt. Definieren Sie diese Eigenschaft im RFC3339 -Zeitformat (yyyy-MM-ddTHH:mm:ss[+-]Z).

Code Risk Analyzer verwendet nur diese definierten Eigenschaften. Sie können Eigenschaften ohne Auswirkung auf die Funktionen hinzufügen. Wenn eine in .cveignore definierte Sicherheitslücke nicht weggelassen wird, wird ein Protokoll generiert, in dem der jeweilige Grund erklärt wird. Wenn eine in der Datei .cveignore definierte Schwachstelle weggelassen wird, wird keine einzelne Protokollierung angezeigt. Die Anzahl der Auslassungen und eine Liste der IDs der Sicherheitslücken (mit dem Paketnamen), die ausgelassen werden, werden nach Abschluss eines Berichts protokolliert.

Das folgende Code-Snippet zeigt eine Beispieldatei .cveignore:

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

Beispiel

Die folgenden Codeausschnitte zeigen, wie der Befehl vulnerability-scan verwendet wird:

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

Deployment

Der Befehl deployment-analyze führt Konfigurationsprüfungen für Kubernetes-Bereitstellungsmanifeste aus.

ibmcloud cra deployment-analyze

Dieser Befehl bietet eine präskriptive Anleitung zur Einrichtung einer sicheren Konfiguration für Docker Container. Der Code Risk Analyzer verwendet diese Sicherheitskonfigurationen als Bezugspunkt und identifiziert Sicherheitskontrollen, die in Bereitstellungsartefakten, wie .yaml Dateien, für Kubernetes Anwendungen zu überprüfen sind. Dieser Befehl liefert auch Risikobewertungen für jedes Kontrollversagen.

In der folgenden Tabelle sind die Steuerelemente aufgelistet, die Sie innerhalb von DevSecOps, implementieren können, wie unter CIS Docker 1.13.0 beschrieben. Weitere Kontrollen werden auf der Grundlage von Open-Source-Referenzen des Kubernetes Common Configuration Scoring System(KCCSS ) hinzugefügt.

Sicherheitssteuerelemente
ID Regel Risiko
5.3 Vergewissern Sie sich, dass die Container nicht über die Funktion CAP_SYS_ADMIN verfügen. Hoch
5.3 Vergewissern Sie sich, dass die Container nicht über die Funktion CAP_NET_RAW verfügen. Hoch
5.4 Stellen Sie sicher, dass keine privilegierten Container verwendet werden. Hoch
5.5 Stellen Sie sicher, dass sensible Verzeichnisse des Hostsystems nicht in Container eingehängt werden. Mittel
5.7 Stellen Sie sicher, dass privilegierte Ports nicht in Containern abgebildet werden. Niedrig
5.9 Stellen Sie sicher, dass der Netzwerk-Namensraum des Hosts nicht gemeinsam genutzt wird. Mittel
5.10 Stellen Sie sicher, dass der Speicherbedarf des Containers begrenzt ist. Mittel
5.11 Stellen Sie sicher, dass die entsprechende CPU-Priorität auf dem Container eingestellt ist. Mittel
5.12 Stellen Sie sicher, dass das Root-Dateisystem des Containers schreibgeschützt eingehängt ist. Mittel
5.15 Stellen Sie sicher, dass der Prozessnamensraum des Hosts nicht gemeinsam genutzt wird. Mittel
5.16 Stellen Sie sicher, dass der IPC-Namensraum des Hosts nicht gemeinsam genutzt wird. Mittel
5.31 Achten Sie darauf, dass die Steckdose Docker nicht in einem Container montiert ist. Hoch
Stellen Sie sicher, dass Container keine unsichere Zuweisung von CPU-Ressourcen zulassen. Mittel
Stellen Sie sicher, dass Container keine Privilegienerweiterung zulassen. Mittel
Stellen Sie sicher, dass die Behälter keine unsicheren Teile von /proc freilegen. Mittel
Stellen Sie sicher, dass Container nicht über einen gemeinsam genutzten Host-Port zugänglich sind. Mittel

Optionen für Implementierungsbefehle

In der folgenden Tabelle sind die Befehlsoptionen aufgelistet, die für den Befehl deployment-analyze verwendet werden können.

Befehlsoptionen für die Einsatzanalyse.
Befehlsoptionen Erforderlich oder optional Beschreibung
--path Erforderlich Der zu scannende Projektverzeichnispfad.
-r, --report Erforderlich Der Name der Datei, in der der Bericht erstellt wird
-f, --fileignore Optionale Der Dateipfad der Datei .fileignore.
-s, --strict Optionale Die Ergebnisse des Befehlsfehlers (Exitstatus 2), wenn Implementierungsrisiken gefunden werden.

Beispiel

Die folgenden Codeausschnitte zeigen, wie der Befehl deployment-analyze verwendet wird:

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

NetworkPolicy analyse

Bei dieser Funktion handelt es sich um eine Betafunktion für Evaluierungs- und Testzwecke.

Der Befehl netpol-analyze führt Konfigurationsprüfungen für die Manifeste Kubernetes und Calico NetworkPolicy durch.

ibmcloud cra netpol-analyze

Mit diesem Befehl wird die Konnektivitätskonfiguration einer Anwendung Kubernetes anhand der NIST SP 800-53 SC-7(5 ) überprüft. Es wird überprüft, dass die Konnektivität jedes Workloads von mindestens einer NetworkPolicy Ressource kontrolliert wird und dass nicht sichere Ports sowohl für den Eingang als auch für den Ausgang blockiert werden.

Der Befehl netpol-analyze kann auch einen Konnektivitätsbericht für die gescannte Anwendung erstellen, der alle zulässigen Verbindungen zwischen den Anwendungs-Workloads anzeigt. Sie können diesen Bericht als Nachweis für die Einhaltung der Vorschriften oder zur Behebung von Konnektivitätsproblemen verwenden. Sie können diesen Befehl auch verwenden, um Lint-Ergebnisse für die gescannten Netzwerkrichtlinien bereitzustellen und diese Ergebnisse dann zur Verbesserung der Effizienz und Lesbarkeit der Netzwerkrichtlinien zu verwenden. In einigen Fällen können die Lint-Ergebnisse auch auf einen Fehler in den Netzwerkrichtlinien-Definitionen hinweisen.

NetworkPolicy analyse-Befehlsoptionen

In der folgenden Tabelle sind die Befehlsoptionen aufgelistet, die für den Befehl netpol-analyze verwendet werden können.

Befehlsoptionen zur Durchführung von Netzwerkrichtlinienanalysen
Befehlsoptionen Erforderlich oder optional Beschreibung
--path Erforderlich Der zu scannende Projektverzeichnispfad.
-r, --report Erforderlich Der Dateiname, unter dem der Konformitätsbericht erstellt werden soll.
-c, --connectivity Optionale Der Dateiname, unter dem der Konnektivitätsbericht erstellt werden soll.
-l, --lint Optionale Der Name der Datei, in der der Lint-Bericht erstellt werden soll.
-s, --strict Optionale Führt zum Fehlschlagen des Befehls (Exit-Status 2), wenn Konnektivitätsrisiken festgestellt werden.

Beispiel

Die folgenden Codebeispiele zeigen, wie Sie den Befehl netpol-analyze verwenden können:

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

Bild des Netzwerkkonfigurationsanalysators

Der Befehl netpol-analyze wird als Teil des Network Config Analyzer(NCA ) von IBM ausgeführt. Da dieser Befehl NCA als Docker-Image ausführt, müssen Sie die Docker auf Ihrem Computer installieren.

Die Bild URL en für den Netzwerkrichtlinienanalysator sind icr.io/continuous-delivery/cra/nca.

Wenn sich das Analyzer-Image nicht bereits in Ihrer lokalen Registrierung befindet, zieht der Befehl netpol-analyze das neueste Analyzer-Image (einschließlich der Korrekturen für alle Sicherheitslücken) aus der globalen IBM Cloud® Container Registry.

Code Risk Analyzer in Tekton-Pipelines verwenden

Sie können die task-cra aufgabe in Tekton-Pipelines verwenden. Verwenden Sie die Tekton-Pipeline-Definition, wenn Sie eine Pull-Anforderung oder einen manuellen Trigger erstellen oder eine Übergabe vornehmen. Sie können auch eigene Tekton-Tasks erstellen und den Code Risk Analyzer aus diesen Tasks ausführen.

Code Risk Analyzer in DevSecOps verwenden

Sie können Code Risk Analyzer in DevSecOps verwenden. In der folgenden Tabelle sind die unterstützten Code Risk Analyzer-Parameter für DevSecOps aufgelistet und beschrieben.

Weitere Informationen zu den abhängigen Dienstprogrammbefehlen, die vom Pipeline-Image benötigt werden, um den Befehl bom-generate auszuführen, finden Sie in BOM-Anforderungen. Wenn Befehle fehlen, können Sie den Parameter cra-custom-script-path verwenden, um auf ein Script zu verweisen und diese Befehle zu installieren.

DevSecOps Code Risk Analyzer-basierte Parameter
Name Typ Beschreibung Erforderlich oder optional
artifactory-dockerconfigjson secret Die Base64-codierte Docker-Datei config.json, in der Berechtigungsnachweisinformationen für die Artifactory gespeichert werden. Optionale
baseimage-auth-user Text Die Berechtigungsnachweise für das Basisimage der Dockerfile der Anwendung, die für den Code Risk Analyzer-Scan erforderlich ist. Optionale
baseimage-auth-email Text Die Berechtigungsnachweise für das Basisimage der Dockerfile der Anwendung, die für den Code Risk Analyzer-Scan erforderlich ist. Optionale
baseimage-auth-host Text Die Berechtigungsnachweise für das Basisimage der Dockerfile der Anwendung, die für den Code Risk Analyzer-Scan erforderlich ist. Optionale
baseimage-auth-password secret Die Berechtigungsnachweise für das Basisimage der Dockerfile der Anwendung, die für den Code Risk Analyzer-Scan erforderlich ist. Optionale
cra-cveignore-pfad Text Der Pfad zur Datei cveignore , der relativ zum Stammverzeichnis des Anwendungsrepositoros ist. Der Standarddateipfad lautet .cra/.cveignore. Optionale
Pfad des angepassten CRA-Scripts Text Der Pfad zu einem angepassten Script, das vor dem Scannen von Code Risk Analyzer ausgeführt wird. Dieses Script wird als Quelle verwendet, um die Option zum Festlegen von ENV -Variablen im Kontext des BOM-Tools von Code Risk Analyzer bereitzustellen. Optionale
cra-docker-buildflags Text Der angepasste Docker-Buildbefehl für das Scannen der Build-Stage. Dieser Parameter ist standardmäßig leer. Optionale
cra-docker-build-kontext Text Bei Angabe verwendet Code Risk Analyzer das Verzeichnis im Pfadparameter als Docker-Buildkontext. Optionale
cra-exclude-devdependencies Text Gibt an, ob dev-Abhängigkeiten vom Scannen ausgeschlossen werden sollen (true oder false). Der Standardwert ist false. Optionale
cra-gradle-exclude-configs Text Gibt an, welche Gradle -Konfigurationen Abhängigkeiten beim Scannen ausschließen sollen. Beispiel: runtimeClasspath,testCompileClasspath. Dieser Parameter ist standardmäßig leer. Optionale
cra-maven-exclude-Geltungsbereiche Text Gibt an, welche Maven-Bereiche Abhängigkeiten beim Scannen ausschließen sollen. Beispiel: test,compile. Dieser Parameter ist standardmäßig leer. Optionale
cra-nodejs-create-package-lock Text Aktiviert die Erkennung von Code Risk Analyzer zum Erstellen der Datei package-lock.json für node.js-Repositorys. Dieser Parameter ist standardmäßig auf false gesetzt. Optionale
ibmcloud-api-key secret Der IBM Cloud®-API-Schlüssel, der mit dem ibmcloud-CLI-Tool interagiert. Erforderlich
pipeline-dockerconfigjson secret Die Base64-codierte Docker-Datei config.json, die Images aus einer privaten Registry extrahiert. Optionale
onepipeline-dockerconfigjson secret Veraltet. Die Base64-codierte Docker-Datei config.json, die Images aus einer privaten Registry extrahiert. Optionale
pipeline-debug auswählen Der Switch für den Pipeline-Debugmodus. Optionale
Opt-in-CRA-automatische-Korrektur Text Ermöglicht Code Risk Analyzer die Ausführung des Befehls cra auto remediation (true oder false). Der Standardwert ist false. Dieser Befehl wird nur von der Continuous Compliance Pipeline unterstützt. Optionale
Opt-in-CRA-Auto-Remediation-fähige-Repos Text Gibt die Liste der durch Kommata getrennten Repository-Namen an, die für den Befehl cra auto remediation aktiviert werden sollen. Dieser Parameter wird nur berücksichtigt, wenn opt-in-cra-auto-remediation auf true gesetzt ist, und wird nur in der Continuous Compliance Pipeline unterstützt. Optionale
Opt-in-CRA-Auto-Remediation-Force Text Zwingt den Befehl cra auto remediation, die Pakete zu aktualisieren, auch wenn die Hauptversion sich von der aktuellen verwundbaren Paketversion (true oder false) unterscheidet. Dieser Parameter wird nur berücksichtigt, wenn opt-in-cra-auto-remediation auf true gesetzt ist, und wird nur in der Continuous Compliance Pipeline unterstützt. Optionale

Angepasste Beispielscripts für DevSecOps

Wenn Ihre Dockerfile ARGS erfordert, können Sie den Parameter cra-custom-script-path verwenden, um eine einzelne ARG als Umgebungsvariable festzulegen, bevor Sie den Befehl ausführen. Der angepasste Scriptpfad ist der Pfad zu einem Script, das sich im Projekt des Benutzers befindet. Beispiel: Wenn die Dockerfile IAM_USER ARGverwendet, exportieren Sie eine Umgebungsvariable mit dem Namen IAM_USER: export IAM_USER='value' im Script. Wenn die für Ihre Docker-Datei erforderliche ARG als Umgebungseigenschaft in Toolchains festgelegt ist, können Sie get_env verwenden, um den Wert abzurufen. In diesem Fall können Sie eine Umgebungsvariable im Script IAM_USER: export IAM_USER=$(get_env iam_user_environment_property_name) exportieren. Die Task run-cra übernimmt diese Umgebungsvariablen automatisch und übergibt sie an die Docker-Buildbefehle.

Das folgende Beispiel zeigt, wie die Variable ENV mithilfe von cra-custom-script exportiert wird:

#!/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)

Sie können den Parameter cra-custom-script-path auch für Szenarios verwenden, in denen die Versionen des DevSecOps-Basisimage-Tools basierend auf Ihrem Projekt möglicherweise veraltet sind. Sie können beispielsweise Befehle wie pip/pip3 aktualisieren, um Python -Pakete zu erkennen, die eine höhere Pip-Version erfordern.

Das folgende Beispiel zeigt, wie die Pip-Version mithilfe von cra-custom-script aktualisiert wird:

#!/usr/bin/env bash

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

python3 -m pip install --upgrade pip

Wenn Ihre Dockerfile ein Image aus einer privaten Docker-Registry verwendet, können Sie den Parameter cra-custom-script-path verwenden, um sich bei einer privaten Docker-Registry zu authentifizieren, bevor Sie Code Risk Analyzer ausführen, und um zuzulassen, dass Code Risk Analyzer dieses Image zum Scannen extrahiert.

Das folgende Beispiel zeigt, wie die cra-custom-script für die Authentifizierung bei der ibmcloud -Container-Registry verwendet wird:

#!/usr/bin/env bash

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

ibmcloud cr login

Debugging von Code Risk Analyzer in DevSecOps

Zur Unterstützung beim Debugging können Sie Code Risk Analyzer lokal als Befehlszeilenschnittstelle (CLI) auf Ihrer eigenen lokalen Maschine ausführen. Informationen zur Ausführung des Befehls ibmcloud cra bom-generate zur Erstellung einer Stückliste finden Sie unter Stückliste(BOM ). Nachdem Sie die Stückliste erstellt haben, verwenden Sie den Befehl ibmcloud cra cve, um alle Schwachstellen aufzulisten. Weitere Informationen zur Ausführung des Befehls ibmcloud cra cve finden Sie unter Scan auf Sicherheitslücken.

Stellen Sie sicher, dass die Task run-cra keine Fehler enthält. Wenn die Aufgabe Fehler enthält, prüfen Sie, ob Ihre Pipeline die aktuelle Version von DevSecOps verwendet. Wenn das Problem nicht durch Überprüfung der DevSecOps-Version behoben werden kann, enthalten die folgenden Beispiele einige allgemeine Fehler und vorgeschlagene Lösungen.

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

Sie können überprüfen, dass Sie Zugriff auf die private Registry haben. Wenn Sie keinen Zugriff haben, können Sie den Parameter cra-custom-script-path verwenden und den Pfad zu einem angepassten Script angeben, das vor Code Risk Analyzer zur Authentifizierung bei der privaten Registry ausgeführt wird.

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

Wenn Ihre Dockerfile ARGS erfordert, schlägt der Befehl docker build für die Build-Stages aufgrund der fehlenden ARGS fehl. cra-custom-script-path ist erforderlich, um ARGS als Umgebungsvariablen einzurichten. Weitere Informationen zum Einrichten des angepassten Scripts enthält Angepasste Beispielscripts für 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

Standardmäßig erstellt der Code Risk Analyzer-Befehl bom-generate die Dockerfiles aus dem Kontext der Position der Dockerfile selbst. Wenn Sie die Dockerfiles aus dem Kontext des Stammprojektverzeichnisses erstellen möchten, verwenden Sie den Parameter cra-docker-build-context , damit Code Risk Analyzer die Dockerfiles aus diesem Kontext erstellen kann.

Gespeicherte Code Risk Analyzer-Daten entfernen

Das Code Risk Analyzer-Plug-in speichert keine Clientdaten in seinen Datenbanken. In früheren Versionen von Code Risk Analyzer Tekton wurden die Ergebnisse von Schwachstellenscans jedoch sicher in der Datenbank gespeichert.

Wenden Sie sich an den IBM Support, um die Löschung von Kundendaten zu beantragen, die möglicherweise im Code Risk Analyzer gespeichert sind.

Häufig gestellte Fragen

Hier erhalten Sie Antworten auf häufig gestellte Fragen zur Verwendung der Befehlszeilenschnittstelle von Code Risk Analyzer.

Wie kann ich feststellen, warum die CLI fehlgeschlagen ist?

Bevor Sie die Befehlszeilenschnittstelle von Code Risk Analyzer aufrufen, setzen Sie die Umgebungsvariable IBMCLOUD_TRACE auf "true", um das Debugprotokoll zu aktivieren.

export IBMCLOUD_TRACE=true

Beobachten Sie die API-Aufrufe und die Antworten, die im Protokoll angezeigt werden, um die genaue Fehlerursache zu ermitteln.

Wie kann ich einen BOM-Befehl debuggen, der ein Basisimage nicht aus einer privaten Registry extrahieren kann?

Stellen Sie sicher, dass Sie mit dem Befehl ibmcloud cr login oder mit dem Befehl docker login mit der Registry authentifiziert werden, in der sich das Basisimage befindet.

Wie kann ich einen BOM-Befehl debuggen, der eine Dockerfile nicht analysieren kann?

  • Stellen Sie sicher, dass die Docker-Datei keine Probleme enthält, indem Sie den Befehl docker build ausführen und sicherstellen, dass er übergeben wird.
  • Wenn für Ihre Dockerfile die Übergabe von ARG erforderlich ist, stellen Sie sicher, dass ARG als Umgebungsvariable festgelegt ist. Sie können auch die Umgebungsvariable DOCKERBUILDFLAG verwenden.
  • Authentifizieren Sie sich bei der Registry, die die Basisimages enthält.

Ich erhalte unerwartete falsch positive Ergebnisse. Welche Schritte sind erforderlich?

Führen Sie die DevSecOps Continuous Deployment (CD) Pipeline aus, um eine aktualisierte SBOM in der Asservatenkammer zu erzeugen. Dies könnte eine mögliche Ursache für falsch-positive Ergebnisse sein, die aus dem Vorhandensein einer älteren SBOM resultieren, die von der DevSecOps Continuous Compliance (CC) Pipeline erzeugt wurde.

Warum unterscheidet sich der Schweregrad des Berichts oder des Problems von dem des zugehörigen Schwachstellen-Links?

Da sich unsere Quelle für Schwachstelleninformationen in letzter Zeit geändert hat, kann es sein, dass sich der Schweregrad für eine bestimmte Schwachstelle geändert hat. Code Risk Analyzer bestimmt den optimalen Schweregrad auf der Grundlage einer Berechnung aller Quellen von Sicherheitslücken.