PHP-Programmierung: Sicherheitsaspekte EUROSEC GmbH Chiffriertechnik & Sicherheit Tel: 06173 / 60850, www.eurosec.com © EUROSEC GmbH Chiffriertechnik &

Slides:



Advertisements
Ähnliche Präsentationen
DI Christian Donner cd (at) donners.com
Advertisements

SQL Injection – Funktionsweise und Gegenmaßnahmen
Copyright © The OWASP Foundation Permission is granted to copy, distribute and/or modify this document under the terms of the OWASP License. The OWASP.
Warum WordPress Sicherung?
Be.as WEB Technologie
Seminar Internet Technologien SS 98
der Universität Oldenburg
der Universität Oldenburg
Präsentation des Abschlussprojektes Rudolf Berger
Die 20 beliebtesten Versäumnisse hinsichtlich Sicherheit in der Softwareentwicklung EUROSEC GmbH Chiffriertechnik & Sicherheit Tel: / 60850,
Das secologic Projekt im Kurzüberblick - Stand Sept
oodle BelWü Technische Details
Einbindung des Service Providers: Einfache Web-Applikation, Überwachungssystem NAGIOS 2. Shibboleth-Workshop, Freiburg, Franck Borel, UB Freiburg.
Datenbankzugriff im WWW (Kommerzielle Systeme)
eXist Open Source Native XML Database
Seite 1Maria, Philipp, Herbert Seite 1 Fitnessplaner Ziele: >Fitnessplaner für Onlinebetrieb >Registrierung >individuelle Trainingsplanerstellung.
Erweiterung B2B Usermanagement / LDAP-Anbindung
Objektrelationales Mapping mit JPA
Passwörter.
Java: Grundlagen der Sprache
Dateihandles Um in Perl eine bestimmte Datei zum Lesen, Schreiben oder Anhängen zu öffnen, benötigt man so genannte Dateihandles. Ein Dateihandle ist der.
1 Named Pipes alias FIFO Haben einen Eintrag im Dateisystem und sind somit durch Zugriffsrechte identifizierbar Ermöglichen die Kommunikation zwischen.
Oracle PL/SQL Server Pages (PSP). © Prof. T. Kudraß, HTWK Leipzig Grundidee: PSP – Internet-Seiten mit dynamischer Präsentation von Inhalten durch Einsatz.
Oracle WebServer - Einführung. © Prof. T. Kudraß, HTWK Leipzig Oracle Web Application Server HTML WebServer ® File system Static HTML PL/SQL Packages.
Spezielle Aspekte der Anbindung von Datenbanken im Web.
Technik Gestaltung Navigation Daten. Übersicht Client Webbrowser InternetServer.
Seminarvotrag: PHP Von Stefan Niemczyk.
NetUSE Web Application Framework Kai Voigt NetUSE AG 28. Februar 2003.
Einführung MySQL mit PHP
Der VFP Debugger - Coverage und Profiling. © 1999 TMN-Systemberatung GmbH Der VFP Debugger n Neues Aussehen, eigene Task n Erweiterte Möglichkeiten n.
Seite Common Gateway Interface. Konzepte. Übersicht 1Einleitung 2Was ist CGI? 3Wozu wird CGI verwendet? 4Geschichtlicher Überblick 5Grundvoraussetzungen.
PHP Pakete und Beispiele Webengineering Robert Lemke.
Jetzt lernen wir.
Mailserver-Installation mit LDAP-Schnittstelle für die Firma XYZ GmbH
... und alles was dazugehört
Welche Funktion hat die php.ini? -Beinhaltet wichtige Einstellungen für PHP. Genannt seien hier u.a. der Speicherort von Cookies, Parameter der Kompilierung,
SQL PHP und MySQL Referat von Katharina Stracke und Carina Berning
Grundlagen der sicheren PHP Programmierung Parametermanipulationen und Injektionslücken Stefan Esser Hardened-PHP Project.
Weltweite Kommunikation mit Exchange Server über das Internet
Online-Systematiken im Netz
Publicvoid - Onlinenotes SWOS HS 2011/12. Inhalt Vorstellung Website Probleme - Lösungen Quick & easy 2 kalik1, messu2, joosp1, stahm3.
Projektarbeit PHP 5.3 / MySQL & Content Management Systems
Erstellen einer Webseitenstatistik mithilfe eines OLAP-Servers
Erstellen einer Webseitenstatistik mithilfe eines OLAP-Servers
Präsentation von Sonja Pathe
PHP und MYSQL am Organisatorisches Der komplette Kurs im Schnelldurchgang Bewertung von wichtig und unwichtig Historisch Kulturwissenschaftliche.
Grundlagen: Client-Server-Modell
Dynamische Webseiten mit PHP [und Python]
Folgendes kann missbraucht werden: formulare unverschlüsselte login-informationen ungeschützte includes SQL-injection reto ambühler
CGI (Common Gateway Interface)
Dynamische Datentypen
Daniel Franke Tim Benedict Jagla Matthias Thimm
Wie man Webanwendungen vor Angriffen schützen kann
Seite 1 - Security in TYPO3 Willkommen Security in (und rund um) TYPO3 Christian Kurta
Einführung in PHP.
Einführung in PHP 5.
Hacking InfoPoint Jörg Wüthrich Infopoint - Hacking - Jörg Wüthrich 2/26 Inhalte Rund um das Thema Hacking Angriffs-Techniken Session.
Mag. Andreas Starzer weloveIT – EDV Dienstleistungen
Aufzeichnung von Usability-Daten im www. Client-Side Log : automatisch (maschinell) generiertes Protokoll Client : Rechner mit dem Browser des Users Server:
Dedizierte Systeme Typo3 Installation Dedizierte Systeme – Typo3 Installation – Christoph Stollwerk IT Zertifikat der Philosophischen Fakultät WS 2008/2009.
Backup der FTP-Daten mit BYSU (Back Your Space Up von George Ruinelli) Eine mögliche Variante, um FTP- Daten bei dem Provider „All-Inkl“ zu sichern.
Generative Softwareentwicklung in der Praxis Olaf Kaus, „Java User Group“, Hannover 6.Oktober 2003.
CODA - Installation Installation der Binärdateien –Venus: Client-Programm –Vice: Server-Programm –Für Windows existiert eine Alpha-Version (Coda Client.
Quelle: xkcd.com SQL Injections.
Datenbanken im Web 1.
Webserver, Apache und XAMPP
Eine komplexe Netzanwendung Webserver und Datenbankserver im Netzwerk in einer Anwendung einrichten.
Christoph Wirtz | Seminarvortrag EBC | Lehrstuhl für Gebäude- und Raumklimatechnik Ein Tool zum automatisierten Erstellen von Conversion Scripts.
Dynamische Webseiten CGI & co. © CGI - Lösung für alle ? Ja CGI kann alles tun, was man für Anwendungen braucht flexibel (beliebige.
 Präsentation transkript:

PHP-Programmierung: Sicherheitsaspekte EUROSEC GmbH Chiffriertechnik & Sicherheit Tel: / 60850, © EUROSEC GmbH Chiffriertechnik & Sicherheit, 2005

© EUROSEC2 Überblick Register-Globals-Option Filterung von Benutzereingaben –Magic-Quotes-Option –Datenbanken und SQL –Cross-Site-Scripting –Dateioperationen –Shell-Kommandos Session-Management Schutz von Datenbankzugangsdaten Fehlermeldungen Prüfmethoden

© EUROSEC3 Register Globals Option des PHP-Interpreters –Vor Version ist Register Globals per Default eingeschaltet Erzeugt globale Variablen für Benutzereingaben –Diverse Umgebungsvariablen –Parameter aus HTTP-GET-Requests –Parameter aus HTTP-POST-Requests Probleme –Gefährlich in Kombination mit uninitialisierten Variablen Angreifer können diese Variablen mit beliebigen Werten initialisieren –Ursprung von Variablen nicht offensichtlich Benutzereingabe oder globale Variable aus Include-Datei? Alternative zu Register Globals –Seit Version Zugriff auf Benutzereingaben über globale Arrays $_GET, $_POST, etc.

© EUROSEC4 Register Globals: Beispiel Negativbeispiel: Angriff – –Variable authorized wird mit true initialisiert –Geschützte Seite wird angezeigt if (authenticated_user()) { $authorized = true; } if ($authorized) { include /sensitive/data.php }

© EUROSEC5 Magic Quotes Globale Funktion des PHP-Interpreters –Wird auf alle Benutzereingaben angewandt (standardmäßig deaktiviert) Funktionsweise –Ersetzt,, \ und NULL durch \, \, \\ –Soll insbesondere SQL-Injection verhindern Probleme –Gaukelt u.U. falsche Sicherheit vor, hilft z.B. nicht gegen Cross-Site Scripting: –Führt leicht zu doppeltem Escaping (programmatisch + Magic Quotes) –Schutz hängt von Konfiguration des PHP-Interpreters und nicht von der Programmierung ab Empfehlungen –Funktion abschalten –Stattdessen spezialisierte Escape-Funktionen verwenden

© EUROSEC6 Datenbankanbindung: SQL-Injection Vorbeugen von SQL-Injection durch Verwendung spezieller Escape- Funktionen und Prepared Statements Datenbankspezifische Escape-Funktionen gegen SQL-Injection –mysql_real_escape_string() –mysql_escape_string() –pg_escape_string() –pg_escape_bytea() –und andere… Generische Escape-Funktion –addslashes() PEAR-Paket DB –Bibliothek für Datenbankzugriff –Einheitliche Schnittstelle für verschiedene Datenbanksysteme –Unterstützt Prepared Statements und emuliert diese falls nötig –Führt spezifisches Escaping je nach verwendetem DBMS durch

© EUROSEC7 Schutz gegen Cross-Site-Scripting Problem Cross-Site-Scripting –Einschleusen von JavaScript in Output –Ursache ist fehlende Filterung von Benutzereingaben Schutzmaßnahmen –Konvertieren von Sonderzeichen in HTML-Entities: < wird zu < –Vollständiges entfernen von HTML-Tags Bibliotheksfunktionen für Filterung –htmlspecialchars() –htmlentities() –strip_tags() Empfehlung –Mittels Bibliotheksfunktionen Sonderzeichen umwandeln oder HTML- Tags vollständig entfernen

© EUROSEC8 Directory Traversal (1) Umgehen von Pfadbeschränkungen Negativbeispiel –Probleme Kein Schutz vor Pfaden wie /public/../secret/file.txt Kein Schutz vor Kodierung in Unicode o.Ä. function insufficientBaseDirCheck($basedir, $inputpath){ if (strncmp($basedir, $inputpath, strlen($basedir)) == 0) { return true; } else {return false; } }

© EUROSEC9 Directory Traversal (2) Filterung notwendig –Konvertierung in kanonischen Pfadname ohne../ –Konvertierung in normalisierten Zeichensatz Bibliotheksfunktionen –realpath() –basename() –dirname() Empfehlungen –Pfad mit realpath() normalisieren –Zerlegung mit basename() und dirname()

© EUROSEC10 Includes Include-Statement –Fügt PHP-Code aus externer Datei ein –Potentielles Ziel für Code-Injection Negativbeispiel –include $_GET[include_file]; –Normale Verwendung: –Angriff: tack_script.php Empfehlungen –Benutzereingabe als direkten Parameter für Include-Statement vermeiden –Transparenten Zugriff auf Netzwerkdateien abschalten (verhindert Nachladen von Code)

© EUROSEC11 Shell-Kommandos Kommando-Ausführung aus PHP heraus –Benutzereingaben können u.U. das Verhalten des Programms modifizieren Negativbeispiel –exec(ls. $_GET[directory]); –Wähle directory = ; cat /etc/passwd Kritische Funktionen –exec() –passthru() –Backticks-Operator –system() –popen() Verfügbare Escape-Funktionen zur Verhinderung unerwünschter Kommando-Ausführung –escapeshellcmd() –escapeshellarg()

© EUROSEC12 Allgemeine Funktionen für Input- Filterung Operatoren für Typkonvertierung –(int), (integer) –(bool), (boolean) –(float), (double), (real) –(string) PHP-Funktionen –ctype_alnum() –ctype_alpha() –ctype_digit()

© EUROSEC13 Session-Management PHP bietet eingebauten Mechanismus für Session- Management –Sicherheit hängt aber von richtiger Verwendung ab –Hauptprobleme sind Session-Fixation und schlechter Schutz der Sessiondaten Funktionsweise –Hauptfunktion: session_start() –Prüft ob Request eine Session-ID beinhaltet –Falls ja, werden Daten existierender Sessions in $_SESSION verfügbar gemacht –Falls nein, wird neue Session-ID samt Session-Objekt erzeugt

© EUROSEC14 Session-Management: Session-Fixation Problemfall –Request mit Session-ID zu der kein Session-Objekt existiert –PHP-Interpreter erzeugt stillschweigend ein passendes Session- Objekt –Konsequenz: Client kann Sessions mit beliebiger ID erzeugen –In Kombination mit Session-ID in URL ist Session-Fixation möglich Notwendige Schutzmaßnahme –Anwendung muss vor der Anmeldung die Session-ID ändern (mit PHP-Funktion session_regenerate_id())

© EUROSEC15 Session-Management: Schutz der Session-Daten (1) Standardmechanismus für PHP-Sessions –Pro Session Dateien im Dateisystem –Dateiname enthält Session-ID –Standard-Speicherort: Temp-Verzeichnis –Problem: Sichtbarkeit der Datei insbesondere in Shared-Hosting- Szenarien Bessere Konfiguration –Spezielles Verzeichnis mit eingeschränkten Berechtigungen –Aber PHP-Interpreter läuft meist mit Rechten des Web-Servers Daher Trennung zwischen virtuellen Hosts schwierig –Lösungsansatz auf Ebene des PHP-Interpreters: Safe Mode

© EUROSEC16 Session-Management: Schutz der Session-Daten (2) Alternative –Verwahrung der Session-Daten in Datenbank –Strikte Trennung zwischen Anwendungen möglich –Definition von eigenen Verwaltungsfunktionen nötig Schnittstelle: session_set_save_handler() –Nachteil: höherer Programmieraufwand und komplexere Infrastruktur Empfehlung –Speicherung der Session-Daten in Datenbank –Getrennte Datenbanken für verschiedene Anwendungen –Session-Daten im Dateisystem nur bei geeigneten Zugriffsbeschränkungen order bei dedizierten Hosts pro Anwendung

© EUROSEC17 Datenbankanbindung: Schutz der Zugangsdaten (1) Problem: Sichere Aufbewahrung der Datenbank- Zugangsdaten Naive Lösung –Definition von Variablen für Benutzername, Passwort, Hostname in Datei db.inc –Einbinden über include db.inc –Problem: Datei ist öffentlich verfügbar (z.B. Bessere Lösung –Konfiguration über Konfigurationsdatei des Webservers

© EUROSEC18 Datenbankanbindung: Schutz der Zugangsdaten (2) Apache-spezifische Variante –Datei mit Besitzer root und Rechten 0600 –Einlesen in httpd.conf –Apache liest Config-Datei als root –Credentials sind für PHP-Skript nur indirekt verfügbar –Spezifisch für Webserver und Datenbanksystem php_admin_value mysql.default_host = hostname php_admin_value mysql.default_user = username php_admin_value mysql.default_password = password Include /path/to/file-with-db-credentials

© EUROSEC19 Datenbankanbindung: Schutz der Zugangsdaten (3) Allgemeine Variante –Umgebungsvariablen des Webserver –Zugriff über $_SERVER[DB_USER] –Sicherheitsproblem bei Verwendung von Aufrufen wie phpinfo() oder print_r($_SERVER) SetEnv DB_HOST hostname SetEnv DB_USER username SetEnv DB_PASS password

© EUROSEC20 Fehlermeldungen und Debug-Informationen Benutzer sollten keine detaillierten Fehlermeldungen sehen Empfehlungen –PHP-Fehlermeldungen im Output abschalten –Nur generische Fehlerseite ausliefern –PHP-Fehler in Logfile erfassen –Niedriges Loglevel für Warnmeldungen wählen Relevante Optionen –error_reporting = E_ALL –display_errors = off –log_errors = on –error_log =

© EUROSEC21 Prüfmethoden (1) Automatisierte Analyse des Quellcodes –Beispiel: RATS –Finden potentiell gefährliche Funktionen wie exec() oder fopen() –Prüfung der Inputvalidierung muss manuell erfolgen Fehlende Inputvalidierung nur in trivialen Fällen automatischen Tools erkennbar –include $_GET[page]; –exec(rm. $_POST[filename]); Probleme liegen oft auf anderen Ebenen –Konfiguration (z.B. Register-Globals-Option) –Unsichere Anwendung von Standardmechanismen (z.B. Session- Management)

© EUROSEC22 Prüfmethoden (2) Automatische Tools sind nur Hilfsmittel Manuelle Prüfung –Allgemeine Interpreter-Konfiguration –Validierung von Benutzereingaben –Verwendung von Standardmechanismen

© EUROSEC23 Zusammenfassung und Fazit (1) PHP aus Sicherheitssicht –Enthält inhärent unsichere Mechanismen –Mittlerweile sind sichere Alternativen implementiert –Aus Kompatibilitätsgründen sind alte Mechanismen immer noch vorhanden und auch oft eingeschaltet –Problem in Shared-Hosting-Szenarien: PHP-Interpreter läuft als Apache-Modul mit Webserver-Rechten

© EUROSEC24 Zusammenfassung und Fazit (2) Grundlegende Maßnahmen für sichere PHP-Programme –Register Globals abschalten –Magic Quotes abschalten –Verwenden von PHP-Funktionen für Inputfilterung –Transparenten Zugriff auf Dateien im Netzwerk abschalten –Inputfilterung über explizite Datentypkonvertierung –Bei Login neue Session-ID generieren –Session-Daten in Datenbank speichern –Anzeige von Fehlermeldungen abschalten und stattdessen Logging mit niedrigem Loglevel in Datei aktvieren

© EUROSEC25 Anhang

© EUROSEC26 Warum dieser Vortrag von uns? - Unsere Erfahrung: mehrere Personenjahre in Forschungsprojekten zur sicheren Softwareentwicklung; derzeit gemeinsam mit Partnern wie SAP, Commerzbank, Universitäten,... zahlreiche Schwachstellenanalysen für Softwarehersteller, nebst intensiver Feedbackzyklen mit den Entwicklern Erstellung von Anforderungs- und Designspezifikationen in mehreren großen Entwicklungsprojekten Erstellung von Guidelines zur sicheren Softwareentwicklung, mit Schwerpunkten Banking & Finance, sowie Webapplikationen Reverse Engineering und Gutachten von Sicherheitsfunktionen und Kryptomechanismen Implementierung von Sicherheitsfunktionen im Auftrag

© EUROSEC27 Abschlussbemerkung die vorliegende Dokumentation wurde von EUROSEC erstellt im Rahmen des secologic Forschungsprojekts, Laufzeit 2005 und 2006, nähere Informationen unter wir bedanken uns beim Bundesministerium für Wirtschaft für die Förderung dieses Projektes Anregungen und Feedback sind jederzeit willkommen, ebenso Anfragen zu Sicherheitsaspekten, die hier nicht behandelt werden konnten.

© EUROSEC28 Copyright Hinweis Diese Folien wurden von EUROSEC erstellt und dienen der Durchführung von Schulungen oder Seminaren zum Thema Sichere Anwendungsentwicklung, mit Fokus Webapplikationen. Wir haben diese Folien veröffentlicht, um die Entwicklung besserer Softwareprodukte zu unterstützen. Die Folien dürfen gerne von Ihnen für eigene Zwecke im eigenen Unternehmen verwendet werden, unter Beibehaltung eines Herkunfts- Hinweises auf EUROSEC. Eine kommerzielle Verwertung, insbesondere durch Schulungs- oder Beratungsunternehmen, wie beispielsweise Verkauf an Dritte oder ähnliches ist jedoch nicht gestattet.