Audits php

1 691 vues

Publié le

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

Publié dans : Technologie
0 commentaire
1 j’aime
Statistiques
Remarques
  • Soyez le premier à commenter

Aucun téléchargement
Vues
Nombre de vues
1 691
Sur SlideShare
0
Issues des intégrations
0
Intégrations
10
Actions
Partages
0
Téléchargements
24
Commentaires
0
J’aime
1
Intégrations 0
Aucune incorporation

Aucune remarque pour cette diapositive































  • Audits php

    1. 1. Audits PHP Faire le point sur son code<script>alert(‘XSS’)</s Bordeaux, France, 6 juillet 2010
    2. 2. Agenda Faire un audit PHP Etudier le code PHP S’organiser pour améliorer la qualité du code
    3. 3. Intervenant Damien Seguy Eleveur d’éléPHPants Expert LAMP chez Alter Way damien.seguy@alterway.fr
    4. 4. No, we won’t take question
    5. 5. 3 types Audit de sécurité Audit de performances Audit de qualité de code
    6. 6. 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
    7. 7. Entrevue des développeurs Qui : se présenter Quoi : que fait cette application? Comment : comment est organisé le code?
    8. 8. 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
    9. 9. 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
    10. 10. Code ouvert Quels sont les points d’entrée? Sont-ils accessibles? Protégés? Comment exploiter ce problème?
    11. 11. Que rechercher? Injections PHP SQL HTML system HTTP
    12. 12. Soyez concentrés Il est facile de perdre l’objectif de vue Il est tentant de tout auditer Tout n’est pas bon à rapporter
    13. 13. Injections PHP Injections PHP include, require et *_once back ticks ` ` eval(‘’) assert(), preg_replace_callback, preg_replace + /e __autoload, loadLibrary, loadModule...
    14. 14. Recherche eval désespérément Deux approches : grep Rapide, universel, facile 853 occurrences Tokenizer PHP Sémantique, précis 37 occurrences Expressions rationnelles...?
    15. 15. 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] => "
    16. 16. 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....
    17. 17. 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....
    18. 18. 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....
    19. 19. 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....
    20. 20. 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....
    21. 21. 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
    22. 22. Audit statistiques Extraire un type d’information Relire la liste hors de contexte Sert de point d’entrée pour plus de questions
    23. 23. 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
    24. 24. Rapport Résumé exécutif 3 paragraphes, simples à lire Résumé des problèmes rencontrés Details et explications Annexes
    25. 25. Rapport Indice Qualité Correctif Variables courtes Basse Compliqué Trop de méthodes Moyen Moyen Trop de Fort Simple dépendances Inclusions Basse Simple
    26. 26. Détails Titre Exemple dans le code, explication Suggestion de corrections Limitations Liste des occurrences Ou un moyen de les trouver
    27. 27. Travail d’équipe L’audit intervient toujours après le codage Une fois Si nécessaire Régulièrement Continuement
    28. 28. Mantras PHP Listez vos mantra Choisissez les 5 règles les plus importantes Imprimez-le, faites les réciter
    29. 29. 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
    30. 30. Audits collaboratifs Groogle (http://groogle.sourceforge.net) Review Board (http://www.review-board.org/) Rietveld http://codereview.appspot.com/ SmartBear (http://www.smartbear.com/)
    31. 31. Audit communautaire? Mantra, audits croisés : drive-by auditing Capter les remarques dès que possible Ouvert à tous? Open Source
    32. 32. Questions? damien.seguy@alterway.fr

    ×