Als Administrator oder Betreiber eines Web-Servers hat man die Aufgabe, den Web-Auftritt lauffähig zu halten und Angreifer abzuwehren. Hierfür empfiehlt sich der Einsatz der PHP Erweiterung Suhosin.

Suhosin ist ein süd-koreanisches Wort und bedeutet ins Deutsche übersetzt etwa Schutzengel.

Suhosin löst den bekannten Hardening-Patch für PHP ab. Es ist ein fortgeschrittenes Schutzsystem für PHP Installationen und ist entworfen worden, um den Server und die Benutzer vor bekannten und unbekannten Fehlern in PHP Anwendungen und im PHP Kern zu schützen.

Zahlreiche Funktionen inbegriffen

Die Erweiterung bringt zahlreiche Funktionen mit. Neben dem “black-/whitelisting” für PHP Funktionen wie eval(), preg_replace(), include() und require() bietet die Eweiterung Funktionen, um Cookie Daten zu verschlüsseln. Es ignoriert GET, POST, COOKIE Variablen mit den folgenden Namen:

  • GLOBALS, _COOKIE, _ENV, _FILES, _GET, _POST, _REQUEST
  • _SERVER, _SESSION, HTTP_COOKIE_VARS, HTTP_ENV_VARS
  • HTTP_GET_VARS, HTTP_POST_VARS, HTTP_POST_FILES
  • HTTP_RAW_POST_DATA, HTTP_SERVER_VARS, HTTP_SESSION_VARS

Es schützt auch Upload-Formulare vor gefährlichen Datei Uploads und fügt dem PHP core Funktionen wie sha256() und sha256_file() hinzu. Zusätzlich implementiert der Patch Protokollierungsfunktionen und schützt den PHP Kern vor Pufferüberläufen, sowie Format-String Schwachstellen. Außerdem unterstützt es multiple log devices (syslog, SAPI module error log, external logging script).

Installation von Suhosin

Es gibt zwei Möglichkeiten Suhosin einzusetzen - einen PHP Patch und eine PHP Erweiterung (Extension). Ich werde diese Beschreibung auf die Installation der Extension beschränken.

1. Lade Dir die aktuelle Version von Suhosin herunter.

Suhosin arbeitet mit PHP4 und allen PHP5 Versionen, einschließlich PHP 5.3.

cd /tmp && wget http://download.suhosin.org/suhosin-0.9.32.1.tgz

2. Entpacke die Archivdatei

tar xvfz suhosin-suhosin-0.9.32.1.tgz

3. Kompilieren und Installieren des Moduls

Anmerkung für SuSE Benutzer: die Pakete gcc, autoconf und automake müssen installiert sein. Für phpize muss auch php-devel installiert sein, falls das nicht schon vorhanden ist.

cd suhosin-0.9.32.1
phpize
./configure --enable-suhosin --with-php-config=/usr/bin/php-config
make && make install

4. System Log anpassen

Wenn man syslog-ng einsetzt, erreicht man durch Hinzufügen folgender Zeilen, dass Fehlermeldungen protokolliert werden:

filter local2 { facility(local2); };
destination suhosinlog { file("/var/log/suhosin.log"); };

Aufgrund der schon vorhandenen Einstellungen kann es sein, dass die Meldungen nicht in /var/log/suhosin.log, sondern in z.B. /var/log/messages

5. Konfiguration in php.ini eintragen. Am Ende der Datei folgendes anhängen:

extension="suhosin.so"
[suhosin]
suhosin.simulation="On"
;suhosin.apc_bug_workaround = Off
;suhosin.multiheader = Off
suhosin.mail.protect = 1

Der Pfad zu den Extensions wird in der php.ini mit extension_dir konfiguriert (das sollte normalerweise auch schon bei der PHP Installation vorkonfiguriert sein; wenn man PHP selbst kompiliert hat, muss man diesen Pfad manuell eintragen). Mit der zweiten Anweisung wird Suhosin mit dem Simulations-Modus gestartet. Dies dient dazu, damit man testen kann, ob Suhosin bei PHP Anwendungen/Webseiten Probleme bereitet. Wenn Du Suhosin in Verbindung mit mit vBulletin einsetzt, findest Du hier einige Tipps, die Du für einen reibungslosen Betrieb verwenden kannst.

6. Webserver Neustart und Analyse der Protokolldatei

Durch folgenden Befehl wird der Webserver neu gestartet (bei manchen Distributionen kann das Skript auch apache oder httpd heissen):

/etc/init.d/apache2 restart

Nun ist Suhosin im Simulationsmodus aktiv. Das bedeutet, dass zwar die Fehlermeldungen protokolliert werden, aber die Ausgabeseiten weiterhin funktionieren, so als ob Suhosin gar nicht installiert wäre.

Jetzt geht es ans testen. Das funktioniert einfach so, dass man die PHP Anwendungen und Webseiten ausgiebig benutzt. Am besten lässt man den Simulationsmodus einige Tag aktiviert. Dann schaut man sich in der Protokolldatei an, ob gegebenenfalls Einträge vorhanden sind, die auf ein Problem hindeuten könnten. Falls ein Problem vorliegt, muss die Konfiguration des Suhosin Moduls angepasst werden. Eine Auflisten der Konfigurationsoptionen und deren Beschreibung findest Du unter http://www.hardened-php.net/suhosin/configuration.html

7. Scharfschaltung des Systems

Abschließend kann man nun das System scharf schalten, indem man in der php.ini

suhosin.simulation="On"

in

suhosin.simulation="Off"

ändert und den Webserver neu startet.

/etc/init.d/apache2 restart

Nach dem Neustart des Webserver ist Suhosin aktiv, was bedeutet, wenn ein Sicherheitskriterium greift, wird der Webserver eine Fehlermeldung ausgeben (oder einfach eine weiße Seite, je nach Konfiguration). Die Fehlermeldungen werden auch in der Logdatei protokolliert, wenn der Simulationsmodus ausgeschaltet ist. Ich empfehle dringend, in der ersten Zeit regelmäßig die Protokolldatei durchzusehen, um mögliche Probleme zu erkennen und gegebenenfalls die Konfiguration von Suhosin anzupassen.

Wenn alles geklappt hat, sollte in der phpinfo Ausgabeseite folgender Anschnitt zu sehen sein: Suhosin wird in phpinfo angezeigt

Fertig ;)

Hinweise

Probleme treten auf, wenn der Zend Optimizer zusammen mit Suhosin eingesetzt wird. Ab Zend Optimizer Version 3.2.1 funktioniert der Einsatz ohne Schwierigkeiten, sofern suhosin.stealth = On in der Konfiguration verwendet wird.

Aktualisiert: