Anatomie eines Angriffs – Update

Der DDoS-Angriff auf meiner Website, den ich kürzlich erlebt habe, war offensichtlich die Ausnutzung eines Fehlers von PHP im Zusammenhang mit der Verarbeitung von XML. Siehe dazu auch die Meldung bei heise. WordPress hat ein entsprechendes Update veröffentlicht, um das Problem zu entschärfen.

Zu den Details:

Die PHP-Funktion xml_parse() kann durch XML-Dateien mit einer DTD dazu gebracht werden, sehr viel Speicher zu verbrauchen. Man definiert in der DTD eine XML-Entity, die sehr lang ist (z.B. 50000 Zeichen) und fügt dann ein Element, in der diese Entity z.B. 100000 Mal wiederholt wird. Im Ergebnis benötigt das Dokument bei der Interpretation dann 50000×100000 Bytes, was schon über 4 GiB sind, obwohl die Quelldatei dazu weniger als 150 kiB benötigt. Ein Angreifer kann daher mit dem Senden vieler solcher Anfragen in kurzer Zeit sehr schnell den Server an seine Grenzen bringen.

PHP begrenzt zwar den Speicherverbrauch von Scripten – aber diese Grenze gilt nur für ein einzelnes Script. Bei vielen Servern werden aber mehrere PHP-Scripte parallel in separaten Prozessen ausgeführt (etwa mit fcgi), so dass sich letzlich der Speicherbedarf erhöht. Bei einer Grenze von 128 MiB und 200 zulässigen Prozessen wären das schon rund 25 GiB. Das würde viele Webserver sehr wahrscheinlich „lahm legen“, weil das System dann nur noch mit der Speicherverwaltung und Zugriffen auf den Swap-Bereich beschäftigt ist.

Das Update von WordPress sorgt dafür, dass es nicht mehr möglich ist eine DTD anzugeben und akzeptiert nur noch XML-Dateien, in denen die erforderlichen Elemente und nicht zu viele Elemente insgesamt vorhanden sind.

Öffentlichen Kommentar hinterlassen

Deine E-Mail-Adresse wird nicht veröffentlicht. Wenn Du mich persönlich erreichen möchtest, siehe Impressum.