Sicherheit und Skalierbarkeit im E-Business - Mayflower Blog · 35 OXID eShop EE zertifizierte...
Transcript of Sicherheit und Skalierbarkeit im E-Business - Mayflower Blog · 35 OXID eShop EE zertifizierte...
Sicherheit und Skalierbarkeit im E-BusinessOXID Partnertag | 09.10.2007 | Björn Schotte
© MAYFLOWER GmbH 2007 2
„Sicherheit/Skalierbarkeit“
Wer bin ich?
❙
Been there, done that:❙
Internet seit 1993/94
❙
PHP seit 1997❙
PHP-Center.de
❙
PHP Magazin❙
PHP Konferenz
❙
Faible für skalierbare & sichere Applikationen
© MAYFLOWER GmbH 2007 3
„Sicherheit/Skalierbarkeit“
Wer ist Mayflower?
❙
Deutschlands größter LAMP Dienstleister❙
>40 Mitarbeiter
❙
35 OXID eShop EE zertifizierte Entwickler❙
Geschäftsbereiche:❙
Premium Software Development
❙
Beratung/Training❙
Support
❙
E-Commerce❙
Kunden❙
Premiere/T-Systems, neckermann.de Siemens, Vaillant Group, Telefónica, O2, e-fellows, sevenload, studiVZ, UnitedInternet, Deutsche Bank, HypoVereinsbank, …
© MAYFLOWER GmbH 2007 4
„Sicherheit/Skalierbarkeit“
Mayflower GmbH – Security Expertise
❙
tiefes KnowHow im Bereich PHP und JS Security❙
Security Tool Chorizo! https://chorizo-scanner.com/
❙
Security Audits sowie Zertifizierung, Security Trainings
© MAYFLOWER GmbH 2007 5
„Sicherheit/Skalierbarkeit“
Agenda Security
❙
JavaScript-Injections und Ajax (XSS)❙
Bedeutung und Verbreitung von XSS
❙
Was sind JavaScript Injections?❙
Warum Web 2.0 und XSS besonders wehtut
❙
Ajax / Web 2.0 Probleme❙
Xml HTTP Request, Toolkits, JSON
❙
Ajax-Malware: XSS-Würmer und Viren❙
Kurze Virengeschichte
❙
Web 2.0, Viren und Würmer ❙
Ajax-Malware: Web 2.0-Attacken❙
Browser Zombies
❙
Intranet-Attacken❙
Ajax-Applikationen absichern
© MAYFLOWER GmbH 2007 6
„Sicherheit/Skalierbarkeit“
Agenda Performance❙
Mind your SQL❙
Falsches SQL ist oftmals ein Bottleneck
❙
mehr SQL ist besser❙
Achtung: Applikationsdesign!❙
Kapselung in Objekten (Design Patterns)
❙
Saubere Auftrennung in Schichten (MVC Pattern)❙
Komponenten-orientierte Bauweise (SOA?)
❙
Hilfe, die Session klemmt!❙
Weitere Tools❙
memcached
❙
lighttpd❙
Y!Slow
❙
Bytecode Caches❙
JMeter – Nutzersimulation, Performance Messung
❙
Projektmethodiken: Continuous Integration & Continuous Inspection
© MAYFLOWER GmbH 2007 7
„Sicherheit/Skalierbarkeit“
Zitate zu XSS
❙
Symantec Internet Security Thread Report:❙
69% aller Vulnerabilities passieren in Webapplikationen
❙
Web 2.0 und AJAX Sicherheitsprobleme werden wichtiger❙
Mitre Corporation CVE Datenbank: ❙
21.5 % aller Lücken sind XSS-Lücken
❙
Von „low“ über „medium“ zu „high“ risk❙
„XSS is the new hotness!“ Billy Hoffman, SPI
© MAYFLOWER GmbH 2007 8
„Sicherheit/Skalierbarkeit“
Wer ist alles betroffen?
❙
z.B. die Website einer Konferenz:❙
http://ajaxinaction.software-support.biz/
❙
Angela Merkels Rücktritt:❙
Bundesregierung.de
❙
Spiegel❙
Financial Times Deutschland
❙
Stern
© MAYFLOWER GmbH 2007 9
„Sicherheit/Skalierbarkeit“
Warum Web 2.0 und XSS besonders wehtut
❙
Mehr Logik im Client❙
MVC: bis zu 100% von View und Controller können im Browser stattfinden
❙
Professionelle GUI-Erstellung mit JavaScript-Widgets und Komponenten
❙
Wachsendes JavaScript-Knowhow❙
Mehr und neue Möglichkeiten für XSS
❙
Neue Vektoren❙
Toolkits
❙
JSON ❙
RSS
❙
REST / SOAP
© MAYFLOWER GmbH 2007 10
„Sicherheit/Skalierbarkeit“
Wie Cross-Site-Scripting(XSS) funktioniert
❙
Same-Origin-Policy❙
Wenn eine Seite JavaScript mitliefert, dann ist dieses JavaScript vertrauenswürdig
❙
Es darf die Seite ändern❙
Daten vom gleichen Host können gelesen werden
❙
XSS verletzt diese Policy❙
Es kann JavaScript in den aktuellen Seitenkontext eingeschmuggelt werden
❙
Es können beliebige Requests aus- geführt werden
❙
es können lokale Daten ausgelesen werden
© MAYFLOWER GmbH 2007 11
„Sicherheit/Skalierbarkeit“
Fortgeschrittene XSS-Exploits
❙
Password-Diebstahl❙
Firefox Password-Safe gespeichert wird (Host, Feldname, Wert) -> wird nach dem onLoad des Dokuments befüllt
❙
Ein Login-Formular❙
.. und wie man es ausliest
❙
Datenspionage❙
CSS-History Hack per Stylesheet
❙
Firefox-Plugins per chrome-img-onError
© MAYFLOWER GmbH 2007 12
„Sicherheit/Skalierbarkeit“
XSS Filter und wie man sie umgeht
❙
Es existiert eine Vielzahl von Filtern in Anwendung und Firewall
❙
Problem: HTML soll möglich sein, JavaScript aber nicht❙
Klassische Filter-Evasions:❙
<IMG """><SCRIPT>alert("XSS")</SCRIPT>">
❙
<META HTTP-EQUIV="refresh" CONTENT="0;url=data:text/html;base64,PHNjcmlwdD 5hbGVydCgnWFNTJyk8L3NjcmlwdD4K">
❙
Code-Page-basierte Filter Evasions❙
UTF-7 (Google XSS-Hack)
❙
Variable-Width Encoding Evasions❙
Toolkit-basierte Filter Evasions❙
Dojo: dojoAttachEvent
© MAYFLOWER GmbH 2007 13
„Sicherheit/Skalierbarkeit“
Exploiting Ajax
© MAYFLOWER GmbH 2007 14
„Sicherheit/Skalierbarkeit“
XmlHTTPRequest-Sicherheit
❙
Sicherheitskonzept hinter XmlHTTPRequest:❙
Same-Origin-Policy
❙
Ähnlich Java-Sandbox❙
Umgehen der Host-Begrenzung❙
DNS-Pinning❙
Wechsel der IP zwischen den Requests
❙
Proxy-Request-Spoofing❙
Eine Seite ohne XSS: ❙
http://phprojekt.com/demo/
❙
Trotzdem kann man einen XSS einschmuggeln:❙
Web Cache Poisoning Url
© MAYFLOWER GmbH 2007 15
„Sicherheit/Skalierbarkeit“
JavaScript / Toolkit Manipulation
❙
Vollständiger Vertrauensverlust in JavaScript❙
Nutzer-Variablen und Funktionen
❙
Systemfunktionen und Methoden❙
Formulare und (Hidden-)Variablen
❙
Content, Cookie, …❙
Beispiel: Überschreiben von alert()
old_alert = alert; function myalert(str) {
old_alert('myalert: '+str); } alert = myalert; alert('Test');
❙
Prototype.js: Ajax.Request = myRequestMITM
© MAYFLOWER GmbH 2007 16
„Sicherheit/Skalierbarkeit“
JSON
❙
JavaScript Object Notation❙
If JSON were Food it would be Sushi
❙
Beispiel: { "type": "menu", "value": "File", "items": [ {"value": "New", "action": "CreateNewDoc"}, {"value": "Open", "action": "OpenDoc"}, {"value": "Close", "action": "CloseDoc"} ] }
❙
Vorteil: kann direkt in in JavaScript evaluiert werden❙
Nachteil: kann direkt in JavaScript evaluiert werden
❙
Zusätzlicher Vektor zum Einschleusen von JavaScript
© MAYFLOWER GmbH 2007 17
„Sicherheit/Skalierbarkeit“
JavaScript-Malware
❙
Willkommen im Browser: Viren, Intruder, Spyware und Trojaner
© MAYFLOWER GmbH 2007 18
„Sicherheit/Skalierbarkeit“
Kleine Virengeschichte
❙
1949: John von Neumann prophezeit sich replizierende Software
❙
1986: der erste PC-Virus verbreitet sich❙
1992: Michelangelo-Virus – der erste „Medien-Virus“
❙
1995: Script-Viren im Mail-Client (Outlook/Express)❙
1998: Melissa-Wurm in Outlook
❙
2004: Web Application Würmer❙
2005: MySpace-Virus: Samy is my hero
❙
2006: Ihre Ajax-Applikation (just FUDding)
© MAYFLOWER GmbH 2007 19
„Sicherheit/Skalierbarkeit“
Was sind Web 2.0 Würmer/Viren?
❙
Ort: Innerhalb einer/mehrerer Webapplikationen❙
Infizierung per XSS und AJAX
❙
Verbreitung per AJAX, Formular, Link, RSS❙
Der Browser führt den Virus aus
❙
Applikation ist Speicherort des Virus❙
Der erste wirkliche Cross-Platform-Virus!
❙
Kritische Payloads sind möglich❙
Datenänderung
❙
Datenspionage (Kreditkarten usw)❙
Durchführung von Transaktionen (Aktienkauf)
❙
Wer von Ihnen loggt sich immer aus?❙
Auch bei Google Mail?
❙
Bei vorhandenen Logins kann im Hintergrund infiziert werden
© MAYFLOWER GmbH 2007 20
„Sicherheit/Skalierbarkeit“
XSS-Würmer und Viren
❙
Warum funktionieren Viren auf Web 2.0?❙
LAW – Die Nutzer stellen Inhalte für Nutzer (lokale Vermehrung)
❙
Mash-Ups – Es werden Applikationsteile von anderen Websites eingebunden (verteile Vermehrung)
❙
Neue Verbreitungswege wie RSS, SOAP, REST (verteilte Vermehrung)
❙
Ajax-Möglichkeiten stehen auch Hackern offen (Infizierung und Vermehrung)
❙
Es gibt mehr Schnittstellen zwischen Client und Server(n) (mehr Möglichkeiten zur Infizierung)
© MAYFLOWER GmbH 2007 21
„Sicherheit/Skalierbarkeit“
Samy is my Hero – der MySpace Wurm
❙
MySpace, zu dem Zeitpunkt 5-wichtigste Internetseite weltweit
❙
Samy hatte nur 73 Freunde. Zu wenig.❙
Aber er hatte JavaScript-Knowhow.❙
JavaScript im eigenen Profil, daß Samy per XmlHTTPRequest zum Freund macht
❙
MySpace war vorbereitet: ❙
Guter JavaScript-Filter
❙
- aber mit Filter-Evasions!❙
CSRF-Schutz per ZufallsHash
❙
- per XHR umgangen!❙
Nach 20 Stunden hatte Samy mehr als 1.000.000 Freunde!
© MAYFLOWER GmbH 2007 22
„Sicherheit/Skalierbarkeit“
Browser Zombies
❙
JavaScript bedeutet Kontrolle über den Browser
❙
JavaScript muss nicht statisch sein❙
Es könnte auch ein Mensch auf der anderen Seite sein, oder ein intelligentes Script
❙
Besuchen Sie uns! http://mayflower.de/
❙
Wir besuchen Sie auch! Browser Exploitation Framework
❙
COMET!
© MAYFLOWER GmbH 2007 23
„Sicherheit/Skalierbarkeit“
Intranet-Attacken
❙
Hinter der Firewall ist das Paradies❙
Ungepatchte Software
❙
Default-Passworte❙
Ungeschützte Dienste
❙
Aber: das Intranet kann gescannt werden❙
1. die lokale Adresse ermitteln
❙
2. das lokale Class-C-Netz auf Port 80 scannen❙
Erkennung der Infrastruktur
❙
Individuelle Attacken❙
Siehe Proxy-Exploit
❙
bekannte Lücken: Linksys-WRT-Router❙
http://fritz.box/
© MAYFLOWER GmbH 2007 24
„Sicherheit/Skalierbarkeit“
Ajax Applikationen sichern
© MAYFLOWER GmbH 2007 25
„Sicherheit/Skalierbarkeit“
Status bei Web 2.0 Sicherheit
❙
XSS ist kein kleines Risiko mehr❙
mehr Funktionalität im Client bedeutet mehr Potentielle Lücken
❙
Um so mehr JavaScript kann, um so mehr kann auch XSS
❙
JavaScript- und integrierte Toolkits haben regelmässig Lücken
❙
Alle 2 Monate eine neue XSS-Lücke bekannt❙
„Security is a process, not a product“
© MAYFLOWER GmbH 2007 26
„Sicherheit/Skalierbarkeit“
Strategien zur Sicherung
❙
Der Weg zu 100-prozentiger Sicherheit im Web:❙
25% Web Application Firewalls wie mod_security
❙
25% Web Security Scanner❙
25% Source Code Audits und Entwicklung mit Security in Mind
❙
… da fehlt doch was❙
Vermeidung von kritischen Funktionalitäten❙
HTML-Eingaben
❙
Vertrauen auf externe Quellen
© MAYFLOWER GmbH 2007 27
„Sicherheit/Skalierbarkeit“
Sichern von Anwendungen
❙
Dem Client nicht vertrauen:❙
Header, Cookies, Get, Post
❙
Auch nicht der Applikationslogik im Client❙
Daten Filtern:❙
Formate erzwingen: ❙
Es sind nur bestimmte Zeichen valide (0-9,)
❙
Es ist nur ein Format gültig (089/24 20 54 13)❙
Es ist nur eine bestimmte Länge möglich
❙
Bei Nutzung escapen❙
Entities für HTML
❙
Hochkomma für SQL❙
Slashes für JavaScript
❙
Meist in einer Zeile machbar❙
Im Falle PHP: mit Suhosin PHP abhärten
© MAYFLOWER GmbH 2007 28
„Sicherheit/Skalierbarkeit“
Fazit Security
❙
JavaScript etabliert sich als Angriffsplattform❙
Die Möglichkeiten und Gefahren von JavaScript-Malware werden zur Zeit deutlich unterschätzt
❙
Es wird mehr Viren und Würmer auf Web-Applikationen geben
❙
Sie werden Applikations- und Domainübergreifend sein❙
Es wird gezielte XSS-Attacken geben
❙
Intranet-Attacken werden über JavaScript stattfinden❙
Sicherheit wird bei der Applikationsentwicklung fürs Web in der Vordergrund rücken
© MAYFLOWER GmbH 2007 29
„Sicherheit/Skalierbarkeit“
Skalierbare Webanwendungen, SQL Tuning (I)
❙
Mind your (My)SQL!❙
Probleme oftmals bei schlecht designten Tabellen oder SQL Abfragen
❙
EXPLAIN SELECT …❙
Replikation (Master zum Schreiben, Sklaven zum Lesen)❙
1 Master, n Slaves oder n Master, n Slaves (Multi- Master Setup) – verteilt auf n Datacenter
❙
MySQL Proxy!
© MAYFLOWER GmbH 2007 30
„Sicherheit/Skalierbarkeit“
SQL Tuning (II)
❙
Clustering (In-Memory Cluster, disk based Cluster soon)❙
Partitionierung❙
Auf dem gleichen Server
❙
Lösung: Sharding! ( + MySQL Proxy)❙
Mehr SQL❙
Primary Keys -> SELECT der IDs, dann iteratives Auslesen der Datensätze
❙
… zusätzlich MySQL Certification zur Sicherung der eigenen Ausbildung
© MAYFLOWER GmbH 2007 31
„Sicherheit/Skalierbarkeit“
MySQL Proxy
❙
MySQL, fly light!❙
klein und schlank
❙
Query interceptor❙
Sitzt zwischen Client (z.B. PHP) und dem MySQL Server
❙
Query Manipulation leicht gemacht❙
per lua scriptbar
❙
Applikationen auf Master-Slave Setups hieven ohne Änderung am Programmcode
❙
Sharding – ohne Änderung am Programmcode❙
…
❙
noch Alpha – viele Tester gesucht!
© MAYFLOWER GmbH 2007 32
„Sicherheit/Skalierbarkeit“
Applikationsdesign
❙
Design-Patterns (Factory, Decorator, Singleton, …)❙
Komponenten-orientierte Bauweise❙
leichterer Überblick
❙
einfache Wartbarkeit❙
schnell erweiterbar
❙
… lässt sich später einfacher verteilen❙
SOA Architektur (SOAP, XML-RPC, JSON, …)
❙
Integration mit anderen Sprachen
❙
Wegbereiter für mehr Performance
© MAYFLOWER GmbH 2007 33
„Sicherheit/Skalierbarkeit“
Hilfe, die Session klemmt!
❙
Clustering?❙
Load Balancer mit „Session Affinity“ und file-basierten Sessions
❙
Sessions in der Datenbank ablegen *hüstel*❙
Sessions per ZendPlatform Session Clustering + Session Cache verteilen
❙
Sessions per memcached verteilen
❙
… Ausflug nach memcached in der nächsten Folie
© MAYFLOWER GmbH 2007 34
„Sicherheit/Skalierbarkeit“
memcached
❙
„a distributed memory object caching system“❙
Connect via Socket
❙
Ablage von Daten❙
memcached selbst ist cluster-fähig❙
n Server, die nur memcached machen
❙
Große Sites nutzen memcached extensiv, z.B.❙
Ablage von Session Daten
❙
Ablage fürs Content-Caching
© MAYFLOWER GmbH 2007 35
„Sicherheit/Skalierbarkeit“
lighttpd – fly light! (I)
❙
Es muss nicht immer Apache sein❙
Stark skalierender Webserver, speziell für statische Dateien – single process,Top5 der Netcraft Statistik
❙
Besonders gut bei statischen Dateien (Produktbilder, CSS, JavaScript) und Flash Videostreams
❙
auch gut in Kombination mit PHP (FastCGI SAPI)❙
kann load-balancing
❙
Beispielkonfigurationen:❙
1 lighttpd Server, n PHP „Applikationsserver“
❙
1 lighttpd Server, n Apache Server (reverse Proxy)
❙
Cluster aus lighttpd Servern
© MAYFLOWER GmbH 2007 36
„Sicherheit/Skalierbarkeit“
lighttpd – fly light (II)
❙
lua – World of Warcraft?❙
Content-Caching mit lua
❙
PHP muss dann nicht mehr ausliefern❙
PHP kann lighttpd „benachrichtigen“ (per MySQL UDF)
❙
http://blog.thinkphp.de/archives/121-Methods-to- reduce-the-load-of-your-webserver-by-caching- content-using-lighttpd,-MySQL-UDF,-LUA-and-speed- everything-up..html
❙
leicht konfigurierbar❙
http://www.lighttpd.net/
© MAYFLOWER GmbH 2007 37
„Sicherheit/Skalierbarkeit“
Performance Optimierungen für den Client
❙
Y!Slow❙
Extension für Firebug (Extension für Firefox)
❙
Bewertung von zum Beispiel Ladezeiten einzelner Bilder oder Elemente (CSS, JS, …)
❙
Bewertung von sinnvoll oder sinnlos gesetzten HTTP Headern
❙
Entwickelt von Yahoo! (daher „Y!“)❙
Eingeteilt nach 13 simplen Performanceregeln
❙
Einteilung in Grade A bis F (A = Top, F = Flop)
© MAYFLOWER GmbH 2007 38
„Sicherheit/Skalierbarkeit“
Bytecode Caching
❙
APC❙
ZendPlatform (bei OXID EE dabei)
❙
eAccelerator
❙
Sollte Standard in jeder Installation sein
© MAYFLOWER GmbH 2007 39
„Sicherheit/Skalierbarkeit“
Nutzersimulation mit JMeter
❙
Erster Gedanke: Apache Bench (ab)❙
Hilft jedoch nicht viel, weil es nur stumpf Requests abfeuert
❙
Lösung: Tools wie JMeter❙
Nutzersimulation
❙
Aufzeichnung von HTTP Requests❙
Nutzer klickt sich durch den Shop
❙
legt Produkt in den Warenkorb❙
Macht einen Checkout
❙
Virtuelles „Ausschwärmen“ der Nutzer❙
RampUp Phasen etc.
❙
Beispiel: Performance-Bottleneck in MySQL View durch JMeter gefunden
© MAYFLOWER GmbH 2007 40
„Sicherheit/Skalierbarkeit“
Continuous Integration - Einführung
❙
Kontinuierliche Integration – besonders bei Entwicklung im Team
❙
auf Basis von CruiseControl (Java-basiert)❙
mit eigenentwickelten AddOns & 3rd party tools❙
Zend CodeAnalyzer
❙
Coding Guideline Check❙
Selenium Tests inkl. Screenshots
❙
Code Browser❙
Code Coverage
❙
Code Metriken❙
PHP Doc Output
❙
CVS Stats❙
Copy & Paste Detection
❙
…
© MAYFLOWER GmbH 2007 41
„Sicherheit/Skalierbarkeit“
Continuous Integration – was bringt es?
❙
Komfort – „Non-Event“❙
Analysen, Inspektion und „Wächter“-Funktion
❙
Konzept des „Builds“, das vieles machen kann (z.B. nach jedem Commit Tests, Analysen & Inspektion)
❙
Browserakzeptanztests mit Selenium (z.B. 1x täglich)
❙
Nutzersimulationen für Performance Tests (z.B. 1x wöchentlich)
❙
Absicherung und Qualitätssicherung❙
während des Developments
❙
vor Releases❙
in Produktion
© MAYFLOWER GmbH 2007 42
„Sicherheit/Skalierbarkeit“
CruiseControl – Beispiele (I)
© MAYFLOWER GmbH 2007 43
„Sicherheit/Skalierbarkeit“
Cruise Control – Beispiele (II)
© MAYFLOWER GmbH 2007 44
„Sicherheit/Skalierbarkeit“
Cruise Control – Beispiele (III)
Vielen Dank für Ihre Aufmerksamkeit
Björn SchotteMayflower GmbH Pleichertorstr. 2 97070 Würzburg+49 (931) 35 9 65 - [email protected]