ADMIN

2022

11

2022-10-27T12:00:00

Software-definierte Infrastrukturen

PRAXIS

052

Sicherheit

Container

Securityscanner Aqua Security Trivy

Blick ins Innenleben

von Dr. Guido Söldner

Veröffentlicht in Ausgabe 11/2022 - PRAXIS

Das Arbeiten mit Containern gehört mittlerweile zu den Standardaufgaben von Administratoren. Neben dem reinen Betrieb der Container gilt es jedoch auch, sich um deren Sicherheit zu kümmern – eine Disziplin, die bei der relativ neuen Container-Technologie bisweilen vernachlässigt wird. Das Open-Source-Tool Trivy stellt Informationen zur Container- und Softwaresicherheit bereit.

Trivy [1] wird von der israelischen Firma Aqua Security als Open-Source-Tool bereitgestellt und scannt neben der Sicherheit von Container-Images auch Dateisysteme, Git Repositories und Kubernetes-Cluster und -Ressourcen. Zudem kann die Software OS-Packages und Software Dependencies (auch Software Bill of Material genannt), bekannte Sicherheitslücken (CVEs), Infrastructure-as-Code-Falschkonfigurationen sowie sensitive Information und Passwörter finden.
Installation
Die Installation von Trivy unterstützt alle gängigen Linux-Distributionen sowie macOS. Alternativ lässt sich Trivy als Container betreiben. Eine ausführliche Installationsanleitung finden Sie ebenfalls unter [1]. Bei der Installation unter Debian/ Ubuntu klappt das Aufsetzen des Scanners wie folgt:
sudo apt-get install wget apt-transport-https gnupg lsb-release
 
wget -qO -https://aquasecurity.github.io/trivy-repo/deb/public.key | sudo apt-key add -
 
echo deb https://aquasecurity.github.io/trivy-repo/deb $(lsb_release -sc) main | sudo tee -a /etc/apt/sources.list.d/trivy.list
 
sudo apt-get update
 
sudo apt-get install trivy
Einführung in Securityscans
Sobald die Installation abgeschlossen ist, können Sie mit dem Scannen beginnen. Wir zeigen dies am Beispiel des bekannten nginx-Images. Zuerst laden wir dabei das Image herunter:
Trivy [1] wird von der israelischen Firma Aqua Security als Open-Source-Tool bereitgestellt und scannt neben der Sicherheit von Container-Images auch Dateisysteme, Git Repositories und Kubernetes-Cluster und -Ressourcen. Zudem kann die Software OS-Packages und Software Dependencies (auch Software Bill of Material genannt), bekannte Sicherheitslücken (CVEs), Infrastructure-as-Code-Falschkonfigurationen sowie sensitive Information und Passwörter finden.
Installation
Die Installation von Trivy unterstützt alle gängigen Linux-Distributionen sowie macOS. Alternativ lässt sich Trivy als Container betreiben. Eine ausführliche Installationsanleitung finden Sie ebenfalls unter [1]. Bei der Installation unter Debian/ Ubuntu klappt das Aufsetzen des Scanners wie folgt:
sudo apt-get install wget apt-transport-https gnupg lsb-release
 
wget -qO -https://aquasecurity.github.io/trivy-repo/deb/public.key | sudo apt-key add -
 
echo deb https://aquasecurity.github.io/trivy-repo/deb $(lsb_release -sc) main | sudo tee -a /etc/apt/sources.list.d/trivy.list
 
sudo apt-get update
 
sudo apt-get install trivy
Einführung in Securityscans
Sobald die Installation abgeschlossen ist, können Sie mit dem Scannen beginnen. Wir zeigen dies am Beispiel des bekannten nginx-Images. Zuerst laden wir dabei das Image herunter:
sudo docker pull nginx
Den Scan starten Sie dann via trivy image nginx. Die folgende Ausgabe ist relativ lang und Bild 1 zeigt daher nur einen Ausschnitt davon. Sie sehen darin neben der Bibliothek und der dazugehörigen Version auch die CVE-Nummer und eine Beschreibung. Die genaue Schwachstellenbeschreibung zeigt Ihnen entweder NIST [2] oder die Aqua Vulnerability Database [3].
Insbesondere wenn Sie Third-Party-Container untersuchen, stellen Sie fest, dass die meisten Container-Images eine beträchtliche Anzahl von Schwachstellen in sich tragen. Aus diesem Grund sollten Sie sich in den meisten Fällen auf die kritischen Sicherheitslücken konzentrieren. Dazu grenzen Sie den Scan-Vorgang wie folgt ein:
trivy image --severity CRITICAL nginx
In der Ausgabe ist ersichtlich, dass im aktuellen nginx immer noch zwei kritische Sicherheitslücken zu finden sind. Für die Eigenentwicklung lohnt es sich, ein möglichst kleines Container-Image als Basis-Image zu verwenden. Kleine Abbilder haben einen geringeren Umfang und kommen folgerichtig auch mit weniger Systemkomponenten und Bibliotheken daher. Dementsprechend ist die Anzahl der Sicherheitslücken mit großer Wahrscheinlichkeit geringer. Ein weiterer Vorteil kleiner Images ist, dass sich diese schneller bauen lassen und die IT somit Kosten reduziert.
Mittlerweile raten Experten dazu, entweder ein Distroless-Image oder ein leichtgewichtiges Image wie zum Beispiel Alpine zu verwenden. Die Begrifflichkeit des Distroless-Images ist maßgeblich von Google geprägt und beschreibt Abbilder, die nur die Applikation selbst und die Runtime Abhängigkeiten beinhalten – also nur Komponenten, die für den Anwendungszweck benötigt werden. Beliebte leichtgewichtige Images sind neben Debian und Alpine auch Ubuntu, das in der jüngsten Version deutlich an Größe abgespeckt hat.
Vergleichen Sie diese Images mit der Trivy-CLI, kommt das aktuelle, offizielle Debian-Image auf 81 Vulnerabilities (davon 61 Low, 16 High und 4 Critical). Ubuntu schlägt sich mit nur 17 (davon 15 Low und 2 Critical) sehr gut und beim aktuellen Alpine-Image gibt es zum Zeitpunkt des Verfassens dieses Artikels gar nichts zu bemängeln.
Trotz der niedrigen Zahl der Schwachstellen dieser Abbilder können Sie nicht davon ausgehen, dass ein einmal als sicher geprüftes Image als für immer frei von Schwachstellen gelten kann. Sie müssen vielmehr einen Prozess implementieren, um alle Images aktuell zu halten und bei Bedarf zu ersetzen. In vielen Fällen steht jedoch nicht für jede CVE sofort ein Patch bereit. Typische Gefahrenmitigationen sind hier beispielsweise, gewissen Code in einer Sandbox oder in einem nicht-privilegierten Kontext auszuführen – dies müssen Sie im Einzelfall prüfen. Hilfestellung gibt es für die CVEs in der Aqua-Security-Datenbank, die für jede CVE aufzeigt, wie damit umzugehen ist.
Bild 1: Ein Image-Scan mit Trivy bringt eine lange Liste mit Schwachstellen zur Ausgabe – hier verkürzt dargestellt.
Fehlkonfigurationen finden
Obwohl Trivy als Tool zum Scannen von Container-Images bekannt geworden ist, leistet es mittlerweile deutlich mehr. So ist die Software auch in der Lage, Konfigurationsüberprüfungen für Dockerbuild-Dateien, Kubernetes-, Helm-, Terraform- und AWS-Cloudformation-Artefakte vorzunehmen. Für die Zukunft ist zudem eine Unterstützung von Ansible angedacht.
Listing: Aufruf eines Terraform-Moduls in GitHub
locals {       cluster_type = "simple-zonal" } provider "google" {       … } data "google_client_config" "default" {} provider "kubernetes" {        … } /******************************************* * Import terraform outputs from VPC ******************************************/ data "terraform_remote_state" "vpc" {       … } /******************************************* * GKE Cluster ******************************************/ module "gke" {       source                             =  "terraform-google-modules/kubernetes-engine/google"       project_id                       =  var.project_id       name                               = "${local.cluster_type}-cluster${var.cluster_name_suffix}"       regional                          =  false       region                             = var.region       zones                               = var.zones       network                          = data.terraform_remote_state.vpc.outputs.network_name       subnetwork                     = data.terraform_remote_state.vpc.outputs.subnets_names[0]       ip_range_pods                = data.terraform_remote_state.vpc.outputs.pod_cidr_name       ip_range_services           = data.terraform_remote_state.vpc.outputs.service_cidr_name       service_account              = var.compute_engine_service_account       … }
 Wir wollen solche Scans am Beispiel Terraform zeigen. Bei diesem System besteht die Gefahr, Infrastrukturkomponenten zu deployen, die womöglich Schwachstellen haben. Listing 1 zeigt Code, der ein in GitHub veröffentlichtes Terraform-Modul aufruft. Die Überprüfung des Codes starten Sie mit dem Befehl
trivy config <Verzeichnis>
Aqua Security stellt ähnlich dem Container-Scanning eine Datenbank zur Verfügung, die für sicherheitsrelevante Konfigurationsbelange detaillierte Informationen liefert. Darin finden Sie unter anderem Hinweise, auf welche Art und Weise Sie den IaC-Code so anpassen, dass die damit ausgerollte Infrastruktur in Sachen Security robust wird.
Vergleichbare Scans sind auch bei den Subcommands "image", "repo" und "fs" möglich. Ein Aufruf erfolgt dann so:
trivy image --security-checks config <Image-Name>
 
