forum php 2007 audit

19
HERVÉ SCHAUER CONSULTANTS HERVÉ SCHAUER CONSULTANTS Cabinet de Consultants en Sécurité Informatique depuis 1989 Cabinet de Consultants en Sécurité Informatique depuis 1989 Spécialisé sur Unix, Windows, TCP/IP et Internet Spécialisé sur Unix, Windows, TCP/IP et Internet FORUM PHP 2007 FORUM PHP 2007 Audit de code, retour Audit de code, retour d'expérience d'expérience Nicolas Collignon Nicolas Collignon Louis Nyffenegger Louis Nyffenegger <[email protected]> <[email protected]>

Upload: walid-mansia

Post on 15-Jan-2016

230 views

Category:

Documents


0 download

DESCRIPTION

audit du code php pour connaitre les performances

TRANSCRIPT

Page 1: Forum PHP 2007 Audit

HERVÉ SCHAUER CONSULTANTSHERVÉ SCHAUER CONSULTANTSCabinet de Consultants en Sécurité Informatique depuis 1989Cabinet de Consultants en Sécurité Informatique depuis 1989Spécialisé sur Unix, Windows, TCP/IP et InternetSpécialisé sur Unix, Windows, TCP/IP et Internet

FORUM PHP 2007FORUM PHP 2007

Audit de code, retour Audit de code, retour d'expérienced'expérience

Nicolas CollignonNicolas Collignon Louis NyffeneggerLouis Nyffenegger<[email protected]> <[email protected]>

Page 2: Forum PHP 2007 Audit

Copyright Hervé Schauer Consultants 2000­2007  ­  Reproduction Interdite22 / 19 / 19

AgendaAgenda

Avant­propos

Gestion du code

Gestion des droits

Gestion des erreursregister_globals

Injection SQL 

Stockage des mots de passe

Erreurs algorithmiques

TOCTOU

Utilisation du php.ini

PHP 6

Conclusion

Page 3: Forum PHP 2007 Audit

Copyright Hervé Schauer Consultants 2000­2007  ­  Reproduction Interdite33 / 19 / 19

Avant­proposAvant­propos

Objectifs de la présentation :

montrer les vulnérabilités récurrentes dans les applications PHP.

retour d'expérience sur des audits de code PHP et des audits en boîte noire d'applications PHP.

PHP : 

langage facile d'accès ;

langage permissif.

Page 4: Forum PHP 2007 Audit

Copyright Hervé Schauer Consultants 2000­2007  ­  Reproduction Interdite44 / 19 / 19

Gestion du codeGestion du code

Fichiers oubliés : phpinfo.php,  .old, .sav, ~, .swp

Fichiers non interprétés par PHP : .inc, .classe, ...

Organisation du code non optimale :

/ Zone publique

/include

/admin

Page 5: Forum PHP 2007 Audit

Copyright Hervé Schauer Consultants 2000­2007  ­  Reproduction Interdite55 / 19 / 19

Gestion du codeGestion du code

/

Zone publique

/include

/admin

/www

Zone avec accès restreint

Meilleure organisation possible : 

Page 6: Forum PHP 2007 Audit

Copyright Hervé Schauer Consultants 2000­2007  ­  Reproduction Interdite66 / 19 / 19

Gestion des droitsGestion des droits

Pages d'administration oubliées et accessibles sans authentification

Problèmes d'autorisation au niveau des profils

mon profil : http://exemples.hsc.fr/php/monprofil.php?id=100

un autre profil : http://exemples.hsc.fr/php/monprofil.php?id=101

ou gestion dans un cookie

Souvent la gestion des droits sur les images/PDF n'est pas réalisée

Page 7: Forum PHP 2007 Audit

Copyright Hervé Schauer Consultants 2000­2007  ­  Reproduction Interdite77 / 19 / 19

Gestion des erreursGestion des erreurs

Une page vérifie les permissions de l'utilisateur et le redirige si l'accès est refusé.

La modification de certains paramètres du formulaire HTML permet de générer des Warning côté serveur PHP

Redirection impossible avec header() : 

Possibilité de contourner l'autorisationWarning: Cannot modify header information ­ headers already sent by (output started at fonctions.php:1337) in includes.php on line 11

Page 8: Forum PHP 2007 Audit

Copyright Hervé Schauer Consultants 2000­2007  ­  Reproduction Interdite88 / 19 / 19

register_globals ... ou pasregister_globals ... ou pas

Lors d'un audit, un consultant en sécurité recommande de désactiver register_globals

Modification du fichier php.ini

L'application ne fonctionne plus

Mise en place d'une rustine

Rustine plus dangereuse que register_globals

Possibilité de surcharger les variables internes PHP $_XYZ ...

foreach($_REQUEST as $key => $vars)$GLOBALS[$key] = $vars;

Page 9: Forum PHP 2007 Audit

Copyright Hervé Schauer Consultants 2000­2007  ­  Reproduction Interdite99 / 19 / 19

Injections SQLInjections SQL

source http://xkcd.com/327/ 

Page 10: Forum PHP 2007 Audit

Copyright Hervé Schauer Consultants 2000­2007  ­  Reproduction Interdite1010 / 19 / 19

