Zeitbasierte SQL Injection Attacken

Aus IT-Forensik Wiki

Zeitbasierte SQL Injection Attacken

Zeitbasierte SQL Injection Attacken werden häufig dann genutzt, wenn andere Arten von SQLi wenig oder eingeschränkte Ergebnisse vom Zieldatenbanksystem liefern. Diese zeitbasierte Angriffsmethode schleust komplexere Abfragen in das SQL-Statement, die wiederum zu Zeitverzögerungen bei den Antworten oder hoher Auslastung am Zieldatenbanksystem führen sollen. Abhängig von der Zeit, die das Datenbanksystem benötigt, um zu antworten ist es möglich einige Informationen daraus zu ermitteln (Inferenzansatz, Informationserschließung). Diese Herangehensweise der Deduktion von Informationen ist sehr nützlich für sog. "Blind SQLi" und "Deep Blind SQLi".


SQL Injection mit einer Zeitverzögerung (Time Delay)


Zeitbasierte Attacken können genutzt werden, um grundlegende Informationen zur Datenbank zu ermitteln oder das Vorhandensein einer Schwachstelle. Es ist keine unübliche Vorgehensweise, wenn ein Angreifer mit einer zeitbasierten "Deep Blind SQLi" Attacke dem Zieldatenbanksystem Informationen entlocken will.

In folgender Tabelle wird exemplarisch aufgezeigt, wie die Ausführung der SQL-Anfrage verzögert werden kann in einigen Beispielen an unterschiedlichen DBMS Typen.

DBMS Befehl Beispiel Kommentare
MySQL SLEEP(Zeit) SELECT ... SLEEP(60) Die Zeitangabe erfolgt in Sekunden und ist verfügbar ab MySQL Version 5.
MySQL BENCHMARK(Anzahl, Ausdruck) SELECT BENCHMARK(100000000, 'SELECT ...') Führt die Anweisung vielfach aus. Mit der Nutzung einer zu Beginn hohen Zahl ist es möglich eine Verzögerung im Zieldatenbanksystem zu generieren
MS-SQL, Transact-SQL WAITFOR DELAY 'hh:mm:ss' SELECT ... WAITFOR DELAY '00:00:15' SELECT ... Verzögert die Ausführung des Befehls um den angegebenen Zeitraum
MS-SQL, Transact-SQL WAITFOR TIME 'hh:mm:ss' SELECT ... WAITFOR TIME '14:15:00' SELECT ... Verzögert die Ausführung des Befehls und führt diesen fort, wenn der angegebene Zeitpunkt erreicht ist

*Hinweis: Es ist von Vorteil für die Ausführung von zeitbasierten Attacken im Voraus zu wissen um welchen Typ Datenbanksystem es sich bei dem Zielsystem handelt. Sofern dies nicht bekannt ist, ist es möglich unterschiedliche zeitbasierte Anfragen abzusetzen, bis eine Antwort vom Zieldatenbanksystem zurückgegeben wird. Falls keine dieser Möglichkeiten zum gewünschten Ergebnis führt, sollte auf die Ergebnisse von "Enumerieren" und "Fingeprinting" für das Zielsystem zurückgegriffen werden, um den Datenbanktypen zu ermitteln.

Das Identifizieren von Schwachstellen ist nicht der einzige Einsatzzweck zeitbasierter SQLi Attacken. Sofern der Angreifer Verzögerungen in Prozeduren, bzw. Statements mit Bedingungen (z.B. CASE oder IF) integriert, ist es möglich, dass die Zieldatenbank Systeminformationen oder auch Daten preisgibt. Diese Methode basiert auf dem Inferenzansatz oder auch der Informationserschließung.

Vereinfacht dargestellt, wenn ein Angreifer eine Zeitverzögerung in ein Bedingungs-Statement integriert, hat der Angreifer die Möglichkeit geschaffen dem Zieldatenbanksystem eine Ja/Nein Frage zu stellen. Die Antwort des Datenbanksystems hängt somit von diesem Zeitfaktor ab (wäre fallweise ungewöhnlich lang) und lässt den Angreifer ermitteln, ob die Antwort Ja oder Nein war und daraus weiterführende Informationen erschließen.

In folgender Tabelle werden exemplarisch für einige Datenbanksysteme beispielhaft Bedingungs-Statements aufgeführt: