English English French French Spanish Spanish German German
Geekflare wird von unserem Publikum unterstützt. Wir können Affiliate-Provisionen durch den Kauf von Links auf dieser Website verdienen.
Teilen:

Wie kann Docker für die Produktionsumgebung gesichert werden?

Docker-Sicherheit
Invicti Web Application Security Scanner – die einzige Lösung, die eine automatische Verifizierung von Schwachstellen mit Proof-Based Scanning™ bietet.

Schauen wir uns an, wie der Docker für die Produktionsumgebung gehärtet und gesichert wird.

Obwohl Docker hat es Softwareentwicklern und DevOps-Ingenieuren ermöglicht, Anwendungen schnell zu erstellen und bereitzustellen. Außerdem verfügt es über eine große Angriffsfläche für Cyber-Hacker zu nutzen.

Im Folgenden erfahren Sie, wie Sie einen Docker auf einer Linux-Plattform sichern.

  • Konfigurationsfehler
  • Remote-Codeausführung
  • Pufferüberläufe
  • Bildfälschung und so weiter.

Wir werden die folgenden Tools verwenden, wie z Notarserver von Docker Bilder zu signieren und Docker Bank Sicherheit um nach dem Host, der Daemon-Konfiguration usw. zu suchen.

Bevor wir mit dem Sichern fortfahren, wollen wir die Grundlagen berühren.

Was ist eine Containertechnologie?

Mithilfe der Containertechnologie können Entwickler oder DevOps-Ingenieure eine Anwendung so verpacken, dass sie mit Abhängigkeiten ausgeführt werden kann, die von anderen Prozessen isoliert sind.

Es gibt eine Reihe von Containertechnologien auf dem Markt, wie z Apache Mesos, lxc und Docker. Obwohl sie in die Kategorie der Containertechnologie fallen, funktionieren sie unterschiedlich.

Unterschied zwischen VM & VE

Ein Host für virtuelle Maschinen unterscheidet sich grundlegend von einem Host für virtuelle Umgebungen. Auf virtuellen Maschinen verfügt jede containerisierte Anwendung über einen eigenen Satz von Bibliotheken und Betriebssystemen, während Anwendungen standardmäßig auf einem Host einer virtuellen Umgebung wie lxc und Docker den Linux-Kernel gemeinsam nutzen.

Was ist Docker?

Docker ist eine Containertechnologie, mit der Millionen eine Webanwendung erstellen und von einem Test in einer Produktionsumgebung bereitstellen.

Docker-Engine

Die Docker Engine besteht aus drei Komponenten.

  • Ein Server: Diese Komponente ist ein lang laufender Prozess oder Daemon, der für die Verwaltung von Images und Containern verantwortlich ist.
  • REST-API: Diese Schnittstelle ermöglicht die Kommunikation zwischen dem Docker-Daemon und dem Docker-Client-Tool.
  • Docker-Client-Tool: Das Docker-Client-Tool verwendet die REST-API-Komponente, um den Docker-Daemon über den Betrieb einer containerisierten Anwendung zu informieren.

Vertrauenswürdige Docker-Registrierung

Docker Trusted Registry ist eine Image-Speicherlösung von Docker für das Geschäft mit Unternehmensplattformen. Es unterscheidet sich von der Docker Hub. Während der Docker-Hub in der Cloud gehostet wird, ist die Docker Trusted Registry eine On-Premise-Speicherlösung für Docker Enterprise Edition.

Docker-Inhaltsvertrauen

Docker Content Trust bietet die Möglichkeit, Datensignaturen für Bilder zu verwenden, die an und von Remote-Docker-Registern wie Docker Hub gesendet und empfangen werden.

Linux-Namespaces

Linux-Namespaces sind eine Linux-Kernelfunktion, die eine containerisierte Anwendung oder einen Prozess, der auf einem Host einer virtuellen Umgebung ausgeführt wird, von anderen Prozessen isoliert.

Linux-Kontrollgruppen (Cgroups)

Linux Control Groups ist eine Linux-Kernelfunktion, mit der Sie Ressourcen wie CPU-Zeit, Netzwerkbandbreite, Systemspeicher usw. aktiven Prozessen auf einem Host zuweisen können.

