BLOG

Grundlagen der Containersicherheit: Pipeline-Sicherheit

  Jordan Zebor

  Lori MacVittie

Veröffentlicht am 17. Juli 2019

Wenn Sie gerade erst in diese Serie einsteigen, möchten Sie vielleicht am Anfang beginnen: 
Grundlagen der Containersicherheit: Einführung

Im Zeitalter des Anwendungskapitals ist die CI/CD-Pipeline eine kritische Komponente, von der die Geschwindigkeit und Sicherheit der von ihr erstellten und bereitgestellten Anwendungen abhängt.

Dabei handelt es sich um ein komplexes System aus Tools, die über APIs integriert und durch Skripte oder Plug-ins aufgerufen werden, die den Prozess, den Sie zum Erstellen und letztendlich zur Bereitstellung von containerisierten Anwendungen verfolgen, digital darstellen. Das bedeutet, dass es mehrere Punkte gibt, an denen ein böswilliger Akteur das System kompromittieren könnte. Das mag zwar weit hergeholt klingen, aber bedenken Sie, dass viele Unternehmen heute die Vorteile der Cloud nutzen, was zwangsläufig Fernzugriff bedeutet.

Das bedeutet, dass die Pipeline-Sicherheit aus zwei Teilen besteht: Erstens der Sicherheit der Pipeline selbst. Zweitens: Sicherheit in der Pipeline.

Sicherheit der Pipeline 

1. Authentifizierung ist nicht optional
Wenn Sie Tools und Dienste als Teil Ihrer Pipeline in der Cloud oder als gehosteten Dienst verwenden, sind diese angreifbar. Wenn Sie Remote-Entwicklern oder -Betreibern den Zugriff auf intern gehostete Tools und Dienste ermöglichen, sind diese anfällig für Angriffe. Bevor Sie diese Bedenken abtun, sollten wir nicht vergessen, wie viele Sicherheitsverletzungen es in den vergangenen Jahren gab, die auf die Öffnung von Systemen für den externen Zugriff zurückzuführen waren. Wenn es um die Sicherheit von Pipelines geht, sollte man am besten davon ausgehen, dass sie tatsächlich für böswillige Akteure zugänglich sind.

Dies wiederum bedeutet, dass die erste Aufgabe darin besteht, den Zugriff zu sichern. Eine starke Authentifizierung ist nicht optional. Um den Zugriff auf kritische Systeme fein abzustimmen, wird der Einsatz einer Zugriffskontrolle dringend empfohlen. Auch wenn Sie meinen, dass Systeme nur intern zugänglich sind. Es gibt andere Systeme in Ihrem Netzwerk, über die sich böswillige Akteure Zugriff verschaffen können.

Nachdem Sie die Authentifizierung in Angriff genommen haben, folgt als Nächstes die Autorisierung. Die Autorisierung gibt an, was ein authentifizierter Benutzer innerhalb des Systems tun kann. Es ist wichtig, zwischen rollenbasierten Berechtigungen zu unterscheiden, denn je weniger Anmeldeinformationen auf kritische Komponenten zugreifen, desto besser.

Jede Komponente in der Pipeline sollte eine Authentifizierung und Autorisierung erfordern. Das umfasst alles, von Repositories bis zu den Tools, die zum Erstellen von Anwendungen und Containern verwendet werden.

2. Sichern von Pipeline-Komponenten
Leider kommt es nicht selten vor, dass Angreifer beim Scannen öffentlicher Repositorien riesige Schätze (Anmeldeinformationen und andere Geheimnisse) entdeckt haben. Unter Nummer eins finden Sie eine Erinnerung daran, dass bei Repositories eine Authentifizierung erforderlich ist.

Die Realität heutiger Pipelines besteht darin, dass es sich um eine integrierte Kette von Tools handelt, von denen jedes eine Authentifizierung erfordern sollte. Aus diesem Grund werden Anmeldeinformationen und Geheimnisse (Schlüssel) häufig in Skripten gespeichert, die die Tools und Dienste aufrufen, aus denen die Pipeline besteht. Dies ist eine sehr schlechte Sache™, insbesondere in Verbindung mit schlechten Authentifizierungsverfahren bei Repositories, in denen diese Skripte gespeichert sein könnten.

Anmeldeinformationen sind wichtige Vermögenswerte, die geschützt werden müssen. Achten Sie darauf, wo sie sich befinden, wo sie gespeichert sind und wie sie gesichert sind. Ein hilfreiches Tool zur Verwaltung der „Geheimnis-Ausbreitung“ ist HashiCorp Vault . Vault speichert Geheimnisse sicher an einem zentralen Ort.

Sicherheit in der Pipeline

