Wie man Linux Datei Capabilities verwaltet
Traditionell ist ein Linux-Prozess entweder privilegiert (als Root ausgeführt) oder unprivilegiert. Privilegierte Prozesse unterliegen nicht der Kernel-Berechtigungsprüfung und haben somit volle Macht über ein System. Eine Fähigkeit ist ein eindeutiges und unabhängiges Privileg, das von einem Prozess verwendet werden kann, um bestimmte Berechtigungsprüfungen zu umgehen. Die Funktionen wurden erstmals in Linux 2.2 eingeführt, und in späteren Versionen wurden mehrere weitere hinzugefügt. Sie werden normalerweise auf ausführbare Dateien gesetzt und werden dem Prozess automatisch gewährt, wenn eine Datei mit einer Fähigkeit ausgeführt wird. Fähigkeiten teilen im Wesentlichen die Macht des Root-Benutzers in separate Privilegien auf, was die Sicherheit verbessert, indem es den Zugang einschränkt, den ein Angreifer durch Ausnutzung oder Missbrauch eines Dienstes erlangen würde.
Dieser Leitfaden stellt einige häufig verwendete Funktionen vor und zeigt, wie sie angezeigt und modifiziert werden können.
Welche Capabilities gibt es?
Der Linux-Kernel implementiert eine Vielzahl von Fähigkeiten. Einige von ihnen sind es:
- CAP_SYS_ADMIN: Erlaubt eine Vielzahl von Operationen. Diese Fähigkeit sollte zu Gunsten spezifischerer Fähigkeiten vermieden werden.
- CAP_CHOWN: Änderungen an der Benutzer-ID und der Gruppen-ID von Dateien vornehmen
- CAP_DAC_READ_SEARCH: Umgehung der Datei- und Verzeichnis-Lese-/Ausführungsprüfung. Ein Programm mit dieser Fähigkeit kann zum Lesen jeder Datei auf dem System verwendet werden.
- CAP_DAC_OVERRIDE: DAC (Discretionary Access Control) außer Kraft setzen, d.h. die Berechtigungsprüfungen Lesen/Schreiben/Ausführen umgehen. Diese Fähigkeit gewährt einer ausführbaren Datei die Möglichkeit, auf jede Datei auf dem Dateisystem zuzugreifen und sie zu ändern.
- CAP_NET_BIND_SERVICE: Erlaubt die Bindung an Portnummern unter 1024.
- CAP_KILL: Umgehung der Berechtigungsprüfungen für das Senden von Signalen an Prozesse wie SIGHUP und SIGKILL.
- CAP_SYS_NICE: Ändern Sie u.a. den Nettigkeitswert und die Terminierungspriorität von Prozessen.
- CAP_SYS_RESOURCE: Erlaubt das Überschreiben verschiedener Begrenzungen der Systemressourcen, wie z.B. Plattenkontingente, CPU-Zeitbegrenzungen usw.
Die vollständige Liste ist auf der Handbuchseite capabilities(7) verfügbar.
Dateien können in 3 verschiedenen Sätzen Fähigkeiten zugewiesen werden: zulässig, vererbbar und effektiv. Die Fäden haben 2 zusätzliche Sätze: Ambient und Bounding. Jeder Satz kann null oder mehr Fähigkeiten enthalten, mit Ausnahme des effektiven Satzes für Dateien, der eigentlich ein einzelnes Bit ist. Diese Sätze definieren komplexe Kernel-Verhaltensweisen, die den Rahmen dieses Leitfadens sprengen. Bei der Zuweisung von Fähigkeiten an Dateien werden wir in den meisten Fällen die zulässigen und effektiven Sätze verwenden.
ANMERKUNG: SELinux kann Capabilities beeinträchtigen. Auf Systemen mit SELinux im Enforcement-Modus kann es Prozesse daran hindern, ihre Fähigkeiten auszunutzen.
Erforderliche Werkzeuge
Es gibt zwei verschiedene Pakete für das Fähigkeitsmanagement: libcap und libcap-ng. Letztere ist so konzipiert, dass sie einfacher ist als die erste. Beide werden in diesem Leitfaden behandelt.
libcap bietet getcap und setcap zum Anzeigen und Einstellen von Dateifunktionen, während libcap-ng beide Funktionen in einem Werkzeug, filecap, zusammenführt.
libcap
Installation
Auf Debian, Ubuntu und anderen Debian-basierten Distributionen können die libcap-Werkzeuge mit installiert werden:
apt update apt install libcap2-bin
Zur Installation unter CentOS verwenden Sie den folgenden Befehl:
yum install libcap
Um auf Fedora zu installieren, verwenden Sie den folgenden Befehl:
dnf install libcap
Um auf Arch zu installieren, verwenden Sie den folgenden Befehl:
pacman -Sy libcap
Verwendung
getcap zeigt einfach die einer Datei zugewiesenen Fähigkeiten an, falls vorhanden. Verwenden Sie die folgende Syntax:
getcap /path/to/binary
Zum Beispiel:
Getcap kann auch rekursiv mit dem -r-Flag suchen. Zum Beispiel:
HINWEIS: 2>/dev/null wird verwendet, um die Ausgabe nicht mit „Operation not supported“ Fehlern zu überladen, die auftreten, wenn getcap versucht, die Fähigkeiten von Dateien in /sys, /proc usw. zu erhalten. Diese speziellen virtuellen Dateisysteme unterstützen keine Funktionen.
Um Dateifunktionen mit setcap zu setzen, verwenden Sie die folgende Syntax:
setcap CAP+set filename
Um beispielsweise CAP_CHOWN und CAP_DAC_OVERRIDE zu den erlaubten und effektiven Sets hinzuzufügen, verwenden Sie:
setcap CAP_CHOWN,CAP_DAC_OVERRIDE+ep file1
Um Funktionen aus einer Datei zu entfernen, verwenden Sie das -r-Flag:
setcap -r filename
Hier sind einige zusätzliche Beispiele:
libcap-ng
Installation
Zur Installation auf Debian, Ubuntu und anderen Debian-basierten Distributionen:
apt update apt install libcap-ng-utils
Zur Installation unter CentOS:
yum install libcap-ng-utils
Zur Installation auf Fedora:
dnf install libcap-ng-utils
Zur Installation auf Arch:
pacman -Sy libcap-ng
Verwendung
- Das Filecap-Programm bezieht sich auf Fähigkeiten ohne das „CAP_“-Präfix (z.B. NET_ADMIN statt CAP_NET_ADMIN).
- filecap arbeitet nicht mit relativen Pfaden, es erwartet den vollen Pfad bei der Übergabe von Dateien oder Verzeichnissen als Argument.
- filecap erlaubt keine Angabe von Capability-Sets, sondern verwendet beim Setzen von Capabilities immer die erlaubten und effektiven.
So zeigen Sie die einer Datei zugewiesenen Funktionen an:
filecap /full/path/to/file
Um ein Verzeichnis rekursiv zu durchsuchen, verwenden Sie:
filecap /full/path/to/dir
Um das gesamte Dateisystem mit Filecap zu durchsuchen, verwenden Sie einen der folgenden Befehle:
filecap / filecap -a
Hier sind einige Beispiele für die Verwendung von filecap zur Untersuchung von Dateien und Verzeichnissen:
Um eine Fähigkeit in einer Datei festzulegen, verwenden Sie die Syntax:
filecap /full/path/to/file cap_name
Zum Beispiel:
filecap /usr/bin/tac dac_override
Um Fähigkeiten zu entfernen, verwenden Sie diese Syntax:
filecap /full/path/to/file none
Hier sind einige Beispiele für das Setzen und Entfernen von Fähigkeiten mittels Filecap:
Schlussfolgerung
Die Fähigkeiten sind ein leistungsstarkes Kernel-Feature mit umfangreichen Sicherheitsanwendungen. Sie sollten, wann immer möglich, die vollen Privilegien und die Root-SUID ersetzen.