SQL Injection – Funktionsweise und Gegenmaßnahmen

Slides:



Advertisements
Ähnliche Präsentationen
der betrieblichen Projektarbeit im Rahmen der Abschlussprüfung
Advertisements

Object Relational Mapping
System J – Compiler – Praktikum: Datenbanksystementwicklung Knut Stolze
JDataSet & Persistenz Layer
Dynamische Seiten mit Dreamweaver Zugriff auf (mysql) Datenbank mit PHP.
SQL Server 2005.NET Integration Sebastian Weber Developer Evangelist Microsoft Deutschland GmbH.
Java Security im Überblick
Die 20 beliebtesten Versäumnisse hinsichtlich Sicherheit in der Softwareentwicklung EUROSEC GmbH Chiffriertechnik & Sicherheit Tel: / 60850,
PHP-Programmierung: Sicherheitsaspekte EUROSEC GmbH Chiffriertechnik & Sicherheit Tel: / 60850, © EUROSEC GmbH Chiffriertechnik &
Das secologic Projekt im Kurzüberblick - Stand Sept
MySQL.
Allgemeine Technologien II
Systemüberblick Beispiele: Microsoft Access Oracle Ingres Informix
Seite 1Maria, Philipp, Herbert Seite 1 Fitnessplaner Ziele: >Fitnessplaner für Onlinebetrieb >Registrierung >individuelle Trainingsplanerstellung.
Passwörter.
SendEplanung Datenbank
FH-Hof SQLJ Richard Göbel. FH-Hof SQLJ - Idee Erweiterung von Java um SQL Die Verwendung von SQL-Anweisungen innerhalb einer Programmiersprache wird vereinfacht.
XINDICE The Apache XML Project Name: Jacqueline Langhorst
SQL als Abfragesprache
IS: Datenbanken, © Till Hänisch 2000 CREATE TABLE Syntax: CREATE TABLE name ( coldef [, coldef] [, tableconstraints] ) coldef := name type [länge], [[NOT]NULL],
Datenbankanbindung mit ASP Wilhelm-Schickard-Schule Tübingen
Oracle PL/SQL Server Pages (PSP). © Prof. T. Kudraß, HTWK Leipzig Grundidee: PSP – Internet-Seiten mit dynamischer Präsentation von Inhalten durch Einsatz.
Spezielle Aspekte der Anbindung von Datenbanken im Web.
SQL/XML. © Prof. T. Kudraß, HTWK Leipzig 2 2 Motivation Speicherung von XML in allen großen kommerziellen DBMS vorhanden proprietäre Lösungen für die.
Text-Retrieval mit Oracle Vortrag von Andreas Mück & David Diestel.
Technik Gestaltung Navigation Daten. Übersicht Client Webbrowser InternetServer.
Sicherheit in Rechnernetzen- Denial of Service- Attacken
1 WS 2012 Software-Engineering II Aspektorientierung.
JDBC -Java Database Connectivity-. 15./22. April 2004JDBC2 JDBC.... verbindet Java-Programme mit SQL-basierten Datenbanken.. liefert eine generische SQL-API.
Einführung MySQL mit PHP
Prof. K. Gremminger Folie 1 Vorlesung Datenbanksysteme SS 2002 Aufbau einer Verbindung zur Datenbank import java.net.URL; import java.sql.*; class JDBCExample.
Arbeiten mit SQL in Visual FoxPro 9.0
SQL in Visual FoxPro. © 1999 TMN-Systemberatung GmbH SQL Historie n SQL - Structured Query Language n In den 70er Jahren von IBM entwickelt n 1986 zum.
Arbeiten mit SQL in Visual FoxPro 9.0 deutschsprachige FoxPro User Group Rainer Becker Microsoft Visual FoxPro 9.0 Roadshow SQL.
Seite Common Gateway Interface. Konzepte. Übersicht 1Einleitung 2Was ist CGI? 3Wozu wird CGI verwendet? 4Geschichtlicher Überblick 5Grundvoraussetzungen.
JDBC: JAVA Database Connectivity
... und alles was dazugehört
Templates. © beas2009 / Page 2 This documentation and training is provided to you by beas group AG. The documents are neither approved nor in any way.
ODBC (Open Database Connectivity)
SQL PHP und MySQL Referat von Katharina Stracke und Carina Berning
Wir bauen uns eine Webapplikation!
Publicvoid - Onlinenotes SWOS HS 2011/12. Inhalt Vorstellung Website Probleme - Lösungen Quick & easy 2 kalik1, messu2, joosp1, stahm3.
Best Practices in der Datenbank-programmierung
SQL Server 2005 CLR-Integration
Betrieb von Datenbanken Marco Skulschus & Marcus Wiederstein Datenmanipulation Lehrbuch, Kapitel 4.
Entwicklung verteilter Anwendungen I, WS 13/14 Prof. Dr. Herrad Schmidt WS 13/14 Kapitel 5 Folie 2 ADO.NET s.a:
Windows Presentation Foundation, Vorlesung Wintersemester 2013/14 Prof. Dr. Herrad Schmidt WS 13/14 Kapitel 9 Folie 2 ADO.NET (1) Klassen für Zugriffe.
Entwicklung verteilter Anwendungen I, WS 13/14 Prof. Dr. Herrad Schmidt WS 13/14 Kapitel 8 Folie 2 ASP.NET Zustandsverwaltung
Folgendes kann missbraucht werden: formulare unverschlüsselte login-informationen ungeschützte includes SQL-injection reto ambühler
Adaption von K-Means Algorithmen an Datenbanken
Datenbanksysteme für hörer anderer Fachrichtungen
Absicherung eines produktiven Webservers und Entdeckung von Angreifern
PL/SQL - Kurze Einführung April 2003Übung Data Warehousing: PL/SQL 2 PL/SQL.. ist eine Oracle-eigene, prozedurale Programmiersprache Sämtliche.
SQL - Structured Query Language AIFB SS (1/9) Join-Operationen in SQL-92(1/9) Syntax einer Join-Operation: join-op := CROSS JOIN | [NATURAL]
Webseiten mit PHP, SQL, XML und Webservices Anhand praktischer Beispiele.
Hacking InfoPoint Jörg Wüthrich Infopoint - Hacking - Jörg Wüthrich 2/26 Inhalte Rund um das Thema Hacking Angriffs-Techniken Session.
Datenbankanbindung mit
Structured Query Language
Eike Schallehn, Martin Endig
Was wäre wenn….. SNMP (Simple Network Managment Protocol)
Quelle: xkcd.com SQL Injections.
Datenbanken erstellen mit PostgreSQL
Datenbanken abfragen mit SQL
Rechen- und Kommunikationszentrum (RZ) Sicherheitsorientierte Webentwicklung am Beispiel der Matse-Dienste Jan-Frederic Janssen.
By Thorsten Zisler 1 SQL Datenbank Anbindung an den Supervisor.
Sicherheit in Webanwendungen „CrossSite“, „Session“ und „SQL“ Angriffstechniken und Abwehrmaßnahmen Mario Klump.
Sprachumfang von SQL Vier Kategorien DDL (Data Definition Language)
Die erste Form der INSERT-Anweisung dient der Neueingabe von Daten:
Schmock Mutter nicht ausreichend versorgt  fast verhungert Mutter bei Geburt verstorben Schmock mit Flasche aufgezogen.
(Structured Query Language)
 Präsentation transkript:

