GNU/Linux >> LINUX-Kenntnisse >  >> Panels >> Docker

So automatisieren Sie Docker-Sicherheitsaudits mit Docker Bench for Security

Docker ist praktisch, kann aber auch ein Sicherheitsrisiko darstellen. Es ist wichtig, Docker Engine vor möglichen Bedrohungen zu schützen, insbesondere wenn Sie einen Docker-Host in der Produktion ausführen.

Docker Bench for Security ist ein automatisiertes Skript, das Ihnen helfen kann, Probleme mit Ihrer Konfiguration zu finden. Das Bench-Skript scannt Ihren Host, um Schwachstellen in Ihrem Docker-Engine-Setup zu finden. Es wird von Docker selbst als Open-Source-Tool zur Sicherheitsüberprüfung bereitgestellt.

Das Skript ausführen

Der einfachste Weg, Docker Bench zu verwenden, besteht darin, das Skript herunterzuladen und direkt auszuführen. Sie können es auf GitHub einsehen, wenn Sie Bedenken wegen seines Inhalts haben.
Verwenden Sie Git, um das Bench-Repository zu klonen. Führen Sie das Skript mit Ihrer Shell aus. Docker Bench sollte mit sudo ausgeführt werden , da es Prüfungen enthält, die Root-Zugriff erfordern.

git clone https://github.com/docker/docker-bench-security.git
cd docker-bench-security
sudo sh docker-bench-security.sh

Die Prüfungsergebnisse werden in Ihrem Terminal angezeigt. Das Scannen dauert einige Sekunden. Es kann eine Minute oder länger dauern, wenn Sie viele Container ausführen.

Den Bericht verstehen

Der Bericht ist farbcodiert, damit Sie Probleme schnell identifizieren können. Blau INFO Linien protokollieren den Eintritt in verschiedene Scanabschnitte. Ein grüner PASS Linie zeigt, dass Ihr System die Prüfung bestanden hat. Rot WARN Linien weisen auf eine potenzielle Schwachstelle hin.

Docker Bench führt insgesamt über 200 einzelne Prüfungen durch. Die vollständige Liste ist im GitHub-Repository des Projekts verfügbar. So werden Tests kategorisiert.

Hostkonfiguration

Diese Gruppe von Tests konzentriert sich auf Schwachstellen in der Sicherheitsüberwachung Ihres Hosts. Es werden Prüfungen für die ordnungsgemäße Prüfung von Docker-Verzeichnissen, die Verwendung einer dedizierten Partition für Container und die Installation einer aktualisierten Docker-Version durchgeführt.

Daemon-Konfiguration

Die Daemon-orientierten Tests prüfen, ob der Docker-Socket nicht über eine ungesicherte Verbindung offengelegt wird. Netzwerkdatenverkehr zwischen Containern auf der standardmäßigen bridge Das Netzwerk sollte eingeschränkt und unsichere Registrierungen entfernt werden.

In diesem Abschnitt wird auch nach unangemessenen Berechtigungsgewährungen für Container gesucht. Container sollten keine neuen Privilegien erwerben können. Dadurch könnte ein Angreifer aus dem Container herauswachsen.

Der nächste Abschnitt, Docker-Daemon-Konfigurationsdateien, hat einen ähnlichen Fokus. Es stellt sicher, dass das Docker-Installationsverzeichnis und der Unix-Socket über die entsprechenden Berechtigungen und Eigentumsrechte verfügen. Das Dateisystem von Docker sollte root:root gehören mit restriktiven Berechtigungen von 644 .

Container-Images

VERWANDTE So bewerten Sie die Sicherheit der Docker-Engine

Docker Bench führt eine grundlegende Überprüfung der Dockerfiles für Ihre bekannten Images durch. Es wird nach dedizierten Containerbenutzern gesucht, das Vorhandensein von HEALTHCHECK Anweisungen und die Verwendung von Content Trust zur Überprüfung der Datenintegrität.

Dieser Testabschnitt gibt auch Warnungen aus, die Sie an grundlegende Image-Hardening-Schritte erinnern. Verwenden Sie vertrauenswürdige Basisimages, wenden Sie neue Sicherheitspatches an und vermeiden Sie die Installation unnötiger Pakete. Diese Maßnahmen helfen Schwachstellen innerhalb zu beseitigen Container.

Container-Laufzeit

