PHP-Sicherheit Gefahren und Lösungsansätze. Christopher Kunz <christopher.kunz@hardened-php.net>



Ähnliche Dokumente
suhosin PHP-Patch und PHP-Security Extension Peter Prochaska -

PHP-Sicherheit. Christopher Kunz Regionales Rechenzentrum für Niedersachsen

Schwachstellenanalyse 2012

PHP-Schwachstellen und deren Ausnutzung

PHP-Security. Aleksander Paravac. Aleksander Paravac (GNU/Linux User Group Bamberg/Forchheim) 1 / 27

Web 2.0 (In) Security PHPUG Würzburg Björn Schotte

Inhaltsverzeichnis. Einleitung... 11

Einführung in Web-Security

Aktuelle Sicherheitsprobleme im Internet: Angriffe auf Web-Applikationen

SZENARIO. ausgeführt Command Injection: Einschleusen (Injizieren) bösartiger Befehle zur Kompromittierung der Funktionsschicht

Tobias Wassermann. Sichere Webanwendungen mit PHP

Sicherheit in Webanwendungen CrossSite, Session und SQL

DocuWare unter Windows 7

DOKUMENTATION ky2help V 3.6 Servertests

Themen. Apache Webserver Konfiguration. Verzeichnisse für Web-Applikationen. Server Side Includes

Datensicherheit. Vorlesung 7: Sommersemester 2015 h_da. Heiko Weber, Lehrbeauftragter

Installation des GeoShop Redirector für Apache (Stand ) ================================================================

OP-LOG

Folgende Voraussetzungen für die Konfiguration müssen erfüllt sein:

Secure Coding & Live Hacking von Webapplikationen. Conect Informunity

Folgende Voraussetzungen für die Konfiguration müssen erfüllt sein:

Web Application Security

PHP sicher, performant und skalierbar betreiben

RIPS. Automatisierte Schwachstellenerkennung in PHP-Software mittels statischer Quellcode-Analyse. BSI Deutscher IT-Sicherheitskongress

Installation Wawi SQL in Verbindung mit Microsoft SQL Server 2008 R2 Express with management Tools

Update und Konfiguraton mit dem ANTLOG Konfigurations-Assistenten

Patch Management mit

PHP-Sicherheit. PHP/MySQL-Webanwendungen sicher programmieren. von Christopher Kunz, Stefan Esser, Peter Prochaska. überarbeitet

Warum werden täglich tausende von Webseiten gehackt?

Einrichten des IIS für VDF WebApp. Einrichten des IIS (Internet Information Server) zur Verwendung von Visual DataFlex Web Applications

PHP-(Un-)Sicherheit. Hacker-Seminar Herbstsemester 2006 Laboratory for Dependable Distributed Systems Universität Mannheim.

Installation SelectLine SQL in Verbindung mit Microsoft SQL Server 2012 Express with management tools

Planung für Organisation und Technik

ERSTELLEN VON INCENTIVES IM ZANOX NETZWERK

Anti-Botnet-Beratungszentrum. Windows XP in fünf Schritten absichern

Installation von NetBeans inkl. Glassfish Anwendungs-Server

Schwachstellenanalyse 2013

Kombinierte Attacke auf Mobile Geräte

MailUtilities: Remote Deployment - Einführung

PHP-5-Zertifizierung. Block 12 Security.

PHP-Sicherheit. PHP/MySQL-Webanwendungen sicher programmieren. Ifl dpunkt.verlag. Christopher Kunz Stefan Esser Peter Prochaska

Tracking Dog A Privacy Tool Against Google Hacking

Anleitung zum Prüfen von WebDAV

Bewusstkaufen.at XML Produkt Importschnittstelle für Händler

vii Inhaltsverzeichnis 1 Einleitung 1

3. Stud.IP-Entwickler-Workshop 2. Juni 2006 Workshop 3c: Stud.IP-Enterprise-Edition André Noack, Frank Elsner

AppCenter Handbuch August 2015, Copyright Webland AG 2015

telpho10 Update 2.1.6

Erstellen eines Formulars

Anleitung Redmine. Inhalt. Seite 1 von 11. Anleitung Redmine

HTBVIEWER INBETRIEBNAHME

DriveLock 6. DriveLock und das Windows Sicherheitsproblem mit LNK Dateien. CenterTools Software GmbH

Aktuelle Sicherheitsprobleme im Internet: Angriffe auf Web-Applikationen

Internet Explorer Version 6

