Chips VS Bedrohungen für die Containerisierungstechnologie

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


Leichtigkeit

Im 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.

Isolierung

Trotz 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ät

Jede 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-Repositorys

Das 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.

Automatisierung

Durch 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-Sharing

Nachteile 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 Repositories

Das 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



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 Prozesse

Eine Sicherheitsüberprüfung sollte in allen Phasen des Entwicklungsprozesses von der Codeerstellung bis zur Containerisierung und Bereitstellung vorhanden sein.

Automatisierung von Sicherheitsüberprüfungen

Es ist aus zwei Gründen notwendig:

  1. Dies reduziert Administrationsfehler und Fehlkonfigurationen.
  2. Sicherheitsexperten müssen den Code nicht manuell überprüfen und die Einstellungen ändern.

API für Sicherheitsfunktionen

Die 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 Zugriffskontrolle

Unterschiedliche 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ät

Im 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.

Migrationsschutz

Ein 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.

Source: https://habr.com/ru/post/de439986/


All Articles