Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.
Task- und Containersicherheit
Sie sollten das Container-Abbild als erste Verteidigungslinie gegen einen Angriff betrachten. Ein unsicheres, schlecht konstruiertes Bild kann es einem Angreifer ermöglichen, den Grenzen des Containers zu entkommen und Zugriff auf den Host zu erlangen. Sie sollten Folgendes tun, um das Risiko zu verringern, dass dies geschieht.
Recommendations
Wir empfehlen, beim Einrichten Ihrer Aufgaben und Container wie folgt vorzugehen:
Erstellen Sie minimale Bilder oder verwenden Sie verteilungslose Bilder
Beginnen Sie, indem Sie alle fremden Binärdateien aus dem Containerabbild entfernen. Wenn Sie ein unbekanntes Bild aus Docker Hub verwenden, überprüfen Sie das Bild, um auf den Inhalt der einzelnen Layer des Containers zu verweisen. Sie können eine Anwendung wieTauchgang
Sie können aber auch die verwendenverteilungslos-Images, die nur Ihre Anwendung und ihre Laufzeitabhängigkeiten enthalten. Sie enthalten keine Paketmanager oder Shells. Distroless Bilder verbessern das „Signal zum Rauschen von Scannern und reduzieren die Belastung der Provenienz auf genau das, was Sie brauchen.“ Weitere Informationen finden Sie in der GitHub Dokumentation aufverteilungslos
Docker verfügt über einen Mechanismus zum Erstellen von Bildern aus einem reservierten, minimalen Bild namenskratzer. Weitere Informationen finden Sie unterErstellen eines einfachen übergeordneten Images mitkratzer
############################ # STEP 1 build executable binary ############################ FROM golang:alpine AS builder # Install git. # Git is required for fetching the dependencies. RUN apk update && apk add --no-cache git WORKDIR $GOPATH/src/mypackage/myapp/ COPY . . # Fetch dependencies. # Using go get. RUN go get -d -v # Build the binary. RUN go build -o /go/bin/hello ############################ # STEP 2 build a small image ############################ FROM scratch # Copy our static executable. COPY --from=builder /go/bin/hello /go/bin/hello # Run the hello binary. ENTRYPOINT ["/go/bin/hello"] This creates a container image that consists of your application and nothing else, making it extremely secure.
Das vorherige Beispiel ist auch ein Beispiel für einen mehrstufigen Build. Diese Arten von Builds sind aus Sicherheitsaspekt attraktiv, da Sie sie verwenden können, um die Größe des endgültigen Abbilds zu minimieren, das an Ihre Containerregistrierung gesendet wird. Container-Images ohne Build-Tools und andere fremde Binärdateien verbessern Ihre Sicherheitslage, indem die Angriffsoberfläche des Bildes reduziert wird. Weitere Informationen zu mehrstufigen Builds finden Sie unterErstellen von mehrstufigen Builds
Scannen Sie Ihre Bilder auf Schwachstellen
Ähnlich wie ihre Gegenstücke zu virtuellen Maschinen können Container-Images Binärdateien und Anwendungsbibliotheken mit Schwachstellen enthalten oder im Laufe der Zeit Schwachstellen entwickeln. Der beste Weg, um gegen Exploits zu schützen, ist das regelmäßige Scannen Ihrer Bilder mit einem Bildscanner. Bilder, die in Amazon ECR gespeichert sind, können per Push oder On-Demand (einmal alle 24 Stunden) gescannt werden. Amazon ECR verwendet derzeitClairHIGH
oder .CRITICAL
Sicherheitsanfälligkeit sollte gelöscht oder neu erstellt werden. Wenn ein bereitgestelltes Image eine Sicherheitsanfälligkeit entwickelt, sollte es so schnell wie möglich ersetzt werden.
Docker Desktop Edge, Version 2.3.6.0
-
Automatisierung der Bildkonformität mit Amazon ECR undAWS Security Hub
erläutert, wie Informationen zu Schwachstellen von Amazon ECR inAWS Security Hubund automatisieren Sie die Behebung, indem Sie den Zugriff auf anfällige Bilder blockieren.
Entfernen Sie spezielle Berechtigungen aus Ihren Bildern
Die Zugriffsrechte-Flagssetuid
undsetgid
erlauben das Ausführen einer ausführbaren Datei mit den Berechtigungen des Eigentümers oder der Gruppe der ausführbaren Datei. Entfernen Sie alle Binärdateien mit diesen Zugriffsrechten aus Ihrem Bild, da diese Binärdateien zum Eskalieren von Berechtigungen verwendet werden können. Ziehen Sie in Erwägung, alle Shells und Dienstprogramme wienc
undcurl
, die für böswillige Zwecke verwendet werden können. Sie finden die Dateien mitsetuid
undsetgid
-Zugriffsrechte mithilfe des folgenden Befehls.
find / -perm /6000 -type f -exec ls -ld {} \;
Um diese speziellen Berechtigungen aus diesen Dateien zu entfernen, fügen Sie die folgende Anweisung zu Ihrem Containerabbild hinzu.
RUN find / -xdev -perm /6000 -type f -exec chmod a-s {} \; || true
Erstellen einer Reihe von kuratierten Bildern
Anstatt Entwicklern die Erstellung eigener Images zu ermöglichen, erstellen Sie eine Reihe geprüfter Images für die verschiedenen Anwendungsstapel in Ihrer Organisation. Auf diese Weise können Entwickler auf das Erlernen von Dockerfiles verzichten und sich auf das Schreiben von Code konzentrieren. Wenn Änderungen in Ihrer Codebasis zusammengeführt werden, kann eine CI/CD-Pipeline das Asset automatisch kompilieren und dann in einem Artefakt-Repository speichern. Kopieren Sie das Artefakt zuletzt in das entsprechende Bild, bevor Sie es an eine Docker-Registrierung wie Amazon ECR übertragen. Zumindest sollten Sie eine Reihe von Basisbildern erstellen, aus denen Entwickler ihre eigenen Dockerfiles erstellen können. Sie sollten vermeiden, Bilder von Docker Hub zu ziehen. Sie wissen nicht immer, was sich im Bild befindet und etwa ein Fünftel der Top 1000 Bilder haben Schwachstellen. Eine Liste dieser Bilder und ihrer Schwachstellen finden Sie unterhttps://vulnerablecontainers.org/
Anwendungspakete und Bibliotheken auf Schwachstellen durchsuchen
Die Verwendung von Open-Source-Bibliotheken ist jetzt üblich. Wie bei Betriebssystemen und Betriebssystempaketen können diese Bibliotheken Schwachstellen aufweisen. Im Rahmen des Entwicklungslebenszyklus sollten diese Bibliotheken gescannt und aktualisiert werden, wenn kritische Schwachstellen gefunden werden.
Docker Desktop führt lokale Scans mit Snyk durch. Es kann auch verwendet werden, um Schwachstellen und potenzielle Lizenzierungsprobleme in Open-Source-Bibliotheken zu finden. Es kann direkt in Entwickler-Workflows integriert werden und gibt Ihnen die Möglichkeit, Risiken durch Open-Source-Bibliotheken zu minimieren. Weitere Informationen finden Sie in den folgenden Themen:
-
Open Source-Anwendungssicherheitstools
enthält eine Liste von Tools zum Erkennen von Schwachstellen in Anwendungen.
Statische Codeanalyse durchführen
Sie sollten eine statische Code-Analyse durchführen, bevor Sie ein Container-Image erstellen. Es wird gegen Ihren Quellcode durchgeführt und wird verwendet, um Codierungsfehler und Code zu identifizieren, die von einem böswilligen Akteur ausgenutzt werden könnten, wie z.B. Fehlerinjektionen. SonarQube
Ausführen von Containern als Nicht-Root-Benutzer
Sie sollten Container als nicht als Stammbenutzer ausführen. Standardmäßig werden Container alsroot
-Benutzer, es sei dennUSER
-Direktive in Ihrer Dockerfile enthalten ist. Die standardmäßigen Linux-Funktionen, die von Docker zugewiesen werden, beschränken die Aktionen, die alsroot
, aber nur marginal. Beispiel: Ein Container, der alsroot
ist immer noch nicht auf Geräte zuzugreifen erlaubt.
Als Teil Ihrer CI/CD-Pipeline sollten Sie Dockerfiles lint, um nach demUSER
-Direktive und schlagen den Build fehl, wenn er fehlt. Weitere Informationen finden Sie in den folgenden Themen:
-
Docker-File-Lint
ist ein Open-Source-Tool von RedHat, mit dem überprüft werden kann, ob die Datei den Best Practices entspricht. -
Hadolint
ist ein weiteres Werkzeug zum Erstellen von Docker-Images, die den Best Practices entsprechen.
Verwenden eines schreibgeschützten Root-Dateisystems
Sie sollten ein schreibgeschütztes Root-Dateisystem verwenden. Standardmäßig ist das Stammdateisystem eines Containers schreibbar. Wenn Sie einen Container mit einemRO
(schreibgeschütztes) Root-Dateisystem zwingt es Sie, explizit zu definieren, wo Daten gespeichert werden können. Dadurch wird die Angriffsoberfläche reduziert, da das Dateisystem des Containers nur geschrieben werden kann, wenn Berechtigungen ausdrücklich erteilt werden.
Anmerkung
Ein schreibgeschütztes Root-Dateisystem kann Probleme mit bestimmten Betriebssystem-Paketen verursachen, die erwarten, dass sie in das Dateisystem schreiben können. Wenn Sie vorhaben, schreibgeschützte Root-Dateisysteme zu verwenden, testen Sie vorher gründlich.
Konfigurieren von Aufgaben mit CPU- und Speicherlimits (Amazon EC2)
Sie sollten Aufgaben mit CPU- und Speicherbeschränkungen konfigurieren, um das folgende Risiko zu minimieren. Die Ressourcenbeschränkungen eines Vorgangs legen eine Obergrenze für die Menge an CPU und Arbeitsspeicher fest, die von allen Containern innerhalb eines Vorgangs reserviert werden können. Wenn keine Limits festgelegt sind, haben Aufgaben Zugriff auf die CPU und den Arbeitsspeicher des Hosts. Dies kann zu Problemen führen, bei denen Aufgaben, die auf einem gemeinsam genutzten Host bereitgestellt werden, andere Aufgaben von Systemressourcen verhungern können.
Anmerkung
Amazon ECS aufAWS Fargate-Aufgaben müssen Sie CPU- und Speicherlimits angeben, da diese Werte für Abrechnungszwecke verwendet werden. Eine Aufgabe, bei der alle Systemressourcen erfasst werden, ist kein Problem für Amazon ECS Fargate, da jede Aufgabe auf einer eigenen dedizierten Instance ausgeführt wird. Wenn Sie kein Speicherlimit angeben, weist Amazon ECS jedem Container mindestens 4 MB zu. Wenn für die Aufgabe kein CPU-Limit festgelegt ist, weist der Amazon ECS-Container-Agent ihr mindestens 2 CPUs zu.
Verwenden von unveränderlichen Tags mit Amazon ECR
Mit Amazon ECR können und sollten Sie Bilder mit unveränderlichen Tags konfigurieren. Dadurch wird verhindert, dass eine geänderte oder aktualisierte Version eines Bildes mit einem identischen Tag in Ihr Bild-Repository verschoben wird. Dies schützt vor einem Angreifer, der eine kompromittierte Version eines Images mit demselben Tag über Ihr Image schiebt. Indem Sie unveränderliche Tags verwenden, zwingen Sie sich effektiv, ein neues Bild mit einem anderen Tag für jede Änderung zu schieben.
Vermeiden Sie das Ausführen von Containern als privilegiert (Amazon EC2)
Sie sollten vermeiden, Container als privilegiert auszuführen. Für den Hintergrund werden Container alsprivileged
werden mit erweiterten Berechtigungen auf dem Host ausgeführt. Dies bedeutet, dass der Container alle Linux-Funktionen erbt, dieroot
auf dem Host. Die Verwendung sollte streng eingeschränkt oder verboten sein. Wir empfehlen, die Amazon ECS-Container-Agenten-Umgebungsvariable festzulegenECS_DISABLE_PRIVILEGED
auftrue
, um zu verhindern, dass Container alsprivileged
auf bestimmten Hosts, wennprivileged
wird nicht benötigt. Sie können aber auch die verwendenAWS Lambda, um Ihre Aufgabendefinitionen für die Verwendung desprivileged
-Parameter.
Anmerkung
Ausführen eines Containers alsprivileged
wird auf Amazon ECS nicht unterstütztAWS Fargate.
Entfernen Sie unnötige Linux-Funktionen aus dem Container
Im Folgenden finden Sie eine Liste der Standard-Linux-Funktionen, die Docker-Containern zugewiesen sind. Weitere Informationen zu den einzelnen Funktionen finden Sie unterÜbersicht über Linux-Funktionen
CAP_CHOWN, CAP_DAC_OVERRIDE, CAP_FOWNER, CAP_FSETID, CAP_KILL, CAP_SETGID, CAP_SETUID, CAP_SETPCAP, CAP_NET_BIND_SERVICE, CAP_NET_RAW, CAP_SYS_CHROOT, CAP_MKNOD, CAP_AUDIT_WRITE, CAP_SETFCAP
Wenn für einen Container nicht alle oben aufgeführten Docker-Kernfunktionen erforderlich sind, sollten Sie diese aus dem Container löschen. Weitere Informationen zu den einzelnen Docker-Funktionen finden Sie unterKernalCapabilities. Sie können herausfinden, welche Funktionen verwendet werden, indem Sie Folgendes tun:
-
Installieren Sie das Betriebssystem-Paketlibcap-ng
führen Sie das aus: pscap
, um die Funktionen aufzulisten, die jeder Prozess verwendet. -
Sie können auchcapsh
, um zu entschlüsseln, welche Funktionen ein Prozess verwendet. -
Weitere Informationen finden SieLinux-Funktionen 101
Weitere Informationen finden Sie unter.
Verwenden eines Customer Managed Key (CMK), um Bilder zu verschlüsseln, die an Amazon ECR gesendet wurden.
Sie sollten einen vom Kunden verwalteten Schlüssel (CMK) verwenden, um Bilder zu verkörpern, die an Amazon ECR gesendet werden. Bilder, die an Amazon ECR übertragen werden, werden im Ruhezustand automatisch mit einemAWS Key Management Service(AWS KMS-verwalteter Schlüssel. Wenn Sie lieber Ihren eigenen Schlüssel verwenden möchten, unterstützt Amazon ECR jetztAWS KMSVerschlüsselung mit vom Kunden verwalteten Schlüsseln (CMK). Bevor Sie die serverseitige Verschlüsselung mit einem CMK aktivieren, lesen Sie die Überlegungen, die in der Dokumentation zuVerschlüsselung im Ruhezustand.