Neuigkeiten von trion.
Immer gut informiert.

Container Image Security Scan

Docker

Supply Chain Security ist ein wichtiges Thema. Dabei stehen Container Images zunehmend im Fokus, und das auch nicht ganz zu Unrecht: Bei vielen Kunden erleben wir, dass Zulieferer zwar "Docker Image" als Auslieferungsformat vereinbaren, gleichzeitig jedoch keine Updatevereinbarungen jenseits der eigentlichen Software getroffen werden.
Das ist angesichts der bei Docker Images immens vergrößerten Verantwortung - das Basis-Image gehört ja mit zur Auslieferung - zu wenig.
Durch den zunehmenden Einsatz von Kubernetes finden Container Images auch Einzug in Bereichen, die bisher wenig Erfahrung mit Patchmanagement und Security Prozessen haben. Kubernetes selbst sowie der Betrieb der Umsysteme, wie einer Container Registry, stellen für sich dabei oft schon Herausforderungen dar.

Als Nutzer von Images ist ein Weg, wenigstens etwas Übersicht über die als "Blackbox" betrachteten Images und jeweiligen Abhängigkeiten und transitiven Abhängigkeiten zu gewinnen, mit Image Scanning zu arbeiten.

Image Scanning

Ein Container Image besteht in der Regel aus mehreren Bestandteilen:

  1. Basis Betriebssystem, z.B. Debian oder Alpine

  2. Zusätzlich installierten Paketen, z.B. OpenSSL

  3. Einer Laufzeitumgebung für die Anwendung, z.B. eine Java JVM oder Python

  4. Der eigentlichen Anwendung, z.B. als JAR

  5. Innerhalb der Anwendung befinden sich natürlich noch verwendete Drittbibliotheken

Werden Contaimer Images gescannt, so können die Anwendungen in der Regel ermitteln, welches Basisbetriebssystem verwendet wird und welche Distributionspakete installiert sind. Damit lässt sich dann eine Aussage darüber treffen, ob es sich um einen aktuellen Stand handelt, und welche bekannten Sicherheitslücken hier bereits vorliegen.

Die meisten Scanner können dann auch Artefakte wie Java JAR Dateien weiterehend analysieren, ob hier Drittabhängigkeiten mit bekannten Schwachstellen zum Einsatz kommen. Eben die gesamte Supply Chain.
Typischerweise werden vergleichbar mit Virenscannern dabei Signaturen aus verschiedenen Quellen verwendet, um Schwachstellen zu identifizieren.

Im folgenden werden verschiedene Werkzeuge zur Schwachstellenanalyse von Container Images vorgestellt. Diese funktionieren in der Regel nicht nur mit Docker Images sondern mit dem normierten Container Image Format, das mit verschiedenen Container Runtimes kompatibel ist.

Clair Image Scanner

Bei Clair handelt es sich um ein OpenSource Produkt, dass sich mit der Quay Image Registry oder aber auch Harbor kombinieren lässt.
Die Clair Homepage findet sich auf https://quay.github.io/clair/

Clair bietet eine API an, so dass eine Integration des Image Scanners auch mit anderen Komponenten möglich ist. Neben der API liefert Clair auch die CLI Programme clairctl und clair-scanner aus, die zur manuellen Steuerung verwendet werden kann Für die Zustandshaltung wird eine PostgreSQL Datenbank verwendet.

clair architecture
Abbildung 1. Clair Architektur

Clair und PostgreSQL werden als Container Images angeboten, so ist ein Probelauf von Clair umsetzbar. Dabei ist ohne docker-compose der Start ziemlich aufwendig und bei Problemen die Ausgabe von Clair wenig hilfreich.

Installation von Clair als Docker Container
$ git clone [email protected]:quay/clair.git
$ cd clair
$ docker-compose up

Nachdem Clair gestartet ist, wird zunächst eine Datenbank mit CVE Signaturen aufgebaut. Anschließend ist es möglich, Images zu scannen, zum Beispiel mit clairctl oder über die API.
Als Beispiel zur Veranschaulichung dient das trion/curl Image.

Scan des DockerHub Image trion/curl
$ docker run --rm -it --net=host -v $PWD/local-dev/clair/config.yaml:/config/config.yaml --entrypoint=/bin/bash quay.io/projectquay/clair:4.6.0
$ clairctl report trion/curl
curl ok

Trivy

Trivy ist wesentlich leichtgewichtiger, als Clair. Die Installation besteht lediglich aus einem Binary, das auch als als Container Image in diversen öffentlichen Registries bereitsteht. Eine Datenbank wird nicht benötigt, zur Optimierung wird lediglich ein persistentes Cache Verzeichnis empfohlen.

Trivy ist sehr schnell einsatzbereit und zielt auf den Einsatz im Rahmen von CI-Builds bei der Erstellung eigener Images ab.

