Aktuelles

Injiziert und ausgeknockt - wie Hacker die Kontrolle über Ihre Website übernehmen

Hacker-Klassiker SQL-Injection"Hilfe, auf meiner Startseite steht ein ganz anderer Text und ein Schmuddelbild! Und dann geht plötzlich eine ganz andere Seite auf!" Wir bekommen immer mal wieder solche Anrufe herein und wenn dem so ist, liegt das Kind schon ganz unten im Brunnen. Meistens gibt es dann auch noch kein vernünftiges Backup der Website. Und jeder Besucher der Website kann sehen, dass es mit dem Sicherheitsverständnis des Betreibers nicht weit her ist, kurz: Die Unternehmensreputation ist hinüber.

Wenn dann auch noch Nutzerdaten abgegriffen oder die Computer der Besucher mit Schadcode infiziert wurden, ist ganz schnell eine Datenschutzbehörde im Spiel und es kann richtig Ärger geben und richtig teuer werden - beispielsweise wenn Datenschutzverstöße verschleiert, verspätet oder gar nicht gemeldet werden.

Wie machen die das? Wie schaffen die das, meine Website zu manipulieren?

Eins vorweg: Die Schuld des Internet-Providers ist es nicht. Der stellt nur Server und Webspace zur Verfügung und ist für die Sicherung seiner Infrastruktur verantwortlich. Um die Sicherheit und den Schutz Ihrer Website müssen Sie sich selbst kümmern. Ganz im Gegenteil: Viele Internetprovider schalten infizierte Websites ganz ab, um andere Kunden nicht zu gefährden.

Hacker und Script-Kiddies nutzen vielfältige Schwachstellen im Quellcode, um Zugriff auf eine Website zu erlangen. Davon sind nicht nur mehr oder weniger schlecht selbst programmierte Projekte betroffen, sondern auch große, namhafte und etablierte Systeme haben immer wieder Sicherheitslücken in der Größe eines Scheunentors. Es ist nämlich gar nicht so schwer, Systeme zu kompromittieren und zu manipulieren. Die sogenannte SQL-Injection ist dabei eine der häufigsten Risikofaktoren in Websites. Es handelt sich um eine Code-Injektionsschwachstelle, mit der Hacker in Ihre Datenbank eindringen können. Dort werden dann Inhalte geändert, gelöscht oder Schadcode hinterlegt, mit dem sich weitere Aktionen steuern lassen - beispielsweise das Abgreifen von Passwörtern, die Verschlüsselung von Daten oder Infizierung von Geräten von Besuchern Ihrer Website. Mit komplexen SQL-Injections kann sogar der Zugriff auf die Shell des Servers möglich sein, dann können Hacker nicht nur die Website manipulieren, sondern die Kontrolle über den gesamten Server übernehmen.

SQL-Injections sind eine vielfältige Code-Injektionstechnik, die es ermöglicht, bösartige SQL-Abfragen auszuführen - und dabei sind der Fantasie keine Grenzen gesetzt, wenn man der Abfragesprache SQL mächtig ist. Aber selbst das ist keine Voraussetzung, im Internet kursieren zahlreiche Anleitungen und Beispielskripte, so dass selbst Leute mit nur grundlegenden Kenntnissen eine Website lahmlegen können. Zudem finden viele Angriffe heute nicht mehr manuell statt, automatische Abfragen oder so genannte Brute-Force-Angriffe auf Websites oder Webformulare starten tausende, immer wieder minimal geänderte Versuche, von denen dann einer zum Erfolg führt.

SQL-Injection-Angriffe werden meist mit GET oder POST in die Website eingespeist. Bei der GET-Methode wird über die Adresszeile des Browsers versucht, manipulierte Datenbank-Abfragen einzuschleusen, bei der POST-Methode werden alle erdenklichen Formularfelder auf der Website genutzt, um Schadcode auszuführen - etwa Login- oder Kontaktformulare, Newsletter-Anmeldeformulare oder Suchfelder. In jedem Fall wird versucht, SQL-Befehle auf der Datenebene zu injizieren, um die Ausführung vordefinierter SQL-Befehle zu bewirken. Schon an dieser Stelle sollte also die Datenübertragung abgesichert sein und die übergeben Daten auf Herz und Nieren geprüft werden.

Wie funktionieren SQL-Injections?

Wie schon erwähnt, das ist alles keine Zauberei: Jede SQL-Abfrage basiert auf einer ganz bestimmten Syntax, beispielsweise bei einem Login-Formular:

SELECT id, name, password FROM tabelle_user WHERE name = 'username' AND password = 'userpassword'

Die Datenbank wird aufgrund der Abfrage die Felder username und userpassword ausliefern. Diese Datenbankabfrage wird nun durch das Hinzufügen weiterer Sprachbausteine und Parameter so manipuliert, dass die Datenbank mehr ausliefert als ursprünglich vorgesehen oder bei komplexeren Manipulationen Dinge tut, die der Inhaber der Website nicht eingeplant hatte - vereinfacht sieht das dann so aus:

SELECT id, name, password FROM tabelle_user WHERE name = 'username' OR 1=1;' AND password = 'userpassword'

Durch den zusätzlichen Codeschnipsel wird die Logik der Datenbankabfrage verändert. Mit dem Hochkomma wird die Bedingung beendet und ein neuer Befehl hinzugefügt. Da die Bedingung 1=1 ist immer "true" ist, würde ein Login an dieser Stelle also genehmigt werden - immer unter der Voraussetzung, dass die übergebene Abfrage nicht geprüft bzw. verhindert und eliminiert wird.

Gehen wir ins Detail: Welche Arten der SQL-Injektion sind möglich?

  • In-Band-SQLi (klassisches SQLi)
    In-Band-SQL-Injection ist die häufigste und am einfachsten auszunutzende Form von SQL-Injection-Angriffen. In-band SQL Injection tritt auf, wenn ein Angreifer denselben Kommunikationskanal nutzen kann, um den Angriff zu starten und die Ergebnisse zu sammeln. Die beiden häufigsten Arten von In-Band-SQL-Injection sind fehlerbasiertes SQLi und unionsbasiertes SQLi.
  • Fehlerhaftes SQLi
    Fehlerbasiertes SQLi ist eine In-Band-SQL-Injection-Technik, die sich auf Fehlermeldungen des Datenbankservers stützt, um Informationen über die Struktur der Datenbank zu erhalten. In manchen Fällen reicht eine fehlerbasierte SQL-Injektion aus, um eine ganze Datenbank zu durchforsten.
  • Union-basiertes SQLi
    Union-basiertes SQLi ist eine In-Band-SQL-Injection-Technik, die den UNION-SQL-Operator nutzt, um die Ergebnisse von zwei oder mehr SELECT-Anweisungen zu einem einzigen Ergebnis zu kombinieren, das dann als Teil der HTTP-Antwort zurückgegeben wird.
  • Inferentielles SQLi (Blind SQLi)
    Inferentielle SQL-Injektion kann im Gegensatz zu In-Band-SQLi länger dauern, bis ein Angreifer sie ausnutzt, ist aber genauso gefährlich wie jede andere Form der SQL-Injektion. Bei einem inferentiellen SQLi-Angriff werden keine Daten über die Webanwendung übertragen, und der Angreifer ist nicht in der Lage, das Ergebnis eines In-Band-Angriffs zu sehen (daher werden solche Angriffe gemeinhin als "blinde SQL-Injection-Angriffe" bezeichnet). Stattdessen ist ein Angreifer in der Lage, die Datenbankstruktur zu rekonstruieren, indem er Nutzdaten sendet, die Antwort der Webanwendung und das daraus resultierende Verhalten des Datenbankservers beobachtet. Die beiden Arten der inferentiellen SQL-Injektion sind boolesches und zeitbasiertes SQLi.
  • Boolean-basiert (inhaltsbasiert)
    Blind SQLi Boolean-based SQL Injection ist eine inferentielle SQL Injection-Technik, die darauf beruht, dass eine SQL-Abfrage an die Datenbank gesendet wird, die die Anwendung zwingt, ein anderes Ergebnis zurückzugeben, je nachdem, ob die Abfrage ein TRUE- oder FALSE-Ergebnis liefert. Je nach Ergebnis ändert sich der Inhalt der HTTP-Antwort, oder er bleibt gleich. Auf diese Weise kann ein Angreifer herausfinden, ob die verwendete Nutzlast wahr oder falsch ist, obwohl keine Daten aus der Datenbank zurückgegeben werden.
  • Zeitbasiertes Blind SQLi
    Bei der zeitbasierten SQL-Injektion handelt es sich um eine inferentielle SQL-Injektionstechnik, bei der eine SQL-Anfrage an die Datenbank gesendet wird, die die Datenbank dazu zwingt, eine bestimmte Zeit (in Sekunden) zu warten, bevor sie antwortet. Die Antwortzeit zeigt dem Angreifer an, ob das Ergebnis der Abfrage TRUE oder FALSE ist. Je nach Ergebnis wird eine HTTP-Antwort mit einer Verzögerung oder sofort zurückgegeben. Auf diese Weise kann ein Angreifer feststellen, ob die verwendete Nutzlast wahr oder falsch ist, auch wenn keine Daten aus der Datenbank zurückgegeben werden.
  • Out-of-band SQLi
    Out-of-band SQL Injection ist nicht sehr verbreitet, da sie hauptsächlich davon abhängt, dass der von der Webanwendung verwendete Datenbankserver bestimmte Funktionen aktiviert hat. Out-of-band SQL Injection tritt auf, wenn ein Angreifer nicht in der Lage ist, denselben Kanal zu verwenden, um den Angriff zu starten und Ergebnisse zu sammeln. Out-of-band-Techniken bieten dem Angreifer eine Alternative zu zeitbasierten Inferenztechniken, insbesondere wenn die Serverantworten nicht sehr stabil sind (was einen zeitbasierten Inferenzangriff unzuverlässig macht).
  • Sprachbasierte Sql-Injektion
    Hierbei handelt es sich um eine Sql-Injection-Angriffsmethode, die in Anwendungen angewendet werden kann, die den Zugriff auf Datenbanken per Sprachbefehl ermöglichen. Ein Angreifer könnte Informationen aus der Datenbank abrufen, indem er Sql-Abfragen mit Ton sendet.