trivy fs --security-checks config </Verzeichnispfad>
trivy repo --security-checks config <Repo-Name>
Die mitgelieferten Policies sind alle in Rego implementiert und bieten eine gute Basis. Reichen sie Ihnen nicht aus, sind Sie in Lage, diese durch ein eigenes Regelwerk zu ergänzen. Die erwähnte Dokumentation von Trivy zeigt dafür einige Beispiele.
Die aktuell noch experimentelle Unterstützung für das direkte Scannen von Cloudressourcen ist trotz ihres Status interessant. Zum jetzigen Zeitpunkt funktioniert dies nur mit AWS, aber die anderen großen Hyperscaler dürften nicht allzu lange auf sich warten lassen. Um dies zu nutzen, installieren Sie die AWS-CLI und konfigurieren entsprechend den Zugang zum AWS-Konto. Anschließend startet der Scan-Vorgang über den Befehl trivy aws.
Integration in CI-Tools
Damit das Scannen von Sicherheitslücken nicht immer manuell vonstattengehen muss, empfiehlt sich die Integration in ein CI-Tool. Neben GitLab CI ist dies mit GitHub Actions, Circle CI, Travis CI, Bitbucket Pipelines sowie AWS CodePipeline und AWS Security Hub machbar. Die Dokumentation hilft auch wieder bei der Einführung.
Bei GitLab ab Version 15.0 gelingt die Konfiguration besonders einfach, denn die Trivy-Integration ist schon im Produkt inkludiert – und zwar auch in der kostenfreien Variante. Um dies freizuschalten, reicht das Hinzufügen des CI-Templates in die "gitlab-ci.yml"-Datei:
include:
     - template: Security/Container-Scanning.gitlab-ci.yml
Anschließend können Sie die Scan-Ergebnisse im Container-Bau begutachten.
Sehen, was in der Software steckt
Relativ neu in Trivy ist die Unterstützung für Software Bill of Materials. Das Ziel ist dabei den Überblick über alle verwendeten Komponenten, Bibliotheken und sonstige Artefakte zu erhalten, die in einer Software zum Einsatz kommen. Derartige Softwarestücklisten bieten viele Vorteile für Securityteams, wie beispielsweise an der bekannten Schwachstelle in Log4j leicht ersichtlich ist. Mit einem automatisierten Prozess zum Aufstellen der SBOMs können Sie sich direkt an die Behebung der Schwachstelle machen, anstatt mühevoll herauszufinden, ob eine Bibliothek tatsächlich im Einsatz ist.
Die bekanntesten Formate für SBOMs sind SPDX der Linux Foundation und CycloneDX aus dem Open Web Application Security Project. Um eine Stückliste zu erstellen, geben Sie das folgende Kommando ein:
trivy image --format cyclonedx --output result.json alpine:3.15
Damit derartige Stücklisten vertrauenswürdig sind, ist das Projekt Sigstore mit dem Tool Cosign [4] ins Leben gerufen worden. Damit lassen sich mithilfe von Oauth2 Artefakte einfach signieren und überprüfen. Die durch Cosign erzeugten Artefakte nennen sich Attestations. Falls Sie schon über einen Account bei einem unterstützen Provider wie Google, GitHub oder Microsoft verfügen, nutzen Sie auf folgende Art und Weise Cosign zum Signieren einer SBOM:
trivy image --format spdx -o sbom.spdx <IMAGE>
 
COSIGN_EXPERIMENTAL=1 cosign attest --type spdx --predicate sbom.spdx <IMAGE>
Und das Überprüfen von Attestations gelingt wie folgt:
COSIGN_EXPERIMENTAL=1 cosign verify-attestation <IMAGE>
Bild 2: Zwar noch experimentell, aber potenziell sehr wertvoll: Das Scannen von Cloudressourcen mit Trivy.
Fazit
Viele Firmen gehen die Security in cloudnativen Umgebungen noch relativ hemds-ärmlich an. Oft fehlt das notwendige Wissen oder die Implementierung erscheint zu komplex. Mit Trivy steht ein hilfreiches Open-Source-Tool bereit: Es ist einfach in der Bedienung und bietet einen breiten Funktionsumfang – so kann es im kompletten Software-Lebenszyklus samt Entwicklung, CI-Prozessen, Betrieb und Monitoring zum Einsatz kommen.
(jp)
Link-Codes
[2] NIST-Schwachstellen-DB: https://nvd.nist.gov/
[3] Schwachstellen-DB von Aqua Security: https://avd.aquasec.com/