Die Container Runtime-Tests überprüfen Ihre ausgeführten Container. Dieser Abschnitt enthält über 30 Tests, die von der Verfügbarkeit von SELinux und AppArmor bis zur Verwendung geeigneter Dateisystem-Mounts und Netzwerkoptionen reichen.

Sie verlieren Punkte, wenn Sie privilegierte Container verwenden oder den Docker-Socket in einen Container mounten. Container dürfen nicht in der Lage sein, zusätzliche Berechtigungen zu erlangen oder das Hostsystem zu stören.

Bench sucht auch nach SSH-Servern, die innerhalb ausgeführt werden Behälter. Davon ist abzuraten, da ein direkter Containerzugriff vermieden werden sollte. Verwenden Sie vorzugsweise docker exec vom Host, um mit Containern zu interagieren.

Zusätzliche Tests befassen sich mit der Nutzung von CPU- und Speicherlimits. Ein unbegrenzter Container könnte übermäßig viele Ressourcen verbrauchen und schließlich zu einem Speichermangel auf dem Host führen. Networking überprüft nicht verwendete Ports sowie Anfragen, privilegierte Ports Containern zuzuordnen.

Docker-Schwarm

Docker Bench enthält einen zusätzlichen Abschnitt für Docker Swarm-Benutzer. Es konzentriert sich auf das Kennzeichnen von ungesicherten Geheimnissen und Zertifikaten, die nicht korrekt rotiert werden. Außerdem ist eine korrekte Netzwerkkonfiguration erforderlich, einschließlich der Verwendung verschlüsselter Overlay-Netzwerke.

Der Schwarmabschnitt gibt eine Warnung aus, wenn der Schwarmmodus aktiviert ist, aber nicht tatsächlich verwendet wird. Wenn Sie Swarm nicht verwenden möchten, deaktivieren Sie es, indem Sie docker swarm leave --force ausführen .

Häufig auftretende Probleme beheben

Die meisten Docker-Hosts zeigen mehrere Warnungen an, wenn Sie keine aktiven Schritte unternommen haben, um sie zu härten. Hier sind einige Maßnahmen, die Sie ergreifen können, um einige der häufigsten Docker Bench-Berichte zu beheben.

Audit für Docker-Dateien aktivieren

Docker empfiehlt die Verwendung von Audits auf Systemebene für wichtige Docker-Verzeichnisse. Die Überwachung protokolliert alle Vorgänge, die sich auf überwachte Dateien und Verzeichnisse auswirken. Dadurch können Sie potenziell destruktive Änderungen nachverfolgen.

Stellen Sie sicher, dass Sie auditd haben Eingerichtet. Bearbeiten Sie /etc/audit/audit.rules und fügen Sie die folgenden Zeilen am Ende der Datei hinzu:

-w /etc/default/docker -p wa
-w /etc/docker -p wa
-w /etc/docker/daemon.json -p wa
-w /lib/systemd/system/docker.service -p wa
-w /lib/systemd/system/docker.socket -p wa
-w /usr/bin/docker -p wa
-w /usr/bin/docker-containerd -p wa
-w /usr/bin/docker-runc -p wa
-w /var/lib/docker -p wa

Das -p wa Anweisung bedeutet, dass auditd protokolliert Schreibvorgänge und Attributänderungen, die sich auf die Dateien auswirken. Wenn Ihre Docker Bench-Ausgabe vorschlägt, dass Sie Auditing für zusätzliche Verzeichnisse verwenden, fügen Sie diese ebenfalls zur Liste hinzu. Die Verzeichnisse von Docker können sich im Laufe der Zeit ändern.

Sie müssen auditd neu starten So übernehmen Sie Ihre Änderungen:

sudo systemctl restart auditd

Den Daemon stärken

Docker Bench findet normalerweise Probleme mit Ihrer Daemon-Konfiguration. Folgendes zu /etc/docker/daemon.json hinzufügen wird mehrere Daemon-Warnungen stillen.