Leistungen

Unter Linux gibt es eine Sicherheitsfunktion im Kernel-Subsystem, die festgelegt oder erzwungen werden kann, um den privilegierten Prozess zu begrenzen, den ein Benutzer mit UID 1 ausführt. Obwohl privilegierte Prozesse oder Benutzer diskretionäre Zugriffssteuerungsberechtigungen umgehen können, können sie diese nicht umgehen Fähigkeitsregeln.

Konzentrieren wir uns jetzt auf die Sicherheit.

Sichern des Docker-Hosts

In diesem Abschnitt erfahren Sie, wie Sie den Host sichern, auf dem sich Docker befindet.

Scanning Linux kernel

Bevor Sie ein Docker auf einer Linux-Plattform hosten, müssen Sie zuerst den Kernel überprüfen. Es gibt verschiedene Open-Source-Tools wie z Lynis und OpenVAS Sie können damit den Linux-Kernel scannen.

Kopieren oder klonen Sie das Lynis-Projekt von Github mit dem git clone Befehl.

git clone https://github.com/CISOfy/lynis.git

Verwenden Sie als Nächstes den folgenden Befehl, um zum zu navigieren lynis Verzeichnis und prüfen Sie das Linux-System.

cd lynis; ./lynis audit system

Harden Linux kernel

Nachdem Sie den Linux-Kernel auf systembasierte Schwachstellen überprüft haben, können Sie dem Kernel über eine weitere zusätzliche Schutzschicht hinzufügen Sicherheit. Es bietet Sicherheitsfunktionen wie die folgenden.

  • Verhinderung der Nutzung von Pufferüberläufen
  • / tmp Race Vulnerability Prevention
  • / proc-Einschränkungen, bei denen keine Informationen über Prozessverantwortliche verloren gehen.
  • Verhinderung der Ausführung von willkürlichem Code im Kernel und so weiter.

Zunächst können Sie herunterladen Patches kostenlos von grsecurity und wenden Sie es auf Ihren aktuellen Kernel an. Es sind jedoch keine kostenlosen Patches mehr zulässig.

Install Docker in a VM

Anstatt Docker direkt auf einem Linux-Host zu installieren, können Sie eine zusätzliche Schutzschicht hinzufügen, indem Sie es in einer virtuellen Maschine installieren. Selbst wenn ein Problem mit der Sicherheitsanfälligkeit des Host-Kernels vorliegt, wirkt sich dies nicht auf Docker-Container aus.

Protecting Root Privileges

Standardmäßig benötigt Docker Root-Rechte zum Erstellen und Verwalten von Containern. Das böswillige Skript kann diese Angriffsfläche nutzen, um zu einem Superuser auf einem Linux-Host zu eskalieren und schließlich auf vertrauliche Dateien / Ordner, Bilder, Zertifikate usw. zuzugreifen.

Um dies zu verhindern, können wir den folgenden Befehl verwenden. Wir können uns dafür entscheiden, Funktionen wie setgid und setuid um zu verhindern, dass andere Programme oder Prozesse ihre GID in eine andere ändern GID Dies kann zu Eskalationsrechten führen. Sie können auch überprüfen hier für eine Liste der Linux-Funktionen Definition.

Der folgende Befehl führt den Apache-Webserver-Container aus und löscht den setgid und setuid Fähigkeiten über --cap-drop um zu verhindern, dass der Apache-Container seine GID und UID in eine andere UID und GID ändert.

GID und UID beziehen sich in diesem Zusammenhang auf  group ID und user ID beziehungsweise.

docker run -d --cap-drop SETGID --cap-drop SETUID apache

Docker User

Sie können nicht nur andere Programme oder Prozesse verhindern, sondern auch einen Benutzer zum Verwalten von Docker-Vorgängen wie z docker run  anstatt es über einen Superuser zu verwalten.

Sie können einen Docker-Benutzer folgendermaßen hinzufügen oder erstellen:

sudo groupadd docker

Der obige Befehl erstellt eine Gruppe mit dem Namen docker

Erstellen Sie als Nächstes einen Benutzer mit dem folgenden Befehl:

sudo useradd mike

Verwenden Sie abschließend den folgenden Befehl, um einen Benutzer hinzuzufügen mike zur Gruppe docker Docker-Operationen verwalten.

