Audit de code PHP - PHP Code Audit - HackFest.ca 2009

3,314 views
3,176 views

Published on

This presentation is biligual (french/english).

Durant un audit sécurité d'une application web, il y a plusieurs phases au travail d'enquête : interview, recensement des vulnérabilités (XSS, injections, dévoilement, etc.) par avec des tests d'intrusion, analyse du code, suivi d'un rapport expliquant les problèmes, des recommandations de renforcement et priorisation des tâches. Toutes ces étapes sont importantes, mais certaines sont plus connues que les autres. Dans cette présentation, nous apprendrons les étapes et les outils pour faire un audit du code d'une application Web. Les techniques présentés peuvent être utilisés en plusieurs langages de programmation, mais plusieurs outils seront axé sur le langage de programmation PHP.

Published in: Technology
1 Comment
0 Likes
Statistics
Notes
  • Thanks for that, it would help me a lot !
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
  • Be the first to like this

No Downloads
Views
Total views
3,314
On SlideShare
0
From Embeds
0
Number of Embeds
21
Actions
Shares
0
Downloads
73
Comments
1
Likes
0
Embeds 0
No embeds

No notes for slide

Audit de code PHP - PHP Code Audit - HackFest.ca 2009

  1. 1. Auditing PHP applications Audit des applications en PHP vendredi 13 novembre 2009 1
  2. 2. Who speak? Qui parle? Philippe Gamache Philippe Gamache Parler Haut, Interagir Parler Haut, Interagir Librement : Librement : Web development, Développement Web, security audit, audit de sécurité, training formations info@ph-il.ca info@ph-il.ca @SecureSymfony @SecureSymfony vendredi 13 novembre 2009 2
  3. 3. Security book Livre de sécurité New 2009 edition Comprehensive review of security system for MySQL, PHP, etc. Published in French Planning translation Nouvelle édition 2009 Bilan complet de la sécurité : système, MySQL, PHP, etc. Édité chez Eyrolles Dédicaces sur demande vendredi 13 novembre 2009 3
  4. 4. Agenda Ordre du jour Workshop Présentation de presentation l’atelier Black box audit Audit boîte noire Source code audit Audit à code ouvert vendredi 13 novembre 2009 4
  5. 5. Why? Pourquoi? Confidence does not La confiance n'e xclut pas exclude control™ le contrôle™ To validate external Pour valider un travail work externe Pour valider un travail To validate internal interne work Pour faire le point Round-up Pour avoir un regard For an external externe perspective Aussi souvent que As often as possible possible vendredi 13 novembre 2009 5
  6. 6. Full audit synopsis Synopsis d’un audit Identification of the Identification des audit goals objectifs d'audit Interview with the Entretien avec les development teams équipes de développement Black box testing Test boîte noire Open Code audit Audit de code Report vendredi 13 novembre 2009 6
  7. 7. Identification of the audit goals Identification des objectifs d’audit Audit scope Étendue de l'audit Security Sécurité Performance Performance Code quality Qualité du code vendredi 13 novembre 2009 7
  8. 8. Inter view with the development teams Entretien avec les équipes de développement Check if development Vérifiez si l’équipe de teams knows what to développement sait ce secure qu’il faut sécurisé Have the design Demandez d’expliquer la explained first conception Have them explains their Demandez d’expliquer approach leur approche Check what they say Vérifiez ce qu'ils Check what they don’t disent say Vérifiez ce qu'ils ne disent pas vendredi 13 novembre 2009 8
  9. 9. The shy version La version timide We know there are Nous savons qu’il y a security problems des problèmes de sécurité : but we have no time to secure them mais nous n'avons pas le temps de les this app has been sécuriser written years ago ce logiciel a été écrit we can’t keep up il y a quelques années with the threats nous ne pouvons pas suivre les menaces vendredi 13 novembre 2009 9
  10. 10. The strong version La version forte We have secured the Nous avons sécurisé application l'application Nous utilisons le We use SSL and protocole SSL et la crypto cryptographie All content is Tout le contenu est validated and filtered validé et filtré Nous ne faisons We don’t do any aucune inclusion dynamical include dynamique Our frameworks Nos cadres doesn’t allow this d’applications sont sécurisées vendredi 13 novembre 2009 10
  11. 11. Black box testing Test boîte noire Easy to set up Facile de mise en place Take into account the Prendre en compte le context of the contexte de la application demande Often spectacular Souvent spectaculaires Generally shallow Généralement peu profondes vendredi 13 novembre 2009 11
  12. 12. Black box testing Test boîte noire Finding informations Recherche Look for d’informations vulnerabilities Rechercher les Automatic vulnérabilités scanners Scanneurs By hand automatiques Fuzzing À la main Scenarios Fuzzing Strikes Scénarios Attaquer vendredi 13 novembre 2009 12
  13. 13. Black box testing Test boîte noire Usual directories Répertoires habituels includes, include, inc, com, classes, lib, library admin, adm, administrator, administrateur tmp, TMP, ext, var data, db, conf, config, configuration uploads, install vendredi 13 novembre 2009 13
  14. 14. Black box testing Test boîte noire Typical files Fichiers typiques .phps, .inc, .class .phps, .inc, .class xml, ini, yaml, cfg xml, ini, yaml, cfg .tar, .gz, .zip, .rar, .tar, .gz, .zip, .rar, .bz2 .bz2 Apache Alias : / Apache Alias : / icons/ icons/ robots.txt robots.txt vendredi 13 novembre 2009 14
  15. 15. Open Code audit Audit de code Look into the PHP code Rechercher dans le code PHP Search for hidden problems Rechercher les problèmes cachés Usually less spectacular than Habituellement, moins black box spectaculaire que les tests boîte noire Easy to loose focus Facile de perdre sa Tempting to audit concentration everything Tentant de tout vérifier vendredi 13 novembre 2009 15
  16. 16. Approch Approche What to search for? Que rechercher? What are the entry Quels sont les points points? d'e ntrée? What are the exit Quels sont les points de points? sortie? Open-mindedness and Ouverture d’esprit et discovery découverte How can they be Comment peuvent-ils exploited être exploités Or protected ? Ou protégés? vendredi 13 novembre 2009 16
  17. 17. Assessing the code Évaluer le code One liners En une ligne One line of code is Une ligne de code est sufficiently to be bad suffisamment pour être Even though mauvais you must follow the Malgré tous code vous devez suivre le code for ward (for input) vers l’avant (entrées) in reverse (for sens inverse (sorties) output) <?php $action = $_POST['action']; $query_string = "action=$action"; $link = "index.php?$query_string"; ?> <a href="<?php echo $link; ?>"> Click Here </a> vendredi 13 novembre 2009 17
  18. 18. What to search for? Que rechercher? Injections Injections PHP PHP SQL SQL HTML/JavaScript HTML/JavaScript system système vendredi 13 novembre 2009 18
  19. 19. Tools Outils Your eyes Vos yeux Text editors Éditeurs de texte grep grep Fast, available, Rapide, disponible, convenient pratique Tokenizer Tokenizer Semantic, accurate Sémantique, précis vendredi 13 novembre 2009 19
  20. 20. 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] => ( [1] => Array [4] => " [8] => " ( [5] => Array [9] => ) [0] => PHP token ( [10] => ; [1] => PHP code [0] => 314 [2] => Script line [1] => hello ) [2] => 1 [2] => " ) vendredi 13 novembre 2009 20
  21. 21. PHP injections Injections PHP dynamical inclusion Inclusions dynamiques d'inclusion include, require and *_once include, require and *_once back ticks (`) ` eval eval vendredi 13 novembre 2009 21
  22. 22. Input Entrées HTML Forms: Formulaire HTML: form form input input $_GET $_GET $_POST $_POST $_REQUEST $_REQUEST vendredi 13 novembre 2009 22
  23. 23. Input Entrées Databases: Bases de données: mysql_query() mysql_query() SELECT SELECT HTTP Headers: Entête HTTP: $_COOKIE $_COOKIE $_SERVER $_SERVER vendredi 13 novembre 2009 23
  24. 24. Input Entrées register_globals strikes register_globals contre- back attaque Foreach and $$ Foreach and $$ extract extract import_request_var import_request_var $GLOBALS $GLOBALS parse_str parse_str (ini_get (ini_get (‘register_globals’)) (‘register_globals’)) vendredi 13 novembre 2009 24
  25. 25. Output Sorties Client: Client: echo echo print print <?= <?= die die print_r print_r var_dump var_dump vendredi 13 novembre 2009 25
  26. 26. Output Sorties Databases: Bases de données: mysql_query() mysql_query() mysqli_multi_query mysqli_multi_query update, delete, update, delete, insert insert Headers En-têtes header() header() vendredi 13 novembre 2009 26
  27. 27. Output Sorties System: Système: exec() exec() passthru() passthru() system() system() vendredi 13 novembre 2009 27
  28. 28. Gotchas Pièges Trust of HTTP Headers: Confiance des en-têtes HTTP : Referer Referer Trust of $_SERVER: Confiance de $_SERVER $_SERVER : ['PHP_SELF'] $_SERVER ['PHP_SELF'] Trust of Client-Side Restrictions: Confiance des restrictions clients: maxlength maxlength vendredi 13 novembre 2009 28
  29. 29. Questions? info@ph-il.ca http://www.ph-il.ca http://www.ph-il.ca/en/ conferences http://www.ph-il.ca/fr/ conferences vendredi 13 novembre 2009 29
  30. 30. vendredi 13 novembre 2009 30
  31. 31. vendredi 13 novembre 2009 31

×