Skip to main content

Anwendungsschwachstellen in Kubernetes-nativen Tools anzeigen

Artikel von
container scans

19. November 2019

0 Min. Lesezeit

Aufbauend auf den neuen Kubernetes-Funktionen in Snyk Container haben wir getestet, wie sich Schwachstellendaten enger in das Kubernetes-Ökosystem integrieren lassen. Snyk bietet umfangreiche Dashboards und Reporting-Funktionen – ideal, wenn Sie sich ausschließlich auf Sicherheit konzentrieren. Aber was, wenn Sie beim Arbeiten mit Kubernetes nicht den Kontext wechseln möchten? Können wir die umfangreichen APIs in Snyk Container nutzen, um Schwachstelleninformationen näher an Kubernetes heranzubringen?

Kubectl und die Vulnerability-CRD

Eine Möglichkeit, Kubernetes zu erweitern, sind benutzerdefinierte Ressourcen. Mit diesem Mechanismus lassen sich Kubernetes neue Objekte hinzufügen, die anschließend mit Tools bearbeitet werden können, die mit der Kubernetes-API arbeiten. So kann Kubernetes neben Deployments und CronJobs auch Ihre neue Ressource verwalten. Verwenden wir eine Custom Resource Definition (CRD), um eine Schwachstelle zu beschreiben.

kubectl apply -f https://raw.githubusercontent.com/snyk-labs/ksnyk/master/ksnyk/commands/vulnerability.yaml

So können Sie überprüfen, ob die CRD korrekt installiert wurde:

$ kubectl api-resources --api-group snyk.io                                                                            NAME SHORTNAMES APIGROUP NAMESPACED KIND
  vulnerabilities   vuln,vulns snyk.io    true Vulnerability

Jetzt müssen wir unsere CRD mit Daten aus Snyk befüllen. Die Snyk-Kubernetes-Integration scannt Workloads im Cluster automatisch und ermittelt Schwachstellen in den zugehörigen Images. Wir können diese Informationen über die Snyk-API auslesen und mithilfe einiger Tools aus https://github.com/snyk-labs/ksnyk in Kubernetes einfügen.

Sobald die Informationen geladen sind, können wir mit jedem Kubernetes-API-Client die gefundenen Schwachstellen in unserem Namespace auflisten. Sehen wir uns das in kubectl an.


$ kubectl get vulns

NAME                             TITLE       PATH                 PACKAGE SEVERITY

snyk-linux-coreutils-104909      Improper Input Validation       replicationcontroller/example-rc:nginx coreutils medium
snyk-linux-coreutils-114540      Race Condition       replicationcontroller/example-rc:nginx coreutils medium
snyk-linux-expat-107842          Access Restriction Bypass       replicationcontroller/example-rc:nginx expat/libexpat1 medium
snyk-linux-expat-450908          XML External Entity (XXE) Injection    deployment.apps/snyky:docker.io/garethr/garethr_snyky   expat high
snyk-linux-expat-460765          XML External Entity (XXE) Injection    replicationcontroller/example-rc:nginx expat/libexpat1 high
snyk-linux-gcc8-447557           Out-of-Bounds       replicationcontroller/example-rc:nginx gcc-8/libstdc++6 high
snyk-linux-git-175991            Untrusted Search Path       deployment.apps/snyky:docker.io/garethr/garethr_snyky git high
snyk-linux-glibc-107098          Improper Input Validation       replicationcontroller/example-rc:nginx glibc/libc-bin medium
snyk-linux-glibc-121839          Resource Management Errors       replicationcontroller/example-rc:nginx glibc/libc-bin medium

Die Ausgabe zeigt kurze Details zu den Schwachstellen, darunter den Schweregrad, den betroffenen Workload und das Paket im Image, das die Schwachstelle enthält. Noch ausführlichere Angaben, einschließlich einer vollständigen Beschreibung, erhalten Sie, wenn Sie eine einzelne Schwachstelle abfragen.