Image Scan mit Trivy
$ docker run --rm -v /tmp/trivy:/root/.cache ghcr.io/aquasecurity/trivy:0.37.1 trion/curl
2023-02-01T18:58:10.225Z	INFO	Need to update DB
2023-02-01T18:58:10.225Z	INFO	Downloading DB...
1.67 MiB / 30.83 MiB [--->___________________________________________________________] 5.41% ? p/s ?
3.45 MiB / 30.83 MiB [------>_______________________________________________________] 11.19% ? p/s ?
5.35 MiB / 30.83 MiB [---------->___________________________________________________] 17.35% ? p/s ?
7.41 MiB / 30.83 MiB [------------>_____________________________________] 24.03% 9.57 MiB p/s ETA 2s
9.75 MiB / 30.83 MiB [--------------->__________________________________] 31.64% 9.57 MiB p/s ETA 2s
12.25 MiB / 30.83 MiB [------------------->_____________________________] 39.74% 9.57 MiB p/s ETA 1s
14.40 MiB / 30.83 MiB [---------------------->__________________________] 46.72% 9.70 MiB p/s ETA 1s
15.91 MiB / 30.83 MiB [------------------------->_______________________] 51.62% 9.70 MiB p/s ETA 1s
17.70 MiB / 30.83 MiB [---------------------------->____________________] 57.42% 9.70 MiB p/s ETA 1s
19.40 MiB / 30.83 MiB [------------------------------>__________________] 62.93% 9.61 MiB p/s ETA 1s
21.49 MiB / 30.83 MiB [---------------------------------->______________] 69.71% 9.61 MiB p/s ETA 0s
23.82 MiB / 30.83 MiB [------------------------------------->___________] 77.25% 9.61 MiB p/s ETA 0s
25.89 MiB / 30.83 MiB [----------------------------------------->_______] 83.99% 9.69 MiB p/s ETA 0s
27.76 MiB / 30.83 MiB [-------------------------------------------->____] 90.05% 9.69 MiB p/s ETA 0s
29.87 MiB / 30.83 MiB [----------------------------------------------->_] 96.88% 9.69 MiB p/s ETA 0s
30.83 MiB / 30.83 MiB [---------------------------------------------------] 100.00% 10.62 MiB p/s 3s
2023-02-01T18:59:29.517Z	WARN	This OS version is not on the EOL list: alpine 3.17
2023-02-01T18:59:29.518Z	INFO	Detecting Alpine vulnerabilities...
2023-02-01T18:59:29.529Z	INFO	Trivy skips scanning programming language libraries because no supported file was detected
2023-02-01T18:59:29.529Z	WARN	This OS version is no longer supported by the distribution: alpine 3.17.1
2023-02-01T18:59:29.529Z	WARN	The vulnerability detection may be insufficient because security updates are not provided

trion/curl (alpine 3.17.1)
==========================
Total: 0 (UNKNOWN: 0, LOW: 0, MEDIUM: 0, HIGH: 0, CRITICAL: 0)

Zusätzlich unterstützt Trivy auch ganze Kubernetes Cluster zu scannen: So erfährt man, ob aktuell Images in Kubernetes eingesetzt werden, die Sicherheitslücken aufweisen.

docker scan (snyk)

In neueren Versionen bietet auch Docker selbst die Möglichkeit, Images zu scannen. Früher war dies der kommerziellen Docker Trusted Registry und DockerHub vorbehalten, inzwischen bietet Docker eine Integration von Snyk an, die über die Kommandozeile aufgerufen werden kann.

Dabei sind lediglich eine geringe Menge von Scans pro Monat gratis und zudem ist ein DockerHub Account erforderlich.
Das Kontingent reicht gerade einmal, um das ganze auszuprobieren, ein ernsthafter Einsatz ist jedoch nicht mit dem kostenlosen Image Scan Kontingent möglich.

Docker Images zu scannen ist jedoch mit sehr geringem Einrichtungsaufwand möglich:
Zunächst muss mittels docker login ein Login auf DockerHub erfolgen. Dazu muss dann noch das docker-scan-plugin installiert werden. Bei Debian basierten Distributionen ist dies z.B. durch apt-get install docker-scan-plugin möglich.
Anschließend lassen sich Images durch docker scan auf bekannte Sicherheitslücken analysieren.

Verwendung von docker scan
$ docker scan trion/curl

Testing trion/curl...

Package manager:   apk
Project name:      docker-image|trion/curl
Docker image:      trion/curl
Platform:          linux/amd64
Base image:        alpine:3.17.1

✔ Tested 56 dependencies for known vulnerabilities, no vulnerable paths found.

According to our scan, you are currently using the most secure version of the selected base image

Fazit

Supply Chain Security gewinnt zunehmend an Bedeutung. Das betrifft dann auch Container Images und Docker Images. Neben OpenSource Werkzeugen existiert eine Menge von kommerziellen Werkzeugen, mit denen eine kontinuierliche Überwachung von Container Images möglich ist. Eine Automatisierung kann z.B. im Rahmen von CI Builds bei eigenen Anwendungen und durch Integration in die Kubernets / Container Registry erfolgen.
In jedem Fall ist das Thema Security-Verantwortung und Updateprozess bei Container Images als Auslieferungsmedium zu adressieren.




Zu den Themen Kubernetes, Docker und Cloudarchitektur bieten wir sowohl Beratung, Entwicklungsunterstützung als auch passende Schulungen an:

Auch für Ihren individuellen Bedarf können wir Workshops und Schulungen anbieten. Sprechen Sie uns gerne an.

Feedback oder Fragen zu einem Artikel - per Twitter @triondevelop oder E-Mail freuen wir uns auf eine Kontaktaufnahme!

Los geht's!

Bitte teilen Sie uns mit, wie wir Sie am besten erreichen können.