Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

1 PS The Weakest Link: SQL Injections Vortrag: SQL Injections Dominik Oepen und Sebastian Höfer 25.11.2005.

Ähnliche Präsentationen


Präsentation zum Thema: "1 PS The Weakest Link: SQL Injections Vortrag: SQL Injections Dominik Oepen und Sebastian Höfer 25.11.2005."—  Präsentation transkript:

1 1 PS The Weakest Link: SQL Injections Vortrag: SQL Injections Dominik Oepen und Sebastian Höfer

2 2 PS The Weakest Link: SQL Injections 1. Einleitung 2. Einführung SQL/PHP 3. SQL Injections/Blindfolded Injections 4. Schutzmaßnahmen Gliederung

3 3 PS The Weakest Link: SQL Injections Was sind SQL Injections? ● Einschleusen von SQL Befehlen in Webapplikationen (PHP, ASP, JSP) ● Sicherheitslücken entstehen, wenn Nutzereingaben ungeprüft angenommen werden.

4 4 PS The Weakest Link: SQL Injections Warum PHP? ● Serverseitige Skriptsprache ● Leicht zu erlernen ● Trotzdem großer Funktionsumfang: ● Unterstützt OOP ● Sehr gute Anbindung an MS SQL, MySQL u. a. Datenbanken

5 5 PS The Weakest Link: SQL Injections Was sind die Gefahren? ● Selbst unerfahrene Programmierer können in PHP und einem Datenbanksystem entwickeln ● “Spaghetticode” ● Keine Einhaltung von Sicherheitsstandards ● Kein Bewusstsein für mögliche Risiken

6 6 PS The Weakest Link: SQL Injections Einführung in SQL

7 7 PS The Weakest Link: SQL Injections 1. Was ist eine relationale Datenbank? 2. Welche SQL-Dialekte gibt es? 3. Wie erhalte ich Daten? 4. Wie manipuliere ich Daten? Einführung in SQL

8 8 PS The Weakest Link: SQL Injections Was ist eine relationale Datenbank? Primärschlüssel Attribut e Beispiel: Tabelle student Attributwert e

9 9 PS The Weakest Link: SQL Injections Welche SQL-Dialekte gibt es? SQL = Structured Query Language Es werden Anfragen (Queries) an den Server gesendet, um Daten zu erhalten oder manipulieren ● Dialekte (hier betrachtete): ● Transact SQL (Microsoft) ● MySQL (Open Source) ● Weitere Dialekte: ● PostgreSQL, Oracle, DB2, u. v. a.

10 10 PS The Weakest Link: SQL Injections Welche SQL-Dialekte gibt es? ● Grundlegende Syntax: ● Intuitiv an englische Sprache angelehnt ● Anfragen enden mit ; ● Aber: Skriptsprachen wie PHP fügen ; selbst hinzu ● Eingegebene String-Werte in Hochkommata eingeschlossen ● Kommentarzeichen ● Transact SQL: -- ● MySQL: #

