Die Verwendung von Containern für die Entwicklung und Bereitstellung von Software ist seit langem Standard. Die Möglichkeit, dem Programm unabhängig vom Host, auf dem es ausgeführt wird, eine Standardumgebung zur Verfügung zu stellen, Einstellungen schnell zu ändern, einige Komponenten im Container hinzuzufügen oder zu ändern, wurde von vielen Entwicklern geschätzt. Dies ist jedoch nur ein kleiner Teil aller Chips, die die Containerisierungstechnologie liefert.

Wie immer gehen die Entwicklung der Technologie und die Zunahme ihrer Popularität mit der Identifizierung verschiedener Methoden einher, die nicht dem Standard entsprechen, einschließlich Malware. In diesem Artikel werden wir auch die Sicherheitsrisiken des Entwicklungsprozesses im Zusammenhang mit der Verwendung von Containern untersuchen und erläutern, warum DevOps-Prozesse in DevSecOps umgewandelt werden sollten.
Zunächst einmal, warum Container die Sympathie der Entwickler gewinnen und wie die Verwendung der Containerisierung die Entwicklung insgesamt verändert.
Chips
LeichtigkeitIm Vergleich zu virtuellen Maschinen und "eisernen" Servern sind Container für Ressourcen völlig anspruchslos. Auf diese Weise können Sie auf einer einzelnen Maschine erheblich mehr Container ausführen als auf virtuellen Maschinen. Ein Entwickler kann sogar Anwendungskomponenten in Form von containerisierten Mikrodiensten auf seinem Computer ausführen, und er muss nicht einschlafen, um auf eine Systemantwort zu warten. Aufgrund der Tatsache, dass sich die Container den Kern des Systems teilen, sind Start und Stopp viel schneller als beim Neustart der virtuellen Maschine.
IsolierungTrotz der gemeinsamen Nutzung des Kernels wird die Anwendung im Container isoliert von anderen Teilen des Systems und der Anwendungen ausgeführt. Dies bedeutet, dass ein Fehler in der Anwendung nur einen bestimmten Container betrifft.
Durch die Verwendung von Containern während der Entwicklung können Sie dem ewigen Konflikt zwischen Entwicklern und Systemadministratoren um Berechtigungen entkommen. Der Container trennt die Anwendung sicher vom System, sodass sich der Programmierer alle Experimente leisten kann, ohne befürchten zu müssen, das Betriebssystem zu zerstören.
PortabilitätJede Anwendung wird in einer eigenen Containerinstanz mit eigenen Konfigurationsdateien ausgeführt. Dadurch entfallen die Kopfschmerzen beim Verschieben der Anwendung zwischen Hosts: Alles, was für die Arbeit erforderlich ist, wird im Container gespeichert und zusammen mit den übrigen Anwendungskomponenten übertragen.
Container-RepositorysDas Aufkommen des
Open Container Initiative- Standards hat es ermöglicht, öffentliche Bibliotheken mit Container-Images zu erstellen und ein leistungsstarkes Ökosystem zu schaffen, das Container-Engines, Cloud-Plattformen und Tools für die Verwaltung von Containern, Sicherheitsüberprüfungen und anderen Aufgaben kombiniert.
AutomatisierungDurch die Verwendung von Containern können Sie vollautomatische Ketten für die kontinuierliche Integration und Bereitstellung von Anwendungen (CI / CD) erstellen, bei denen der „manuelle“ Teil hauptsächlich aus dem Schreiben von Code besteht. Das Testen, Überprüfen der Codequalität, Packen der Anwendung in ein Docker-Image, Platzieren des Images auf dem Docker Hub und Bereitstellen auf dem Host zur Ausführung kann ohne menschliches Eingreifen durchgeführt werden.
Container-Bedrohungen
Natürlich haben Behälter mit all ihren Vorteilen verschiedene Nachteile. Dies sind beispielsweise Probleme mit der Leistung ressourcenintensiver Anwendungen und der eingeschränkten Portabilität von Bildern, die für verschiedene Architekturen erstellt wurden. Zusätzlich zu technologischen Problemen weisen Container Sicherheitsprobleme auf.
Kernel-SharingNachteile sind wie immer die Kehrseite der Vorteile. Durch die gemeinsame Nutzung von Kerneln wird die Container-Redundanz im Vergleich zu virtuellen Maschinen verringert. Durch die größere Anzahl zulässiger Systemaufrufe wird die Sicherheitsbarriere jedoch dünner, und durch das Ausnutzen von Kernel-Schwachstellen können alle Container gleichzeitig angegriffen werden. Sie können sich nicht an die sensationellen Angriffe von
Spectre und
Meltdown erinnern, mit denen Sie den Speicher eines anderen Prozesses oder Kernels aus dem Benutzerbereich lesen können.
Öffentliche RepositoriesDas Vorhandensein öffentlicher Registrierungen mit Bildern bietet eine große Auswahl an „Wrappern“ für Container, schafft jedoch zusätzliche Bedrohungen, da der Registrierungsserver standardmäßig vertrauenswürdig ist. Wenn es Angreifern gelingt, die Basis-Images mit schädlichen Bibliotheken zu ändern, werden die Änderungen automatisch an alle Server verteilt, die dieses Basis-Image zwischenspeichern, und alle Container, die die Bibliothek verwenden, erhalten automatisch schädliche Funktionen.
Beispiele
- Im Juni 2018 wurden 17 Container mit bösartigem Code aus dem Docker Hub-Portal entfernt. Zuvor konnten sie jedoch über mehrere Monate hinweg mehr als eine Million Mal heruntergeladen werden.
- Im September 2018 wurde auf GitHub ein Beispiel für einen Angriff auf Python-Installationspakete veröffentlicht , bei dem die Datei setup.py so geändert wurde, dass bei der Installation des Pakets schädlicher Code ausgeführt wird. Da diese Datei in der Regel nur zum Hinzufügen eines Moduls verwendet wird, überprüfen nur wenige Personen dessen Inhalt .
- Im Oktober 2018 wurden Informationen zu 12 schädlichen Bibliotheken veröffentlicht, die in das PyPi-Verzeichnis hochgeladen wurden . Die Bibliotheken enthielten Code zum Sammeln von Daten, zum Aufrechterhalten der Präsenz auf dem infizierten Host, zum Starten einer Reverse Shell und zum Ersetzen der Bitcoin-Wallet-Adressen durch die Adresse eines Angreifers .
- Im November 2018 entdeckte eine der Abhängigkeiten der Event-Stream-Bibliothek, die in vielen großen Projekten verwendet wurde , bösartigen Code, der Kryptowährung stehlen und Angriffe auf Dienste im Zusammenhang mit virtuellen Tools ausführen soll. Event-Stream ist eine beliebte Bibliothek mit täglich etwa 2 Millionen Downloads aus dem NPM-Repository.
- Im Januar 2019 wurde im Pickle-Modul der beliebten NumPy Python-Bibliothek eine kritische Sicherheitsanfälligkeit gemeldet, mit der Sie Code remote ausführen können.
Somit reicht eine schädliche Bibliothek aus, um die Anwendung zu gefährden. Natürlich sind Schwachstellen und schädliche Funktionen in gängigen Bibliotheken kein Problem von Containern als solchen, sondern eine Technologie, die die schnelle Verbreitung von Änderungen in Bildern gewährleistet.
Empfehlungen
Offensichtlich erfordert der moderne Entwicklungsprozess einen neuen Ansatz, bei dem die Sicherheit in die CI / CD-Kette integriert wird und DevOps zu DevSecOps wird.