Injection SQL : Injection SQL : addslashes/magic_quotesaddslashes/magic_quotes

Souvent seul addslashes ou magic_quotes sont utilisées :

le fameux « ' or 1=1 /* » ne fonctionne plus sur les formulaires d'authentification :)

quelques données sont pourtant oubliés : 

variables filtrées en Javascript ;

champs hidden des formulaires ;

checkbox des formulaires.

Cependant cette protection n'est pas suffisante : 

http://exemples.hsc.fr/php/monprofil.php?id=100 union select 1,2,3, ... /*

Démonstration

Page 11: Forum PHP 2007 Audit

Copyright Hervé Schauer Consultants 2000­2007  ­  Reproduction Interdite1111 / 19 / 19

mysqli_real_escape_stringmysqli_real_escape_string

Bonne méthode d'encodage pour les bases MySQL

Une mauvaise utilisation peut laisser des vulnérabilités :

jeu de caractères (charset) chinois / japonais 

$db­>query("SET CHARACTER SET 'gbk'");   ­> NOK

$db­>set_charset("gbk"); ­> OK 

Page 12: Forum PHP 2007 Audit

Copyright Hervé Schauer Consultants 2000­2007  ­  Reproduction Interdite1212 / 19 / 19

Injection SQL : prepared statementInjection SQL : prepared statement

Faible utilisation en comparaison à Java par exemple

Problème du choix d'un API compatible avec plusieurs serveurs de base de données

Attention aux mauvaises utilisations des SQL prepared statement.

Page 13: Forum PHP 2007 Audit

Copyright Hervé Schauer Consultants 2000­2007  ­  Reproduction Interdite1313 / 19 / 19

Stockage des mots de passeStockage des mots de passe

Il arrive encore de trouver des mots de passe en clair

Souvent, un simple md5 est réalisé :

cassable par force brute : John­The­Ripper ; 

cassable avec des tables précalculées : Rainbowtables.

Il est préférable d'utiliser une graine : 

unique pour tout le site ;

par utilisateur.

Page 14: Forum PHP 2007 Audit

Copyright Hervé Schauer Consultants 2000­2007  ­  Reproduction Interdite1414 / 19 / 19

Erreurs algorithmiquesErreurs algorithmiques

Commande de quantité négative :

Exemple de code vulnérable : 

Si $quantity =  1 et $availableStock = 3 : OK  $quantity = 1

Si $quantity =  3 et $availableStock = 2 : OK  $quantity = 2

Si $quantity = ­1 et $availableStock = 2 : NOK  $quantity = ­1

if($quantity > $availableStock) {$quantity = $availableStock;

}

Livre PHPTOTAL : 5 €

­25 €­125 €Livre MySQL 30 €130 €

Articles :  PxQ :Quantité :Prix :

Page 15: Forum PHP 2007 Audit

Copyright Hervé Schauer Consultants 2000­2007  ­  Reproduction Interdite1515 / 19 / 19

Erreurs algorithmiquesErreurs algorithmiques

Correction afin d'éviter cette vulnérabilité : 

Si $quantity = ­1 et $availableStock = 2 : OK  $quantity = 0

Si $quantity = 1 et $availableStock = ­1 : NOK  $quantity = ­1

if($quantity<0) {        $quantity = 0;}if ($quantity > $availableStock) {

$quantity = $availableStock;}

Page 16: Forum PHP 2007 Audit

Copyright Hervé Schauer Consultants 2000­2007  ­  Reproduction Interdite1616 / 19 / 19

Time Of (Write|Check)/Time Of UseTime Of (Write|Check)/Time Of Use

Gestion de l'image liée à un profil : 

Que se passe­t­il lorsque 2 utilisateurs cherchent à visionner leur profil simultanément  ?

$name = "photo.jpg";$fichier = fopen($name, "w");fwrite($fichier, base64_decode($data));fclose($fichier);

echo '<img src="'.$name.'" alt="photo" />';

Page 17: Forum PHP 2007 Audit

Copyright Hervé Schauer Consultants 2000­2007  ­  Reproduction Interdite1717 / 19 / 19

Le fichier php.iniLe fichier php.ini

Utilisation de la configuration par défaut

Quelques illusions de sécurité : magic_quotes

safe_mode

Possibilités de durcissement : register_globals

allow_url_include et allow_url_fopen

display_errors disable_functions

Page 18: Forum PHP 2007 Audit

Copyright Hervé Schauer Consultants 2000­2007  ­  Reproduction Interdite1818 / 19 / 19

PHP6PHP6

Modification en terme de sécurité : 

suppression register_globals

suppression du safe_mode

suppression magic_quotes_gpc

Avenir de la sécurité des applications PHP : 

prise de conscience des développeurs ?

plus d'applications vulnérables sur internet ?

Page 19: Forum PHP 2007 Audit

Copyright Hervé Schauer Consultants 2000­2007  ­  Reproduction Interdite1919 / 19 / 19

QuestionsQuestions

Questions [email protected]   [email protected]

www.hsc.fr

Lancement du E­learning HSC programmation sécurisée en PHP

Réalisation pratique des Tests d'Intrusion Paris du 18 au 22 février 2008 :

http://www.hsc.fr/services/formations/formations_ti.html.fr