SQL Injection – Funktionsweise und Gegenmaßnahmen EUROSEC GmbH Chiffriertechnik & Sicherheit Tel: 06173 / 60850, www.eurosec.com © EUROSEC GmbH Chiffriertechnik & Sicherheit, 2005

(c) 2005, EUROSEC GmbH Chiffriertechnik & Sicherheit Problematik SQL-Injection ist eine Angriffstechnik auf Anwendungen, die Benutzereingaben in eine SQL-Datenbank schreiben Benutzereingabe kann unerwünschte SQL-Befehle enthalten, die ungeprüft zur Ausführung gelangen Mögliche Risiken Zugriff ohne Authentisierung (z.B. wenn die Datenbank für die Benutzerauthentisierung verwendet wird) Unbefugte Datenänderungen (auch wenn ursprünglich nur lesende Zugriffe verwendet wurden) Denial-of-Service (wenn Daten in der Datenbank gelöscht werden) (c) 2005, EUROSEC GmbH Chiffriertechnik & Sicherheit

Beispiel - Authentisierung Aufbau einer Beispielanfrage: query = "SELECT * FROM client WHERE username=‘" + userName + "’ AND ‘ password=‘” + userPwd + "’;" Resultierende Anfrage mit gültigen Daten: Benutzername: Testuser, Kennwort: Secret SELECT * FROM client WHERE username=‘Testuser’ AND password=‘Secret’; Resultierende Anfrage mit Angriffsdaten: Benutzername: asd, Kennwort: ' OR 1=1-- SELECT * FROM client WHERE username=‘asd’ AND password =‘ ‘ OR 1=1 --; (c) 2005, EUROSEC GmbH Chiffriertechnik & Sicherheit

