Container Security - Überblick

In diesem Blogbeitrag möchte ich kurz das Thema Container Security mit Fokus auf Runtime Security erläutern. Betrachten Sie bitte diesen Beitrag als eine als allgemeine Einführung in das Thema und nicht als eine wissenschaftliche Arbeit.
 
 

Was ist die Container Security?

​Ich persönlich würden die Container Security als eine Reihe von Schritten definieren, die dafür zu sorgen haben, die Angriffsfläche in einem ausgeführten Container auf Minimum zu reduzieren und alle böswilligen Aktivitäten zu unterbinden.

Risiko minimieren​

cont sec 01

Wie auf dem oberen Bild sehr vereinfacht dargestellt ist, durchläuft jeder Container eine Reihe von Schritten, bevor dieser auf einem Kubernetes Worker Node ausgeführt wird. Hinter jedem Schritt verbirgt sich eine potenzielle Gefahr. 

Applikationsentwicklung

Ohne einen Anspruch auf die Vollständigkeit habe ich eine Liste der möglichen Risiken / Gefahren zusammengestellt.

  • Unser Code kann „suboptimal“ geschrieben sein und potenziellen Fehler enthalten.
  • Die genutzten Libraries können ebenfalls sicherheitsrelevante Schwachstellen oder sogar Backdoors beinhalten.
  • Das Thema Lizenzierung sollte auch beachtet werden, besonders aus Compliance-Sicht.
  • Die unverschlüsselten Secrets tauchen immer wieder in Code auf.

Die Entwickler müssen sich mit dem Thema Security auseinandersetzten, da nur die Software-Entwickler genau einschätzten können, welche in einem Container eingesetzten Komponenten nach dem Start der Applikation verwendet werden, und welche nicht. 

Container-Erstellung

Bei der Erstellung werden die Komponenten genutzt, die bereits bekannte Schwachstellen beinhalten. In diesem Schritt muss bereits die absolute Mehrzahl an Schwachstellen entdeckt, analysiert, bewertet und abgesehen von Ihren Anforderungen geblockt sein.

Typische Empfehlung hier sind:

  • immer die aktuellen Images verwenden.
  • die vertrauenswürdigen Repositories verwenden.
  • die Images sollen regelmäßig auf die Schwachstellen gescannt werden.

Container Ausführung

Bevor Ihre Container ihr kurzes Leben in einem produktiven Cluster starten, gibt es eine Reihe von Maßnahmen, die die Sicherheit von laufen Container erhöhen können.

  • Die Kubernetes Nodes können ebenfalls eigene Schwachstellen beinhalten. Daher sollen die Nodes aktuell gehalten werden.
  • Auch in diesem Bereich spielt das Thema Secrets eine wichtige Rolle. Die sichere Übertragung der Secrets aus den yaml-Dateien in den Kubernetes Cluster ist der kritische Punkt einer Kubernetes Bereitstellung. Stand heute ist eine sichere Übertragung von Secrets nur mit Hilfe eines externen Tools (z.B. HashiCorp Vault) möglich.
  • Die Container müssen nur die Komponenten (IP-Adressen) erreichen können, die für die vorgesehene Fu​ktionalität wirklich notwendig sind. Die Netzwerk Segmentierung wäre die sichere Lösung in diesem Fall.
  • Die Privilegien sollen immer minimal gehalten werden. Keine Rechte gewähren, die nicht notwendig sind. Die Schlüsselworte hier sind: IAM / RBAC / Open Policy Agent.
  • Es lohnt die bestehende Infrastruktur regelmäßig gegen eine oder andere Benchmarkt (z.B. CIS Benchmarks) zu laufen.

Ein temporäres Ausrollen des Containers in einer Sandboxumgebung, um eben eine Analyse zur Laufzeit durchführen zu können.

Die obere Liste ist nur ein Teil der möglichen Maßnahmen.

Faz​​it​

cont sec 02

Eine der primären Aufgaben im Bereich Container Security ist, dafür zu sorgen, dass das Leben der potenziellen Angreifer so weit wie möglich zu erschweren. Wenn alle oben erwähnten Maßnahmen umgesetzt werden, bleiben dem Angreifer oft nur zwei mögliche Optionen: die Nutzung eines unbekannten Zero-Day-Exploits oder die Verwendung einer 1-Day Vulnerability, die nicht schnell genug geschlossen wurde und bereits missbraucht wurde. Wenn ein Angreifer dank eines Exploits aus dem Container ausbrechen kann, ist er in der Lage, direkt auf das Host-Betriebssystem zuzugreifen. Man stellt sich die Frage „was kann der Angreifer da tun, welche Tools stehen ihm zur Verfügung, welche Komponenten kann er netzwerktechnisch erreichen?“

Auch diese unangenehme Situation lässt sich durch die Verwendung von Container Security Tools blocken, wenn alle z.B. die Option „Container Drift“ aktiviert wird. Diese Option sorgt dafür, dass keine Executables, die nicht vorher auf dem Container gespeichert war, ausgeführt werden darf.

„Complexity is the worst enemy of security, and our systems are getting more complex all the time". Diese Aussage von Bruce Schneier passt perfekt zu dem Bereich Kubernetes.

Die Container Security ist eine komplexe und mehrschichtige Aufgabe, die sich über die ganze CI/CD Pipeline erstreckt. Um die aktuellen Herausforderungen zu meistern, müssen unterschiedliche Teams (Development, Support, Security) noch enger zusammenarbeiten.