Unsere Security Analysten decken während ihrer Penetrationstests immer wieder Einfallstore in IT-Systemen und Anwendungen auf, die erhebliche Risiken für die Unternehmenssicherheit darstellen. Dabei begegnen ihnen vermehrt die gleichen Schwachstellen in unterschiedlichen IT-Assets, die teilweise schon seit Jahren bekannt sind. In unserer Mini-Serie stellen wir unsere Top 5 auffälligsten Schwachstellen aus 2020 vor. Teil 3: SQL Injection
Hintergrund zur Schwachstelle
SQL-Injection-Schwachstellen erlauben es einem Angreifer, eigene Datenbankkommandos in legitime Datenbankanfragen einzuschleusen. Dies kann für verschiedene Arten von Angriffen genutzt werden. In der Regel erlaubt ein erfolgreicher Angriff Vollzugriff auf die applikationsrelevanten Teile der Datenbank. Oftmals ist es für einen Angreifer dann weiterhin noch möglich, seine Berechtigungen innerhalb der Datenbank auszuweiten oder auf das Dateisystem des Servers zuzugreifen. Im schlimmsten Fall erlaubt eine SQL-Injection-Schwachstelle auch das Ausführen von beliebigen Betriebssystemkommandos auf dem unterliegenden Server.
Beispielhafter Hackerangriff und seine Folgen
Im Folgenden wird eine SQL-Injection-Schwachstelle demonstriert, die dem Angreifer letztlich Zugriff auf Passwort-Hashes von registrierten Benutzern ermöglicht. Dabei befindet sich der initiale Eintrittspunkt innerhalb einer Suche für Foren-Beiträge.
Wie oben zu sehen ist, lassen sich innerhalb der Applikation Forenbeiträge anhand eines Titels suchen. Durch das Einfügen von Sonderzeichen innerhalb der Suchanfrage kann ein Datenbankfehler provoziert werden, da die resultierende Datenbankanfrage eine ungültige Syntax besitzt.
Basierend auf dem hervorgerufenen Datenbankfehler kann ein Angreifer nun seinen Angriff verfeinern. In der folgenden Anfrage wird die Schwachstelle ausgenutzt, um Passwort-Hashes aus der Datenbank zu extrahieren:
Maßnahmenempfehlung
Vom Benutzer kontrollierte Eingaben sollten immer als potentiell gefährlich betrachtet und niemals ohne ausreichende Filterung und Enkodierung innerhalb von Datenbankanfragen verwendet werden. Entsprechende Funktionen zur Filterung von Eingaben stehen dabei in allen gängigen Programmiersprachen zur Verfügung. Weiterhin wird empfohlen, so genannte prepared statements zu verwenden. Mit dieser Technik wird die Struktur einer Datenbankanfrage schon vorab an die Datenbank gesendet, bevor die eigentlich für die Anfrage verwendeten Daten eingefügt werden. Der Datenbankserver kennt somit die Struktur der Anfrage und eine nachträgliche Veränderung durch einen Angreifer ist nicht mehr möglich.
Bitte beachten Sie, dass es sich hierbei um eine allgemeingültige Maßnahmenempfehlung handelt. Gern unterstützen wir Sie mit individuellen Lösungen. Sprechen Sie uns gern an.
In unserem Jahresbericht 2020 finden Sie mehr zu unseren Top 5 auffälligsten Schwachstellen und weitere spannende Themen.