Zusammenfassung Web-Security-Check ZIELSYSTEM

INDEX. Öffentliche Ordner erstellen Seite 2. Offline verfügbar einrichten Seite 3. Berechtigungen setzen Seite 7. Öffentliche Ordner Offline

Session Management und Cookies

Albert HAYR Linux, IT and Open Source Expert and Solution Architect. Open Source professionell einsetzen

Folgende Einstellungen sind notwendig, damit die Kommunikation zwischen Server und Client funktioniert:

Duonix Service Software Bedienungsanleitung. Bitte beachten Sie folgende Hinweise vor der Inbetriebnahmen der Service Software.

Multimedia im Netz Wintersemester 2011/12

Authentication Policy. Konfigurationsbeispiel ZyXEL ZyWALL USG-Serie. Juni 2010 / HAL

OWASP Stammtisch München Sep 2014 XSS und andere Sicherheitslücken aus der Perspektive des Programmcodes

SUS Software Update Services

WEBAPPLIKATIONEN MIT PHP. Wo gibt es Hilfe? Wie fang ich an?

Betroffene Produkte: Alle Versionen von Oracle Forms (3.0-10g, C/S und Web), Oracle Clinical, Oracle Developer Suite

Softwaren Engineering I

1 Installation QTrans V2.0 unter Windows NT4

Formular»Fragenkatalog BIM-Server«

Webseiten im PHYSnet. PHYSnet-RZ 9. Mai 2011

Lokale Installation von DotNetNuke 4 ohne IIS

Anleitung Redmine. Inhalt. Seite 1 von 11. Anleitung Redmine

Snippets - das Erstellen von "Code- Fragmenten" - 1

TimeMachine. Time CGI. Version 1.5. Stand Dokument: time.odt. Berger EDV Service Tulbeckstr München

Hacker-Methoden in der IT- Sicherheitsausbildung. Dr. Martin Mink

Wissenswertes über LiveUpdate

Georg Heß. Grünes Licht für verlässlichere Online- Services WEB APPLICATION SECURITY. Deutschland sicher im Netz e.v. Köln,

Die Installation des GeoShop Redirector für IIS (Internet Information Server, Version 4.0, 5.0 und 6.0) umfasst folgende Teilschritte:

Migration Howto. Inhaltsverzeichnis

Kurzanleitung zum Einrichten des fmail Outlook Addin

Das Starten von Adami Vista CRM

BusinessMail X.400 Webinterface Gruppenadministrator V2.6

Task: Nmap Skripte ausführen

Musterlösung für Schulen in Baden-Württemberg. Windows Basiskurs Windows-Musterlösung. Version 3. Stand:

Handbuch. timecard Connector Version: REINER SCT Kartengeräte GmbH & Co. KG Goethestr Furtwangen

Grundlegende Informationen zur Einrichtung des SSLVPN beim DSR-1000N/DSR-500N(FW 1.03B27).

Technische Information: Installation WyRu Online-Shop

Web-Sicherheit: Kein fauler Zauber?! Kai Jendrian. <Seminartitel> <Seminartitel>

SCHRITT FÜR SCHRITT ZU IHRER VERSCHLÜSSELTEN

Step by Step Webserver unter Windows Server von Christian Bartl

Updatehinweise für die Version forma 5.5.5

Lizenzen auschecken. Was ist zu tun?

Firewall Implementierung unter Mac OS X

Test mit lokaler XAMPP Oxid Installation

:: Anleitung Hosting Server 1cloud.ch ::

MH3 D2/3 DB/4. Name: Matr.-Nr. Seite: 3. Aufgabe 1. (6 Punkte) a) Gegeben sei eine kryptographische Hashfunktion h^o,!}* mit Hashwert h^mo) = 4.

Installation SelectLine SQL in Verbindung mit Microsoft SQL Server 2014 Express with management tools

Transkript:

PHP-Sicherheit Gefahren und Lösungsansätze Christopher Kunz <christopher.kunz@hardened-php.net>

Über Christopher Kunz Wohnt und arbeitet in Hannover PHP-Erfahrung seit 1999 Mitglied im Hardened-PHP Project URLs http://www.christopher-kunz.de/ http://www.hardened-php.net/ http://www.php-sicherheit.de/ 2

Weiterführende Informationen Christopher Kunz, Peter Prochaska PHP-Sicherheit dpunkt.verlag 2006 (2. Auflage 2007) ISBN 3-89864-369-7 36,00 3

