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.
| 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.
| 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 |
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_IDfestlegen:
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 BefehleDocker cliundtarverfügbar sind. - Wenn der Pfad Maven-Dateien enthält, verwendet dieser Befehl
mvnzum Erstellen einer Liste mit Abhängigkeiten. In diesem Szenario erfordert der Befehlbom-generate, dass der Befehlmvnverfü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 Befehlbom-generate, dass der Befehlgradleverfügbar ist. - Wenn der Pfad Node.js
package-json-Dateien enthält und dieser Befehl verwendet wird, um eine entsprechendepackage-lock.json-Datei zu generieren, verwendet der Befehlbom-generatenpm, um die Datei package-lock.json zu erstellen. In diesem Szenario erfordert der Befehl, dass der Befehlnpmverfügbar ist. - Wenn der Pfad die Dateien Python
requirements.txtoderpyproject.tomlenthält, verwendet der Befehlpip, um die Paketabhängigkeiten zu erzeugen. In diesem Szenario setzt der Befehlbom-generatevoraus, dass der Befehlpipverfü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 | 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 | 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
truegesetzt 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.
| 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 | 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 | 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.
| 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 buildausfü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
DOCKERBUILDFLAGverwenden. - 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.