Sicherheitsrisiken beim Shared Webhosting
Seite 2: Schotten dicht!
Schotten dicht!
Der Provider kann PHP-Zugriffe außerhalb des eigenen Verzeichnisses durch einen einfachen Eintrag in der php.ini-Datei wirkungsvoll verhindern. Sobald er die Umgebungsvariable open_basedir auf on gesetzt hat, ist der Spuk vorbei. In seinem Stammverzeichnis kann der Kunde dann zwar noch sämtliche Dateioperationen ausführen, außerhalb aber nicht. Im Unterschied dazu verbietet der so genannte Safe Mode alle Dateioperationen.
Perl bietet weder eine "open_basedir"-Umgebungsvariable noch einen "Safe-Mode". Der Schutz läuft hier zunächst über die normalen Dateiberechtigungen des Betriebssystems - mit der im Artikel beschriebenen Einschränkung, dass der Webserver auf die Dateien aller Benutzer zugreifen kann.
Unter anderem um solchen CGI-Wildwuchs zu verhindern, kann der Apache-Webserver seit Version 2.0 auf Linux-Systemen Childprozesse mittels perchild in unterschiedlichen Benutzerkontexten ausführen (siehe c't 8/03, S. 218). Alle Aufrufe, die aus einem virtuellen Host kommen, werden im Kontext des jeweils festgelegten Benutzers gestartet. Sind nun die Berechtigungen auf den restlichen Dateien so gewählt, dass außer dem Eigentümer keine Nutzer des Systems darauf zugreifen dürfen (mod 700), können fremde Skripte darin nicht mehr schnüffeln.
Es ist unter Unix mit dem Programm suexec, einem Bestandteil des Apache auch vor Version 2.0, möglich, die Sicherheit von CGI-Skripten auf dem Webserver zu erhöhen. In einem Umfeld, in dem jeder User eine eigene Domain zugewiesen bekommt, kann der Administrator innerhalb jedes -Eintrags in der httpd.conf die Berechtigungen der Skripte vergeben. Suexec agiert hierbei als eine Art Rechteverwalter. Der Webserver-Prozess übergibt bei einem startenden Skript das Skript selbst sowie die in der httpd.conf hinterlegten Benutzer- und Gruppennamen, unter denen das Skript laufen soll.
Da suexec selbst unter dem Benutzernamen root abläuft, kann es den Benutzerkontext des Skripts beliebig ändern und so das Skript reglementieren. Genau diese Funktionen bergen in sich natürlich ebenfalls Angriffsfläche. Theoretisch kann bei einem Fehler in suexec ein Benutzer ein beliebiges Programm im Kontext des Nutzers root ausführen. In der aktuellen Version von suexec ist eine solche Lücke jedoch nicht bekannt. Eine Erweiterung von suexec stellt dessen Funktion auch für PHP bereit.
Neben suexec sollen so genannte CGI-Wrapper, darunter CGIWrap und sbox, sicherstellen, dass CGI-Skripte nur im Kontext des jeweiligen Benutzers ablaufen können. Ein Artikel bei irt.org diskutiert die Vor- und Nachteile der einzelnen Techniken. Provider, die die Sicherheit ihrer Webserver testen möchten, stellen wir unter providercheck@ct.heise.de unsere Skripte zur Verfügung.
Der Nutzer selbst kann zunächst nicht viel gegen das Ausspionieren seiner Daten tun. Mit unserem PHP-Skript können Sie nachprüfen, ob wenigstens die open_basedir-Beschränkung aktiviert ist. Ein wenig kann sich jeder Webspace-Besitzer zusätzlich schützen, indem er in seinen Verzeichnissen die Schreib- und Leserechte restriktiv einstellt. Wie stark man die Rechte einschränken kann, entnimmt man den Dokumentationen des jeweiligen Skripts und des Providers. Wer großen Wert auf den Schutz seiner Web-Präsenz legt, sollte daher in Erwägung ziehen, sie auf einem dedizierten Server zu betreiben. (jo)