sudo usermod  -aG docker mike

Managing Container with Cgroups

In einer Produktionsumgebung können Sie mehr als einen Container haben.

Wenn Sie nicht haben cgroups Auf Ihrem Host installiert, können Sie ihn mit dem folgenden Befehl installieren und anschließend überprüfen hier (für Ubuntu) zur Konfiguration.

sudo apt-get install cgroup-bin cgroup-lite cgroup-tools cgroupfs-mount libcgroup1

Wir können die Container begrenzten CPU-Ressourcen über das zuweisen --cpu-shares und --cpuset-cpus

Das folgende Befehlsbeispiel zeigt prodnginx Der Containerprozess wird nur auf dem ersten Kern über ausgeführt --cpuset-cpus und ordnet 20 CPU über zu  --cpu-shares während die proxnginx Der Containerprozess wird auf den ersten beiden CPU-Kernen ausgeführt und es werden auch 20 CPU zugewiesen.

docker run -d --name prodnginx --cpuset-cpus=0 --cpu-shares=20 nginx
docker run -d --name testnginx --cpuset-cpus=2 --cpu-shares=20 nginx

Geben Sie dann den Befehl ein docker stats um die CPU-Auslastung durch die anzuzeigen prodnginx und testnginx Behälter

CONTAINER ID        NAME                CPU %               MEM USAGE / LIMIT     MEM %               NET I/O             BLOCK I/O
845bea7263fb        prodnginx            57.69%              1.258MiB / 985.2MiB   0.13%               578B / 0B           1.33MB / 0B 
189ba15e8258        testnginx            55.85%              1.25MiB / 985.2MiB    0.13%               578b / 0B           1.33MB / 0B 

Es ist eine gute Idee, CPU-Freigaben für einen Docker-Host zu definieren, wenn mehr als ein Container darauf ausgeführt wird.

Managing Containers with Namespaces

Ein Namespace kann verhindern, dass Container als privilegierte Benutzer ausgeführt werden, wodurch Angriffe zur Eskalation von Berechtigungen vermieden werden können.

Wir können den Namespace im Docker aktivieren, indem wir Folgendes verwenden /etc/subuid  und   /etc/subgid Dateien wie unten gezeigt.

  • Erstellen Sie einen Benutzer mit der adduser Befehl
sudo adduser dockremap
  • Richten Sie eine Unter-ID für den Benutzer ein  dockremap
sudo sh -c 'echo dockremap:400000:65536 > /etc/subuid'
  • Richten Sie dann die Subgid für den Benutzer ein dockremap
sudo sh -c 'echo dockremap:400000:65536 > /etc/subgid'
  • Öffnen Sie die daemon.json Datei und füllen Sie es mit dem folgenden Inhalt, um die zu verknüpfen userns-remap Attribut an den Benutzer dockremap
vi   /etc/docker/daemon.json
{ 

 "userns-remap": "dockremap"

}
  • Presse :wq zu speichern und zu schließen daemon.json Datei und starten Sie Docker schließlich neu, um Namespaces auf einem Docker-Host zu aktivieren
sudo  /etc/init.d/docker  restart

Securing the Docker Daemon

Es ist auch erforderlich, den Docker-Dämon zu konfigurieren, um eine sichere Kommunikation zwischen Docker-Client und Docker-Dämon über TLS sicherzustellen.

Verwenden Sie zum Öffnen den folgenden Befehl daemon.json Datei und kopieren Sie den folgenden Inhalt und ersetzen Sie ihn (ersetzen Sie die IP durch Ihre tatsächliche), wie unten gezeigt

vi  daemon.json
{
  "debug": false,
  "tls": true,
  "tlscert": "/var/docker/server.pem",
  "tlskey": "/var/docker/serverkey.pem",
  "hosts": ["tcp://192.168.16.5:2376"]
}

Sichern von Docker-Komponenten

Schauen wir uns an, wie Sie Tools wie verwenden CodeNotar und Notarserver Bilder signieren, um Bildfälschungen zu vermeiden. Darüber hinaus müssen Bilder gescannt werden, um sicherzustellen, dass die Bilder nicht mit Sicherheitslücken gefüllt sind

