Handle with Care! : Container-Sicherheit braucht umfassende Prüfungen
Container sind eine verbreitete Möglichkeit, um Softwarepakete schnell zum Einsatz zu bringen – doch sie bergen auch spezifische Risiken, deren Minimierung mehr erfordert als einen einfachen Scan nach Schwachstellen.
Geschwindigkeit und die schnelle Verbreitung von Informationen zählen heute mehr denn je – die Fähigkeit, gleichermaßen schnell zu arbeiten, ist für die meisten Softwareentwickler deshalb längst zu einem „Muss“ geworden. Hier kommen Container ins Spiel: Die leichtgewichtigen eigenständigen Softwarepakete enthalten alles, was zur Ausführung einer Anwendung erforderlich ist. Häufig kommen sie zur Entwicklung, Bereitstellung und Wartung von Webanwendungen in der Cloud zum Einsatz und sind eine portable Methode zur Paketierung von Softwarecode – so lassen sich Anwendungen zügig und zuverlässig in verschiedenen Computerumgebungen ausführen.
Container ermöglichen es Unternehmen somit zwar, Applikationen rasch bereitzustellen, bergen aber auch eine Reihe von Risiken – die Sicherheit von Containern ist zunehmend ein Problem. Die Nachfrage nach spezifischen Lösungen für Container-Sicherheit steigt daher rapide an: Bis 2027 soll der globale Markt dafür bereits ein Volumen von 3,9 Milliarden US-Dollar erreichen.
Runtime-Umgebung
Container laufen auf einer Infrastruktur und diese muss entsprechend eingerichtet werden – in modernen Umgebungen üblicherweise automatisiert via „Infrastructure as Code“ (IaC). Gängige Praxis ist dabei heute, Sicherheitslösungen vom Container selbst auf die zugrunde liegende Infrastruktur auszudehnen, um sicherzustellen, dass diese ebenfalls sicher ist.
Doch genau hier sollte man Sicherheit weiter denken: Wird eine Infrastruktur automatisiert eingerichtet, muss sich die Automatisierungslösung naturgemäß bei der Infrastrukturumgebung anmelden – dazu sind Anmeldedaten, Authentifizierungszertifikate und andere Dinge erforderlich. Auch der Infrastrukturanbieter verlangt alle möglichen Angaben und/oder Anmeldeinformationen, um die gewünschte Infrastruktur vollständig einzurichten, die man für den Container und die im Container ausgeführte Anwendung benötigt.
Zur Containersicherheit sollte daher unbedingt auch das sogenannte Secrets-Scanning gehören, um die hierzu benötigten Daten zu schützen. Vorteilhaft ist es, wenn eine Security-Lösung Container, IaC und Secrets-Management in einem einzigen Interface kombiniert und in einer Cloud-Umgebung bereitstellt. Neben der Unterstützung bei der Konfiguration eines sicheren Gates für das Going-Live, sollte sehr früh eine Scanning-Lösung in Aktion treten. Das hilft Entwicklern, Risiken so schnell wie möglich zu verstehen, zu reduzieren und sicherheitsrelevante Fehler frühzeitig zu beheben.
Wichtige Strukturen
Container-Informationen werden typischerweise in einer Docker-Datei abgelegt: Dabei kann es sich um ein einfaches Image handeln, das in einer Registry gespeichert ist, oder um einen produktiven Container in einer Cloud-Umgebung. Die Docker-Datei selbst ist nur eine Beschreibung des Containers – sie gibt an, welches Basis-Image er verwenden soll, welche Benutzer auf dem neuen Image angelegt werden können und welche Ordner und Dateistrukturen mit ihm zu verbinden sind.
IaC arbeitet in der Regel mit dem JSON-Format. Der Datensatz enthält Informationen darüber, wie die Infrastruktur einzurichten ist, also alle Details, um eine Anwendung zum Laufen zu bringen – einschließlich Lastausgleich, Firewall-Regeln und Datenbankverbindungen. Die benötigten „Secrets“ können ebenfalls in der Docker-Datei gespeichert werden. Genauso können aber auch IaC-Dateien oder sogar die Ordner- und Dateistruktur, die an einen Docker-Container angehängt ist, die erforderlichen Anmeldedaten enthalten. All diese Teile müssen daher von einer Sicherheitslösung gescannt und validiert werden.
Suche auf allen Ebenen
Beim Scannen von Docker-Images lassen sich Betriebsbibliotheken oder Komponenten finden, die bekannte Sicherheitslücken aufweisen. Docker-Container, die produktiv gehen, sollten natürlich immer frei von bekannten Schwachstellen sein. Auf ihnen laufen schließlich Anwendungen, die eine Eingangstür zum Internet darstellen und daher ein willkommenes Ziel für Angreifer sind.
Die Überprüfung von Containern identifiziert in erster Instanz Elemente mit bekannten Schwachstellen und gibt Ratschläge, welche Version sicher wäre und wie man sie aktualisieren kann. Noch wichtiger ist aber, dass solche Scans zeigen, ob die Schwachstelle von dem verwendeten Basis-Image oder einer vom Entwickler selbst erstellten Installation herrührt.
Kommt eine Sicherheitslücke aus der eigenen Installation, ist es am einfachsten, diesen Teil zu aktualisieren. Stammt eine Sicherheitslücke hingegen von einem Basis-Image zur Definition des Containers, kann der Entwickler nicht viel tun. Dann sollte man nach Möglichkeit eine neuere Version des Basis-Images wählen, bei der die lückenhafte Bibliothek oder Komponente bereits ausgetauscht wurde.
Da Container nicht immer auf vollständigen Betriebssystemen basieren, sondern zum Beispiel auch auf einem node.js-System, sollte eine Container-Scan-Lösung nicht nur Betriebssystem-Bibliotheken und -Komponenten untersuchen, sondern ebenfalls die Möglichkeit bieten, anfällige node-Module, Java-JAR-Bibliotheken, PHP-Komponenten, C#/.NET-Bibliotheken und andere Sprachen zu identifizieren.
Der nächste Schritt zur Sicherung einer Cloud-Bereitstellung besteht darin, zu überprüfen, ob die Infrastruktur sicher konfiguriert ist oder nicht. Dabei ist „Sicherheit“ relativ: Was für ein Unternehmen oder eine Umgebung sicher ist, kann für andere sehr unsicher sein! IaC-Scans können aber die Einhaltung von Best Practices ermitteln und auf dieser Basis Hinweise geben, was gemacht werden sollte und was nicht. Sie zeigen beispielsweise, dass in einer solchen Umgebung kein Root-User eingerichtet werden, nicht der gesamte eingehende Datenverkehr zu dieser Umgebung laufen sollte oder Ähnliches.
In einigen Fällen, beispielsweise bei einer rein internen Umgebung, kann ein Root-User aber durchaus wichtig und erforderlich sein, um etwa interne Verwaltungsaufgaben durchzuführen und die Umgebung korrekt einzurichten. Im Fall von IaC ist daher eine leistungsstarke Policy-Engine wesentlich, um Ergebnisse gemäß den spezifischen Anforderungen für eine bestimmte Umgebung zu bewerten.
Zu guter Letzt ist sicherzustellen, dass keine Secrets in Docker- oder IaC-Dateien gespeichert sind oder einfach offen in Dateien und Ordnern herumliegen, die an einen Docker-Container angehängt sind. Solche Secrets können Anmeldedaten sein, die für die Authentifizierung an einer bestimmten Cloud-Umgebung verwendet werden – es kann sich aber auch beispielsweise um Datenbank-Anmeldedaten handeln, welche eine Anwendung benötigt. Zertifikate, die etwa zum Starten eines Webservers dienen, der eine Webanwendung mit HTTPS hostet, fallen gleichermaßen in diese Kategorie von Geheimnissen. Und natürlich gibt es noch viele weitere Beispiele dafür, was ein „Secret“ darstellen könnte. Nichts davon darf jedenfalls über eine im Klartext lesbare Datei zugänglich sein – vielmehr sind solche Informationen ausschließlich in speziellen und sicheren Dateispeichern, Key-Management-Systemen oder Ähnlichem vorzuhalten.
Literatur
[1] General Services Administration (GSA), Containerization Readiness Guide, Mai 2021, www.cio.gov/assets/files/Containerization%20Readiness%20Guide_Final%20_v3.pdf
[2] Department for Work & Pensions Chief Security Office, Security Standard – Containerisation (SS-011), Version 2.0, August 2022, https://assets.publishing.service.gov.uk/government/uploads/system/uploads/attachment_data/file/1111437/dwp-ss011-security-standard-containerisation-v2.pdf
[3] Bundesamt für Sicherheit in der Informationstechnik (BSI), IT-Grundschutz-Baustein SYS.1.6 Containerisierung, Februar 2023, www.bsi.bund.de/SharedDocs/Downloads/DE/BSI/Grundschutz/IT-GS-Kompendium_Einzel_PDFs_2023/07_SYS_IT_Systeme/SYS_1_6_Containerisierung_Edition_2023.pdf?__blob=publicationFile&v=4#download=1
Best Practices
Das Sicherheitsrisiko mit Containern ist groß. Deshalb haben bereits mehrere Länder reagiert und Maßnahmen beziehungsweise Best Practices definiert, um Container-Sicherheitsrisiken vorzubeugen.
In den USA hat beispielsweise das General Services Administration’s Data Center and Cloud Optimization Initiative Program Management Office einen Containerisation Readiness Guide herausgegeben [1]. In Großbritannien hat das Ministerium für Arbeit und Renten den Security Standard – Containerisation [2] veröffentlicht und in Deutschland hat das Bundesamt für Sicherheit in der Informationstechnik (BSI) Richtlinien zur sicheren Verwendung von Containern im Grundschutz-Baustein SYS.1.6 Containerisierung [3] festgeschrieben.
All das belegt eindrücklich die Wichtigkeit von Container-Sicherheit, die heute eine Priorität für Entwicklerteams sein sollte, um Risiken für Unternehmen und die Gesellschaft im Allgemeinen zu vermeiden. ■
Julian Totzek-Hallhuber ist Manager Solution Architects EMEA/APAC/LATAM bei Veracode.