• Share
  • Email
  • Embed
  • Like
  • Save
  • Private Content
Audits php
 

Audits php

on

  • 1,387 views

Session sur les audits PHP, donnée dans le cadre des RMLL 2010.

Session sur les audits PHP, donnée dans le cadre des RMLL 2010.

Statistics

Views

Total Views
1,387
Views on SlideShare
1,382
Embed Views
5

Actions

Likes
1
Downloads
22
Comments
0

1 Embed 5

http://laposte-oa.demo.alterway.fr 5

Accessibility

Categories

Upload Details

Uploaded via as Apple Keynote

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />

Audits php Audits php Presentation Transcript

  • Audits PHP Faire le point sur son code<script>alert(‘XSS’)</s Bordeaux, France, 6 juillet 2010
  • Agenda Faire un audit PHP Etudier le code PHP S’organiser pour améliorer la qualité du code
  • Intervenant Damien Seguy Eleveur d’éléPHPants Expert LAMP chez Alter Way damien.seguy@alterway.fr
  • No, we won’t take question
  • 3 types Audit de sécurité Audit de performances Audit de qualité de code
  • Audit de code PHP Entrevue avec les développeurs : 1 jour Analyse boîte noire : 1 jour Analyse à code ouvert : 2 jours Rapport et revue : 1 jour
  • Entrevue des développeurs Qui : se présenter Quoi : que fait cette application? Comment : comment est organisé le code?
  • Que rechercher? Ce qui est dit Trop précis, trop général Ce qui n’est pas dit Les omissions Ne pas hésiter à faire répéter Reposer la question sous une autre forme
  • Analyse boîte noire Test depuis l’extérieur Inclus l’application dans son ensemble Inclus l’environnement : moteurs de recherche, Résultats spectaculaires AUTOMATISEZ! Outils : skipfish, rats, nikto, Wapiti, PHP
  • Code ouvert Quels sont les points d’entrée? Sont-ils accessibles? Protégés? Comment exploiter ce problème?
  • Que rechercher? Injections PHP SQL HTML system HTTP
  • Soyez concentrés Il est facile de perdre l’objectif de vue Il est tentant de tout auditer Tout n’est pas bon à rapporter
  • Injections PHP Injections PHP include, require et *_once back ticks ` ` eval(‘’) assert(), preg_replace_callback, preg_replace + /e __autoload, loadLibrary, loadModule...
  • Recherche eval désespérément Deux approches : grep Rapide, universel, facile 853 occurrences Tokenizer PHP Sémantique, précis 37 occurrences Expressions rationnelles...?
  • Tokenizer <?php print ("hello $world! "); ?> [1] => Array ( [6] => Array [0] => 266 ( [1] => print [0] => 309 [2] => 1 [1] => $world ) [2] => 1 ) [2] => Array ( [7] => Array [0] => 370 ( [1] => [0] => 314 [2] => 1 [1] => ! ) [2] => 1 ) [3] => ( [4] => " [8] => " [5] => Array [9] => ) ( [10] => ; [0] => 314 [1] => Array [1] => hello ( [2] => 1 [0] => Token PHP ) [1] => code PHP [2] => Ligne du script ) [2] => "
  • Evals ◦ eval('$retour=$GLOBALS["'.$matches[1].'"];') ◦ Variable variables ◦ eval($contenu_thjipk); ◦ eval($contents_essai); ◦ Le contenu est lu dans une variable, puis exécuté : un include? ◦ eval('$hexdtime = "'.$hexdtime.'";') ◦ Un moyen détourné pour transformer une chaîne en entier ◦ eval('$retour2.= '.var_dump($recept->erreur).';') ◦ Ceci est complètement inutile....
  • Evals ◦ eval('$retour=$GLOBALS["'.$matches[1].'"];') ◦ Variable variables ◦ eval($contenu_thjipk); ◦ eval($contents_essai); ◦ Le contenu est lu dans une variable, puis exécuté : un include? ◦ eval('$hexdtime = "'.$hexdtime.'";') ◦ Un moyen détourné pour transformer une chaîne en entier ◦ eval('$retour2.= '.var_dump($recept->erreur).';') ◦ Ceci est complètement inutile....
  • Evals ◦ eval('$retour=$GLOBALS["'.$matches[1].'"];') ◦ Variable variables ◦ eval($contenu_thjipk); ◦ eval($contents_essai); ◦ Le contenu est lu dans une variable, puis exécuté : un include? ◦ eval('$hexdtime = "'.$hexdtime.'";') ◦ Un moyen détourné pour transformer une chaîne en entier ◦ eval('$retour2.= '.var_dump($recept->erreur).';') ◦ Ceci est complètement inutile....
  • Evals ◦ eval('$retour=$GLOBALS["'.$matches[1].'"];') ◦ Variable variables ◦ eval($contenu_thjipk); ◦ eval($contents_essai); ◦ Le contenu est lu dans une variable, puis exécuté : un include? ◦ eval('$hexdtime = "'.$hexdtime.'";') ◦ Un moyen détourné pour transformer une chaîne en entier ◦ eval('$retour2.= '.var_dump($recept->erreur).';') ◦ Ceci est complètement inutile....
  • Evals ◦ eval('$retour=$GLOBALS["'.$matches[1].'"];') ◦ Variable variables ◦ eval($contenu_thjipk); ◦ eval($contents_essai); ◦ Le contenu est lu dans une variable, puis exécuté : un include? ◦ eval('$hexdtime = "'.$hexdtime.'";') ◦ Un moyen détourné pour transformer une chaîne en entier ◦ eval('$retour2.= '.var_dump($recept->erreur).';') ◦ Ceci est complètement inutile....
  • Vérifier le code Erreur en une ligne Parfois, une seule ligne est suffisante Parfois, non Il faut prendre en compte le contexte Lire le code à l’envers
  • Audit statistiques Extraire un type d’information Relire la liste hors de contexte Sert de point d’entrée pour plus de questions
  • Variables 6883 variables différentes Toutes les variables possibles en une lettre 32 chars : $cache_maxsize_UTF8StringToArray Plus utilisée : $i (2586 fois) $_1904, $samedi, $dummy, $sss, 19 $unknowns 711 variables utilisées une seule fois
  • Rapport Résumé exécutif 3 paragraphes, simples à lire Résumé des problèmes rencontrés Details et explications Annexes
  • Rapport Indice Qualité Correctif Variables courtes Basse Compliqué Trop de méthodes Moyen Moyen Trop de Fort Simple dépendances Inclusions Basse Simple
  • Détails Titre Exemple dans le code, explication Suggestion de corrections Limitations Liste des occurrences Ou un moyen de les trouver
  • Travail d’équipe L’audit intervient toujours après le codage Une fois Si nécessaire Régulièrement Continuement
  • Mantras PHP Listez vos mantra Choisissez les 5 règles les plus importantes Imprimez-le, faites les réciter
  • Audits croisés Faîtes des binômes Chaque développeur doit relire le code de l’autre À la lumière des mantras Processus très léger, agile Capable de passer
  • Audits collaboratifs Groogle (http://groogle.sourceforge.net) Review Board (http://www.review-board.org/) Rietveld http://codereview.appspot.com/ SmartBear (http://www.smartbear.com/)
  • Audit communautaire? Mantra, audits croisés : drive-by auditing Capter les remarques dès que possible Ouvert à tous? Open Source
  • Questions? damien.seguy@alterway.fr