Laut Gartner im Jahr 2019
- Mehr als 70% der Unternehmensentwicklungsprozesse umfassen die automatisierte Überwachung von Sicherheitslücken und Konfigurationen von Open Source-Komponenten und kommerziellen Paketen.
- Mehr als 50% der CI / CD-Prozesse enthalten obligatorische integrierte Codesicherheitsprüfungen.
- Mehr als 60% der Unternehmen werden bei ihrer Entwicklung Versionskontrolle und Infrastrukturautomatisierungskontrolle verwenden.
Betrachten Sie einige der Komponenten, die im Prozess vorhanden sein müssen, damit das Wort "Sec" in seinem Namen keine leere Phrase ist.
Integration von Schecks in alle ProzesseEine Sicherheitsüberprüfung sollte in allen Phasen des Entwicklungsprozesses von der Codeerstellung bis zur Containerisierung und Bereitstellung vorhanden sein.
Automatisierung von SicherheitsüberprüfungenEs ist aus zwei Gründen notwendig:
- Dies reduziert Administrationsfehler und Fehlkonfigurationen.
- Sicherheitsexperten müssen den Code nicht manuell überprüfen und die Einstellungen ändern.
API für SicherheitsfunktionenDie Implementierung solcher Funktionen erfordert, dass das Sicherheitssystem eine API für den Zugriff auf alle Funktionen bereitstellt. Entwickler können das System also nicht nur zur Überprüfung verwenden, sondern auch die entsprechenden Aufrufe in den Code implementieren.
Rollenbasierte ZugriffskontrolleUnterschiedliche Sicherheitsexperten benötigen je nach ihrer Rolle unterschiedliche Zugriffsebenen auf die Überprüfungsmechanismen, da Entwickler die Sicherheitseinstellungen nicht ändern können, aber anschließend nicht für die eingedrungenen Bedrohungen verantwortlich sind.
Docker Registry API-KompatibilitätIm Idealfall sollte der Schutz das Scannen von Docker-Images in jeder Registrierung unterstützen, die die Docker Registry V2-API unterstützt, um die Kompatibilität mit allen gängigen Registrierungen sicherzustellen.
MigrationsschutzEin gefährlicher Moment für Unternehmensbenutzer ist der Übergang von einer monolithischen zu einer Microservice-Architektur. Es ist wichtig, dass Sicherheitsfunktionen in die Integrationsprozesse integriert werden, um den Schutz im automatischen Modus zu gewährleisten.
Ein Beispiel für eine Schutzlösung ist der Deep Security Smart Check von Trend Micro, mit dem Bilder kontinuierlich automatisch gescannt, Schwachstellen und Malware identifiziert werden. Smart Check unterstützt die Docker Trusted Registry-, Amazon Elastic Container Registry-, Azure Container Registry- und Google Container Registry-Containerplattformen. Darüber hinaus lässt sich Trend Micro in führende SIEM-Systeme und Orchestrierungswerkzeuge wie Jenkins, Kubernetes, SumoLogic und Splunk integrieren.
Ein wichtiges Merkmal von Smart Check ist die Einhaltung aller gesetzlichen Anforderungen hinsichtlich der Überprüfung kritischer Schwachstellen und der Ereignisprotokollierung.
Die Implementierung der Containersicherheit in den DevOps-Prozessen in den frühen Entwicklungsphasen vor dem Start von Anwendungen ermöglicht die Entwicklung zuverlässigerer und produktiverer Software sowie
- Erkennen Sie Malware und Bibliotheken.
- Identifizieren Sie Schwachstellen.
- Korrigieren Sie Fehler, bevor Bilder an Orchestrierungswerkzeuge (z. B. Kubernetes) übertragen werden.
- Verhindern Sie, dass bösartiger Code anfällige Software ausführt und bereitstellt.