Der Angriff auf die Website funktioniert dabei nach einem relativ einfachen Schema: Der Angreifer übermittelt an das Content-Management-System (oder ein anderes Websiteskript) Kommandocodes, welche entweder das System veranlassen auf dem Server oder seiner Datenbank ungewünschte Befehle auszuführen oder auf der Website oder einer E-Mail eingebettet werden.
Ihre Website besitzt ein Gästebuch. Ihr Wettbewerber - als Angreifer - möchte aber, das alle Ihre Besucher beim Klick auf das Gästebuch auf seine Website gelangen. Dann trägt er in das Gästebuchformular einfach folgenden Code ein:
Ein unsicheres Gästebuchskript wird nun diesen Text unverändert in das Gästebuch eintragen. Dem nächsten Besucher, welcher die Website aufruft, wird nun genau dieser Code angezeigt. Da es sich um Skriptcode handelt, wird der Browser angewiesen, in diesem Moment zu einer neuen Website (hier www.nophp.de) zu wechseln. Zur Reparatur der Website muss der Betreiber diesen Eintrag direkt aus der Datenbank löschen - besitzt der dazu, wie in vielen einfachen Online Content Management Systemen, nur die Möglichkeit, die Website über den Webbrowser zu pflegen, wird er keine Möglichkeit haben, als das komplette Gästebuch zu löschen.
Der Grund für das Fehlverhalten ist einfach: Von einem Besucher in ein Formularfeld eingetragene Daten wurden ungeprüft und unverändert übernommen! Dabei ließe sich diese Prüfung ganz einfach bewerkstelligen: Schon das Entfernen oder die korrekte Kodierung der spitzen Klammer wird das Problem beheben. In VIO.Matrix ganz einfach:
Die Maskierung des gesamten auszugebenden Textes mit Hilfe des Codecs "xmlmask" (oder auch "html") verhindert, dass das JavaScript auf der angezeigten Website ausgeführt wird. Probieren Sie dies einfach mal, indem Sie den Codec "xmlmask" entfernen! Sie sehen: Sofort wird der "Schadcode" ausgeführt!
Mit der beispielhaften Weiterleitung auf eine andere Website kann ein Angreifer die Vertrauensstellung einer derart manipulierten Website missbrauchen. Stellen Sie sich eine in dieser Form veränderte Website einer Bank vor. Jeder Besucher der echten Bankseite würde via Redirect auf die Seite des Angreifers geleitet werden. Diese könnte die echte Bankseite nachahmen und damit Kunden zur Herausgabe von Kennwörtern verleiten. Da der Angriff über mehrere Websites (die des Angegriffenen und die des Angreifers) verläuft wird hier von "Cross-Site" Scripting (kurz CSS) gesprochen. Das Kürzel CSS hat hier natürlich nichts mit Cascading-Style-Sheets gemein.
Neben einer technisch simplen und relativ anspruchslosen Weiterleitung kann über ein modifiziertes JavaScript oder die gezielte Übergabe manipulativer Daten an die Übergabeparameter eines Websiteskripts (bspw. PHP, Perl oder ASP) der tatsächliche oder zumindest sichtbare Teil einer Website permanent geändert werden.
Angreifer werden es im Normalfall nicht bei einer simplen Weiterleitung belassen. Im schlimmsten Fall verändert das so eingeschleußte JavaScript-Codefragment die Website nicht sichtbar, erfasst aber bspw. vom Nutzer angegebene Formulardaten oder zeigt falsche bzw. irreführende Preise, etc. an. Wie im einführenden Gästebuchbeispiel beschrieben, reicht hier mit VIO.Matrix einfach die korrekte Kodierung aller von einem Besucher in Formularfelder eingegebenen Daten mit dem Codec xmlmask. Gehen Sie bei der Programmierung einfach immer davon aus: Jede vom Besucher einer Website eingegebene Datensatz ist "schädlich"!
In einer weiteren Angriffsart versuchen Angreifer, die Datenbank einer Website zu manipulieren. Vereinfacht wird dies durch die weite Verbreitung von Online Content Management Systemen, welche diesselbe bekannte Datenbankstruktur nutzen. Werden SQL- typische Sonder- oder Metazeichen nicht genügend maskiert, hat ein Angreifer fast unbegrenzten Zugriff auf die Datenbank. Beispiel gefällig? Nehmen wir an, Ihre Website speichert alle Onlineshop-Kunden inkl. ihrer Kontodaten in einer MySQL-Datenbank. Wird ein neuer Kunde über das Websiteformular neu eingetragen, werden dessen Daten ebenfalls in dieser Datenbank gespeichert. Die Parameter name, strasse, plz, etc. werden über gleichlautende Übergabeparameter an das Websiteskript übergeben und in der erzeugten SQL-Anweisung verwendet:
Ein Angreifer übergibt nun bspw. dem Parameter $plz folgenden Inhalt:
In der Websiteanwendung wird aus diesem Inhalt folgendes SQL-Kommando:
Sie sehen: An das eigentliche INSERT-Kommando wird ein zweitens Kommando angefügt, welches in diesem Fall die Kontonummern aller Kunden löscht! Auf ähnliche Art und Weise ist ein Ausspähen fremder, persönlicher Daten möglich.
In der Regel befindet sich die Datenbank direkt auf dem Webserver, d.h. Datenbank- und Webserver sind ein und derselbe Rechner. Da SQL auch die Ausführung von Shellbefehlen zulässt (sofern dem Datenbanknutzer das betreffende Recht gegeben wurde), führt folgende "$plz"-Manipulation zu katastrophalen Folgen:
VIO.Matrix bietet systembedingt einen automatischen SQL-Injektion-Schutz: Das Desktop Content Management System kapselt die enthaltene Datenbank vollständig, d.h. durch reine Manipulation von Parameterübergaben ist es nicht möglich, die zugrundeliegende Datenbank gezielt zu verändern. Aber auch alle anderen Arten von Cross-Site Scripting lassen sich mit VIO.Matrix souverän abwehren:
Angriffsoption | VIO.Matrix Schutz mit | Beispiel |
---|---|---|
JavaScript-Code in Übergabeparameter | Maskierung aller Ausgaben aus Formularen mit xmlmask | #INSERT_SP_PRINT_{{codec:none,xmlmask}#INSERT_SP_VAR_parameter!}! |
HTML-Code in Übergabeparameter | Maskierung aller Ausgaben aus Formularen mit xmlmask | #INSERT_SP_PRINT_{{codec:none,xmlmask}#INSERT_SP_VAR_parameter!}! |
SQL-Injektion | systembedingter Schutz |
|
SQL-Injektion in Content-Syndication Umgebungen | Maskierung aller Ausgaben aus Formularen mit mysql Rechtevergabe im Datenbanksystem | SELECT * FROM tabelle WHERE name LIKE '%#INSERT_SP_PRINT_{{codec:mysql}#INSERT_SP_VAR_parameter!}!%' |