Wir sprachen mit Mario Heiderich über (Web-)Security
Unser Gast (00:00:00)
Mario Heiderich, @0x6D6172696F
Hat einen Security Talk "Im DOM hört Dich keiner schreien" auf der enterJS gegeben: http://www.enterjs.de/
Mario's Security Firma: https://cure53.de/
Nutzen wenig Scanner, mehr Handarbeit
Security Scanner finden keine "logischen Bugs"
RIPS: Statische Analyse von PHP Code: http://rips-scanner.sourceforge.net/
Terminologie & Methodologie (00:05:51)
Sources: Quellen von Input (User Input z.B.)
Sink: Stellen im Code, wo Input ankommt bzw. was mit ihm passiert
Input: Input :)
Getestet wird manchmal in VMs, manchmal auf Test oder Staging Umgebungen oder auch in Produktion
das hängt vom Kunden und Projekt ab
WAF: Web Application Firewall: https://en.wikipedia.org/wiki/Application_firewall
Erfolgsquote: 100% - "noch keine leeren Reports"
Eine Frage der Einstellung: Die einen Entwickler wollen Features bauen, andere Software kaputt machen
Scope
"Ihr dürft nicht nach DoS suchen!"
Abgrenzung, was in der Betrachtung liegt und was nicht
Vektor: Der Angriff an sich, z.B. ein String bei einer SQL Injection; oder Vektor kann ein ganzer Prozess oder Ablauf sein
Exploit: Nutzung eines Vektors mit einem Ziel: Beispiel String (Source) für SQL Injection (Vektor) nutzen, um Admin zu werden
Pwn2Own: https://en.wikipedia.org/wiki/Pwn2Own
Stuxnet: https://en.wikipedia.org/wiki/Stuxnet
Betätigungsfelder (00:22:20)
Marios Firma hat für alle möglichen Bereiche Spezialisten:
Binary Pentesting
Datenbanken
Web/Browser/JavaScript/Flash
Bruteforcing
Cold Fusion
Kryptographie, Kryptoanalyse
Java
Neue und alte Probleme (00:24:30)
Es verlagert sich viel in den Browser
daher mehr und mehr Lücken in Richtung XSS, CSRF, …
NoSQL wird auch getestet
MongoDB führt JS in der Datenbank aus und zwar als eval!
Auf der Suche nach XSS und anderen Schwachstellen (00:27:00)
"Nennt sich doch mal constructor.constructor"
oder "prototype"
"proto"
Handhaben von Benutzerinput (00:28:30)
Validieren: Format explizit und strikt prüfen
Filtern: z.B. Single Quotes oder Kommata entfernen
Aber so einfach ist das nicht
Strings (Quotes) verboten? was ist mit /i'm a string/.source
1..constructor.constructor
Sanitizing:
"Escape den Input und Encode den Output"
Es ist wichtig zu unterscheiden zwischen der Information die durch das Sanitizing soll, UND
Kontext, wo die Information später verwendet werden soll
Back to Frontend Security (00:34:30)
Template Expressions Exploit, z.B. bei AngularJS: https://code.google.com/p/mustache-security/wiki/AngularJS
Der Browser ist die neue Sink
Security im Browser ist anders und komplexer als auf dem Server
Sehr viel mehr Wissen über konkrete Prozesse bei der Darstellung von HTML/CSS und der Ausführung von Javascript notwendig
Browser ist im Grunde "moving target"
Die Vielzahl der Browser bietet sehr viel Angriffsfläche
Vor allem im Kontext großer Unternehmen sind oft auch sehr alte Browser noch im Einsatz (IE6)
Eine Umstellung auf neuere Browser ist u.U. nicht immer möglich => Paradies für Pentesting
Im DOM hört dich keiner schreien (00:46:50)
Talk auf der enter.js (http://www.enterjs.de/abstracts#im-dom-hoert-dich-keiner-schreien-eine-reise-in-die-gruselige-schicht-zwischen-html-und-javascript)
Historie des DOMs
Verschiedene Probleme aufgezeigt, Bsp.: DOM-Clobbering
Mit statischem HTML bestehende Variablen, Funktionen o.ä. überschreiben
Ist im Grunde im Standard sogar definiertes Verhalten oO
Am Ende kann man sehr viel Spaß nur mit statischem HTML haben :-)
Was ist das DOM überhaupt
Ein API zwischen einem Dokument und einer beliebigen Scripting-Sprache
Ziel des DOM: Bereitstellung von Feature-Parität, dabei müssen einige Features explizit ausgeschlossen werden