O'Reilly logo

PHP-Sicherheit: PHP/MySQL-Webanwendungen sicher programmieren by Stefan Esser, Christopher Kunz

Stay ahead with the world's most comprehensive technology and business learning platform.

With Safari, you learn the way you learn best. Get unlimited access to videos, live online training, learning paths, books, tutorials, and more.

Start Free Trial

No credit card required

245
11 PHP-Hardening
Um weitere Sicherheitsfunktionen in PHP zu ermöglichen und
um Fehlern in der Skriptsprache vorzubeugen, wurden spezi-
elle Sicherheitserweiterungen entwickelt, die mittlerweile über
eine Vielzahl an Features verfügen. Dieses Kapitel stellt »Suho-
sin« vor und macht Sie mit seiner Installation und Konfigura-
tion vertraut.
11.1 Warum PHP härten?
PHP leidet nicht nur unter den Sicherheitslücken, die durch nachläs-
sige Programmierer in Foren, CM-Systeme und Weblogs eingebaut
werden, sondern hatte in der Vergangenheit auch immer wieder mit
Fehlern direkt in der Zend Engine oder einer der unzähligen zum Lie-
ferumfang gehörenden Extensions zu kämpfen. Unscheinbare Funktio-
nen wie
wordwrap() oder aber häufig genutzte Sicherheitsfunktionen
wie
htmlentities() enthielten Buffer Overflows, über die es Angreifern
möglich war, fremden Code auf dem Server auszuführen – Fehler, die
nach Bekanntwerden stets zu hektischen Reaktionen in der PHP-Com-
munity führten und teilweise sehr häufige Updates bedingten.
Aus diesem Grund wurde im Jahr 2004 das Hardened-PHP Project
gegründet, das sich zunächst die Entwicklung von generischen Schutz-
mechanismen gegen Probleme im PHP-Code zum Ziel gemacht hatte.
Das lag zum einen daran, dass die mittlerweile sehr große Codebase
des PHP-Projektes eine komplette Überprüfung des sich häufig
ändernden Sourcecodes sehr aufwendig gemacht hätte, zum anderen
aber auch daran, dass das Projekt zwischenzeitlich mehrere kritische
Fehler in PHP entdeckt hatte.
Verwundbare PHP-Anwendungen standen zunächst nicht im
Fokus des Hardened-PHP-Projektes, sondern der Schutz des Kerns
von PHP, der Zend Engine. Aus diesem Grund wurde Hardened-PHP
11 PHP-Hardening246
entwickelt, das eine gegen Buffer Overflows gehärtete Version von
PHP war. Aufgrund einer Klausel innerhalb der PHP-Lizenz wurde der
Sicherheitspatch zunächst in Hardening-Patch for PHP umbenannt
und so weiterentwickelt, dass zahlreiche Schutzmaßnahmen hinzuge-
fügt wurden, die sich nicht länger auf den PHP-Kern beschränken,
sondern auch PHP-Applikationen schützen.
Mitte 2006 wurde der Patch dann durch »Suhosin« abgelöst.
Suhosin ist das südkoreanische Wort für »Schutzengel« – die so
benannte Software stellt ein zweiteiliges PHP-Sicherheitssystem dar. Es
besteht zum einen aus dem Suhosin-Patch, der sich nur um den Schutz
des PHP-Kerns kümmert, und zum anderen aus einer PHP-Extension,
die eine Vielzahl von Funktionen implementiert, die es unter anderem
erlauben, bestehende PHP-Anwendungen ohne Eingriffe in den Code
gegen Angriffe zu schützen. Dies geht so weit, dass zum Beispiel durch
das Aktivieren der transparenten Verschlüsselung von Cookies und
Sessions innerhalb der Konfiguration alte Applikationen automatisch
gegen Sicherheitsprobleme wie Session Fixation/Hijacking geschützt
werden, ohne dass eine einzige Codezeile modifiziert werden muss.
Seit Mitte 2007 wird die Entwicklung von Suhosin nicht mehr
vom Hardened-PHP-Projekt geführt, sondern sie wurde von der Sekti-
onEins GmbH übernommen, die unter anderem von einem der Auto-
ren dieses Buches mit dem Ziel gegründet wurde, Webapplikationen
abzusichern.
Um die Ansatzpunkte der verschiedenen Kern-Schutzmaßnahmen
innerhalb des Suhosin-Patch zu verstehen, ist eine kurze (und stark
vereinfachende) Exkursion in die Speicher- und Pufferverwaltung in C
unumgänglich. Wenn Sie einfach nur die Vorzüge von Suhosin genie-
ßen möchten, ohne sich mit theoretischen Details zu belasten, sollten
Sie die folgenden Absätze überspringen.
11.1.1 Buffer Overflows
Pufferüberläufe (englisch »Buffer Overflows«) gehören zu den häufigs-
ten Schwachstellen in C-Programmen. Sie verdanken ihre Existenz der
Notwendigkeit, Speicherbereiche (die Puffer) fest zuzuweisen, und der
Tatsache, dass in vielen Systemen Code- und Datensegmente im selben
Speicherbereich an direkt aufeinanderfolgenden Adressen gelagert
werden.
Wenn ein Programm Input von außen, wie etwa Benutzereingaben
oder bestimmte Strings in einer zu verarbeitenden Datei, entgegen-
nimmt, deren Länge nicht überprüft und in den Puffer schreibt, dann
ist es möglich, dass beim Schreiben über das Ende des dem Puffer zuge-

With Safari, you learn the way you learn best. Get unlimited access to videos, live online training, learning paths, books, interactive tutorials, and more.

Start Free Trial

No credit card required