Sicherheit und Skalierbarkeit im E-Business - Mayflower Blog · 35 OXID eShop EE zertifizierte...

Post on 16-Jun-2020

0 views 0 download

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 - 0schotte@mayflower.de