(c) 2005, EUROSEC GmbH Chiffriertechnik & Sicherheit Weitere Beispiele Unautorisierte Operationen auf der Datenbank ohne Anmeldung möglich: Benutzername: ’; DROP TABLE Clients-- Benutzer-ID: 123; shutdown-- Sogar Ausführung eigener Anfragen ist möglich: Company-ID: ' UNION ALL SELECT CCNumber FROM Customers WHERE ''=' query = "SELECT CompanyAddress FROM Companies WHERE CompanyName = ’" + company-ID + "’;" SELECT CompanyAddress FROM Companies WHERE CompanyName = ’’ UNION ALL SELECT CCNumber FROM Customers WHERE’’=’’ Voraussetzung für erfolgreiche Angriffe: Benutzereingaben werden nicht geprüft/gefiltert (c) 2005, EUROSEC GmbH Chiffriertechnik & Sicherheit

(c) 2005, EUROSEC GmbH Chiffriertechnik & Sicherheit Tests Jedes Eingabefeld muss auf eventuelle Schwächen getestet werden ' BadValue' 'BadValue ' OR ' ' OR ; … Dieselben Werte aber URL-kodiert (für die Übertragung mittels HTTP-GET): z.B.: ;%20-- oder %27%3b%2d%2d Jeder Fehler (Server-intern oder direkt mit allen Fehlerinformationen ausgegeben) wird für Angreifer ein Indiz sein, dass eine SQL-Injection-Schwachstelle vorliegen kann (c) 2005, EUROSEC GmbH Chiffriertechnik & Sicherheit

Anfällige SQL-Abfragen Alle SQL-Abfragen können vom Angreifer modifiziert werden "SELECT … FROM … WHERE …='" + userInput + "';" INSERT INTO TableName VALUES ('Wert1', 'Wert2') "INSERT INTO TableName VALUES (' " + var1 + " ', ' " + var2 + " ');" Wert1: ' + (SELECT TOP 1 FieldName FROM TableName) + ' Wert2: lakdsjfladsfj Ergebnis wird in der ersten Spalte angezeigt INSERT-Abfragen produzieren u.U. viele Einträge in der Datenbank und können so entdeckt werden (c) 2005, EUROSEC GmbH Chiffriertechnik & Sicherheit

Lösungen - Applikationsebene Validierung der Benutzereingaben Filterung: nur erlaubte Zeichen in Eingabefeldern zulassen (ohne weiteres für Benutzernamen möglich) Regular Expression: s/[^0-9a-zA-Z]//g Problematisch z.B. bei Kennwortfeldern oder Texteingabefeldern (Bemerkungen o.Ä.), da Sonderzeichen erlaubt sein sollten Generell: Filter spezifisch wie nur möglich Single Quote ' bei allen Benutzereingaben in SQL-Anfragen verwenden, auch bei numerischen Angaben Fehlermeldungen mit wenig Informationen (am besten nur eine generierte Fehler-ID) Längeneinschränkungen für Parameter Je kleiner das Eingabefeld, um so schwieriger SQL-Injection Feldlänge muss serverseitig beschränkt sein (c) 2005, EUROSEC GmbH Chiffriertechnik & Sicherheit

