Auf Sicherheitsmetadaten zugreifen und Pakete prüfen

In diesem Dokument wird beschrieben, wie Sie auf Sicherheitsmetadaten aus dem Cloud Storage-Bucket assuredoss-metadata zugreifen. Eine Beschreibung der Sicherheits metadaten finden Sie unter Felder für Sicherheitsmetadaten.

Dieses Dokument gilt nur für die Premium-Dienststufe von Assured OSS. Informationen zur kostenlosen Dienststufe finden Sie unter Signaturen in der kostenlosen Dienststufe von Assured OSS prüfen.

Hinweis

  1. Assured OSS in Security Command Center einbinden.

  2. Verbindung validieren zu Assured OSS für die angeforderten Dienstkonten.

Metadaten extrahieren

Sie können die Metadaten mit gcloud- oder curl-Befehlen herunterladen. Erstellen Sie die URL für beide Befehle mit den folgenden Informationen:

  • Sprache: java, python, golang, oder javascript. Der Wert muss in Kleinbuchstaben angegeben werden.
  • Package_ID::einer der folgenden Werte:

    • Java: groupId:artifactId
    • Python: packageName
    • JavaScript: einer der folgenden Werte: @org-name/package-name, @username/package-name oder package-name
    • Go: packageName

    Der Wert muss in Kleinbuchstaben angegeben werden.

  • Version:die Version des Pakets.

Die URL muss das folgende Format haben:

gcloud

gs://assuredoss-metadata/language/package_id/version/metadata.json

Die URL muss in Kleinbuchstaben angegeben werden.

Beispiel-URLs:

  • Beispiel-URL für Python: gs://assuredoss-metadata/python/blessed/1.20.0/metadata.json

  • Beispiel-URL für Java: gs://assuredoss-metadata/java/org.apache.logging.log4j:log4j-core/2.17.1/metadata.json

  • Beispiel-URL für JavaScript: gs://assuredoss-metadata/javascript/@stoplight/spectral-core/0.0.0/metadata.json

  • Beispiel-URL für Go: gs://assuredoss-metadata/golang/github.com/rs/zerolog/1.9.1/metadata.json

curl

https://storage.googleapis.com/assuredoss-metadata/language/package_id/version/metadata.json

Die URL muss in Kleinbuchstaben angegeben werden.

Beispiel-URLs:

  • Beispiel-URL für Python: https://storage.googleapis.com/assuredoss-metadata/python/blessed/1.20.0/metadata.json

  • Beispiel-URL für Java: https://storage.googleapis.com/assuredoss-metadata/java/org.apache.logging.log4j:log4j-core/2.17.1/metadata.json

  • Beispiel-URL für JavaScript: https://storage.googleapis.com/assuredoss-metadata/javascript/@stoplight/spectral-core/0.0.0/metadata.json

  • Beispiel-URL für Go: https://storage.googleapis.com/assuredoss-metadata/golang/github.com/rs/zerolog/1.9.1/metadata.json

  1. Metadaten herunterladen:

gcloud

gcloud storage cp "gs://assuredoss-metadata/language/package_id/version/metadata.json" outputFolderLocation

curl

curl -H "Authorization: Bearer $(gcloud auth print-access-token)" -L https://storage.googleapis.com/assuredoss-metadata/language/package_id/version/metadata.json -o metadata.json

Sie können jetzt die Signaturen prüfen. Sie haben zwei Möglichkeiten zur Auswahl:

Signaturen heruntergeladener Pakete mit dem Tool „aoss-verifier“ prüfen

Verwenden Sie das Tool aoss-verifier, um Paketmetadaten zu prüfen.

Installieren Sie Go, bevor Sie dieses Tool verwenden.

  1. Installieren Sie das Tool „aoss-verifier“.

  2. Exportieren Sie $(go env GOPATH)/bin.

  3. Führen Sie den Befehl aoss-verifier verify-metadata aus.

    aoss-verifier verify-metadata \
       --metadata_type TYPE \
       --language LANGUAGE \
       --package_id PACKAGE_ID \
       --version VERSION \
       [--disable_certificate_verification] \
       [--temp_downloads_path TEMP_DOWNLOADS_DIR_PATH] \
       [--disable_deletes]
    

    Ersetzen Sie Folgendes:

    • TYPE: Die möglichen Werte sind premiuminfo.
    • LANGUAGE: Die Sprache des Pakets. Der Wert muss in Kleinbuchstaben angegeben werden.
    • PACKAGE_ID: Bei Java ist das Format groupId:artifactId. Bei Python und Go ist das Format packageName. Der Wert muss in Kleinbuchstaben angegeben werden.
    • VERSION: Die Version des Pakets.

    --disable_certificate_verification ist ein optionales Flag, mit dem die Zuordnung des untergeordneten Zertifikats zum Root-Zertifikat über die Zertifikatskette übersprungen wird, wenn es verwendet wird.

    --temp_downloads_path ist ein optionales Flag, mit dem Sie den Pfad festlegen können, in dem die Dateien heruntergeladen werden sollen (ersetzen Sie TEMP_DOWNLOADS_DIR_PATH). Wenn das Flag nicht festgelegt ist, werden die Dateien in den Ordner tmp_downloads im aktuellen Verzeichnis heruntergeladen.

    --disable_deletes ist ein optionales Flag, mit dem die heruntergeladenen Dateien beibehalten werden. Standardmäßig werden alle heruntergeladenen Dateien vom Tool gelöscht.

