Zunächst mal hoffe ich, dass man mittlerweile wieder über solche Themen schreiben und auf entsprechende Tools verlinken kann, ohne praktisch schon mit einem Bein im Knast zu stehen. Das Bundesverfassungsgericht hat immerhin festgestellt, dass sog. "Hackertools" nicht allein deshalb strafrechtlich relevant sein dürfen, weil man mit ihnen auch Straftaten begehen kann.
Ein solches Tool ist auch das vor kurzem releaste Slowloris, eine fertige Implementierung eines schon 2005 im O'Reilly-Buch "Apache Security" beschriebenen Angriffs. Er basiert darauf, dass ein Client eine größere Anzahl von Verbindungen zu einem Webserver aufbaut und dabei in jeder dieser Verbindungen nie wirklich fertig wird mit dem Senden des vom Server erwarteten Requests. Die Verbindung wird erst nach Erreichen des im Server voreingestellten Timeouts getrennt. Der Apache hat in seiner Standardkonfiguration einen Timeout von 300 Sekunden, d. h. ein Angreifer hat reichlich Zeit, so lange Verbindungen herzustellen, bis der Server keine mehr annimmt. Beim Apache wird diese obere Grenze ja über die Einstellung MaxClients festgelegt.
Wie das Tool genau arbeitet, kann man auf SANS nachlesen. Es wird einfach zuerst ein ordnungsgemäßer Header geschickt, und dann, immer nach jeweils einer gewissen Wartezeit, die Zeichenfolge "X-a: b\r\n". Vorher kann man mit Slowloris auch noch prüfen, wie der Timeout auf dem Zielserver eingestellt ist. Das Tool verwendet diesen Wert zu Optimierungsszwecken, hauptsächlich um den Footprint des Angriffs möglichst gering zu halten.
Ich habe das Tool mit einem der Webserver, für die ich zuständig bin, mal kurz getestet und es funktioniert verdammt gut. Viel zu gut - dafür, dass der Angriff so einfach ist. Aber so ist das ja oft. Ein typisch konfigurierter Apache auf durchschnittlicher Hardware ohne vorgeschaltete Proxys oder Load Balancer dürfte damit jedenfalls in kürzester Zeit dicht sein, selbst wenn der Angriff von einem einzelnen Laptop aus gestartet wurde.
Was kann man also tun?
Die Apache-Leute zerbrechen sich gerade den Kopf darüber, wie man das am besten patcht. Die Diskussion scheint im Moment aber so ein wenig in die Richtung "wir müssen das alles jetzt endlich mal redesignen" abzudriften. Wann der Apache selbst immun gegen diese Attacke sein wird, ist derzeit also eher unklar. Der Proof of Concept-Patch, der im ersten Beitrag des Threads verlinkt ist, funktioniert so, dass bei höherer Serverauslastung automatisch der Timeout dynamisch nach unten angepasst wird. Und umgekehrt, wenn der Server sich von der Load erholt hat. Ich bin jetzt kein Apache-Entwickler, aber habe gewisse Zweifel, ob das die richtige Herangehensweise ist. Wenn der Timeout niedrig genug wird, schlägt der Angriff zwar fehl (kann man auch testen, indem man z.
B. mal 5 Sekunden einstellt), aber legitime Clients haben dann ebenfalls
diesen niedrigen Timeout, was womöglich in bestimmten Fällen dann auch
wieder ein DoS zu Folge hat. Besser wäre es wahrscheinlich, den
einzelnen Request anders zu verarbeiten und das Socket schnell wieder
zu schließen, wenn nicht genug Daten pro Zeiteinheit reinkommen. Ein
paar der Überlegungen im Diskussions-Thread gehen wohl auch so etwas in
diese Richtung.
In der Zwischenzeit kann man sich überlegen, ob man nicht einen Reverse Proxy wie nginx vor den Webserver setzt. Mit dem habe ich ganz gute Erfahrungen gemacht, und ich werde demnächst wieder ein Bündel Webserver in noch mehr (virtuelle) Einzelserver auffächern aber dafür dann hinter ein oder zwei nginxen verstecken. Abgesehen davon, dass nginx eben immun gegen den Slowloris-Angriff ist, hat das natürlich noch eine Reihe weiterer Vorteile. Ich möchte mittlerweile eigentlich für jede Webanwendung eine eigene VM betreiben, aber ohne vorgeschalteten Proxy gehen einem da irgendwann die öffentlichen IP-Adressen aus. Falls man statischen Content hat, kann man sich außerdem überlegen, ob man den nicht gleich vom nginx ausliefern lässt. Das kann er in der Regel deutlich schneller als der Apache.
Was das alles jetzt mit Primaten zu tun hat? Slow Lorises (auf Deutsch "Plumploris") sind halt welche. Schon irgendwie süß...
Kommentare