Frage Warum ist es schlecht, root-Dateien in ein Verzeichnis zu schreiben, das nicht root gehört?


Dies kam in einem Kommentar zu einer anderen Frage und ich würde es lieben, wenn jemand mir die Gründe dafür erklären könnte.

Ich habe vorgeschlagen, dass Apache die Fehler für einen bestimmten VHost im Home-Verzeichnis eines Benutzers protokolliert. Das wurde abgeschossen, weil es unsicher war. Warum?

Ich bat um eine Erklärung in einem Kommentar, aber alles, was ich bekam, war, dass es nicht sicher ist, root in einem Ordner zu schreiben, der nicht root gehört. Könnte nochmal jemand erklären?

Vielen Dank,

Bart.


27
2017-09-22 13:40


Ursprung


Was macht Apache als root - das Prinzip des geringsten Privilegs schreit dagegen! - Jonathan Leffler
Apache läuft als www, wird aber als root gestartet, so dass es wie üblich an Port 80 gebunden werden kann. Anscheinend protokolliert es auch als root. - Bart B


Antworten:


weil ein böser Benutzer kann böswillig versuchen, auf die Datei zu zeigen root schreibt an einen anderen Ort. Das ist nicht so einfach, aber wirklich möglich.

Zum Beispiel, wenn ein Benutzer den Weg finden würde, ein Symlink von dem angeblichen Apache Log zu sagen, / etc / Schatten Sie werden plötzlich ein unbrauchbares System haben. Apache (root) würde die Anmeldeinformationen Ihrer Benutzer überschreiben, wodurch das System fehlerhaft wird.

ln -s /etc/shadow /home/eviluser/access.log

Wenn die Zugriff.log Datei ist vom Benutzer nicht beschreibbar, es kann schwierig sein, sie zu entführen, aber die Möglichkeit zu vermeiden, ist besser!

Eine Möglichkeit könnte sein, Verwenden Sie logrotate, um die Aufgabe zu erledigen, Erstellen der Verknüpfung zu einer Datei, die nicht bereits vorhanden ist, aber das Logrotat wird überschrieben, sobald die Protokolle wachsen:

ln -s /etc/shadow /home/eviluser/access.log.1

Hinweis:

Das Symlink Methode


31
2017-11-22 07:43



Gibt es eine Möglichkeit, Berechtigungen zu setzen, so dass sie nur die Datei lesen können und nicht löschen, bearbeiten oder irgendetwas anderes tun (wie Chown, Chmod, etc.)? - Joshua
Sie sollten diese Operation für jede mögliche Zieldatei durchführen! Diese schreibbare Datei ist die geliebte Datei, nicht die Verknüpfung selbst, die dem Angreifer gehört, als er sie erstellt hat. - drAlberT
@Joshua: chown kann nur von root ausgeführt werden. chmod kann von jedem, der die Datei besitzt, ausgeführt werden. IIRC, Umbenennung kann von wem auch immer das Verzeichnis vorgenommen werden. Wie AlberT erwähnt, einen Link erstellen Vor root erstellt die Datei kann von jedem erstellt werden, der in das Verzeichnis schreiben kann. - atk
@atk: Darüber hinaus kann der Eigentümer des Verzeichnisses im Allgemeinen Dateien daraus entfernen (es sei denn, der Sticky +t Bit ist gesetzt), auch wenn sie keine Schreibberechtigung für die Dateien selbst haben (weil unlink () ein Schreibzugriff auf das Verzeichnis ist, nicht auf die Datei). Selbst wenn root die Datei im Voraus erstellt, kann der Verzeichnisbesitzer sie dennoch löschen und durch einen Symlink zu etwas anderem ersetzen. - James Sneeringer
Wenn eviluser in / home / eviluser schreiben kann (oder die Berechtigungen für das Verzeichnis ändern kann - sie besitzen es, IOW), dann ist es egal, welche Berechtigungen für access.log gelten; Der eviluser kann die Datei (re) verschieben und ihren symbolischen Link an seine Stelle setzen. Eine andere Frage ist, ob die Software darauf achtet, was sie öffnet. - Jonathan Leffler


Der allgemeine Grundsatz, keine Prozesse in ein Verzeichnis schreiben zu müssen, dem sie nicht gehören oder vertrauen, ist ein gutes. Aber in diesem speziellen Fall ist es sinnvoll, darauf zu vertrauen, dass der Apache-Code das Protokoll öffnet O_NOFOLLOW etc: Die Anmeldung beim Home-Verzeichnis eines Benutzers ist ein übliches Setup.


1