Datum: 13. April 2009 Autor: Frank Dreßler, frank.dressler@rub.de Dateizugriffsberechtigungen: Über eine sicherheitsrelevante Kleinigkeit ----------------------------------------------------------------------- Man kann unterschiedlichen Gruppen unterschiedliche Zugriffs- berechtigungen auf Dateien geben. So sollte beispielsweise eine Passwortsammlung nur vom Besitzer der Passwortsammlung zugreifbar sein. Öffnet man eine Datei, dann wird eine auf die geöffnete Datei bezogene Datenstruktur im Betriebssystem erstellt, in der unter anderem direkt oder indirekt auch die Zugriffsbe- rechtigungen, die man auf diese Datei hat, gespeichert sind. Die Einträge in dieser Struktur sind oft Kopien der Original- daten, z.B. der Zugriffsbrechtigungen, damit diese nicht immer langwierig von der Festplatte gelesen werden müssen. Ändert man also die Zugriffsbrechtigungen der Datei, so werden sie nicht immer auch in dieser Datenstruktur geändert. Folglich hat man immer die Berechtigungen auf eine Datei, die man bei der Öffenung der Datei hatte, egal ob diese zwischendurch beschränkt worden sind. Wenn also eine Datei geöffnet wird, auf die man ein Schreib- recht hat, man dann das Schreibrecht entfernt, hat man trotz- dem noch ein Schreibrecht, denn das Schreibrecht wurde nur auf der Festplatte, nicht in der dateibezogenen Datenstruktur im Betriebssystem angepasst, über die das Betriebssystem entscheidet, ob man schreibberechtigt ist. Dies hat sicherheitsrelevante Konsequenzen, denn schränkt man die Zugriffsrechte auf eine Datei ein, so darf man solange nicht von der Wirksamkeit der neuen Einschränkungen ausgehen, wie man nicht sicher sein kann, dass die Datenstrukturen im Betriebssystem angepasst oder verschwunden sind. Ein Beispiel zur Verdeutlichung: Man könnte auf die Idee kommen eine Datei zu erzeugen, in die man Sachen schreibt, die für andere nicht zugänglich sein sollen. Üblicherweise erstellen die Leute dann diese Datei, beschränken dann den Zugriff, indem sie die Dateieigenschaften öffnen und die Häkchen entsprechend setzen, und schreiben dann die privaten Inhalte in die Datei. Erstellt man jedoch unter einer Standardinstallation von Windows oder Linux eine leere Datei so ist diese allen Benutzern des Systems lesbar. Noch bevor man die Zugriffs- brechtigungen einschränken kann, kann ein Angreifer die Datei geöffnet haben und sie so auch noch selbst dann lesen, wenn er laut dem, was auf der Festplatte steht, kein Leserecht mehr haben sollte. Man sollte Dateien also immer mit den strengsten Zugriffs- berechtigungen erstellen und diese dann, falls erwünscht, lockern, aber niemals anders rum, wenn man nicht sicher sein kann, dass die Zugriffsbrechtigungen, die auf der Festplatte gespeichert sind, mit denen, die in den Datenstruk- turen im Betriebssystem vorhanden sind, abgeglichen sind! Beispielhafte Befehlsfolgen für bash: Nicht so: echo geheimespasswort > passwort.txt // Datei erstellen und Passwort rein chmod 600 passwort.txt // Zugriffsbrechtigung auf eigene Person beschränken Nicht so: :>passwort.txt // Datei erstellen chmod 600 passwort.txt // Zugriffsbrechtigung auf eigene Person beschränken echo geheimespasswort > passwort.txt // Passwort in die Datei schreiben So: tmp=`umask -p` // Alte Maske speichern, die festlegt, welche Zurgiffsberechtigungen erzeugte Dateien normal bekommen umask 0077 // Zugriffsbrechtigung neu erstellter Dateien auf eigene Person beschränken echo geheimespasswort > passwort.txt // Datei erstellen und Passwort rein $tmp // Alte Maske wieder setzen (Achtung: $tmp sollte nicht von anderen in der Zwischenzeit geändert worden sein können!) unset tmp // Variable tmp leeren (Kosmetik)