Traditionell ist ein Linux-Prozess entweder privilegiert (wird als Root ausgeführt) oder nicht privilegiert. Privilegierte Prozesse unterliegen keinen Kernel-Berechtigungsprüfungen und haben daher die 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. Funktionen wurden erstmals in Linux 2.2 eingeführt, und mehrere weitere wurden in späteren Versionen hinzugefügt. Sie werden normalerweise für ausführbare Dateien festgelegt und dem Prozess automatisch gewährt, wenn eine Datei mit einer Funktion ausgeführt wird. Fähigkeiten teilen im Wesentlichen die Befugnisse des Root-Benutzers in separate Privilegien auf, was die Sicherheit verbessert, indem der Zugriff eingeschränkt wird, den ein Angreifer durch die Ausnutzung oder den Missbrauch eines Dienstes erlangen würde.
Dieser Leitfaden stellt einige häufig verwendete Funktionen vor und zeigt, wie sie angezeigt und geändert werden können.
Allgemeine Funktionen
Der Linux-Kernel implementiert eine Vielzahl von Fähigkeiten. Einige davon sind:
- CAP_SYS_ADMIN:Erlaubt eine Vielzahl von Operationen. Diese Fähigkeit sollte zugunsten spezifischerer Fähigkeiten vermieden werden.
- CAP_CHOWN:Nehmen Sie Änderungen an der Benutzer-ID und der Gruppen-ID von Dateien vor
- CAP_DAC_READ_SEARCH:Dateilese- und Verzeichnislese-/Ausführungsprüfungen umgehen. Ein Programm mit dieser Fähigkeit kann verwendet werden, um jede Datei auf dem System zu lesen.
- CAP_DAC_OVERRIDE:DAC (Discretionary Access Control) außer Kraft setzen, d. h. Lese-/Schreib-/Ausführungsberechtigungsprüfungen umgehen. Diese Fähigkeit gewährt einer ausführbaren Datei die Möglichkeit, auf jede Datei im Dateisystem zuzugreifen und sie zu ändern.
- CAP_NET_BIND_SERVICE:Ermöglicht die Bindung an Portnummern kleiner als 1024.
- CAP_KILL:Berechtigungsprüfungen umgehen, um Signale an Prozesse wie SIGHUP und SIGKILL zu senden.
- CAP_SYS_NICE:Ändern Sie unter anderem den Niceness-Wert und die Scheduling-Priorität von Prozessen.
- CAP_SYS_RESOURCE:Ermöglicht das Überschreiben verschiedener Limits für Systemressourcen, wie z. B. Festplattenkontingente, CPU-Zeitlimits usw.
Die vollständige Liste ist auf der Handbuchseite zu Capabilities(7) verfügbar.
Dateien können Fähigkeiten in 3 verschiedenen Sätzen zugewiesen werden:erlaubt, vererbbar und wirksam. Threads haben 2 zusätzliche Sets:Umgebungs- und Bounding-Sets. 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 würden. Beim Zuweisen von Funktionen zu Dateien verwenden wir in den meisten Fällen die zulässigen und effektiven Sätze.
HINWEIS:SELinux kann die Funktionen beeinträchtigen. Auf Systemen mit SELinux im Erzwingungsmodus kann es Prozesse daran hindern, ihre Fähigkeiten zu nutzen.
Erforderliche Tools
Es gibt zwei verschiedene Pakete für das Capability Management:libcap und libcap-ng. Letzteres soll einfacher sein als Ersteres. Beides wird in diesem Handbuch behandelt.
libcap bietet getcap und setcap zum Anzeigen und Einstellen von Dateifunktionen, während libcap-ng beide Funktionen in einem Tool, filecap, konsolidiert.
libcap
Installation
Auf Debian, Ubuntu und anderen Debian-basierten Distributionen können die libcap-Dienstprogramme installiert werden mit:
apt update apt install libcap2-bin
Verwenden Sie zur Installation unter CentOS 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
Nutzung
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 Flag -r suchen. Zum Beispiel:
HINWEIS:2>/dev/null wird verwendet, um zu vermeiden, dass die Ausgabe mit „Operation nicht unterstützt“-Fehlern überladen wird, die auftreten, wenn getcap versucht, die Fähigkeiten von Dateien in /sys, /proc usw. abzurufen. Diese speziellen virtuellen Dateisysteme werden nicht unterstützt Fähigkeiten.
Verwenden Sie die folgende Syntax, um Dateifunktionen mit setcap festzulegen:
setcap CAP+set filename
Um beispielsweise CAP_CHOWN und CAP_DAC_OVERRIDE zu den zulässigen und effektiven Sätzen hinzuzufügen, verwenden Sie:
setcap CAP_CHOWN,CAP_DAC_OVERRIDE+ep file1
Um Fähigkeiten aus einer Datei zu entfernen, verwenden Sie das Flag -r:
setcap -r filename
Hier sind ein paar zusätzliche Beispiele:
libcap-ng
Installation
Zur Installation auf Debian, Ubuntu und anderen Debian-basierten Distributionen:
apt update apt install libcap-ng-utils
So installieren Sie auf CentOS:
yum install libcap-ng-utils
Zur Installation auf Fedora:
dnf install libcap-ng-utils
So installieren Sie auf Arch:
pacman -Sy libcap-ng
Nutzung
- Das Programm filecap bezieht sich auf Fähigkeiten ohne das Präfix "CAP_" (zB NET_ADMIN statt CAP_NET_ADMIN).
- filecap arbeitet nicht mit relativen Pfaden, es erwartet den vollständigen Pfad, wenn Dateien oder Verzeichnisse als Argumente übergeben werden.
- filecap erlaubt Ihnen nicht, Capability-Sets anzugeben, es verwendet beim Setzen von Capabilities immer die zulässigen 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 ein paar Beispiele für die Verwendung von filecap zum Untersuchen von Dateien und Verzeichnissen:
Verwenden Sie zum Festlegen einer Funktion für eine Datei die folgende Syntax:
filecap /full/path/to/file cap_name
Zum Beispiel:
filecap /usr/bin/tac dac_override
Um Funktionen zu entfernen, verwenden Sie diese Syntax:
filecap /full/path/to/file none
Hier sind ein paar Beispiele für das Setzen und Entfernen von Fähigkeiten mit filecap:
Schlussfolgerung
Capabilities sind eine leistungsstarke Kernel-Funktion mit breiten Sicherheitsanwendungen. Sie sollten, wann immer möglich, volle Rechte und Root-SUID ersetzen.