Site Overlay

SQL-Injection-Angriff

SQL Injection Attack arif akyuz
Cybersicherheitsrichtlinien für Unternehmen

SQL-Injection ist eine Angriffstechnik, die verwendet wird, um datenbankbasierte Anwendungen anzugreifen. wobei der Angreifer SQL-Sprachfunktionen verwendet, um neue SQL-Anweisungen zum entsprechenden Feld auf dem Standardanwendungsbildschirm hinzuzufügen. (Beispielsweise könnte ein Angreifer Datenbankinhalte auf sich selbst übertragen).SQL Injection nutzt eine Schwachstelle innerhalb der Software von Anwendungen aus, z. B. werden SQL-Anweisungen in den Teil eingebettet, in dem die Anwendung Benutzereingabeinformationen erwartet, wenn der Inhalt der eingehenden Daten nicht innerhalb der Anwendung gefiltert wird oder falsch gefiltert wird, scheint die Anwendung ohne Fehler mit dem darin eingebetteten Code ausgeführt zu werden. Obwohl SQL Injection als eine Art von Angriff bekannt ist, der hauptsächlich für Websites verwendet wird, kann es in allen Anwendungen durchgeführt werden, die auf einer SQL-Datenbank basieren.

SQL-Injection-Angriffe ermöglichen es Angreifern, sich mit den Informationen eines der Benutzer im System anzumelden, vorhandene Daten zu stören, einige Operationen abzubrechen oder zu ändern, alle Daten in der Datenbank offenzulegen, alle Daten in der Datenbank zu zerstören und Systemadministrator auf dem Datenbankserver zu werden.

Eine Studie aus dem Jahr 2012 ergab, dass eine Webanwendung durchschnittlich 4 Angriffe pro Monat erhält, wobei Einzelhändler doppelt so viele Angriffe erhalten wie andere Branchen.

Falsche Filterung von Escape-Zeichen

Dieser SQL-Typ tritt auf, wenn Daten vom Benutzer nicht durch Escape-Eingabeaufforderungen des Benutzers gefiltert werden, wodurch der Anwendung neue SQL-Anweisungen hinzugefügt werden. Die eingefügten SQL-Anweisungen veranlassen den Endbenutzer, die Datenbank wie gewünscht zu bearbeiten.

Falsche Typbehandlung

Dieser SQLI-Typ tritt auf, wenn die Typprüfung des vom Benutzer eingegebenen Felds nicht ordnungsgemäß ausgeführt wird. Wenn in einer SQL-Anweisung ein numerischer Wert verwendet wird, muss die Eingabe des Benutzers ebenfalls ein numerischer Wert sein. Wenn diese Prüfung nicht durchgeführt wird, tritt eine Sicherheitslücke auf.

Blinde SQL-Injektion

Blinde SQL-Injection wird verwendet, wenn eine Webanwendung für einen SQLI verfügbar gemacht wird, die Ergebnisse jedoch für den Angreifer nicht sichtbar sind. Die anfällige Seite kann keine Daten offenlegen, kann aber aufgrund des in die SQL-Anweisung eingebetteten logischen Ausdrucks geänderte Daten anzeigen.

Bedingte Antworten

Zwingt die Datenbank, einen logischen Ausdruck in einer gewöhnlichen Anwendung auszuwerten.

SQL-Injection zweiter Ordnung

Sekundäre SQL-Injection tritt auf, wenn Werte, die bösartigen Code enthalten, nicht ausgeführt werden, sobald sie gesendet werden, sondern für einen bestimmten Zeitraum aufbewahrt werden. Die Anwendung kann die SQL-Anweisung korrekt codieren und als aktuelle SQL-Anweisung speichern. Dann wird in einem anderen Teil der Anwendung, der gegen SQL-Injection deaktiviert ist, die gespeicherte SQL-Anweisung ausgeführt. Um diesen Angriff durchzuführen, muss der Angreifer über weitere Informationen darüber verfügen, wie die gesendeten Werte dann verwendet werden. Automatische Sicherheitsscanner für Webanwendungen können diese Art der SQL-Injektion nicht einfach erkennen. Daher sollte manuell überprüft werden, ob sich bösartige Software im praktischen Teil des Codes befindet.

Vorsichtsmaßnahmen gegen Angriffe

