Blacklisting

Blacklisting beschreibt allgemein den Vorgang, durch anlegen einer Liste (Blacklist) aus vordefinierten Elementen, diese als bekannterweise negativ zu kennzeichnen und die Eingabe und Verarbeitung dieser Begriffe zu verhindern. Blacklisting stellt damit das Gegenstück zum Whitelisting dar, welches explizit erlaubte Elemente auflistet.

Blacklisting bei SQL-Queries

Eingabevalidierung zum Schutz vor SQL-Injektion

Bei der Weitergabe von Anfragen durch Webanwendungen and Datenbanksysteme überprüft die Blacklist-Funktion einen Eingabe-String und gleich dessen Inhalt mit den Elementen der Blacklist ab. Die Blacklist enthält Ausdrücke, von denen bekannt ist dass sie im Zuge von SQL-Injektion verwendet werden wie z.B.: select, insert, drop, union, etc..

Da SQL Syntax und damit die im Zuge von SQL-Injektion verwendet Ausdrücke viele gebräuchliche Worte und Ausdrücke der englischen Sprache sind, kann dies insbesondere bei englischsprachigen Anwendungen selbst bei legitimen Suchanfragen zu falschen Treffern führen. Ein Beispiel hierfür könnte sein, dass jemand nach dem Ausdruck „Europäische Union“ im Suchfeld von Wikipedia.org sucht, was von einer ungeschickt konfigurierten Blacklist aufgrund des Teilstrings „union“ unterbunden wird.


Umgehungsstrategien

Außerdem können Blacklists von Angreifern umgehen werden. So kann zum Beispiel die große Anzahl von Zwischenraumzeichen ( wie 0x20 (Leertaste), 0x09 (Tab), 0x0A, 0x0B, 0x0C, 0x0D und 0xA0) hierfür genutzt werden, da die Verwendung innerhalt eines SQL-Queries aus Sicht der Datenbank legitim ist. Einfach Blacklists können auch anfällig sein für case-sensitive Ausdrücke, wenn „Drop“ anders behandelt wird als „drop“ oder drOp“, für die Datenbank diese Statement jedoch gleichwertig sind.

Wird beispielweise die Verarbeitung des Strings “drop table” per Blacklist unterbunden, durchsucht die Blacklist-Funktion den Eingabestring nach dem Teilstring “drop”, gefolgt vom Zeichen 0x20, gefolgt vom Teilstring „table“. Ein Angreifer könnte nun das Zeichen 0x20 durch 0x09 ersetzen und somit den Blacklistabgleich überstehen und an die DB weitergereicht werden.

Blacklisting bedarf also besonderer Pflege und eine genaue Vorstellung davon, welche Elemente geblockt werden sollen. Daher können Blacklists keinen absoluten Schutz vor SQL-Injektionen darstellen, stattdessen sollte auf andere Mittel zur Eingabevalidierung wie Whitelists und Predefined-Statements zurückgegriffen werden.


Vorteile

• Bekannte schädliche Elemente/Ausdrücke können von Blacklist zu Blacklist weitergegeben werden

• Gezieltes Ausschließen vereinzelter Elemente/Ausdrücke


Nachteile

• Schützt ausschließlich vor bekannten Bedrohungen

• Kann von Angreifern umgangen werden

• Pflegeintensiv

• Ressourcenintensiv


Quellen

https://www.red-gate.com/simple-talk/databases/sql-server/database-administration-sql-server/sql-injection-how-it-works-and-how-to-thwart-it/

https://portswigger.net/support/sql-injection-bypassing-common-filters

Justin Clarke [2016] SQL Hacking: SQL-Injektion auf relationale Datenbanken im Detail verstehen und abwehren, Franzis Verlag GmbH