Privilegierte Container

Privilegierte Container

Root im Container ist Root im Host-Kernel.

Was ist Privilegierte Container?

Ein Container ist nicht automatisch eine Sicherheitsgrenze. Ein darin als root laufender Prozess wird vom Host-Kernel als root behandelt. Mit privilegiertem Modus und einem eingebundenen Host-Dateisystem fällt die Isolation weitgehend weg. Sie prüfen die Capabilities, lesen über den Mount das Host-Dateisystem, entwenden den privaten Root-SSH-Schlüssel und hinterlegen Ihren eigenen Schlüssel für dauerhaften Zugang. Die Lösung umfasst zwei Dateien: eine USER-Anweisung für einen Benutzer ohne Root-Rechte im Dockerfile sowie das Entfernen des privilegierten Modus und aller Capabilities in Compose.

Was Sie lernen in Privilegierte Container

Privilegierte Container — Trainingsschritte

  1. Eine Shell im Container

    Bob greift Vosswark an. Dessen Medienservice passt die Größe hochgeladener Kundenbilder an und wandelt deren Format um. Eine ungepatchte Bildbibliothek in diesem Dienst ermöglicht ihm, Code aus der Ferne auszuführen. Jetzt hat er eine Shell im Container. Wie er hineingelangt ist, ist hier weniger wichtig als die Frage, was er mit den Rechten des Containers tun kann.

  2. Wer bin ich, und was kann ich tun

    Zwei Fragen entscheiden, ob dieser erste Zugang eine Sackgasse oder ein Weg zum Host ist: Unter welchem Benutzer läuft der Prozess, und welche Rechte gewährt ihm der Kernel? Eine Datei beantwortet beides.

  3. Was der privilegierte Modus ermöglicht

    Privilegiert bedeutet, dass die üblichen Einschränkungen weitgehend entfallen. Bob prüft, ob dem Container außerdem direkt Dateien des Hosts zugänglich gemacht wurden.

  4. Den SSH-Schlüssel des Hosts stehlen

    Der Container war nur das Mittel zum Zweck. Bobs Ziel liegt auf dem Host: in einem Verzeichnis, dessen Inhalt ihm den Zugang zu weiteren Rechnern der Flotte verschaffen kann.

  5. Was den Ausbruch möglich machte

  6. Eine Hintertür hinterlassen

    Den Schlüssel zu lesen, ist Datendiebstahl. Auf den Host zu schreiben, verschafft Bob dauerhaften Zugang. Da der Mount nicht schreibgeschützt ist, kann er seinen öffentlichen Schlüssel an die Datei authorized_keys des Hosts anhängen. Danach braucht er den gestohlenen Schlüssel nicht mehr. Bei Erfolg gibt der Befehl nichts aus, wie in einer echten Shell. Die fehlende Ausgabe macht den Angriff leicht zu übersehen.

  7. Prüfen, worauf ein einziger Container Zugriff hatte

    Bob besitzt nun den privaten Schlüssel des Hosts und hat seinen eigenen öffentlichen Schlüssel hinterlegt. Der Media-Worker sollte nur hochgeladene Kundenbilder bearbeiten. Mit dieser Konfiguration bot er aber Zugang zu jedem Rechner, der dem gestohlenen Schlüssel vertraut, sowie einen jederzeit nutzbaren Zugang zum Host.

  8. Der Host meldet einen Lesezugriff

    Vosswark überwacht die Integrität von Dateien auf seinen Hosts. Das System muss nicht wissen, welcher Container etwas getan hat: Es meldet, dass der private Schlüssel des Hosts gelesen wurde.

  9. Die Startkonfiguration des Containers prüfen

    Das Dockerfile beschreibt den Inhalt des Images, aber nicht die Optionen, mit denen der Container gestartet wurde. Genau diese Optionen verursachten den Vorfall. Aufschluss darüber gibt die Konfiguration des laufenden Containers auf dem Host.

  10. Das Dockerfile öffnen

    Die beiden Teile der Lösung liegen in verschiedenen Dateien: Das Image legt fest, unter welchem Benutzer der Prozess läuft. Die Deployment-Konfiguration bestimmt, auf welche Host-Ressourcen er zugreifen darf. Beginnen Sie beim Image.

Abdeckung der Sicherheits-Frameworks

CWE

  • CWE-250 Execution with Unnecessary Privileges
  • CWE-269 Improper Privilege Management

MITRE ATT&CK

  • T1611 Escape to Host

CIS Controls

  • CIS 4 Secure Configuration of Enterprise Assets and Software
  • CIS 6 Access Control Management

NIST CSF

  • PR.AT-02 Individuals in specialized roles are provided with awareness and training so that they possess the knowledge and skills to perform relevant tasks with cybersecurity risks in mind
  • PR.PS Platform Security
  • PR.AA Identity Management, Authentication, and Access Control