3. Führen Sie eine Stückliste
Bevor Sie ein System – oder eine Systemkomponente – sichern können, müssen Sie wissen, dass es existiert. Es ist wichtig, eine umfassende Stückliste zu führen, damit Sie wissen, was sich in Ihrer Umgebung befindet. Genauer gesagt: Sie müssen sicherstellen, dass Sie wissen, was in Ihrer Umgebung vorhanden sein sollte – und umgekehrt, was nicht.

Ein gut gepflegtes Inventar kann zum Schutz vor Versuchen beitragen, verunreinigte oder kompromittierte Komponenten in die Pipeline einzuschleusen. Durch die Standardisierung auf einen einzigen Basiscontainer oder zumindest eine überschaubare Handvoll Container können Sie Ihre Fähigkeit zur Erkennung potenzieller Probleme erheblich verbessern. Abweichungen sollten daher einen Alarm auslösen, der untersucht werden kann. Ein wichtiger Schritt ist beispielsweise der Vergleich von Hashes und, sofern verfügbar, die Validierung digitaler Signaturen von Container-Images. Wenn Sie Daten aus einem Remote-Repository abrufen, besteht die Möglichkeit, dass dieses kompromittiert wurde.

Dies war der Fall, als es bei DockerHub zu einer Sicherheitsverletzung kam und die Anmeldeinformationen und Token von 190.000 seiner Benutzer offengelegt wurden . Mithilfe dieser Informationen hätten Angreifer Bilder manipulieren können, die ihnen später Zugriff auf andere Systeme verschafften.

Bleiben Sie nicht bei Container-Images stehen. Bedenken Sie, dass bei Anwendungskomponenten aus externen Quellen die Gefahr besteht, dass sie kompromittiert werden. Ein konkretes Beispiel ist das Einfügen von Krypto-Mining-Software in einen NodeJS NPM-Paket -Ereignisstrom.

Durch die Standardisierung des gepflegten Bestands an Bildern und Komponenten wird auch die Behebung von Schwachstellen optimiert, wenn – und nicht falls – Schwachstellen auftreten. Das Aktualisieren einer einzelnen Basisebene des Betriebssystems ist viel einfacher zu handhaben, als zu versuchen, einen unterschiedlichen Satz von Containern zu aktualisieren.

4. Scannen und beheben
Es gibt unzählige Möglichkeiten, wie Containerumgebungen kompromittiert werden oder für Angriffe anfällig werden können. Am häufigsten denken wir an Schwachstellen in der Software eines Container-Image. Obwohl Sie diesen Problemen Beachtung schenken sollten (Scannen und Aktualisieren/Patchen), gibt es auch konfigurationsbasierte Probleme, die seltener erkannt und behoben werden. Viele davon können mit der richtigen Konfiguration verhindert werden. Ihre Pipeline sollte Tools enthalten, die Kompromisse erkennen oder vor unsicheren Konfigurationen warnen können.

Aqua Security bietet Tools, die beim Scannen und Auswerten von Containern und Konfigurationen helfen können. Kube-Bench und Kube-Hunter sind großartige Ressourcen zum Identifizieren häufiger (aber kritischer) Konfigurationsfehler in Kubernetes-Umgebungen.
 

Alle Scans der Welt helfen nicht dabei, eine Gefährdung oder einen Verstoß zu verhindern, wenn Sie nicht entsprechend handeln. Tripwires „State of Container Security 2019“ ergab, dass fast jedes fünfte (17 %) Unternehmen sich der Schwachstellen in Container-Images bewusst war – diese aber trotzdem einsetzte. Vor diesem Hintergrund überrascht es vermutlich nicht, dass die Umfrage ergab, dass in mehr als der Hälfte (60 %) der Unternehmen in den vergangenen zwölf Monaten ein Container-bezogener Sicherheitsvorfall aufgetreten ist.

Dieser Punkt kann nicht oft genug oder laut genug betont werden: Wenn Sie Sicherheitsscans in Ihre Pipeline integrieren (und das sollten Sie), ist es wichtig, die Ergebnisse weiter zu verfolgen. Das Ausführen eines Scans trägt nicht zur Verbesserung der Sicherheit bei, wenn Sie keine Abhilfe schaffen.

Wir wiederholen: Das Ausführen eines Scans trägt nicht zur Verbesserung der Sicherheit bei, wenn Sie keine Abhilfe schaffen.

Die Sicherheit von Pipelines ist ein vielschichtiges Problem, das eine Herausforderung darstellen kann. Die Pipeline sollte wie jeder andere Satz von Anwendungen behandelt werden, denn letztendlich ist sie das, was sie ist, wenn auch eine betriebliche. Ignorieren Sie die Sicherheit der Pipeline nicht, während Sie Sicherheit in die Pipeline integrieren.

Lesen Sie den nächsten Blog der Reihe: 
Grundlagen der Containersicherheit: Orchestrierung