„Slowloris“ Denial of Service ähnlich für SMTP möglich ?

Im letzten Jahr wurde eine beeindruckende neue Angriffstechnik gegen Webserver veröffentlich: Slowloris. Dieser HTTP Angriff verwendet eine Idee, die man bisher nur vom SYN-Flood kennt.

Dabei werden die Ressourcen des Opfers aufgebraucht, bis keine weiteren neuen Verbindungen mehr aufgebaut werden können.

Das führt im Fall von Slowloris dazu, dass entweder sehr schnell der Arbeitsspeicher des Webservers vollkommen ausgelastet wird (bei dynamischen Webseiten), oder die Systemgrenze für mögliche HTTP-Verbindungen erreicht wird. In beiden Fällen erscheint der Webserver als Offline.

Kann man das Prinzip der Ressourcensättigung auch leicht auf Mailserver übertragen?

Wie funktioniert Slowloris?

Um zu verstehen, ob eine ähnliche Angriffstaktik auch gegen Mailserver erfolgreich sein kann, ist es notwendig den Angriff mittels Slowloris genau zu verstehen.

Der Angriff findet nicht mittels TCP auf der Transportschicht (wie ein SYN-Flood) statt, es wird sogar eine vollständige TCP-Verbindung hergestellt. Slowloris sendet aber keine vollständige HTTP-Anfrage, sondern ist mit einem SYN-Flood mittels HTTP vergleichbar.

Auch ist Slowloris kein HTTP GET-Flood, der sowohl auf eine Bandbreitensättigung, als auch auf eine Ressourcensättigung zielen kann.

Bei einem Angriff werden in schneller Folge und gleichzeitig viele TCP-Verbindungen zum Webserver geöffnet. Bevor der Webserver die Verbindung schließt, weil keine Anfrage gestellt wird, sendet Slowloris eine leere Anfrage (Header Keep-Alive, RFC2069).

Das Prinzip von Slowloris ist also ein „Keepalive-DoS“ gegen Dienste auf der Anwendungsschicht.

Übertragbarkeit auf SMTP

Genau wie HTTP ist auch SMTP ein Protokoll der Anwendungsschicht. Beide Protokolle haben gemeinsam, dass sie verbindungsorientiert sind und TCP nutzen.

Auf der Suche nach Befehlen des SMTP-Protokolls, die mit dem Keep-Alive Kopffeld im HTTP-Protokoll vergleichbar sind, stößt man in der Protokollspezifikation auf zwei mögliche Kandidaten:

  • NOOP
  • RSET

NOOP

Nach RFC821 bewirkt dieser Befehl nichts, ändert also den Zustand des Zustellungsvorgangs einer E-Mail nicht. Sehr interessant ist auch, dass keine Informationen zu Zeitüberschreitungen gemacht werden, nach denen der SMTP-Dialog durch den Server oder Client abgebrochen werden darf. Diese werden erst in RFC2821, dem vorgesehen Nachfolger von RFC821 besprochen.

Die Zeitüberschreitung muss dabei für jeden vom Client gesendeten Befehl einzeln gemessen werden.

Es sind im Standard zwei bis fünf Minuten vorgesehen, die ein Server warten soll, bevor die Verbindung geschlossen werden darf. Interessant ist hier, dass das senden eines NOOP-Befehls nicht gesondert behandelt wird. So könnte ein Angreifer kurz vor ablaufen der erlaubten Zeit diesen Befehl senden und weiter warten.

RSET

Dieser Befehl dient dazu, den Zustellungsvorgang zu beenden, die Verbindung bleibt dabei offen und es kann ein neuer Zustellversuch gestartet werden. Genau wie beim NOOP-Befehl wird auch der RSET-Befehl nicht mit einer besonders kurzen Zeitgrenze versehen.

Angriffstechnik

Da im Standard kein fester Wert für die Zeitüberschreitung angegeben wird, sondern nur Empfehlungen, muss die tatsächliche Zeit gemessen werden.

NOOP-DoS

Der Angriff würde also zuerst eine Verbindung zum Mailserver öffnen und die Identifikation des Servers abwarten:

220 mx.paketsequenz.de ESMTP

Daraufhin müsste ein Timer die Zeit messen, bis der Server die Verbindung abbaut. Mit diesem Wert kann dann der Angriff gestartet werden und mehrere hundert Verbindungen zum Mailserver aufgebaut werden, die kurz vor ablaufen des Timers einen NOOP-Befehl senden:

NOOP
250 2.0.0 Ok

Wenn der Mailserver mit der notwendigen Nachricht antwortet kann der Timer erneut gestartet werden. Ansonsten wird die Verbindung beendet und neu aufgebaut.

Ein Angriff mit ausreichend parallelen Verbindungen sollte so einen Mailserver lahm legen können, der den NOOP-Befehl unterstützt. Mit dem RSET-Befehl funktioniert es ähnlich.

Abwehr

Eine Abwehr sollte leicht möglich sein, indem die Anzahl der Verbindungen oder die Anzahl der aufeinander folgenden NOOP/RSET-Befehle beschränkt wird.

Weiterlesen

Weitere Informationen zum SMTP-Dialog und wie man ohne ein Mailprogramm (MUA) eine E-Mail verschicken kann auf der SMTP-Seite von Philipp Janda

Schreibe einen Kommentar

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.