Weitere Informationen finden Sie in der README.

Signaturen heruntergeladener Pakete manuell prüfen

Sie können die Artefaktsignatur nur für die Binärdateien prüfen, die sicher von Assured OSS erstellt wurden, nicht für die, die von Assured OSS über Proxys bereitgestellt werden.

Zum manuellen Prüfen von Signaturen können Sie verschiedene Tools verwenden. In den folgenden Schritten werden die gcloud CLI, OpenSSL (Version 3.0.1 oder höher) und jq (1.7.1 oder höher) verwendet, um die Signaturen unter Linux zu prüfen.

  1. Laden Sie die Metadatendatei herunter. Wie unter Felder für Sicherheitsmetadaten, beschrieben, enthält die Metadatendatei ein SBOM Feld im buildInfo Feld. Die SBOM enthält das Artefakt (z. B. eine JAR- oder EGG-Datei), das zusammen mit einer Annotation erstellt wurde, die die Signatur darstellt. Mit diesem Artefakt können Sie die SPDX-ID bestimmen.

    Wenn der Artefaktname beispielsweise artifact_name ist, lautet die spdx_id SPDXRef-Package-artifact_name. Um ein Paket mit dem Namen gradio-3.30.0-py3-none-any.whl zu validieren, lautet die spdx_id SPDXRef-Package-gradio-3.30.0-py3-none-any.whl.

  2. Extrahieren Sie den SHA‑256-Hashwert aus der Metadatendatei:

    cat METADATA_FILENAME | jq -rj '.buildInfo' | jq -rj '.sbom' | jq -rj '.packages' | jq '.[] | select(.SPDXID=="SPDX_ID")' | jq -rj '.annotations[0].comment' | jq -rj '.digest[0].digest' | cut -d ' ' -f1 > expectedDigest.txt
    

    Ersetzen Sie Folgendes:

    • METADATA_FILENAME: Der Name Ihrer Sicherheitsmetadatendatei.

    • SPDX_ID: Die SPDX-ID.

  3. Berechnen Sie den Artefakthashwert:

    sha256sum ARTIFACT_FILE | cut -d ' ' -f1 > actualDigest.txt
    

    Ersetzen Sie ARTIFACT_FILE durch den Namen der Artefaktdatei.

  4. Prüfen Sie, ob es Unterschiede zwischen den beiden Werten gibt:

    diff actualDigest.txt expectedDigest.txt
    

    Wenn es keinen Unterschied gibt, erfolgt keine Ausgabe.

  5. Extrahieren Sie den Hashwert des Felds in eine .bin-Datei:

    cat METADATA_FILENAME | jq -rj '.buildInfo' | jq -rj '.sbom' | jq -rj '.packages' | jq '.[] | select(.SPDXID=="SPDX_ID")' | jq -rj '.annotations[0].comment' | jq -rj '.digest[0].digest' | cut -d ':' -f2 | xxd -r -p > digest.bin
    
  6. Extrahieren Sie die Signatur des Hashwerts in eine .sig-Datei:

    cat METADATA_FILENAME | jq -rj '.buildInfo' | jq -rj '.sbom' | jq -rj '.packages' | jq '.[] | select(.SPDXID=="SPDX_ID")' | jq -rj '.annotations[0].comment' | jq -rj '.signature[0].signature' | xxd -r -p > sig.sig
    
  7. Extrahieren Sie den öffentlichen Schlüssel aus dem öffentlichen Zertifikat in eine .pem-Datei:

    cat METADATA_FILENAME | jq -rj '.buildInfo' | jq -rj '.sbom' | jq -rj '.packages' | jq '.[] | select(.SPDXID=="SPDX_ID")' | jq -rj '.annotations[0].comment' | jq -rj '.certInfo.cert' | openssl x509 -pubkey -noout  > pubKey.pem
    
  8. Prüfen Sie die Signatur des Hashwerts mit dem extrahierten öffentlichen Schlüssel:

    openssl pkeyutl -in digest.bin -inkey pubKey.pem -pubin -verify -sigfile sig.sig
    

    Wenn der Befehl erfolgreich ausgeführt wurde, wird Signature Verified Successfully zurückgegeben. Sie können jetzt das Zertifikat prüfen.

  9. Extrahieren Sie das öffentliche Zertifikat in eine .pem-Datei:

    cat METADATA_FILENAME | jq -rj '.buildInfo' | jq -rj '.sbom' | jq -rj '.packages' | jq '.[] | select(.SPDXID=="SPDX_ID")' | jq -rj '.annotations[0].comment' | jq -rj '.certInfo.cert' > cert.pem
    
  10. Laden Sie das Root-Zertifikat herunter (ca.crt im folgenden Befehl):

    curl -o ca.crt https://privateca-content-6333d504-0000-2df7-afd6-30fd38154590.storage.googleapis.com/a2c725a592f1d586f1f8/ca.crt
    
  11. Prüfen Sie das Zertifikat mit dem extrahierten Zertifikat und dem Root-Zertifikat:

    openssl verify -verbose -CAfile ca.crt cert.pem
    

    Wenn der Befehl erfolgreich ausgeführt wurde, wird cert.pem: OK zurückgegeben.