{
    "icc": false,
    "live-restore": true,
    "no-new-privileges": true,
    "userland-proxy": false,
    "userns-remap": "default"
}
  • icc:  Dadurch wird verhindert, dass Container über die standardmäßige bridge miteinander kommunizieren Netzwerk. Container erreichen einander nur, wenn sie explizit mit einem --link verknüpft sind .
  • Live-Wiederherstellung: Wenn Sie dies festlegen, können Container weiter ausgeführt werden, selbst wenn der Daemon stoppt. Dies ist in Produktionsumgebungen ratsam, in denen Sie Ausfallzeiten minimieren möchten.
  • keine-neuen-Berechtigungen: Dadurch wird verhindert, dass Container ihre Berechtigungen mit Befehlen wie setuid erhöhen und setgid .
  • userland-proxy:  Das Deaktivieren bedeutet, dass iptables wird verwendet, um Host-Port-Verkehr in Container zu leiten. Ohne sie wird der Userland-Proxy-Prozess von Docker verwendet, was die Angriffsfläche Ihres Daemons erhöht.
  • users-remap:  Dies ermöglicht die Verwendung von Benutzernamensräumen, also root in einem Container wird einem weniger privilegierten Hostbenutzer zugeordnet. Dadurch wird das Risiko verringert, dass ein kompromittierter Container root ausführen kann Befehle auf Ihrem Host. Verwenden von default wird Docker anweisen, zu diesem Zweck ein dediziertes Benutzerkonto einzurichten.

VERBINDUNG: So verwenden Sie Cron mit Ihren Docker-Containern

Anpassen der Berichtsausgabe

Docker Bench unterstützt mehrere Flags, mit denen Sie die Ausgabe anpassen können:

  • -b:  Farben deaktivieren. Nützlich, wenn Sie das Skript in einer CI-Umgebung ausführen, die keine vollständige ANSI-Ausgabe unterstützt.
  • -p:  Schließen Sie keine vorgeschlagenen Abhilfemaßnahmen ein. Hilfreich, wenn Sie sich auf die Warnungen konzentrieren und das Rauschen in der Ausgabe reduzieren möchten.
  • -l report.txt:  Ausgabe in report.txt schreiben anstelle des Terminals.
  • -c check_5.1,check_5.2:  Führen Sie nur die Prüfungen 5.1 und 5.2 aus. Die Testliste ist auf GitHub verfügbar.
  • -e check_5.1,check_5.2:  Schließen Sie die Prüfungen 5.1 und 5.2 aus.

Sie können Flags miteinander kombinieren, um den gewünschten Bericht zu erstellen. Wenn ein ganzer Abschnitt von Prüfungen nicht auf Sie zutrifft, sollten Sie erwägen, einen Shell-Alias ​​zu erstellen, damit Sie Docker Bench schnell mit einer Reihe von angewendeten Flags ausführen können.

Schlussfolgerung

VERWANDTE So verwenden Sie Docker Scan, um Schwachstellen in Ihren Bildern zu finden

Die Verwendung des Docker Bench for Security-Skripts hilft Ihnen, Schwachstellen in der Sicherheit Ihres Docker-Hosts zu finden und zu beheben. Die Reaktion auf alle ausgegebenen Warnungen trägt dazu bei, Ihren Host zu härten und Ihre Sicherheitslage zu verbessern.

Denken Sie daran, dass Docker Bench kein umfassender Test ist. Es gibt noch andere Aspekte bei der Aufrechterhaltung der Docker-Sicherheit, die ebenfalls nicht übersehen werden sollten.

Ein kompromittierter Container könnte Angreifern Zugang zu Ihren Systemen verschaffen, selbst wenn Sie über eine starke Sicherheit auf Hostebene verfügen. Sie können dieses Risiko reduzieren, indem Sie Docker Bench zusammen mit aktiven Container-Schwachstellenscannern wie Trivy und Clair verwenden. Diese helfen Ihnen, Probleme innerhalb zu identifizieren Ihrer Container, z. B. veraltete Abhängigkeiten, die ausgenutzt werden könnten.

Während eine gute Punktzahl immer das Ziel ist, sollten Sie auch beachten, dass Docker Bench auf Produktions-Workloads ausgerichtet ist. Nicht alle Prüfungen sind für die lokale Docker-Installation eines Entwicklers relevant. Führen Sie das Skript aus, lesen Sie die Warnungen und beurteilen Sie, welche auf Ihre Umgebung zutreffen.


Docker
  1. So installieren Sie Jenkins mit Docker

  2. So stellen Sie Microservices mit Docker bereit

  3. So verwenden Sie Docker Compose

  4. So verbinden Sie Docker-Container

  5. So stellen Sie Apps mit Rancher bereit

So scannen Sie Docker-Container-Images mit Trivy auf Schwachstellen

So löschen Sie ungenutzte Docker-Ressourcen

So bearbeiten Sie Code in Docker-Containern mit Visual Studio-Code

So führen Sie Docker-Container aus

So entfernen Sie Docker-Container

So stoppen Sie Docker-Container