blog.atwork.at

news and know-how about microsoft, technology, cloud and more.

Workaround gegen Denial of Service Attacke in ASP.NET #hashDoS

Achtung Web-Developer und Web-Hoster! Seit kurzem ist eine DoS-Attacke gegen Webserver bekannt, die zur Überlastung von Websites führen kann. Die Verwundbarkeit läuft unter #hashDoS und #28C3, sie führt "hash collision attacks" gegen Websites durch.

Wie funktioniert #hashDoS?

Technisch gesehen werden durch einen HTTP Request "teure" Hash Table Berechnungen ausgeführt, die - selbst auf sehr leistungsfähigen CPU´s - abertausende Form-Werte berechnen und so zu einer Überlastung = Stillstand des Webservers führen können.

Selbst kleine HTTP-Requests können sehr rechenintensiv werden:
Die Verwundbarkeit kann von anonymen Angreifern ausgenutzt werden, um in ASP.NET einen speziell präparierten HTTP-Request mit beispielsweise 100kB abzusetzen. Dieser Angriff kann eine CPU zu 100% auslasten und zwischen 90 und 110 Sekunden dauern. Durch mehrfache Wiederholung der Angriffe kann ein Stillstand erzeugt werden. (siehe 3.)

hashDoS-CPU

CPU-Grafik von 3. Hier liegt die CPU-Last eines 4-Core Servers kontinuierlich bei 25% - nur durch einen WorkerProcess. Weitere Informationen finden Sie in 4.

Wen betrifft es?

Eigentlich alle Webserver im Internet.
Alle Versionen des .NET Frameworks sind verwundbar. (siehe 1.)

#hashDoS betrifft nicht nur Microsoft-Technologie (ASP.NET), sondern es sind alle Systeme gefährdet: Java, Python, Ruby 1.8, PHP, etc.

Wann sind Windows Server betroffen?

Verwundbar sind Windows-Systeme mit IIS-Rolle, wenn ASP.NET Websites mit diesen Content-Types (siehe 2.) verwendet werden:

  • "application/x-www-form-urlencoded" oder
  • "multipart/form-data"

Andernfalls droht keine Gefahr durch #hashDoS.

Wie können ASP.NET Websites geschützt werden?

Eigentlich simpel - durch Limitierung des HTTP-Requests:
Hier die Empfehlungen aus TechNet:

Wenn Ihre Applikation ViewState verwendet:
In web.config die maximale HTTP-Request Größe auf 200KB beschränken:

<configuration>
<system.web>
  <httpRuntime maxRequestLength="200"/>
</system.web>
</configuration>

Wenn kein ViewState verwendet wird:
In web.config die maximale HTTP-Request Größe auf 20KB beschränken:

<configuration>
<system.web>
  <httpRuntime maxRequestLength="20"/>
</system.web>
</configuration>

...abhängig vom Szenario. Nicht vergessen: Eventuelle File Uploads in der App!

Die Empfehlung: Wenn Sie befürchten, Ziel eines Angriffs durch #hashDoS zu werden, führen Sie obige Schritte durch. (siehe 3.)

Gibt es einen Fix?

Ein Fix ist in Arbeit: "Our teams are working around the clock worldwide to develop a security update of appropriate quality to address this issue." (siehe 1.).

Auch an Forefront wird gearbeitet. Es werden zwei neue "Rules" hinzugefügt werden, welche den Content Type prüfen und die Anzahl der Form values im HTTP-Request prüfen (> 1000 = Deny):
"Microsoft's own Forefront Threat Management Gateway (TMG) will receive an update containing a signature for this issue today. (Vulnerability: Win/ASPNET.POST.DoS!NIS-2011-0001)" (siehe 3.)

Hier alle Links mit weiterführenden Informationen gesammelt:

  1. Microsoft releases Security Advisory 2659883, offers workaround for industry-wide issue
  2. TechNet: Microsoft Security Advisory (2659883) -  Vulnerability in ASP.NET Could Allow Denial of Service
  3. More information about the December 2011 ASP.Net vulnerability
  4. Eine sehr feine Erklärung liefert Effective DoS attacks against Web Application Plattforms - #hashDoS
  5. Allgemein: Microsoft Security Response Center (MSRC) Home


Loading