SQL-Injection ist ein bekannter Angriff und kann mit einfachen Maßnahmen leicht verhindert werden. Nach einem offensichtlichen SQL-Injection-Angriff auf Talktalk im Jahr 2015 erklärte die BBC, dass die Entdeckung von SQL-Injection-Schwachstellen durch ein so großes Unternehmen Sicherheitsexperten überrascht habe.

Parametrisierte Ausdrücke

Die meisten Anwendungsentwicklungsplattformen verwenden parametrische Ausdrücke als Parameter anstelle von Daten vom Benutzer. (Auch Platzhalter oder Bindungsvariable genannt.) Ein Platzhalter speichert nur den angegebenen Datentyp. Daher wird SQL-Injection nur als interessanter (und möglicherweise ungültiger) Parameterwert behandelt.

In den meisten Fällen ist die SQL-Anweisung spezifisch, und jeder Parameter wird als Skalar und nicht als Tabelle gespeichert. Diesem Parameter werden Daten vom Benutzer zugeordnet.

Durchsetzung auf Codierungsebene

Durch die Verwendung objektrelationaler Mapping-Bibliotheken entfällt die Notwendigkeit, SQL-Code zu schreiben. Die aktive ORM-Bibliothek generiert parametrische SQL-Anweisungen aus objektorientiertem Code.

Ausströmend

In SQL ist es notwendig, Zeichen zu vermeiden, die besondere Bedeutungen haben. SQL DBMS erklärt, welche Zeichen eine besondere Bedeutung haben, und stellt eine umfassende Blacklist bereit. Beispielsweise wird das einfache Anführungszeichen(') in jedem Parameter durch zwei einfache Anführungszeichen ersetzt, um ein gültiges SQL-Zeichenfolgenliteral zu erstellen. (''mysqli_real_escape_string(); Es ist eine gängige Methode, um Parameter mit der Funktion zu vermeiden.

$mysqli = new mysqli('hostname', 'db_username', 'db_password', 'db_name'); $query = sprintf("SELECT * FROM 'Users' WHERE UserName='%s' AND Password='%s'"", $mysqli->real_escape_string($username), $mysqli->real_escape_string($password)); $mysqli->Abfrage($query);

Diese Funktion geht den folgenden Zeichen mit umgekehrtem Schrägstrich () voraus. x00, n, r, , ', "x1a.   Es wird verwendet, um die Datensicherheit zu gewährleisten, bevor eine Abfrage an MySQL gesendet wird.

PHP hat viele Funktionen für viele Arten von Datenbanken, zum Beispiel die pg_escape_string()-Funktion für PostgreSQL. Die Funktion addslashes (string $str), die zum Einfügen von Schrägstrichen verwendet wird, wird zum Escapen von Zeichen verwendet. Gibt eine Zeichenfolge mit umgekehrtem Schrägstrich () zurück, der die Zeichen vorangestellt sind, die in der Datenbank abgefragt werden sollen. Bei diesen Zeichen handelt es sich um einfache Anführungszeichen ('), doppelte Anführungszeichen ("), umgekehrte Schrägstriche () und NUL (NULL-Byte).

Das Erstellen einer transparenten Schicht, um die Sicherheit der Eingabe zu gewährleisten, kann die Fehleranfälligkeit verringern, beseitigt sie jedoch nicht vollständig.

Mustersteuerung

Ganzzahl-, Gleitkomma-, boolesche und Zeichenfolgenparameter können überprüft werden, ob ihre Werte für den angegebenen Typ gültig sind. Zeichenfolgen müssen möglicherweise auch mit anderen Mustern abgeglichen werden. (Datum, UUID, nur alphanumerisch usw.)

Datenbankberechtigungen

Das Einschränken von Anmeldeberechtigungen, die von Webanwendungen für die Datenbank erteilt werden, kann dazu beitragen, die Effektivität von SQL-Injection-Angriffen zu verringern, die Schwachstellen in Webanwendungen ausnutzen.

In Microsoft SQL Server kann eine Datenbankanmeldung beispielsweise den Zugriff auf einige Systemtabellen einschränken und bösartige Software einschränken, die versucht, JavaScript in alle Textspalten in der Datenbank einzufügen.

select on sys.sysobjects an webdatabaselogon verweigern; select on sys.objects an webdatabaselogon verweigern; select on sys.tables an WebdatabaseLogon verweigern; select on sys.views für WebdatabaseLogon verweigern; select on sys.packages an webdatabaselogon verweigern;

Bibliographie

[K1], [K2]