Natürlich erlauben Mandatory Access Control Systeme, wie die in diesem Buch beschriebenen AppArmor und SELinux, aber auch LIDS, grsecurity, RSBAC, etc. die Verwaltung dieser Capabilities. Diese Verwaltung ist meist auch sehr flexibel und komfortabel. Aber Linux-Systeme, die diese Funktionen nicht besitzen, können auch von den Capabilities profitieren. Die meisten Administratoren kennen nur nicht die Möglichkeiten.
Die Capabilities können über /proc/sys/kernel/cap-bound gelesen und geschrieben werden. Dies ist das Capability-Bounding-Set. Dieses gibt die maximal ausübbaren Capabilities für das gesamte System an. Hierbei wird jede Capability durch ein Bit repräsentiert. Diese Konfiguration ist aber mit Vorsicht zu nutzen. Selbst root kann eine Capability, die dem System entzogen wurde, nicht wieder zur Verfügung stellen. Lediglich der init-Prozess könnte dies tun. Da dieser aber diese Funktion nicht anbietet, können Sie über diese Datei die maximal verfügbaren Capabilities nach dem Start des Systems konfigurieren. Eine Modifikation ist dann nur durch einen Reboot möglich. Um zum Beispiel eine Modifikation des Kernels zu verhindern, können Sie die Capability CAP_SYS_MODULE entfernen. Damit ein potentieller Angreifer nicht direkt über /dev/mem ein Modul nachlädt oder das Capability Bounding Set verändert, sollten Sie auch immer die Capability CAP_SYS_RAWIO entfernen. Allerdings funktionieren dann einige Programme nicht mehr, die direkten Zugriff auf den Speicher und I/O-Ports benötigen. Hierzu gehört auch X.
Um das Capability-Bounding-Set zu editieren, gibt es mehrere Möglichkeiten. Zwei Programme sind auf der CD enthalten. Hierbei handelt es sich um den Befehl lcap der in der Debian-Distribution enthalten ist und das Perl-Skript syscapset. Mit beiden Befehlen können Sie die aktuellen Capabilities auslesen und sie setzen:
[root@supergrobi ~]# syscapset list
audit_control enabled
audit_write enabled
chown enabled
dac_override enabled
dac_read_search enabled
fowner enabled
fsetid enabled
....
[root@supergrobi ~]# lcap
Current capabilities: 0xFDEFFEFF
0) *CAP_CHOWN 1) *CAP_DAC_OVERRIDE
2) *CAP_DAC_READ_SEARCH 3) *CAP_FOWNER
4) *CAP_FSETID 5) *CAP_KILL
6) *CAP_SETGID 7) *CAP_SETUID
8) CAP_SETPCAP 9) *CAP_LINUX_IMMUTABLE
10) *CAP_NET_BIND_SERVICE 11) *CAP_NET_BROADCAST
12) *CAP_NET_ADMIN 13) *CAP_NET_RAW
14) *CAP_IPC_LOCK 15) *CAP_IPC_OWNER
16) *CAP_SYS_MODULE 17) *CAP_SYS_RAWIO
18) *CAP_SYS_CHROOT 19) *CAP_SYS_PTRACE
20) CAP_SYS_PACCT 21) *CAP_SYS_ADMIN
22) *CAP_SYS_BOOT 23) *CAP_SYS_NICE
24) *CAP_SYS_RESOURCE 25) CAP_SYS_TIME
26) *CAP_SYS_TTY_CONFIG 27) *CAP_MKNOD
28) *CAP_LEASE 29) *CAP_AUDIT_WRITE
30) *CAP_AUDIT_CONTROL
* = Capabilities currently allowed
Um eine Capability zu entfernen, geben Sie diese einfach bei den
Befehlen an:
[root@supergrobi ~]# lcap CAP_SYS_TIME [root@supergrobi ~]# syscapset set sys_time
Sinnvoll ist der Einsatz dieser Befehle nachdem der Bootvorgang abgeschlossen ist, sämtliche Module geladen wurden und das System sich in einem funktionstüchtigen Zustand befindet. Capabilities, deren Deaktivierung zu empfehlen ist, sind:
Natürlich müssen Sie die korrekte Funktion Ihres Systems anschließend prüfen. Auf Firewallsystemen, deren Netzwerkkonfiguration sich nicht ändert, können Sie auch überlegen CAP_NET_ADMIN zu deaktivieren.Ralf Spenneberg 2007-11-13