| « Energiesparen und damit längere Laufzeiten für Laptops durch Tickless Timer | Bandbreitenmessung - Hält der Internetprovider was er verspricht? » |
Ersatz für setuid und setguid - Sicherheit von Programmen, die erweiterte Rechte benötigen erhöhen
Das Dateisystem und das darin implementierte Rechtessystem spielt eine zentrale Rolle im Bezug auf die Sicherheit von Unix- und Linux-Systemen. Benutzer verfügen über reduzierte Rechte um eine höhere Sicherheit zu gewährleisten. Alle Programme (Prozesse), die ein Benutzer startet, sind auf die Rechte des Benutzers beschränkt. Einige Programme benötigen jedoch mehr Rechte, so z.B. passwd (Ändern eines Passworts). Um dieses Problem zu lösen ersann Dennis Ritchie bereits 1972 das setuid-Bit und das setgid-Bit. Auch diese haben sich nicht als der Weisheit letzter Schluss erwiesen und im Laufe der Jahre immer wieder zu Sicherheitsproblemen geführt. Deshalb stellt sich folgende Frage: Ist es möglich setuid- und setgid-Bit durch einen sichereren Mechanismus zu ersetzen?
Follow up:
Die Dateisystemrechte bestehen aus drei Blöcken und zwar den Rechten, die ein Benutzer im Bezug auf eine Datei hat, den Rechten, die eine Gruppe von Benutzern inne hat und den Rechten, die alle anderen gewährt werden. In jedem der drei Blöcke stehen die Berechtigungen "lesen" (r), "schreiben" (w) und "ausführen" (x) zur Verfügung. Für Verzeichnisse werden die gleichen Berechtigungen verwendet, jedoch ist die Bedeutung etwas abgewandelt: "lesen" erlaubt es, den Inhalt eines Verzeichnisses anzuschauen und "ausführen erlaubt es, in das Verzeichnis zu wechseln. Den Benutzer, dem eine Datei gehört, die Gruppe, der eine Datei zugeordnet ist, und die Berechtigungen kann man sich z.B. mittels ls -l anschauen.
Die erweiterten Berechtigungen setuid und guid (s ersetzt x) bewirken Folgendes: Eine Datei wird durch Setzen des setuid-Bits anstatt mit den Rechten des aktuellen Benutzers mit den Rechten des Besitzers ausgeführt. Das setgid-Bit hat die gleiche Funktionalität, bezieht sich jedoch auf die Gruppe. Wird das setgid-Bit jedoch bei einem Verzeichnis gesetzt, so ist die Bedeutung eine ganz andere: Alle Dateien und Verzeichnisse, die in dem betrachteten Verzeichnis angelegt werden, erben das setgid-Bit und die Gruppe, d.h. ihnen wird nicht die primäre Gruppe, der der ausführenden Benutzers angehört, zugeordnet, sondern die Gruppe, die für das betrachtete Verzeichnis gesetzt ist. Unter den meisten Unix-/LinuxSystemen hat das setuid-Bit für Verzeichnisse keine Funktion. Eine Ausnahme bildet FreeBSD: Hier ist es möglich, das System so zu konfigurieren, dass das setuid-Bit sich genauso wie das setgid-Bit bei Verzeichnissen verhält.
Das Konzept der setuid- bzw- setgid-Bits stellt nicht per se ein Sicherheitsproblem dar. Das Problem entsteht erst, wenn die Programme, die höhere Berechtigungen erlangen, Sicherheitslücken aufweisen. Dadurch kann es möglich werden, dass ein Angreifer sich die Rechte des ausgeführten Programms verschafft. Für Programme, die root-Rechte benötigen, heißt das, dass der Angreifer root-Rechte erlangt und damit vollen Zugriff auf das gesamte System hat.
Daraus kann man folgende Maßgabe ableiten: Programme sollten nie mehr Rechte erhalten, als sie wirklich benötigen. Unterstützt wird dies durch die POSIX capabilities. Darauf aufbauend wurden wurden für Linux die Linux capabilities definiert. Mit folgenden Befehlen findet man die Dateien, die setuid- bzw. setgid-Bits gestzt haben, d.h. für die potentiell eine Verwendung der POSIX/Linux capabilities in Frage käme:
find <Such-Verzeichnis> -perm -2000 find <Such-Verzeichnis> -perm -4000
Wer nun neugierig geworden ist, sollte einen Blick in die folgenden vertiefenden Informationen werfen: