SQL-Injection (SQLi)
Quick Definition
Eine Angriffstechnik, die Schwachstellen in der Datenbankschicht einer Anwendung ausnutzt, indem bösartiger SQL-Code in Abfragen eingefügt wird.
Was ist SQL-Injection?
SQL-Injection (SQLi) ist eine der ältesten und gefährlichsten Schwachstellen in Webanwendungen. Sie tritt auf, wenn ein Angreifer in der Lage ist, bösartigen SQL-Code in eine Abfrage einzufügen, die eine Anwendung an ihre Datenbank sendet. Dies geschieht, wenn Benutzereingaben falsch gefiltert oder nicht ordnungsgemäß parametrisiert werden.
SQL-Injection-Angriffe können:
- Authentifizierung umgehen, um unbefugten Zugriff zu erlangen
- Sensible Daten aus der Datenbank lesen
- Daten ändern oder löschen
- Administrative Operationen auf der Datenbank ausführen
- In einigen Fällen Befehle auf dem Betriebssystem ausführen
Es gibt mehrere Arten von SQL-Injection:
- In-Band SQLi: Der Angreifer verwendet denselben Kanal, um den Angriff zu starten und Ergebnisse zu sammeln (fehlerbasiert, UNION-basiert)
- Blind SQLi: Keine sichtbaren Fehlermeldungen; Angreifer schließt auf Daten basierend auf dem Anwendungsverhalten
- Out-of-Band SQLi: Daten werden über verschiedene Kanäle abgerufen (DNS, HTTP-Anfragen)
Beispiele
Betrachten Sie ein Anmeldeformular, bei dem die Backend-Abfrage lautet:
SELECT * FROM users WHERE username='$user' AND password='$pass' Ein Angreifer, der admin'-- als Benutzernamen eingibt, würde die Abfrage umwandeln in:
SELECT * FROM users WHERE username='admin'--' AND password='...' Das -- kommentiert den Rest der Abfrage aus und ermöglicht die Anmeldung ohne Passwort.
Häufig gestellte Fragen
Wie schützen WAFs vor SQL-Injection?
WAFs verwenden Musterabgleich und signaturbasierte Erkennung, um SQL-Injection-Versuche in HTTP-Anfragen zu identifizieren. Sie suchen nach verdächtigen SQL-Schlüsselwörtern, Sonderzeichen und bekannten Angriffsmustern in Query-Strings, Formulardaten und Headern. Fortgeschrittene WAFs verwenden auch Verhaltensanalyse, um neuartige Angriffe zu erkennen.
Reichen parametrisierte Abfragen aus, um SQL-Injection zu verhindern?
Parametrisierte Abfragen (Prepared Statements) sind die effektivste Verteidigung gegen SQL-Injection auf Anwendungsebene. WAFs bieten jedoch Defense-in-Depth, indem sie Angriffe am Edge abfangen, Legacy-Anwendungen schützen und Schutz bieten, während Code gepatcht wird.