Skip to main content

Von Image-Sicherheit zu Workload-Sicherheit

Artikel von

31. Oktober 2019

0 Min. Lesezeit

Dies ist der dritte Teil einer vierteiligen Reihe zum Aufbau Ihrer Kubernetes-AppSec-Strategie. Hier finden Sie Teil I und hier Teil II.


In einem unserer früheren Beiträge haben wir darüber gesprochen, wie sich die Paketierung von Anwendungen auf Entwicklerteams verlagert, während Unternehmen Container einführen. Doch nicht nur die Paketierung verlagert sich von der Systemadministration in die Entwicklung, sondern auch das Konfigurationsmanagement.

Kubernetes und die Herausforderung der Konfiguration

Die Kubernetes-API ist eine leistungsstarke Abstraktion für den Aufbau cloudnativer Systeme. Eine unbeabsichtigte Folge dieser umfangreichen API ist jedoch, dass Entwickler große Mengen an Konfigurationen manuell erstellen, hauptsächlich in YAML. Sehen Sie sich zum Beispiel diese Beschreibung eines Kubernetes-Deployments an:

apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
labels:
app: nginx
spec:
replicas: 3
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.7.9
ports:
- containerPort: 80

Diese Konfigurationsdateien werden häufig in Versionsverwaltungssystemen gespeichert, manchmal zusammen mit dem Anwendungscode, manchmal getrennt davon. Allein auf GitHub gibt es mehr als 1,5 Millionen öffentliche Kubernetes-Konfigurationsdateien.

Standardmäßig unsicher

Leider eröffnet die große Konfigurationsfläche von Kubernetes eine Reihe potenzieller Sicherheitsprobleme. Der Vortrag The Path Less Travelled von Ian Coldwater und Duffie Cooley fasst einige der Probleme mit den Kubernetes-Standardeinstellungen aus Sicherheitssicht gut zusammen. Zu den häufig nicht konfigurierten Eigenschaften gehören: 

CPU- und Arbeitsspeicherlimits

Die Begrenzung der erwarteten CPU- und Arbeitsspeicherressourcen bietet sowohl betriebliche als auch Sicherheitsvorteile. Aus Sicherheitssicht geht es darum, die möglichen Auswirkungen von Denial-of-Service-Angriffen auf die Anwendung statt auf den Node oder sogar den gesamten Cluster zu begrenzen.

runAsNonRoot

Standardmäßig laufen Container als Root-Benutzer. Diese Eigenschaft verhindert das zur Laufzeit des Containers. Kann ein Angreifer also einen Befehl im Kontext des Containers ausführen, stehen ihm nur begrenzte Berechtigungen zur Verfügung.

readOnlyRootFilesystem

Standardmäßig ist das für den Container eingebundene Dateisystem beschreibbar. Das bedeutet, dass ein Angreifer, der den Container kompromittiert, auch auf die Festplatte schreiben kann, was bestimmte Angriffe erleichtert. Wenn Ihre Container zustandslos sind, benötigen Sie kein beschreibbares Dateisystem.

Capabilities

Linux-Capabilities steuern auf niedriger Ebene, was Prozesse im Container tun dürfen – vom Schreiben auf die Festplatte bis zur Netzwerkkommunikation. Es ist möglich, alle Capabilities zu entfernen und nur die erforderlichen hinzuzufügen. Dafür müssen Sie jedoch die Liste der Capabilities kennen.

Diese Konfigurationseigenschaften sind selbst keine Schwachstellen, erleichtern Angreifern aber in der Regel die Ausnutzung einer Schwachstelle in einem Image. Kommt es zu einem Exploit, können die Konfigurationseigenschaften den Schaden möglicherweise verstärken. Ihr Risikopotenzial hängt nicht nur von den vorhandenen Schwachstellen ab, sondern auch vom Kontext, in dem sie auftreten.

Konfiguration im gesamten SDLC

Da wir mehr Sicherheitsverantwortung auf Entwicklerteams übertragen, lohnt es sich, diese Herausforderung rund um sichere Konfiguration – ähnlich wie Schwachstellen in Images – aus der Perspektive des SDLC zu betrachten. 

Phase

Beschreibung

Feedback

Vollständigkeit

Lokal

Lokale Tools unterstützen das Erstellen sicherheitsbewusster Konfigurationen – von der Integration in Unit-Test-Workflows bis hin zu Hinweisen in IDEs. Sie lösen jedoch individuelle Probleme statt Problemen auf Team- oder Organisationsebene.

Schnell

Niedrig

CI/CD

Lassen Sie den Build schnell fehlschlagen, wenn Konfigurationsdateien potenziell unsicher sind oder interne Richtlinien nicht erfüllen. Dies muss jedoch in allen relevanten Pipelines implementiert werden.

Schnell

Variabel

Repository

Konfigurationen werden derzeit hauptsächlich in Versionsverwaltungssystemen gespeichert (wobei Helm 3 auch das Speichern von Images in kompatiblen OCI-Registries unterstützt). Wie helfen wir Entwicklern, sichere Konfigurationen zu schreiben, während sie Pull Requests einreichen und Branches erstellen?

Mittel

Mittel

Admission

Kubernetes-Admission-Controller blockieren API-Anfragen und ermöglichen es, unzulässige unsichere Konfigurationen zu verhindern.

Verschiedene Cluster haben jedoch möglicherweise unterschiedliche Richtlinien. Außerdem betreffen diese neue Anfragen, nicht aber bestehende Workloads.

Langsam

Hoch

Produktion

Die Kubernetes-API bildet die laufende Konfiguration ab – hier sollten Sie der Konfiguration die größte Aufmerksamkeit widmen. Probleme an dieser Stelle können sich jedoch auf reale Workloads auswirken, und die Feedbackzyklen zu ihrer Behebung können lang sein.

Langsam

Hoch

Wie bei der Prüfung von Container-Images gibt es auch hier an den verschiedenen Punkten unterschiedliche Zielkonflikte. Tests nur in einer Phase liefern möglicherweise schnelles Feedback, aber weniger Kontrolle – oder umgekehrt. Wie bei Schwachstellen in Images umfasst ein moderner und ausgereifter Sicherheitsprozess wahrscheinlich Konfigurationstests in mehreren Phasen.

Fazit

Unsere Anwendungen bestehen nicht nur aus den Images, mit denen wir sie paketieren, sondern auch aus der Konfiguration, mit der wir sie ausführen. Bisher haben wir diese beiden Bereiche meist getrennt betrachtet und abgesichert. Gespräche über Containersicherheit für Entwicklerteams konzentrieren sich jedoch in den meisten Fällen ausschließlich auf Schwachstellen in Images. Da die Verantwortung für Anwendungssicherheit zunehmend auf Entwicklungsteams übergeht, wird es immer wichtiger, den Zusammenhang zwischen Schwachstellen in Images und Konfiguration zu verstehen und Tools einzusetzen, die beides absichern.

Starten Sie mit Capture the Flag

Erfahren Sie in unserem virtuellen On-Demand-Workshop für Einsteiger, wie Sie Capture-the-Flag-Herausforderungen lösen.

Weiterlesen

feature insights announcement
Blog

Node-gyp-Supply-Chain-Kompromittierung: Ein sich selbst verbreitender npm-Wurm, der sich in binding.gyp versteckt

Ein neuer npm-Wurm missbraucht binding.gyp, um node-gyp während der Installation auszuführen. So können schädliche Pakete Code ohne Lifecycle-Skripte ausführen. Der Wurm stiehlt Zugangsdaten, setzt sich in GitHub fest und verbreitet sich selbstständig über Maintainer.

Article

Bösartige node-ipc-Versionen nach mutmaßlicher Kompromittierung eines Maintainer-Kontos auf npm veröffentlicht

Am 14. Mai 2026 wurden mehrere bösartige Versionen des beliebten npm-Pakets node-ipc in der npm-Registry veröffentlicht. Aktuelle öffentliche Berichte nennen node...

blog feature toolkit
Blog

Bösartige Veröffentlichung des elementary-data-PyPI-Pakets stiehlt Cloud-Zugangsdaten von Data Engineers

Angreifer nutzten eine Sicherheitslücke durch Skriptinjektion in GitHub Actions aus, um eine bösartige Version der elementary-data-Python-CLI (v0.23.3) zu veröffentlichen. Diese enthielt eine Backdoor zum Diebstahl von Zugangsdaten, die auf dbt-Profile, Cloud-Anbieterschlüssel und SSH-Geheimnisse in Data-Engineering-Umgebungen abzielte.