Agenda Aktuelle Entwicklungen in Webapp- Security Client-Side Angriffe Server-Side Angriffe Härten des Webservers / PHP Request Filtering mit Apache-Modulen (Alle Slides werden auch online sein!) 4

So sieht's aus... "Wurm schlängelt sich durch MySpace" "StudiVZ: Belohnung für Sicherheitslücken" "Web-Kalender Kronolith lässt sich Code unterschieben" "dev!l`z Clanportal - SQL Injection [061124a]" 5

Aktuelle Problemfelder Angriffe gegen Nutzer Cross-Site Scripting (XSS) Cross-Site Request Forgery (CSRF) Angriffe gegen Server SQL Injection Command Injection Local/Remote Code Execution 6

Angriffe gegen den Nutzer Nutzer webbasierter Applikationen sind gefährdet! Aktuelles Beispiel: StudiVZ Ausspähen sensitiver Informationen per JavaScript/DOM Ausnutzen von Browser-Komfort für eigene Zwecke ( AutoVervollständigung ) Sehr große Spanne an Möglichkeiten 7

XSS Cross-Site-Scripting Grundidee: Zonenmodell moderner Browser austricksen Angreifer sucht Möglichkeit, eigenen Code (JavaScript, nicht PHP/Perl o.ä.) auf Zielsite einzubetten Browser des Opfers führt diesen Code aus Sicherheitszone: Die der Zielsite 8

XSS Einfache Beispiele Bei Formular-Textfeldern "><script>alert('xss')</script> ' onfocus=javascript:alert('xss') In HTML-Tags <IMG SRC="javascript:alert('XSS');"> <BODY BACKGROUND="javascript:alert('XSS')"> XSS Cheatsheet enthält mehr Beispiele http://ha.ckers.org/xss.html 9

XSS - Komplexität Durch DOM beliebige Manipulationen am Dokumentbaum möglich Ersetzen von Text Austauschen von Formularfeldern / -zielen Automatischer Versand von Formularen Durch Browserkomfort (Paßwort-Safe) auch Login-geschützte Seiten kein Problem 10

XSS und "Web 2.0" Moderne Websites sind überladen mit JavaScript (AJAX, Besuchertracking etc.) Injektion von HTML-Tags oft nicht nötig Eine verwundbare JS-Variable reicht Komplette Anwendung ist nicht mehr vertrauenswürdig Bei Webmail etc. praktisch unbegrenztes Abuse-Potential Auch nett: JS in Quicktime, Cross-Domain XML per Flash 11

XSS und PHP Hauptgrund: Ungeprüfte Ausgabe von Userinput echo $_GET['irgendwas'] PHP-Gegenmittel htmlentities(); strip_tags() Kein Administratorenproblem 12

SQL Injection Angriffe gegen Datenbanklayer Manipulation ungenügend geprüfter SQL- Queries Fehlende Typ-/Inhaltsprüfung Resultat: Verfälschtes Resultatset Auslesen privilegierter Daten Umgehung von Autorisierung / Authentifizierung Je nach DBMS: Zugriff aufs Dateisystem 13

SQL Injection in PHP Angreifbares Query: $query = "SELECT is_authorized FROM users WHERE username = '". $_POST['username']. "' AND password = '". $_POST['password']. "'"; $_POST['username'] = "admin' /*" Authentifizierung umgangen 14