Signaturen für Felder für Sicherheitsmetadaten prüfen

Sie können die Signatur der folgenden Felder in der Sicherheitsmetadatendatei unabhängig voneinander prüfen:

  • buildInfo
  • vexInfo
  • healthInfo (falls vorhanden)

Die Daten in den Feldern werden mit SHA‑256 gehasht und dann wird der Hashwert mit dem Algorithmus ECDSAP256_DER signiert. Das Zertifikat und die Zertifikatskette sind in den Metadaten enthalten, damit Sie die Signatur prüfen können. Verwenden Sie das folgende Root-Zertifikat, um die Zertifikatskette zu prüfen:

https://privateca-content-6333d504-0000-2df7-afd6-30fd38154590.storage.googleapis.com/a2c725a592f1d586f1f8/ca.crt

Sie können Signaturen manuell oder mit dem Assured OSS Verifier Tool prüfen.

In den folgenden Schritten wird beschrieben, wie Sie die Signatur des Felds buildInfo in der Datei metadata.json manuell prüfen. Sie können ähnliche Schritte ausführen, um die Signatur des Felds vexInfo oder des Felds healthInfo zu prüfen.

Sie können Signaturen mit verschiedenen Tools prüfen. Im folgenden Beispiel werden die gcloud CLI, OpenSSL (Version 3.0.1 oder höher) und jq (1.7.1 oder höher) verwendet, um die Signaturen unter Linux zu prüfen.

  1. Generieren Sie den SHA‑256-Hashwert des Felds:

    cat metadata.json | jq -rj '.buildInfo' | sha256sum | cut -d ' ' -f1 > actualDigest.txt
    
  2. Extrahieren Sie den Hashwert des Felds, der in der Datei metadata.json angegeben ist:

    cat metadata.json | jq -rj '.buildInfoSignature.digest[0].digest' | cut -d ':' -f2 > expectedDigest.txt
    
  3. Prüfen Sie, ob es Unterschiede zwischen den beiden Hashwerten gibt:

    diff actualDigest.txt expectedDigest.txt
    

    Wenn es keinen Unterschied gibt, erfolgt keine Ausgabe. Das ist der Idealfall. Sie können jetzt die Signatur prüfen.

  4. Extrahieren Sie den Hashwert des Felds in eine .bin-Datei:

    cat metadata.json | jq -rj '.buildInfoSignature.digest[0].digest' | cut -d ':' -f2 | xxd -r -p > digest.bin
    
  5. Extrahieren Sie die Signatur des Hashwerts in eine .sig-Datei:

    cat metadata.json | jq -rj '.buildInfoSignature.signature[0].signature' | xxd -r -p > sig.sig
    
  6. Extrahieren Sie den öffentlichen Schlüssel aus dem öffentlichen Zertifikat in eine .pem-Datei:

    cat metadata.json | jq -rj '.buildInfoSignature.certInfo.cert' | openssl x509 -pubkey -noout  > pubKey.pem
    
  7. Prüfen Sie die Signatur des Hashwerts mit dem extrahierten öffentlichen Schlüssel:

    openssl pkeyutl -in digest.bin -inkey pubKey.pem -pubin -verify -sigfile sig.sig
    

    Wenn die Prüfung erfolgreich war, wird Signature Verified Successfully zurückgegeben. Sie können jetzt das Zertifikat prüfen.

  8. Extrahieren Sie das öffentliche Zertifikat in eine .pem-Datei:

    cat metadata.json | jq -rj '.buildInfoSignature.certInfo.cert' > cert.pem
    
  9. Laden Sie das Root-Zertifikat herunter (ca.crt im folgenden Befehl):

    curl -o ca.crt https://privateca-content-6333d504-0000-2df7-afd6-30fd38154590.storage.googleapis.com/a2c725a592f1d586f1f8/ca.crt
    
  10. Prüfen Sie das Zertifikat mit dem extrahierten Zertifikat und dem Root-Zertifikat:

    openssl verify -verbose -CAfile ca.crt cert.pem
    

    Wenn der Befehl erfolgreich ausgeführt wurde, wird cert.pem: OK zurückgegeben.