Der einfachste Weg, Schwachstellen in Docker-Images mit Snyk zu finden

Snyk ist ein spezialisiertes Werkzeug, das Code in Konfigurationsdateien für Infrastruktur analysiert, einschließlich derer, die in Containern und Anwendungsarchiven zu finden sind. Es sucht gezielt nach Schwachstellen.

Snyk, ursprünglich als Cloud-basierte Plattform konzipiert, bietet eine Vielzahl von Produkten an.

Snyk Open Source integriert sich über die Befehlszeile (CLI) nahtlos in einen Git-Workflow. Nach der Aktivierung identifiziert die Software potenzielle Schwachstellen, kategorisiert diese nach ihrem Gefährdungsgrad und korrigiert bekannte Sicherheitslücken automatisch. Diese Funktion lässt sich in den Pull-Request-Prozess integrieren, um Code zu überprüfen, der in Repositories übermittelt wird.

Snyk Infrastructure as Code analysiert und behebt Sicherheitsprobleme in JSON- und YAML-Kubernetes-Konfigurationsdateien. Eine konfigurierbare Regel-Engine erlaubt es, die Empfindlichkeit von Erkennungen innerhalb von Git-Repositories, gemäß den von Administratoren definierten Parametern, anzupassen.

Snyk Container ermöglicht das Testen von Docker-Images und zugehörigen Registrierungen sowohl während ihrer Erstellung als auch danach. Das Programm ist mit CLIs, SCMs, CI-Tools, Container-Registrierungen und Kubernetes kompatibel.

In diesem Artikel werden wir die Nutzung von Snyk Container in Verbindung mit Docker zur Schwachstellenerkennung beleuchten.

Docker-Beispieldatei

Um Snyk für die Schwachstellenerkennung nutzen zu können, benötigen wir zunächst ein Docker-Image. Für unser Beispiel verwenden wir folgendes Docker-Image:

FROM python:3.4-alpine
ADD . /code
WORKDIR /code
RUN pip install -r requirements.txt
EXPOSE 8000 CMD
[“python”, “app.py”]

Zuerst erstellen wir das Image lokal mit folgendem Befehl:

docker build -t 0xyz0/python-app.

Jetzt haben wir ein zu analysierendes Image.

Image-Scan über den Docker-Client

Die Integration von Snyk mit Docker gestaltet diesen Prozess sehr unkompliziert. Der Scan wird mit folgendem Befehl initiiert:

docker scan 0***0/python-app

Dieser Befehl startet die Analyse. Das Ergebnis ist eine mehr oder weniger ausführliche Ausgabe, abhängig von den gefundenen Schwachstellen, zusammen mit einer abschließenden Zusammenfassung:

Der Docker-Scan zeigt sämtliche Schwachstellen des Images an.

Wie Sie sehen können, informiert er nicht nur über die Anzahl der gefundenen Schwachstellen. Beim Scrollen können Sie Details zu den einzelnen Schwachstellen und ihrem Schweregrad einsehen. Zudem werden Empfehlungen für das verwendete Basis-Image gegeben.

Weitere Details zu den Sicherheitslücken können in der Snyk-Schwachstellendatenbank abgerufen werden.

In meinem Fall werden mehrere Alternativen vorgeschlagen. Ich werde mein Dockerfile daher mit der ersten Option modifizieren:

FROM python:3.7.11-slim

ADD . /code

WORKDIR /code

RUN pip install -r requirements.txt

EXPOSE 8000

CMD ["python", "app.py"]

Nachdem das Image neu aufgebaut und gescannt wurde:

docker build -t 0***0/python-app . && docker scan 0***0/python-app

zeigt die Ausgabe deutlich weniger Schwachstellen und bestätigt, dass das sicherere Basis-Image verwendet wird:

Ein detaillierterer Bericht wird erzeugt, wenn die Docker-Datei, die das Image generiert, dem Befehl hinzugefügt wird:

docker scan -f Dockerfile 0***0/python-app

Und wenn Sie nur die eigenen Fehler analysieren möchten, ohne das Basis-Image zu berücksichtigen:

docker scan -f Dockerfile --exclude-base 0***0/python-app

Dieser Service kann auch in Docker-Hub-Repositories integriert werden:

Für diese Funktion ist allerdings ein kostenpflichtiges Abonnement erforderlich. Lokale Scans mit dem kostenlosen Plan sind jedoch möglich, solange Sie bei Docker Hub angemeldet sind (mit klaren Scan-Beschränkungen). Dies ist ideal für die Entwicklung oder die Überprüfung der Sicherheit von Drittanbieter-Images, die Sie einsetzen möchten.

Snyk mit Github Actions

Zunächst ist ein neues Repository mit einem darin enthaltenen Ordner zu erstellen:

.github / worflows /

Um Snyk Container in Github zu nutzen, ist entweder ein neues Image zu erstellen oder das bereits in Docker Hub erstellte zu verwenden. Ein neues Geheimnis namens `SNYK_TOKEN` wird benötigt. Das Token lässt sich über die API-Token Einstellungen im Snyk-Konto generieren.

Dieses Token wird als Geheimnis in Github gespeichert und in der Action genutzt. Weiterhin muss der Name des in Docker Hub erstellten Repositorys übergeben werden, sowie eine Nachricht. Die Ausgaben der einzelnen Schritte können als Variablen in der Nachricht genutzt werden.

with:
args: 'Ein neuer Commit wurde gepusht. Bitte Github-Action überprüfen:
| Worflow: $ {{fromJson (steps.repo.outputs.result) .html_url}} / actions
| Ausführung: $ {{steps.prep.outputs.created}}
| Version: $ {{steps.prep.outputs.version}} '

Der gesamte Workflow wird durch einen Push auf den Master-Branch initiiert. Github Action erkennt die Datei im Ordner `.github / workflows /`.

Abschließende Gedanken 👈

Mit der wachsenden Popularität von Containern häufen sich Sicherheitsvorfälle, oft aufgrund von Fehlkonfigurationen bei der Containerbereitstellung. Snyk stellt ein effizientes und benutzerfreundliches Werkzeug dar, um Fehlkonfigurationen zu vermeiden und häufige Schwachstellen in Docker-Images aufzudecken.