Wie kann man gegen SQL-Injections vorgehen?

Keine Website muss SQL-Injections schutzlos ausgeliefert sein, denn es existieren wirksame Methoden, um Webanwendungen vor derlei Angriffen zu schützen. Ein erster Schritt besteht darin, den Benutzereingaben beispielsweise in einem Formularfeld nicht bedingungslos zu vertrauen und stattdessen die Eingabedaten auf erwartete Werte zu prüfen. Z.B. sollte in einem Feld für eine E-Mail-Adresse immer geprüft werden, ob die Benutzereingabe der Syntax einer E-Mail-Adresse entspricht, wenn nicht: Fehlermeldung, Ablehnung! Zudem ist es ratsam, spezielle Sonderzeichen aus den Benutzereingaben zu entfernen oder zu maskieren.

Eine grundlegende Absicherung gegen SQL-Attacken lässt sich darüber hinaus erreichen, indem man die Benutzereingaben vom SQL-Interpreter isoliert. Dies wird durch die Verwendung von Prepared Statements ermöglicht. Dabei handelt es sich um spezielle Vorlagen für Datenbankabfragen, die durch variable Parameter angepasst werden. Abgesehen von den Sicherheitsvorteilen trägt dies auch zur Verbesserung der Datenbankleistung bei.

Zusätzlich können auf der Ebene der Datenbank Sicherheitsvorkehrungen getroffen werden. Sollte ein Einbruch dennoch erfolgen, kann so verhindert werden, dass erhebliche Schäden entstehen. Eine wichtige Maßnahme ist dabei die Beschränkung der Benutzerprivilegien. Es ist ratsam, Lese-, Ausführungs- und Löschberechtigungen äußerst sparsam zu vergeben. Zur Wahrheit gehört auch, dass regelmäßige und vollständige Datensicherungen sowohl der Datenbank als auch des Dateisystems zum Pflichtprogramm gehören, was leider immer wieder unterschätzt oder vernachlässigt wird.

Fazit:

SQL-Injections gehören schon seit langem zu den klassischen Übeln, derer sich Hacker und Scriptkiddies bedienen. Auch Websites von großen Unternehmen sind immer wieder anfällig für derlei Attacken - und das, obwohl die Gegenmaßnahmen bekannt sind und inzwischen Standard sein sollten. Das alleinige Wissen über SQL-Injection bietet keinen umfassenden Schutz vor solchen Angriffen. Neue Schwachstellen können durch Unachtsamkeiten im Entwicklungsprozess, Anpassungen und Programmierfehler entstehen. Durch regelmäßige Überprüfungen auf Anfälligkeiten für SQL-Injections können diese Schwachstellen schnell identifiziert und behoben werden, bevor Hacker sie ausnutzen können.

Foto: Geralt / Pixabay

10.11.2023

RSS Newsfeed
Alle News vom TAGWORX.NET Neue Medien können Sie auch als RSS Newsfeed abonnieren, klicken Sie einfach auf das XML-Symbol und tragen Sie die Adresse in Ihren Newsreader ein!