SQL Injection: Gegenmaßnahmen Usereingabe nicht vertrauen! Maskieren von SQL-Sonderzeichen mysql_real_escape_string($_post['usernam e'] Prepared Statements mysqli->prepare() etc. Hauptsächlich Entwicklerproblem 15

Angriffe gegen den Server Automatisierte Scans nach verwundbaren Applikationen Professionelles Management der Angreifer Zunehmende professionelle Tools Ziel: Server rooten / als Spambot verwenden Das IST ein Administratorenproblem 16

Klassifikation Local/Remote Code Injection Arbitrary file inclusion meist "dank" eval/include und Konsorten Klassiker: include($_get['page']) Königsklasse: Nachladen von Exploitcode per HTTP Neu in PHP: Stream-Handler data: - praktisch für Exploits 17

C99shell 18

r57shell.php 19

Defacing Tool Pro v2.5 20

"PHP ist unsicher!" Oft verbreitetes "Argument" gegen PHP Nicht PHP ist unsicher, sondern PHP- Anwendungen Schwache Typisierung erleichtert Entwicklerfehler Ist C schuld an Sendmail oder Bind 7? Allerdings: Lücken im PHP-Kern noch immer (zu) häufig Tainted Mode fehlt nach wie vor 21

Bordmittel für PHP-Security Geeignete Auswahl der SAPI CGI/FastCGI statt mod_php Separation der Nutzer mittels suexec Eigene php.ini pro Nutzer Auch versch. PHP-Binaries pro Nutzer möglich ini-einstellungen für mehr Sicherheit 22

Safe Mode UID/GID Checks bei Dateioperationen Seit PHP 4 in PHP, stets Notlösung Extension-abhängig, häufige Lücken in der Vergangenheit Wird in PHP 6 abgeschafft Oft falsches Gefühl der Sicherheit 23

open_basedir open_basedir=/var/www/kunde1 Überprüft bei Dateioperationen Verzeichnis Direktive gibt Basisverzeichnis an, außerhalb dessen nicht zugegriffen werden darf Im Beispiel: include("/etc/passwd") wird verhindert 24

disable_functions disable_functions="system,passthru,eval" Funktionen selektiv verbieten Wird oft für Prozeßkontroll- /Systemfunktionen eingesetzt Unerwünschte Seiteneffekte Kompatibilitätsprobleme 25

system() und Co. PHP-Funktion system() forkt Shell Oft für Helper-Binaries wie ImageMagick Eingesetzt u.a. bei Typo3 Problem: Shell + Binaries kümmern sich nicht um Safe Mode Sicherheitsleck! Lösung: Keine externen Binaries zulassen! 26

allow_url_fopen Großes Problem für PHP-Anwendungen: Include auf unsichere Ziele Direktive "allow_url_fopen Off" verbietet Öffnen von URLs komplett Unerwünschte Nebenwirkungen Seit PHP 5.2.0: "allow_url_include" berücksichtigt nur include/require(_once) Empfehlung: Ausschalten! 27

Register Globals Registrierung von Requestvariablen als globale Variablen Aus $_GET['foo'] wird $foo Häufig noch aktiviert, obwohl seit 4.2.0 default off register_globals on vereinfacht unsauberen Code register_globals Off! Immer! register_globals verschwindet in PHP 6 28

Suhosin Freier Patch / Extension für PHP vom Hardened-PHP Project Früher: "Hardened-PHP" bzw. "Hardening Patch for PHP" Per php.ini konfigurierbar http://www.suhosin.org/ 29

Extension / Patch Funktionalität aufgeteilt in PHP-Extension Patch für PHP-Quellcode Extension kompatibel zu allen anderen PHP- Extensions Suhosin-Teile können unabhängig voneinander genutzt werden Verfügbar in OpenSUSE, diversen BSDs, Gentoo, Debian etc. 30

Suhosin-Patch Schutz gegen Overflows Canary Protection für Zend Memory Manager Schutz gegen Formatstring-Angriffe 31

Suhosin: Simulationsmodus Konfiguration: suhosin.simulation Tut alles, nur keine richtigen Aktionen Sehr nützlich zum Überprüfen auf Probleme mit lokaler Installation Testen / Austarieren der Blacklist / Whitelist 32

Suhosin: Variablen-Features Variablenfilter GET/POST/COOKIE darf keine geschützten Variablen enthalten Variablenlänge, Variablenzahl, Arraytiefe etc. limitierbar Superglobals gegen extract() etc. geschützt 33

Suhosin: Runtime-Features Rekursionstiefe limitierbar memory_limit kann nicht mehr vom User geändert werden Neue realpath() Funktion 34

Suhosin: Whitelist/Blacklist Per Vhost konfigurierbar Whitelist für Funktionen Blacklist für Funktionen Zwei Modi Normal Innerhalb eval() 35

Suhosin: Include-Filter (Konfigurierbares) Verbot von include auf... URLs (Blacklist/Whitelist möglich) Überlange Dateinamen (BSD) Abgeschnittene Dateinamen (%00) Hochgeladene Dateien Schutz gegen Directory Traversal (../../etc/passwd ) 36

Suhosin: Diverse Features Kryptographiefunktionen CRYPT_BLOWFISH-Algorithmus für crypt() Sha256() und sha256_file() für Message Hashing Transparente Cookieverschlüsselung Transparente Verschlüsselung von Sessiondaten Umfangreiches Logging 37

mod_security Freies Apache-Modul Analyse eingehender Requests Blacklist-Approach Regex-basierte Regeln Aktuelle Versionen: 1.9.x / 2.0 Grundlegende Änderungen in 2.0 38

mod_security: Features Überprüfung des gesamten Scopes oder einzelner Bestandteile (GET, POST, Cookie etc.) Überprüfung von XML-Dokumenten mit xpath Sprachunabhängig Logging / IDS-Funktionalität chroot-umgebung für Apache 39

mod_security Installation Download von http://www.modsecurity.org/ Version 1.9 apxs -cia mod_security.c apachectl stop / start Fertig! Version 2.0 Makefile editieren (top_dir =/usr/local/apache2) make; apachectl stop; make install Konfiguration apachectl start 40

mod_security: Konfiguration LoadModule security2_module modules/mod_security2.so SecRuleEngine [On Off DetectionOnly] Vor 2.0: SecFilterEngine SecServerSignature PwnServer/1.0 SecChrootDir /home/chroot 41

mod_security: Regeln Regeln bestehen aus 2-3 Komponenten optional: Wo? (Variablen-Scope) Was? (Filterausdruck) Was tun? (Aktion) SecFilter prüft gesamtes Scope SecFilterSelective prüft Teilscope In mod_security 2: SecRule SecRule VARIABLES OPERATOR [ACTIONS] 42

mod_security: Scoping REQUEST_URI REQUEST_HEADER:Content-Length ARGS ARGS!ARGS:safe ARGS:unsafe Regexp: ARGS:/^pageid_/ XML:/xPath/Expression etc. 43

mod_security: Operatoren Pre-2.0: Regexp für Regeln 2.0: viele zus. Funktionen Performance-Impact! Operatoren Numerisch: eq, ge, gt, le, lt Regexp: rx (impliziert durch Regex am Regelbeginn) rbl RBL-Lookup z.b. auf REMOTE_ADDR etc. SecRule ARG:id "@gt 0" 44

mod_security: Aktionen pass An dieser Regel vorbeilassen allow An allen Regeln vorbeilassen deny HTTP-Status 403 senden (= status:403) status:x HTTP-Status x senden redirect:x HTTP-Redirect auf URI x exec:x externes Executable x ausführen nolog, log Meldung (nicht) loggen skipnext:x Nächste x Regeln überspringen chain Verkettung mit nächster Regel pause:x Ausführung um x ms verzögern u.a.m. 45

mod_security: Fazit Blacklistansatz unnütz gegen 0Day Fängt mit passenden Rulesets extrem viele automatisierte Exploits "Web-IDS" im DetectionOnly-Modus 46

mod_parmguard Freies Apache-Modul Analyse eingehender Requests Apache 1.3, 2.x Whitelist-Ansatz XML-Konfigurationsdateien 47

mod_parmguard Whitelist-Ansatz gilt allg. als sicherer Keine "überflüssigen Variablen" Klare Definition der möglichen Schnittstellen Constraints Datentyp Wertebereich Bei Aufzählungen: Mögliche Optionen 48

mod_parmguard: Installation Download von http://www.trickytools.com/php/mod_parm guard.php./configure withapxs[2]=/usr/sbin/apachectl make && make install apachectl stop / start Fertig! 49

mod_parmguard: httpd.conf Konfiguration innerhalb von <Location>- Blöcken <Location /> ParmguardEngine On ParmguardConfFile /etc/parmguard.xml </Location> 50

mod_parmguard: XML-Konfiguration Konfigurationssprache: XML Validierung gegen mitgelieferte DTD Schachtelung / Gruppierung von Parametern Benutzung herkömmlicher XML-Tools zur Generierung möglich <url> <match>foobar.php</match> [parameter] </url> 51

mod_parmguard: Beispiel <form> <input type="text" name="name"> <input type="text" name="plz"> <input type="submit"> </form> <xml version="1.0"?> <!DOCTYPE parmguard SYSTEM "mod_parmguard.dtd"/> <parmguard> <global name="http_error_code" value="403"/> <url> <match>adresse.php</match> <parm name="name"> <type name="string"/> <attr name="maxlen" value="20"/> <attr name="charclass" value="^[a-za- Z]+$"/> </parm> <parm name="plz"> <type name="integer"/> <attr name="minval" value="00000"/> <attr name="maxval" value="99999"/> </parm> </url> </parmguard> 52

mod_parmguard: Fazit Interessanter Ansatz für kontrollierte Umgebung Aufwand kaum vertretbar bei großen Anwendungen Für Administratoren Variablenliste schwer zu erstellen 53

Vielen Dank Slides online: http://www.phpsicherheit.de/ Fragen? Kontakt: christopher.kunz@hardenedphp.net 54