Web-Security. IT-Security. Andreas Unterweger. Studiengang Web Business & Technology FH Kufstein. Sommersemester 2017

Ähnliche Dokumente
Aktuelle Sicherheitsprobleme im Internet: Angriffe auf Web-Applikationen

PHP-5-Zertifizierung. Block 12 Security.

Wie sichert man APEX-Anwendungen gegen schädliche Manipulationen und unerwünschte Zugriffe ab?

Web-Sicherheit: Kein fauler Zauber?! Kai Jendrian. <Seminartitel> <Seminartitel>

Multimedia im Netz Wintersemester 2013/14. Übung 03 (Nebenfach)

Aktuelle Sicherheitsprobleme im Internet: Angriffe auf Web-Applikationen

Sicherheit in Webanwendungen CrossSite, Session und SQL

Übersicht der wichtigsten MySQL-Befehle

Destructive AJAX. Stefan Proksch Christoph Kirchmayr

Hacker-Methoden in der IT- Sicherheitsausbildung. Dr. Martin Mink

Softwaresicherheit. Eine Präsentation von Benedikt Streitwieser und Max Göttl. Einführung Kryptographie und IT-Sicherheit

Absicherung von Web-Anwendungen in der Praxis Highlights aus den OWASP TOP 10

MySQL-Befehle. In diesem Tutorial möchte ich eine kurze Übersicht der wichtigsten Befehle von MySQL geben.

Netzwerksicherheit Übung 9 Websicherheit

Welche Gefahren gehen vom Firmenauftritt im Internet aus?

SQL-Injection. Seite 1 / 16