(c) 2005, EUROSEC GmbH Chiffriertechnik & Sicherheit Lösungen - Datenbank Benutzerberechtigungen in der Datenbank stark einschränken Rollenbasierte Benutzer (Lesen, Schreiben, Daten-abhängig) Strenge Typisierung in der Datenbank Numerische Werte wie Sitzungs-IDs oder Postleitzahlen als ganze Zahlen und nicht als Strings usw. DB-Funktionen, Stored Procedures können statt der in der Anwendung zusammengestellten Anfragen definiert und benutzt werden Auf diese Weise bessere Verarbeitung der Anfragen und kleinere Manipulationsfreiheit für Angreifer (c) 2005, EUROSEC GmbH Chiffriertechnik & Sicherheit

Lösung – Prepared Statements Grundidee: Keine konkatenierten Strings als SQL-Statements SQL-Statement mit Platzhaltern für Anfragewerte, die später übergeben werden Dadurch strenge Kontrolle, dass tatsächlich nur eine Abfrage gestellt wird. Eine Erweiterung/Änderung der definierten Abfrage nicht möglich Java bietet eine Implementierung für Prepared Statements an: Klassen Statement und PreparedStatement PreparedStatement ist performanter, da die Abfrage vorkompiliert wird (c) 2005, EUROSEC GmbH Chiffriertechnik & Sicherheit

Prepared Statement - Beispiel Initialisierung: Connection con; … PreparedStatement updateTable1 = con.prepareStatement( "UPDATE table1 SET field1 = ? WHERE field2 LIKE ?"); Werteübergabe: updateTable1.setInt(1, 75); updateTable1.setString(2, "Test"); Ausführung: updateTable1.executeUpdate(); (c) 2005, EUROSEC GmbH Chiffriertechnik & Sicherheit

(c) 2005, EUROSEC GmbH Chiffriertechnik & Sicherheit Fazit Um SQL-Injection zu vermeiden, sind Vorkehrungen auf mehreren Ebenen notwendig: In der Anwendung Auch in der Datenbank Benutzereingaben müssen immer überprüft werden Filterung ist absolut notwendig (c) 2005, EUROSEC GmbH Chiffriertechnik & Sicherheit

Anhang

Warum dieser Vortrag von uns? - Unsere Erfahrung: mehrere Personenjahre in Forschungsprojekten zur sicheren Softwareentwicklung; derzeit gemeinsam mit Partnern wie SAP, Commerzbank, Universitäten, ... zahlreiche Schwachstellenanalysen für Softwarehersteller, nebst intensiver Feedbackzyklen mit den Entwicklern Erstellung von Anforderungs- und Designspezifikationen in mehreren großen Entwicklungsprojekten Erstellung von Guidelines zur sicheren Softwareentwicklung, mit Schwerpunkten Banking & Finance, sowie Webapplikationen Reverse Engineering und Gutachten von Sicherheitsfunktionen und Kryptomechanismen Implementierung von Sicherheitsfunktionen im Auftrag (c) 2005, EUROSEC GmbH Chiffriertechnik & Sicherheit

(c) 2005, EUROSEC GmbH Chiffriertechnik & Sicherheit Abschlussbemerkung die vorliegende Dokumentation wurde von EUROSEC erstellt im Rahmen des secologic Forschungsprojekts, Laufzeit 2005 und 2006, nähere Informationen unter www.secologic.org wir bedanken uns beim Bundesministerium für Wirtschaft für die Förderung dieses Projektes Anregungen und Feedback sind jederzeit willkommen, ebenso Anfragen zu Sicherheitsaspekten, die hier nicht behandelt werden konnten. (c) 2005, EUROSEC GmbH Chiffriertechnik & Sicherheit

(c) 2005, EUROSEC GmbH Chiffriertechnik & Sicherheit Copyright Hinweis Diese Folien wurden von EUROSEC erstellt und dienen der Durchführung von Schulungen oder Seminaren zum Thema Sichere Anwendungsentwicklung, mit Fokus Webapplikationen. Wir haben diese Folien veröffentlicht, um die Entwicklung besserer Softwareprodukte zu unterstützen. Die Folien dürfen gerne von Ihnen für eigene Zwecke im eigenen Unternehmen verwendet werden, unter Beibehaltung eines Herkunfts-Hinweises auf EUROSEC. Eine kommerzielle Verwertung, insbesondere durch Schulungs- oder Beratungsunternehmen, wie beispielsweise Verkauf an Dritte oder ähnliches ist jedoch nicht gestattet. (c) 2005, EUROSEC GmbH Chiffriertechnik & Sicherheit