Wir werden den Notarserver von Docker verwenden, um Bilder zu signieren und zu überprüfen und zu verwenden Ankermotor um Bilder auf Schwachstellen zu scannen.

Verify Images with Notary Server

Bevor wir den Notarserver zum Signieren von Bildern verwenden können, müssen wir Docker-Compose herunterladen und installieren. Wir werden verwenden Docker komponieren einen Notarserver einrichten.

  • Führen Sie den folgenden Befehl aus, um die neueste Version von Docker Compose herunterzuladen
sudo curl -L "https://github.com/docker/compose/releases/download/1.25.4/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
  • Wenden Sie ausführbare Berechtigungen auf das Docker-Compose an, wie unten gezeigt
sudo chmod 700  /usr/local/bin/docker-compose
  • Mit dem folgenden Befehl können Sie testen, ob Sie Docker-Compose erfolgreich installiert haben
docker-compose  --version
  • Jetzt können wir den Notarserver über Docker-Compose installieren
git clone https://github.com/theupdateframework/notary.git
  • Der obige Befehl klont oder kopiert den Notarserver von der Notariat
  • Starten Sie den Notarserver und den Unterzeichner über die folgenden Befehle:
docker-compose build
docker-compose up -d
  • Kopieren Sie dann die Konfiguration und testen Sie die Zertifikate mit dem folgenden Befehl in Ihr lokales Notarverzeichnis
mkdir -p ~/.notary && cp cmd/notary/config.json cmd/notary/root-ca.crt ~/.notary
  • Führen Sie nun den folgenden Befehl aus, um den Notarserver mit dem Docker-Client zu verbinden
export   DOCKER_CONTENT_TRUST=1
export  DOCKER_CONTENT_TRUST_SERVER=https://notaryserver:4443
  • Generieren Sie ein Delegierungsschlüsselpaar über den folgenden Befehl
docker trust key generate mike --dir ~./docker/trust          
  • Jetzt erstellen wir einen neuen Zielschlüssel für den Fall, dass das Repository nicht vorhanden ist
docker trust signer add --key ~/.docker/trust/mike.pub mike mikedem0/whalesay
  • Anschließend können Sie Ihr Docker-Image mit dem Befehl signieren docker trust sign. Sie müssen das Docker-Image vom Docker-Hub abrufen und mit dem Befehl erneut markieren docker pull und docker tag beziehungsweise.
docker trust sign mikedem0/nginx:latest

Sie können Docker-Images auch auf Schwachstellen und Konfigurationsfehler scannen. Du kannst nachschauen hier um herauszufinden, wie Sie mit Anchor Engine nach Schwachstellen suchen und Docker Bench Sicherheit um nach Konfigurationsfehlern zu suchen.

Ich hoffe, dass Ihnen das oben Gesagte eine Vorstellung vom Sicherheits-Docker für die Produktionsumgebung gibt. Vielleicht möchten Sie auch diesen Udemy-Kurs über lesen Hacken und Sichern von Docker-Containern.

Danke an unsere Sponsoren
Weitere großartige Lektüre zu DevOps
Macht Ihr Geschäft
Einige der Tools und Dienste, die Ihr Unternehmen beim Wachstum unterstützen.
  • Invicti verwendet das Proof-Based Scanning™, um die identifizierten Schwachstellen automatisch zu verifizieren und innerhalb weniger Stunden umsetzbare Ergebnisse zu generieren.
    Versuchen Sie es mit Invicti
  • Web-Scraping, Wohn-Proxy, Proxy-Manager, Web-Unlocker, Suchmaschinen-Crawler und alles, was Sie zum Sammeln von Webdaten benötigen.
    Versuchen Sie es mit Brightdata
  • Semrush ist eine All-in-One-Lösung für digitales Marketing mit mehr als 50 Tools in den Bereichen SEO, Social Media und Content-Marketing.
    Versuchen Sie es mit Semrush
  • Intruder ist ein Online-Schwachstellenscanner, der Cyber-Sicherheitslücken in Ihrer Infrastruktur findet, um kostspielige Datenschutzverletzungen zu vermeiden.
    MIT DER INTELLIGENTEN SCHADENKALKULATION VON Intruder