PHP und MySQL. Integration von MySQL in PHP. Zellescher Weg 12 Willers-Bau A109 Tel Michael Kluge (michael.kluge@tu-dresden.

OWASP Stammtisch München Sep 2014 XSS und andere Sicherheitslücken aus der Perspektive des Programmcodes

Money for Nothing... and Bits4free

Datenbanken SQL Einführung Datenbank in MySQL einrichten mit PhpMyAdmin

Abbildung 6-8: Abfolge beim doppelten Abschicken von Formularen

PHP MySQL - myphpadmin Formulardaten in eine Datenbank speichern

itsc Admin-Tag OWASP Top 10 Tobias Ellenberger COO & Co-Partner OneConsult GmbH 2013 OneConsult GmbH

php Hier soll ein Überblick über das Erstellen von php Programmen gegeben werden. Inhaltsverzeichnis 1.Überblick Parameterübergabe...

Sicherheit von Webapplikationen Sichere Web-Anwendungen

2. WWW-Protokolle und -Formate

Internet-Technologien

Web 2.0 (In) Security PHPUG Würzburg Björn Schotte

Sicherheit in Rich Internet Applications

Aktuelle Sicherheitsprobleme im Internet

7. Datenbank-Zugriff. Vorlesung und Übung Dr. Peter Pfahler Institut für Informatik Universität Paderborn. Zum Beispiel aus PHP-Skripten: Client 7-2

Grundlagen Internet-Technologien. Ajax und Cookies&Sessions Version 1.00

DATENBANKEN SQL UND SQLITE VON MELANIE SCHLIEBENER

5.8 Bibliotheken für PostgreSQL

PHP + MySQL. Die MySQL-Datenbank. Hochschule Karlsruhe Technik & Wirtschaft Internet-Technologien T3B250 SS2014 Prof. Dipl.-Ing.

Java Application 1 Java Application 2. JDBC DriverManager. JDBC-ODBC Br idge. ODBC Driver Manager. Dr iver C. Dr iver D.

V10 I, Teil 2: Web Application Security

CASE STUDY SICHERES ONLINEBANKING

Datenbank - Teil 3. Ziele: Eine Datenbank anlegen mit SQL. Daten eingeben mit SQL. Abfragen stellen mit SQL und PHP.

PHP Schulung Beginner. Newthinking Store GmbH Manuel Blechschmidt

Neuerungen in Marco Patzwahl MuniQSoft GmbH Unterhaching

Datenbank und Tabelle mit SQL erstellen

Grundlagen der Informatik 2

Schwachstellen in Web- Applikationen: Was steckt dahinter und wie nutzt man sie aus?

Perl-Praxis. CGI-Skripte. Madis Rumming, Jan Krüger.

PHP- Umgang mit Datenbanken (1)

MySQL, Java und einiges mehr

Oracle 9i Einführung Performance Tuning

Seminar 2. SQL - DML(Data Manipulation Language) und. DDL(Data Definition Language) Befehle.

Datensicherheit. Vorlesung 7: Sommersemester 2015 h_da. Heiko Weber, Lehrbeauftragter

Grundlagen Internet-Technologien INF3171

ids-system GmbH Tipp #3 Leer-Strings in SQL oder die Frage nach CHAR oder VARCHAR

Aktuelle Bedrohungen im Internet

ACCESS SQL ACCESS SQL

SQL structured query language

MySQL 101 Wie man einen MySQL-Server am besten absichert

Grundlagen von SQL. Informatik 2, FS18. Dr. Hermann Lehner (Material von Dr. Markus Dahinden) Departement Informatik, ETH Zürich

Sicherheit Web basierter Anwendungen

Entwicklungsumgebung für die Laborübung

Multimedia im Netz. Übung zur Vorlesung. Ludwig-Maximilians-Universität Wintersemester 2010/2011

Grundlagen der Informatik 2

Entwicklungsumgebung für die Laborübung

When your browser turns against you Stealing local files

Angreifbarkeit von Webapplikationen

Aktuelle Angriffstechniken. Steffen Tröscher cirosec GmbH, Heilbronn

Datenbanken für Online Untersuchungen

PostgreSQL unter Debian Linux

Whitepaper. Produkt: combit Relationship Manager. Datensatzhistorie mit dem SQL Server 2000 und combit GmbH Untere Laube Konstanz

Oracle 10g Einführung

Sicherheitsanalyse der Private Cloud Interfaces von

Begleitskript. zum PHP/MySQL. Kurs

Datensicherheit. Vorlesung 5: Sommersemester 2015 h_da. Heiko Weber, Lehrbeauftragter

Multimedia im Netz Wintersemester 2013/14. Übung 02 (Hauptfach)

Hochschule Karlsruhe Technik und Wirtschaft Anhänge: Fakultät für Informatik und Wirtschaftsinformatik SS 2013 Prof. Schmidt.


MySQL: Einfaches Rechnen.

Folien php/mysql Kurs der Informatikdienste

losgeht s

MySQL, phpmyadmin & SQL. Kurzübersicht

Schönes neues Internet

XSS for fun and profit

7. Datenbank-Zugriff. Vorlesung und Übung Dr. Peter Pfahler Institut für Informatik Universität Paderborn. Zum Beispiel aus PHP-Skripten: Client 7-2

<Insert Picture Here> APEX? Aber sicher! Tipps und Tricks für eine sichere APEX-Umgebung. Carsten Czarski, ORACLE Deutschland B.V. Co.

Hochschule Darmstadt Fachbereich Informatik

Hochschule Darmstadt Fachbereich Informatik

Dynamisches SQL. Folien zum Datenbankpraktikum Wintersemester 2009/10 LMU München

MySQL. MySQL ist ein Datenbanksystem. Es besteht aus einem zentralen Server und aus (mehreren) Clients. Es benutzt einen Dialekt der Sprache SQL.

Wolkig bis heiter. Andreas Wismann WHEN OTHERS. APEX als Drehkreuz für Web Service-Anwendungen

Willkommen. Datenbanken und Anbindung

Carsten Eilers. Ajax Security. Sichere Web-2.0-Anwendungen. ntwickier

Datenbank - Teil 3. Ziele dieser Übung: Eine Datenbank anlegen mit SQL. Daten eingeben mit SQL. Abfragen stellen mit SQL und PHP

Folien php/mysql Kurs der Informatikdienste

ODBC-Verbindungen in Oracle-Datenbanken nutzen

Anwendungsentwicklung Datenbanken SQL. Stefan Goebel

Wählen Sie das MySQL Symbol und erstellen Sie eine Datenbank und einen dazugehörigen User.

MySql und PHP. Apache2: Konfigurieren für php4. ...\apache2\conf\httpd.conf aufrufen. Folgende Zeilen einfügen:

Introduction to Data and Knowledge Engineering. 6. Übung SQL

Transkript:

Web-Security IT-Security Andreas Unterweger Studiengang Web Business & Technology FH Kufstein Sommersemester 2017 Andreas Unterweger (FH Kufstein) Web-Security Sommersemester 2017 1 / 24

Überblick Web-Security Webseitensicherheit (Kurz-)Wiederholung JavaScript Cross-Site Scripting Cross-Site Request Forgery Datenbanksicherheit (Kurz-)Wiederholung SQL SQL Injection Quelle: Meier, J. D., Homer, A., Hill, D., Taylor, J., Bansode, P., Wall, L., Boucher, R. und Bogawat, A.: Chapter 5: Deployment Patterns. http://apparchguide.codeplex.com/wikipage?title=chapter%205%20-%20deployment%20patterns (Zugriff am 16.4.2017), 2008. Andreas Unterweger (FH Kufstein) Web-Security Baloch (2015), Kapitel 12 2 / 24

Wiederholung JavaScript Beispiel für AJAX per XMLHttpRequest: 1 var xhttp = new XMLHttpRequest (); 2 xhttp. onreadystatechange = function () { 3 if ( this. readystate == 4 && this. status == 200) 4 { 5 // Typical action to be performed when the document is ready : 6 document. getelementbyid (" demo "). innerhtml = xhttp. responsetext ; 7 } 8 }; 9 xhttp. open (" GET ", " filename ", true ); 10 xhttp. send (); Adaptiert von W3Schools: XML HttpRequest. https://www.w3schools.com/xml/xml_http.asp (Abruf am 16.4.2017), 2017. Andreas Unterweger (FH Kufstein) Web-Security Baloch (2015), Kapitel 12 3 / 24

Überblick Cross-Site Scripting (XSS) Webseite verarbeitet Benutzereingabe, z.b. Forenbeitrag Ungefilterte Eingabe (z.b. Skript) erlaubt Angriffe bei erneutem Aufruf/Besuch der Webseite durch Opfer Bei Verwendung von HTML: HTML Injection Bei Verwendung von JavaScript: JavaScript Injection Arten von XSS (Auswahl) Nicht-persistent (reflektiert) Persistent (beständig) DOM-basiert Mögliche Ziele eines Angreifers (Auswahl) Daten von oder über Opfer(-rechner) sammeln Dargestellte Webseite manipulieren (Täuschung) Opfer auf andere Webseiten umleiten Schadcode ausführen Andreas Unterweger (FH Kufstein) Web-Security Baloch, K. 12; Ciampa, K. 3 4 / 24

Beispiel für Cross-Site Scripting Quelle: Imperva: Cross Site Scripting (XSS) Attacks. https://www.incapsula.com/web-application-security/cross-site-scripting-xss-attacks.html (Zugriff am 16.4.2017), 2017. Andreas Unterweger (FH Kufstein) Web-Security Baloch, K. 12; Ciampa, K. 3 5 / 24

Nicht-persistentes XSS Benutzereingabe wird reflektiert, d.h. wieder ausgegeben Beispiel: Suchbegriff (reflektiert in Ergebnisliste) am Server: Pictures that are tagged as '<?= $_GET['query']?>' Quelle: Damaye, S.: WackoPicko/Reflected-XSS. https://www.aldeid.com/wiki/wackopicko/reflected-xss (Zugriff am 16.4.2017), 2013. Andreas Unterweger (FH Kufstein) Web-Security Baloch (2015), Kapitel 12 6 / 24

Persistentes XSS Benutzereingabe wird dauerhaft gespeichert, z.b. als Seiteninhalt Beispiel: Im Browser dargestellte Email mit eingebettetem Bild Quelle: Lev, S.: Cross-Site-Scripting in Google Mail. https://0xicf.wordpress.com/2012/06/13/cross-site-scripting-in-google-mail/ (Zugriff am 16.4.2017), 2012. Andreas Unterweger (FH Kufstein) Web-Security Baloch (2015), Kapitel 12 7 / 24

DOM-basiertes XSS I Ausgangspunkt: Clientseitige Skripte verändern Webseite (legitimerweise) über das DOM (besonders über AJAX) Veränderungen sind von Benutzereingaben abhängig Unüberprüfte Eingaben erlauben bösartige Veränderungen Server ist nicht involviert Anfällige Funktionalität (Auswahl): <DOM-Element>.innerHTML: Ersetzt den Code des DOM-Elements document.write: Ergänzt das HTML-Dokument document.location.href: Lädt eine (andere) Seite Beispiel: (Dynamische) Sprachauswahl mit Standardwert (Parameter): http://www.spielwiese.tld/index.html?lang=deutsch Andreas Unterweger (FH Kufstein) Web-Security Baloch (2015), Kapitel 12 8 / 24

DOM-basiertes XSS II 1 <! --... --> 2 Anzeigesprache : 3 < s e l e c t > 4 < s c r i p t > 5 document. write ("<option value =1 >"+ document. location. href. substring ( document. location. href. indexof (" lang =") +5) +" </ option >"); 6 <! -- Weitere Sprachen... --> 7 </ s c r i p t > 8 </ s e l e c t > 9 <! --... --> Bösartiger Aufruf (z.b. als Link per Email): http :// www. spielwiese. tld / index. html? lang =< s c r i p t > document. queryselector (' body > :nth - child (1) '). innerhtml =" Schadcode... "</ s c r i p t > Adaptiert von OWASP Contributors: DOM Based XSS. https://www.owasp.org/index.php/dom_based_xss (Zugriff am 16.4.2017), 2015. Andreas Unterweger (FH Kufstein) Web-Security Baloch (2015), Kapitel 12 9 / 24

Vermeidung von Cross-Site Scripting Benutzereingaben überprüfen (mehrere Möglichkeiten) Kritische Zeichen (z.b. <) verbieten Kritische Zeichen escapen (z.b. < durch < ersetzen) Funktionen (z.b. htmlspecialchars in PHP) zum Escapen Kritisches Zeichen Ersetzung Anmerkung & & < < > > " " ' &#x27; 9 in htmlspecialchars / / In htmlspecialchars nicht ersetzt Weitere Empfehlungen: https://www.owasp.org/index.php/xss_ (Cross_Site_Scripting)_Prevention_Cheat_Sheet Andreas Unterweger (FH Kufstein) Web-Security Baloch (2015), Kapitel 12 10 / 24

Cross-Site Request Forgery (CSRF) Angreifer bringt Opfer dazu, Anfrage (engl. request) auszuführen Wirkt, als würde Anfrage (z.b. Überweisung) von Opfer kommen Quelle: Imperva: Cross Site Request Forgery (CSRF) Attack. https://www.incapsula.com/web-application-security/csrf-cross-site-request-forgery.html (Zugriff am 16.4.2017), 2017. Andreas Unterweger (FH Kufstein) Web-Security Baloch (2015), Kapitel 12 11 / 24

Vermeidung von Cross-Site Request Forgery Referrer-Überprüfung Referrer: Feld in HTTP-Header, das den Ursprung der Anfrage angibt Anfragen nur von bestimmten Quellen erlauben Lässt sich relativ leicht umgehen (ohne Details) Anti-CSRF-Tokens Webseite generiert (einmaliges) Token bei Aufruf der Webseite Formularen auf der Webseite enthalten (verstecktes) Token Abgeschickte Formulardaten werden nur mit gültigem Token verarbeitet Token ist dem Angreifer nicht bekannt keine Verarbeitung Aber: Tokens lassen sich per XSS auslesen und dadurch umgehen Moderneres Beispiel: Access Control for Cross-Site Requests 1 Browser überprüft, ob Antworten auf Anfragen von der gleichen Seite (oder einer erlaubten anderen) kommen (Same Origin Policy) Schwieriger zu umgehen (ohne Details) 1 https://www.w3.org/tr/2014/rec-cors-20140116/ Andreas Unterweger (FH Kufstein) Web-Security Baloch (2015), Kapitel 12 12 / 24

Wiederholung SQL Beispiel für die Erstellung und Befüllung einer Datenbank(-tabelle): 1 CREATE DATABASE webshop ; 2 USE webshop ; 3 CREATE TABLE products ( 4 id INT AUTO_ INCREMENT PRIMARY KEY, 5 name VARCHAR( 20) NOT NULL, 6 price DECIMAL(4, 2) NOT NULL 7 ); 8 INSERT INTO products ( name, price ) VALUES (" T- Shirt ", " 0019.90 "); 9 -- Weitere Befehle... -- Beispiel für eine Abfrage: SELECT * FROM products WHERE name =" T- Shirt "; Basierend auf dem MySQL 5.5 Reference Manual (https://dev.mysql.com/doc/refman/5.5/en/) Andreas Unterweger (FH Kufstein) Web-Security Baloch (2015), Kapitel 12 13 / 24

Überblick SQL Injections Datenbankabfrage hängt von Benutzereingabe, z.b. Suchbegriff, ab Ungefilterte Eingabe erlaubt Angriffe über Datenbank(-abfrage) Arten von SQL Injection (Auswahl) UNION-basiert: Zusätzliche Datenbankabfrage ausführen und mit Ergebnis der ursprünglichen Abfrage zusammenführen Blind: Informationen über Antwortzeit(en) rekonstruieren Mögliche Ziele eines Angreifers (Auswahl) Erweiterte Suchabfragen absetzen Zusätzliche Datenbanktabellen abfragen Informationsbeschaffung Datenbanksystem und -version auslesen (Banner Grabbing) Daten in Datenbank manipulieren oder löschen (falls unterstützt) Dateien auf dem Datenbankserver auslesen (falls unterstützt) Andreas Unterweger (FH Kufstein) Web-Security Baloch, K. 12; Ciampa, K. 3 14 / 24

Funktionsweise von SQL Injections I: Beispiel Ursprüngliche Datenbankabfrage mit Eingabeparameter $name SELECT * FROM products WHERE name =" $name "; Speziell konstruierter Parameter $name: " OR name =" secret "; -- Datenbankabfrage mit speziell konstruiertem Parameter $name: SELECT * FROM products WHERE name ="" OR name =" secret "; -- "; Effektiv ausgeführte Datenbankabfrage: SELECT * FROM products WHERE name ="" OR name =" secret "; Andreas Unterweger (FH Kufstein) Web-Security Baloch, K. 12; Ciampa, K. 3 15 / 24

Funktionsweise von SQL Injections II: Anatomie " OR name =" secret "; -- Anatomie des speziell konstruierten Parameters: Anführungszeichen, um jene vor dem Eingabeparameter zu schließen Neue Abfrage in SQL-Syntax (hängt von ursprünglicher Abfrage ab) Kommandoendesymbol (;), um Abfrage abzuschließen Kommentarsymbol (--), um restliche Zeichen der Abfrage auszukommentieren (vermeidet u.a. weitere Filterungsbefehle) Leerzeichen nach dem Kommentarsymbol (in SQL notwendig) Konstruktion vermeidet Syntaxfehler Art und Funktion von neuer Abfrage hängt vom Aufbau der ursprünglichen Datenbankabfrage (Befehle vor dem Parameter) ab Praktische Variation: Alle Daten auslesen, z.b. über Tautologie: " OR 'x '= 'x '; -- Andreas Unterweger (FH Kufstein) Web-Security Baloch, K. 12; Ciampa, K. 3 16 / 24

Einschub: UNION ALL in SQL Vereinigungsmenge zweier Tabellen oder Abfragen mit Duplikaten Quelle: Guru99: MySQL UNION - Complete Tutorial. http://www.guru99.com/unions.html (Zugriff am 15.4.2017), 2017. Andreas Unterweger (FH Kufstein) Web-Security Baloch (2015), Kapitel 12 17 / 24

UNION-basierte SQL Injection I: Beispiel Idee: Zusätzliches SELECT-Statement ausführen und Ergebnis per UNION mit dem Originalstatement zusammenführen Ausgangspunkt (wie vorhin): SELECT * FROM products WHERE name =" $name "; Speziell konstruierter Parameter $name: " UNION ALL SELECT name FROM customers ; -- Effektiv ausgeführte Datenbankabfrage: SELECT * FROM products WHERE name ="" UNION ALL SELECT name FROM customers ; Andreas Unterweger (FH Kufstein) Web-Security Baloch (2015), Kapitel 12 18 / 24

UNION-basierte SQL Injection II: Anatomie " UNION ALL SELECT name FROM customers ; -- Anatomie des speziell konstruierten Parameters: Anführungszeichen, um jene vor dem Eingabeparameter zu schließen UNION ALL, um Vereinigungsmenge der beiden Ergebnisse zu bilden Neue Abfrage (hängt nicht von ursprünglicher Abfrage ab) Abschluss (vgl. Folie 16) Originalabfrage ist leer (oder hat nur sehr wenige Einträge) Ergebnis der zusätzlichen Abfrage wird zu Orginalergebnis ergänzt 2 Voraussetzung für erfolgreiches Vereinigen: Abfragen haben exakt die gleiche Spaltenanzahl 2 Falls unerwünscht: AND 1=0 (oder andere falsche Aussage) hinzufügen, um leeres Ergebnis für Originalabfrage zu erzwingen Andreas Unterweger (FH Kufstein) Web-Security Baloch (2015), Kapitel 12 19 / 24

UNION-basierte SQL Injection III: Spaltenzahlermittlung Spaltenanzahl per SQL Injection ermitteln Idee: Sortierung per ORDER BY mit Spaltennummer angeben: " ORDER BY 3; -- Falls Spaltennummer nicht vorhanden Fehler Falls Spaltennummer vorhanden Spaltenzahl ist größer oder gleich Spaltenanzahl durch Ausprobieren ermitteln Bei bekannter Anzahl von Spalten (z.b. 3) SQL Injection mit Auswahl aller Spalten in SELECT-Statement: " UNION ALL SELECT 1, 2, 3 FROM products ; -- Andreas Unterweger (FH Kufstein) Web-Security Baloch (2015), Kapitel 12 20 / 24

UNION-basierte SQL Injection IV: Informationssammlung Befehle zur Abfrage von Datenbanksysteminformationen (Auswahl): version(): Datenbankversion user(): Benutzer, in dessen Kontext die Datenbank läuft Beispiel mit SQL Injection: " UNION ALL SELECT 1, user (), 3 FROM products ; -- Befehle zur Abfrage von Datenbankinformationen (Auswahl): database(): Name der Datenbank Datenbanksystemabhängige Funktionen Befehle zum Lesen von Systeminformationen (Auswahl): load_file(path): Liest den Inhalt der Datei pfad... Spezielle Datenbanktabellen mit relevanten Informationen Andreas Unterweger (FH Kufstein) Web-Security Baloch (2015), Kapitel 12 21 / 24

Einschub: Spezielle Datenbanktabellen in SQL Datenbank INFORMATION_SCHEMA enthält Informationen über alle (anderen) Datenbanken Tabelle SCHEMATA: Liste von Datenbanken Tabelle TABLES: Liste von Datenbanktabellen Tabelle COLUMNS: Liste von Datenbanktabellenspalten Adaptivert von Choudhary, P. K.: Get Columns Related Information In SQL Server. http://www.c-sharpcorner.com/blogs/difference-bw-informationschemacolumns-and-syscolumns (Zugriff am 15.4.2017), 2016. Andreas Unterweger (FH Kufstein) Web-Security Baloch (2015), Kapitel 12 22 / 24

Vermeidung von SQL Injections Benutzereingaben überprüfen und entschärfen, z.b. Anführungszeichen escapen (\" statt ") In der Praxis: Serverseitige Bibliotheksfunktionen für Escaping Zusätzlich: Rechteeinschränkung für Datenbankbenutzer Leserechte nur auf unbedingt benötigte Datenbanken bzw. Tabellen Keine oder nur minimale Modifikationsmöglichkeiten Quelle: Munroe, R.: Exploits of a Mom. https://xkcd.com/327/ (Zugriff am 15.4.2017), unbekannt. Andreas Unterweger (FH Kufstein) Web-Security Baloch (2015), Kapitel 12 23 / 24

Danke für die Aufmerksamkeit! Fragen? Andreas Unterweger (FH Kufstein) Web-Security Sommersemester 2017 24 / 24