$ kubectl get vulns snyk-linux-coreutils-104909 -o yaml                                                              
apiVersion: snyk.io/v1
kind: Vulnerability
metadata:
creationTimestamp: "2019-09-24T14:05:57Z"
generation: 1
name: snyk-linux-coreutils-104909
namespace: default
resourceVersion: "28382"
selfLink: /apis/snyk.io/v1/namespaces/default/vulnerabilities/snyk-linux-coreutils-104909
uid: 6e305adb-ded4-11e9-9bf7-025000000001
spec:
cvssScore: 6.5
cvssV3: CVSS:3.0/AV:L/AC:L/PR:L/UI:N/S:C/C:N/I:H/A:N
description: |
## Overview
chroot in GNU coreutils, when used with --userspec, allows local users to escape to the parent session via a crafted TIOCSTI ioctl call, which pushes characters to the terminal's input buffer.
## References

- [ADVISORY](https://security-tracker.debian.org/tracker/CVE-2016-2781)

- [http://www.openwall.com/lists/oss-security/2016/02/28/2](http://www.openwall.com/lists/oss-security/2016/02/28/2)

- [http://www.openwall.com/lists/oss-security/2016/02/28/3](http://www.openwall.com/lists/oss-security/2016/02/28/3)

disclosureTime: "2017-02-07T15:59:00Z"
image: nginx
isUpgradable: false
kind: replicationcontroller
language: linux
package: coreutils
packageManager: linux
path: replicationcontroller/example-rc:nginx
publicationTime: "2017-02-07T15:59:00Z"
resource: example-rc
severity: medium
title: Improper Input Validation
url: https://dev.snyk.io/vuln/SNYK-LINUX-COREUTILS-104909
version: 8.30-3

Schwachstellendaten in Ihren Octant-Dashboards anzeigen

Octant ist ein neues Kubernetes-Dashboard von VMware. Obwohl Octant erst vor Kurzem veröffentlicht wurde, deckt es bereits viele Funktionen der kubectl-CLI ab und bietet außerdem ein leistungsstarkes Plugin-Modell.

Anleitungen zur Installation des Snyk-Octant-Plugins und zum Importieren der entsprechenden Daten aus der Snyk-API in Kubernetes finden Sie unter https://github.com/snyk-labs/ksnyk. Beachten Sie, dass Sie Snyk Container-Kunde sein müssen, um die API zu nutzen.

Sehen Sie sich unten das Deployment-Dashboard an. Im Statusbereich sollten Schwachstellendaten angezeigt werden, darunter die Anzahl der Schwachstellen mit hohem, mittlerem und niedrigem Schweregrad im Workload.

Kubernetes-Dashboard mit der Konfiguration und dem Status von „Deployment / snyky“, darunter ein Replikat und drei Schwachstellen mit hohem Schweregrad.

Octant stellt auch Informationen zu Custom Resources hervorragend dar. Wenn Sie also die oben erwähnte Vulnerability-CRD installieren, zeigt Octant Schwachstelleninformationen zu jedem Workload im gerade angezeigten Namespace an.

Kubernetes-Dashboard mit Workload-Details, Servicekonten, Secrets und einer vulnerabilities.snyk.io-Tabelle mit Sicherheitsergebnissen

Dieser Prototyp kratzt nur an der Oberfläche dessen, was wir in Octant anzeigen können. Es wird auch spannend zu sehen sein, wie sich das Octant-Plugin-Ökosystem entwickelt und wie wir Schwachstellendaten in Kubernetes mit anderen benutzerdefinierten Ressourcen kombinieren können.

Fazit

Wie bereits erwähnt, handelt es sich dabei um Experimente und nicht um fertige Funktionen. Wir freuen uns jedoch über frühzeitiges Feedback. Wenn Sie Snyk Container-Kunde sind, können Sie die Tools unter https://github.com/snyk-labs/ksnyk jetzt ausprobieren. Diese Dienstprogramme zeigen sowohl die Erweiterbarkeit der Kubernetes-Plattform als auch die Vorteile einer erstklassigen API in Snyk, auf der wir aufbauen können.

Container-Sicherheit mit Fokus auf Entwickler

Snyk findet und behebt automatisch Schwachstellen in Container-Images und Kubernetes-Workloads.