Security-Webinar - Thomas

Werbung
Security-Webinar
September 2015
Dr. Christopher Kunz, filoo GmbH
Ihr Webinar-Team
_ Referent: Dr. Christopher Kunz
_ CEO Hosting filoo GmbH / TK AG
_ Promotion IT Security
_ Vorträge auf Konferenzen
_ Autor von Artikeln & Büchern
_ Moderation: Sibylle Blöchl
_ Marketing Thomas-­‐Krenn.AG
_ Sammelt Fragen / Feedback
Security-Webinar September 2015
filoo GmbH
_ Wir sind die Hosting-Tochter der ThomasKrenn.AG
_ Sicheres, hochperformantes Hosting in Frankfurt
_ Mitarbeiter in Gütersloh und Freyung
_ Primärer Rechenzentrumsstandort Frankfurt
_ Tier3, ISO 27001
_ Fläche in zwei Brandabschnitten
_ Managed Services
_ Planung & Deployment
_ Security Services
_ Systemadministration
Security-Webinar September 2015
Agenda
_ Security im letzten Monat
_ BGP Hijacking und SSL-­‐Zertifikate
_ Sichere E-­‐Mail: Neues vom BSI und anderen
_ Einbruch im Firefox-­‐Bugtracker
_ SQL Injection
_ Was ist SQLi?
_ Betroffene Systeme & Auswirkungen
_ Schutz gegen SQL Injection
Security-Webinar September 2015
BGP Security
_ Das Internet ist ein Netz von Netzwerken
_ Diese verwenden zum Routen BGP
_ „Announcement“, welche Netze über Provider X erreicht werden
_ An Provider dieses Providers („Upstream“)
_ An andere Provider („Peers“)
_ An Kunden („Downstream“)
_ BGP ist nicht sehr gut gesichert
_ Announcements können gefälscht werden
_ Das heißt Prefix-­‐Hijacking
Security-Webinar September 2015
BGP und SSL
_ Man kann mit BGP Prefix-­‐Hijacks SSL-­‐Zertifikate erschleichen
1. Man wähle ein Opfer, eine Ziel-­‐Region (Land, Provider, o.ä.), eine CA in der Zielregion
1.
Z.B. Türkei und „Turktrust“
2. Man hijacke das Netzprefix des Opfers in der Ziel-­‐Region
3. Man beantrage ein Zertifikat für www.zieldomain.de
1.
Verifikation z.B. per Mail an zieldomain.de -­‐> umgeleitet!
4. Verifikation abfangen und Zertifikat erhalten
5. Prefix-­‐Hijack zurückziehen
6. Gültiges Zertifikat bleibt!
Security-Webinar September 2015
Neues zu sicherer E-Mail
_ Kennen Sie das hier noch?
Security-Webinar September 2015
Aus EMIG wird DANE
_ E-­‐Mail Made in Germany wurde stark beworben
_ Konsortium aus 1&1 (GMX, web.de), Telekom (T-­‐Online, Strato)
_ „Walled Garden“ mit Insellösung für die Konsortialteilnehmer
_ Dritte (=wir) blieben außen vor
_ Das BSI gibt nun Richtlinien für sichere Mail heraus
_ Verschlüsselung, Authentifizierung, DNSSEC, DANE
_ BSI TR-­‐03108
_ Und siehe da, GMX und Web.de öffnen sich Security-Webinar September 2015
Einbruch in Firefox Bugtracker
_ Angreifer hat sich Zugriff auf Bugtracker von Firefox verschafft
_ Dort sind alle gemeldeten Fehler verzeichnet
_ Auch sicherheitsrelevante _ Dadurch: Sicherheitskritischer Fehler bekannt geworden
_ Angreifer haben maßgeschneiderten Exploit
geschrieben
_ Fazit: Auch „Randsysteme“ können sehr gefährlich sein
Security-Webinar September 2015
SQL Injection
_ Top-­‐1 Securityproblem laut OWASP
_ https://www.owasp.org/index.php/Top_10_2013-­‐Top_10
_ Grundprinzip: Manipulation von Eingabedaten
_ Hier: Eingabedaten, die an Datenbanksystem übergeben werden
_ Angriff gegen Anwendung und Datenbankserver
_ Angriff findet „auf dem Server“ statt
_ MySQL, Oracle, MSSQL, postgreSQL etc. betroffen
Security-Webinar September 2015
SQL Injection
_ Vom Angreifer kontrollierter String wird Teil eines SQL Statements
_ Der Nutzer kann das Statement (und damit die Ergebnisse) kontrollieren
_ Auswirkungen
_ Datendiebstahl
_ Ausführung von Exploit-­‐Code
_ Denial of Service
Security-Webinar September 2015
SQL Injection Beispiel
_ Prüfung eines Login-­‐Formulars
_ SELECT
FROM
WHERE
AND
Username, UserID
Users
Username = '" . $_POST['user'] . "'
Password = '" . $_POST['pass'] . "'";
_ User / Passwort kommen aus Web-­‐Formular
_ Werden also vom Angreifer kontrolliert
Security-Webinar September 2015
SQL Injection Beispiel
_ So soll es eigentlich aussehen:
_ Username = chris, Paßwort = test123456
_ SELECT
FROM
WHERE
AND
Username, UserID
Users
Username = 'chris'
Password = 'test123456';
_ Es wird geprüft, ob Username und Paßwort passen
_ Wenn nicht, keine Rückgabe -­‐> login fehlgeschlagen
_ Rückgabewert: User-­‐ID des Nutzers „chris“
_ Login nur als dieser Nutzer möglich
Security-Webinar September 2015
SQL Injection Beispiel
_ Setze Username wie folgt:
_ Username = „admin' or '1'='1“, Paßwort = „“
_ Resultierendes SQL Statement: SELECT
FROM
WHERE
AND
Username, UserID
Users
Username = 'admin' or '1'='1'
Password = '';
_ „or 1=1“ ist immer wahr
_ Resultat: User-­‐ID des Admins wird zurückgeliefert
_ Paßwortabfrage wird umgangen
_ Angreifer ist als „admin“ eingeloggt
Security-Webinar September 2015
Etwas komplexer...
_ Query zum Auslesen von Content im CMS
_ Übergabeparameter: Content-­‐ID (numerisch)
_ SELECT
FROM
WHERE
id, beschr, category
inhalt
id = " . $_GET['id'];
_ ID kommt aus der URL
_ Wird vom Angreifer kontrolliert
Security-Webinar September 2015
Etwas komplexer...
_ Legitimer Fall: Setze Content-­‐ID auf numerischen Wert
_ id = 12
_ SELECT
FROM
WHERE
id, beschr, category
inhalt
id = 12
_ Rückgabe: Eine Zeile mit Content-­‐ID, Beschreibung, Kategoriename und Inhalt
Security-Webinar September 2015
Etwas komplexer...
_ Setze nun id wie folgt:
_ id= "999 UNION SELECT username,password,1
FROM users WHERE username='admin'"
_ Resultierende Abfrage:
_ SELECT
id, beschr, category
FROM
inhalt
WHERE id = 999 UNION SELECT
username,password,1 FROM users WHERE
username='admin'
_ Rückgabe: Zeile mit Zugangsdaten!
Security-Webinar September 2015
Schutz vor SQL Injection
_ Inhalte ordentlich maskieren!
_ Viele Sprachen stellen Funktionen zur Verfügung
_ Beabsichtigte Werte-­‐Scopes prüfen
_ Eine Zahl ist eine Zahl und sollte nie ein String sein
_ Casting in Ziel-­‐Typ
_ Prepared Statements nutzen, wo verfügbar
Security-Webinar September 2015
Escaping und Casting
_ PHP-­‐Funktion mysqli_real_escape_string()
_ Versieht folgende Zeichen mit einem \: \n \r \, ' " \0x0a, \0x00
_ PHP-­‐Typecasting: _ $content_id = (int) $_GET['content_id'];
Security-Webinar September 2015
Escaping und Login-SQL
_ Setze Username wie folgt:
_ Username = „ admin' or '1'='1“, Paßwort = „“
_ Zusätzlich: mysqli_real_escape_string()
_ Resultierendes SQL Statement: SELECT
FROM
WHERE
AND
UserID
Users
Username = ' admin\' or \'1\'=\'1 '
Password = '';
_ Resultat: Keines!
_ Benutzername admin\' or \'1\'=\'1 existiert nicht!
Security-Webinar September 2015
Casting und Content-SQL
_ Setze nun id in der URL wie vorher:
_ id= "999 UNION SELECT username,password,1
FROM auth WHERE username='admin‘“
_ Nun aber: $id
= (int) $_GET['id'];
_ Resultierende Abfrage:
_ SELECT
id, beschr, category
FROM
inhalt
WHERE id = 999
_ Rückgabe: Maximal eine Zeile (Inhalt-­‐ID 999)!
Security-Webinar September 2015
Vorschau
_ Nächster Termin: 21.10.2015
_ Ich freue mich auf Ihre Themenvorschläge!
Security-Webinar September 2015
Vielen Dank
_ Ich freue mich auf Ihre Themenvorschläge und Fragen!
_ Kontaktdaten:
_ E-­‐Mail: [email protected]
_ Telefon: 05241/86730-­‐0
_ Besuchen Sie filoo!
_ https://www.filoo.de/
_ http://twitter.com/filoogmbh
Security-Webinar September
Herunterladen