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:

using getcap

Getcap kann auch rekursiv mit dem -r-Flag suchen. Zum Beispiel:

using getcap recursively

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:

getcap examples

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:

viewing capabilities with filecap

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:

setting and removing capabilities with 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.

Das könnte dich auch interessieren …