11 11 PS The Weakest Link: SQL Injections Wie erhalte ich Daten? Der SELECT- Befehl Syntax (Auszug): SELECT select_expr [FROM table_references [WHERE where_definition] [GROUP BY {col_name | expr | position} [HAVING where_definition]] [LIMIT {[offset,] row_count}]

12 12 PS The Weakest Link: SQL Injections Wie erhalte ich Daten? Einfache Anfragen SELECT * FROM student... gibt alle Daten aus unserer Beispieltabelle aus:

13 13 PS The Weakest Link: SQL Injections Wie erhalte ich Daten? SELECT vorname, studienfach FROM student WHERE name = 'Oepen'... gibt aus:

14 14 PS The Weakest Link: SQL Injections Wie erhalte ich Daten? SELECT 1+1;... geht auch:

15 15 PS The Weakest Link: SQL Injections Wie erhalte ich Daten? Komplexere Anfragen SELECT in Kombination mit ● UNION = Vereinigung (mengentheoretisch) ● GROUP BY und HAVING ● Gruppieren, um Aggregatsfunktionen auszuführen (gleich mehr dazu)

16 16 PS The Weakest Link: SQL Injections Wie erhalte ich Daten? Beispiel: Neue Tabelle lehrender Zur Erinnerung : Alte Tabelle student

17 17 PS The Weakest Link: SQL Injections Wie erhalte ich Daten? SELECT * FROM student UNION SELECT id, name, vorname, titel FROM lehrender... ergibt:

18 18 PS The Weakest Link: SQL Injections Wie erhalte ich Daten? SELECT titel, count(*) FROM lehrender GROUP BY titel... ergibt:

19 19 PS The Weakest Link: SQL Injections Wie erhalte ich Daten? SELECT titel, count(*) FROM lehrender GROUP BY titel HAVING count(*) > 1... ergibt:

20 20 PS The Weakest Link: SQL Injections Wie manipuliere ich Daten? ● INSERT ● Anlegen eines neuen Datensatzes ● UPDATE ● Ändern eines bestehenden Datensatzes ● DELETE ● Löschen eines bestehenden Datensatzes ● DROP TABLE ● Gesamte Tabelle löschen

21 21 PS The Weakest Link: SQL Injections Wie manipuliere ich Daten? ● Intuitive Schreibweise, Beispiele: ● INSERT INTO student (vorname, name, studienfach) VALUES ('Karl', 'Ranseier', 'BWL') ● UPDATE student SET vorname = 'Peter' WHERE name = 'Oepen' ● DROP TABLE student;

22 22 PS The Weakest Link: SQL Injections Einführung in PHP

23 23 PS The Weakest Link: SQL Injections Wie sieht PHP-Code aus? Beispiel: PHP-Test

24 24 PS The Weakest Link: SQL Injections Wie sieht PHP-Code aus? ● PHP-Code kann an jeder beliebigen Stelle im HTML-Code eingebettet werden (in eingeschlossen) ● Variablenbezeichner beginnen mit $ ● Ansonsten: Syntax stark angelehnt an C ● Kontrollstrukturen (if, switch) ● Schleifen (z. B. while, do-while, for) ● Funktionen / Prozeduren ● Aber: Es gibt keine expliziten Datentypen

25 25 PS The Weakest Link: SQL Injections Interaktion von PHP mit Datenbanksystemen

26 26 PS The Weakest Link: SQL Injections Interaktion von PHP mit Datenbanksystemen [...] Username: Password: [...] Unser HTML-Formular: Beispiel: PHP und MySQL

27 27 PS The Weakest Link: SQL Injections Interaktion von PHP mit Datenbanksystemen [...] $db_hdl = mysql_connect("localhost", "phpuser", "phpuser"); mysql_select_db("weakestlink", $db_hdl); $username = $_POST['username']; $password = $_POST['password']; // Query aufstellen $query = "SELECT * FROM users WHERE username = '$username' AND password = '$password'"; $res = mysql_query($query, $db_hdl); [...] Beispiel: PHP und MySQL Neue login.php

28 28 PS The Weakest Link: SQL Injections SQL Injections

29 29 PS The Weakest Link: SQL Injections Einschleusung von SQL Befehlen ● SQL Syntax: Strings in ' ● Angreifer beendet String durch Eingabe von ' gefolgt von SQL Code ● Setzen von Kommentarzeichen deaktiviert restliches Query ● Interpretation durch SQL Server als Teil des Queries

30 30 PS The Weakest Link: SQL Injections Beispiel: Query: var $query = "SELECT * FROM users WHERE username = '$username' AND password = ' $password'”; Eingabe: MS SQL: admin'-- MySQL: admin'#

31 31 PS The Weakest Link: SQL Injections Beispiel Erzeugt Query: SELECT * FROM users WHERE username = 'admin'--' AND password = ' $password'

32 32 PS The Weakest Link: SQL Injections Generelle Vorgehensweise 1. Verwundbare Parameter identifizieren 2. Identifizierung der Datenbankstruktur 3. Durchführung der gewünschten Injection

33 33 PS The Weakest Link: SQL Injections Identifizierung der DB Struktur ● Meistens Informationen durch Fehlermeldungen sammeln ● Absichtlich falsche SQL Statements werden injeziert ● Fehlermeldungen enthalten oft Informationen über DB Struktur

34 34 PS The Weakest Link: SQL Injections Identifizierung der DB Struktur ● HAVING: Schlägt fehl, falls GROUP BY fehlt. In der erzeugten Fehlermeldung werden Name der Tabelle und des Attributes ausgegeben Beispiel:

35 35 PS The Weakest Link: SQL Injections Welche Injections gibt es? ● INSERT/UPDATE: Manipulation von Daten ● UNION SELECT: Ausspähen von Daten ● DROP TABLE: Löschen von Daten

36 36 PS The Weakest Link: SQL Injections Ausblick: Was geht noch? ● Absetzen von Kommandos auf dem Server (xp_cmdshell) ● Auslesen/Manipulieren der Registry (xp_regread) ● Textdateien auf Server erstellen (bcp) oder lesen (bulk insert) Abhängig von Serversystem/DB System:

37 37 PS The Weakest Link: SQL Injections Blindfolded SQL Injections

38 38 PS The Weakest Link: SQL Injections Blindfolded SQL Injections ● Zum Schutz vor SQL Injections werden häufig Fehlermeldungen unterdrückt ● SQL Injections auch möglich ohne Fehlermeldungen

39 39 PS The Weakest Link: SQL Injections Blindfolded SQL Injections ● Angreifer testet Parameter auf mögliche Injections, ohne Fehlermeldungen auszuwerten ● Trial and Error Prinzip ● Angriffe sind aufwendiger, aber immer noch praktikabel

40 40 PS The Weakest Link: SQL Injections Generelle Vorgehensweise 1. Identifizierung des DB Systems 2. Verwundbare Parameter identifizieren 3. Struktur des SQL Queries erraten 4. Struktur der DB/Tabellen identifizieren 5. Durchführung der gewünschten Injection

41 41 PS The Weakest Link: SQL Injections DB System identifizieren ● Unterschiedliche DB Systeme verwenden leicht unterschiedliche Syntax ● Wenn eine Webapplikation spezielle Syntax akzeptiert, weiß man welches DB System verwendet wird ● Beispiel: String Konkatenation (MS “+”, Oracle “||”)

42 42 PS The Weakest Link: SQL Injections Struktur des Queries raten Beispiel SELECT... WHERE: ● WHERE Statement ist boolscher Ausdruck ● Kann durch injezierte AND bzw. OR Ausdrücke wahr oder falsch gemacht werden ● Scheitern Statements, die eigtl. wahr sein sollten, liegt dies an der Syntax (Bsp. nicht gematchte Klammern)

43 43 PS The Weakest Link: SQL Injections Schutzmaßnahmen

44 44 PS The Weakest Link: SQL Injections Überblick Schutzmaßnahmen 1.Implementierte Sicherheitsfeatures 2.Weitere Schutzmaßnahmen 3.Fazit

45 45 PS The Weakest Link: SQL Injections Sicherheitsfeatures PHP: magic_quotes_gpc ● Maskiert Eingaben von GET POST und COOKIE ● Escapes für: ' “ \ und NUL ● Wird in der php.ini aktiviert (default)

46 46 PS The Weakest Link: SQL Injections Sicherheitsfeatures PHP: magic_quotes_gpc ● Wenn aktiv, sind SQL Injections grundsätzlich nicht mehr möglich ● Aber: magic_quotes + eigene Maskierungsfunktionen verfälschen Eingabe ● Wird häufig deaktiviert, um z.B. Namen wie O'Neil zuzulassen

47 47 PS The Weakest Link: SQL Injections Sicherheitsfeatures PHP: ● mysql.trace_mode: Schalter in php.ini ● SQL Syntaxfehler werden nicht mehr ausgegeben, falls Schalter auf off (default) ● Kein Query Stacking

48 48 PS The Weakest Link: SQL Injections Sicherheitsfeatures MySQL und trace.mode = on: ● Weniger aufschlussreiche Fehlermeldungen ● Bsp: HAVING Fehlermeldung liefert nicht Name und Typ des Tabelleneintrags

49 49 PS The Weakest Link: SQL Injections Unausgereifte Schutzmaßnahmen ● Begrenzung der Eingabelänge ● “Schlechten” Input zurückweisen (Blacklist) ● Nur “guten” Input akzeptieren (Whitelist)

50 50 PS The Weakest Link: SQL Injections Schutzmaßnahmen ● Fazit: ● Unterdrückung von Fehlern kein absoluter Schutz, aber hilfreich ● Bester Schutz: Saubere Programmierung ● Kombination von Whitelist und Blacklist: Überprüfen aller übergebenen Parameter!

51 51 PS The Weakest Link: SQL Injections Quellen: ● Offizielle MySQL 5.0 Reference:http://dev.mysql.com/doc/refm an/5.0/en/http://dev.mysql.com/doc/refm an/5.0/en/ ● Offizielle PHP Referenz: ● ● Chris Anley: Advanced SQL Injections ● Chris Anley: Hackproofing MySQL ● Ofer Maor, Amichai Shulman: Blindfolded SQL Injections


Herunterladen ppt "1 PS The Weakest Link: SQL Injections Vortrag: SQL Injections Dominik Oepen und Sebastian Höfer 25.11.2005."

Ähnliche Präsentationen


Google-Anzeigen