Filesystem Capabilities

Eine sehr interessante Alternative zu den klassischen und komplizierteren MAC-Systemen, die in diesem Buch vorgestellt werden, sind die Filesystem-Capabilities. Diese können sicherlich kein komplexes MAC ersetzen, aber auf Systemen, wo diese nicht existieren, können diese das System wesentlich sicherer machen. Ein großes Problem des UNIX-Systems ist die Tatsache, dass viele Befehle und Applikationen root-Privilegien verlangen, da sie einen privilegierten Port benötigen, die Datei /etc/shadow lesen oder schreiben müssen, etc. In den meisten Fällen benötigen diese Programme aber nur wenige root-Privilegien. Dennoch müssen diese Applikationen mit sämtlichen root-Rechten ausgestattet werden. Eine schöne Alternative wäre die Zuweisung von einzelnen Capabilities.

Für den Befehl /bin/ping würde dies bedeuten, dass er nicht mehr SetUID-root wäre, sondern lediglich die Capability CAP_NET_RAW erhalten würde. Dies erlauben die Filesystem-Capabilities. Diese benötigen für Ihre Funktion einen Kernel-Patch. Dieser wurde von Serge E. Hallyn[*] auf der linux-security-module-Mailingliste veröffentlicht[*] und befindet sich auch auf der CD (fsposixcaps.diff). Zusätzlich benötigen Sie für die Funktion die entsprechenden Befehle. Eine modifizierte Bibliothek libcap für Fedora Distributionen mit den entsprechenden Befehlen findet sich auf http://www.kaigai.gr.jp/ und auf der CD (libcap-1.10-25.kg.3.i386.rpm).

Wurde die Unterstützung für die Filesystem-Capabilities installiert, so kann anschließend der Befehl /bin/ping entsprechend angepasst werden. Hierzu entfernen Sie zunächst dsas SetUID-Bit von dem Befehl:

[spenneb@supergrobi ~]$ ls -l /bin/ping
-rwsr-xr-x 1 root root 41652 12. Apr 10:56 /bin/ping
[spenneb@supergrobi ~]$ ping -c 1 localhost
PING localhost (127.0.0.1) 56(84) bytes of data.
64 bytes from localhost (127.0.0.1): icmp_seq=1 ttl=64 time=0.314 ms
--- localhost ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 0.314/0.314/0.314/0.000 ms
[spenneb@supergrobi ~]$ sudo chmod 755 /bin/ping
[spenneb@supergrobi ~]$ ping -c 1 localhost
ping: icmp open socket: Die Operation ist nicht erlaubt
Bei dem anschließenden Test darf ein einfacher Benutzer den Befehl /bin/ping nicht mehr ausführen. Nun setzen wir die Capability CAP_NET_RAW im effektiven (e) und erlaubten (p) Capability-Set für den Befehl. Anschließend darf der Benutzer wieder den Befehl /bin/ping benutzen. Mit dem Befehl attr kann man sich die zusätzlich zur Datei gespeicherten erweiterten Attribute anzeigen lassen.
[spenneb@supergrobi ~]$ sudo setfcaps cap_net_raw=ep /bin/ping
[spenneb@supergrobi ~]$ ping -c 1 localhost
PING localhost (127.0.0.1) 56(84) bytes of data.
64 bytes from localhost (127.0.0.1): icmp_seq=1 ttl=64 time=0.314 ms
--- localhost ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 0.314/0.314/0.314/0.000 ms
[spenneb@supergrobi ~]$ attr -l /bin/ping
Attribute "capability" has a 16 byte value for /bin/ping

Chris Friedhoff hat auf seiner Webseite http://www.friedhoff.org/fscaps.html weitergehende Hinweise zur Konfiguration der Filesystem-Capabilities zusammengetragen.

Achtung. Mit dem Filesystem-Capabilities können Sie die Fähigkeiten eines Benutzers erweitern. Wenn Sie zum Beispiel dem Befehl modprobe die Capability CAP_SYS_MODULE zuweisen, kann jeder Benutzer mit diesem Befehl Kernel-Module nachladen. Dies kann von Vorteil sein, aber kann auch Sicherheitslücken erzeugen. Ein großer Vorteil von AppArmor und SELinux ist, dass jede Überprüfung, ob ein Vorgang erlaubt ist, von zwei Access-Control-Systemen durchgeführt wird. Sie müssen als normaler Linux-Benutzer zunächst die Rechte besitzen und das MAC muss auch den Zugriff erlauben. Mit AppArmor oder SELinux können Sie nicht über das DAC-System hinaus weitergehende Rechte zuweisen. Bei Verwendung der Filesystem-Capabilities können Sie das Linux-Rechte-System aushebeln.

Ralf Spenneberg 2007-11-13