TAS                         Le Terrible Audit de Sécuritéjeudi 11 novembre 2010
Ordre du jour                         Identifier les objectifs de sécurité                         Préparer un référentiel...
Qui parle?                         Damien Seguy                         Verbicruciste                         Alter Way Co...
Référentiel de sécuritéjeudi 11 novembre 2010
Référentiel de sécurité                         Rappels du métier                         Liste des risques et vecteurs   ...
Référentiel sécurité                         Liste des risques                           Destruction, modification, lectur...
Matrice de sécurité                                   DOS   Destruction   Image                          XSS              ...
Points de sécurité                         Nom du point                         Description                         Risque...
Références                         OWASP             ESSRII                         PCI               FISMA               ...
TOP 10 OWASP                         Injections                  Configuration                         XSS                ...
TOP 10 OWASP                         Injections                  Configuration                         XSS                ...
PIMCORE                         CMS                         PHP, MySQL                         Zend Framework             ...
Méthode                         Prendre un point OWASP                         Trouver le point d’entrée                  ...
Injectionsjeudi 11 novembre 2010
Injections                         Points d’entrées SQL                            mysql_query, pdo->query                ...
Recherche                         Grep                           Rapide, efficace                           Trouve trop   ...
Tokenizer            <?php print ("hello $world! "); ?>                                                 [6] => Array      ...
$this->db->fetchAll           ("SHOW COLUMNS FROM documents_permissions")         $this->db->update           ("documents_...
$data = json_decode($this->_getParam         ("data"));         if (!empty($data->id)) {            $nodes[] = $data;     ...
Bilan                         Pas de protections au niveau des                         requêtes SQL                       ...
Bilan                         Pas de protections au niveau des                         requêtes SQL                       ...
Sessionsjeudi 11 novembre 2010
Session et identification                         Utilisation des sessions standards                         Nécessite un ...
Bilan                         Utilisation standard des sessions PHP                         Pas de mécanisme spécifique d’...
Bilan                         Utilisation standard des sessions PHP                         Pas de mécanisme spécifique d’...
Redirectionsjeudi 11 novembre 2010
Redirections                         Redirections mal validée                         Méthodes redirect ou _redirect      ...
Points d’entrée              $this->_redirect("/admin/");              $this->_redirect("/admin/login/");              $th...
Bilan                         Validation systématique                         Bonne disciplinejeudi 11 novembre 2010
Bilan                         Validation systématique                         Bonne disciplinejeudi 11 novembre 2010
Accès direct aux objetsjeudi 11 novembre 2010
Accès direct aux objetsjeudi 11 novembre 2010
Accès direct aux objets                         http://www.elysee.fr/president/les-                         actualites/les...
Par fois, c’est drôle                         http://www.decathlon.fr/                         surtout-n-allez-pas-a-l-afu...
public function deleteAction() {          $success = false;          $document = Document::getById              ($this->_g...
Accès direct aux objets                         Ne jamais exposer ses structures                         internes sur le s...
Bilan                         Accès direct aux objetsjeudi 11 novembre 2010
Bilan                         Accès direct aux objetsjeudi 11 novembre 2010
Accès aux URL                         Les URL doivent bien porter des                         vérifications d’accès (type ...
<?php         class Admin_AssetController           extends Pimcore_Controller_Action_Admin {                         publ...
Accès aux URL                         16 contrôleurs d’administration                         16 dérivation de            ...
Bilan                         Pas de protection particulière                         Évite les outils ZFjeudi 11 novembre ...
Bilan                         Pas de protection particulière                         Évite les outils ZFjeudi 11 novembre ...
CSRFjeudi 11 novembre 2010
CSRF                         Utilisation de Zend_Form et l’anti-csrf ?                            Non                     ...
Bilan                         Pas de protection particulière                         Évite les outils ZFjeudi 11 novembre ...
Bilan                         Pas de protection particulière                         Évite les outils ZFjeudi 11 novembre ...
XSSjeudi 11 novembre 2010
XSS                         Injection de code HTML/Javascript                         Etudier les Vues                    ...
die($document->getPath() .                 $document->getKey());            $this->removeViewRenderer();            $this-...
Bilan                         Peu de suivi des conventions Zend                         Framework                         ...
Bilan                         Peu de suivi des conventions Zend                         Framework                         ...
Injections        CSRF                         XSS         URL                    Sessions      Redirections              ...
Récapitulatif                         Rédigez un référentiel                         Convertissez-le en code à éviter /   ...
Mercijeudi 11 novembre 2010
Prochain SlideShare
Chargement dans…5
×

Le terrible audit de sécurité

1 459 vues

Publié le

Pour rassurer votre hiérarchie et vos utilisateurs que votre code est sécurisé, il y a une recette simple : définir les objectifs de la sécurité, choisir un référentiel de sécurité, comme l'OWASP, décliner les points de sécurité dans le code et donner aux développeurs les moyens de vérifier leur propre code.
Nous déroulerons ensemble tout le chemin pour mettre en place un référentiel de sécurité, et l'appliquer à une application Open Source de manière pratique.

0 commentaire
0 j’aime
Statistiques
Remarques
  • Soyez le premier à commenter

  • Soyez le premier à aimer ceci

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

Aucune remarque pour cette diapositive

Le terrible audit de sécurité

  1. 1. TAS Le Terrible Audit de Sécuritéjeudi 11 novembre 2010
  2. 2. Ordre du jour Identifier les objectifs de sécurité Préparer un référentiel Vérifier la sécurité de son codejeudi 11 novembre 2010
  3. 3. Qui parle? Damien Seguy Verbicruciste Alter Way Consulting L’expertise à coeur ouvert damien.seguy@alterway.frjeudi 11 novembre 2010
  4. 4. Référentiel de sécuritéjeudi 11 novembre 2010
  5. 5. Référentiel de sécurité Rappels du métier Liste des risques et vecteurs Matrice de sécurité Liste des détails des points de sécurité Référencesjeudi 11 novembre 2010
  6. 6. Référentiel sécurité Liste des risques Destruction, modification, lecture DOS, détournement, image Liste des vecteurs XSS, CSRF, injections, remplacementjeudi 11 novembre 2010
  7. 7. Matrice de sécurité DOS Destruction Image XSS X CSRF X X X headers X Xjeudi 11 novembre 2010
  8. 8. Points de sécurité Nom du point Description Risques courus Exemples et anti-exemples Méthode de vérification dans le code : automatique, manuel, méthodejeudi 11 novembre 2010
  9. 9. Références OWASP ESSRII PCI FISMA HIPAA BASELII ISO-27002 SOXjeudi 11 novembre 2010
  10. 10. TOP 10 OWASP Injections Configuration XSS Stockage chiffré Session et identification Restriction d’URL Accès direct aux objets Couche de transport CSRF Redirectionsjeudi 11 novembre 2010
  11. 11. TOP 10 OWASP Injections Configuration XSS Stockage chiffré Session et identification Restriction d’URL Accès direct aux objets Couche de transport CSRF Redirectionsjeudi 11 novembre 2010
  12. 12. PIMCORE CMS PHP, MySQL Zend Framework Meilleur Projet OS Packt http://www.pimcore.org/jeudi 11 novembre 2010
  13. 13. Méthode Prendre un point OWASP Trouver le point d’entrée Fouiller le code source Valider manuellement le pointjeudi 11 novembre 2010
  14. 14. Injectionsjeudi 11 novembre 2010
  15. 15. Injections Points d’entrées SQL mysql_query, pdo->query query, execute, fetchAll, delete, update, select Injection de variables getParams, getParam, $_GET/POSTjeudi 11 novembre 2010
  16. 16. Recherche Grep Rapide, efficace Trouve trop Tokenizer PHP, sémantique Implique le tri et la reconstructionjeudi 11 novembre 2010
  17. 17. Tokenizer <?php print ("hello $world! "); ?> [6] => Array [1] => Array ( ( [0] => 309 [0] => 266 [1] => $world [1] => print [2] => 1 [2] => 1 ) ) [7] => Array [2] => Array ( ( [0] => 314 [0] => 370 [1] => ! [1] => [2] => 1 [2] => 1 ) ) [8] => " [3] => ( [9] => ) [4] => " [10] => ; [5] => Array ( [1] => Array [0] => 314 ( [1] => hello [0] => token PHP [2] => 1 [1] => code PHP ) [2] => ligne ) [2] => "jeudi 11 novembre 2010
  18. 18. $this->db->fetchAll ("SHOW COLUMNS FROM documents_permissions") $this->db->update ("documents_permissions", $data, "id=" . $this->model->getId() . ""); $this->db->insert ("documents_permissions", array()); $this->db->delete ("documents_permissions", "id=" . $this->model->getId()); $this->db->fetchRow ("SELECT * FROM dp WHERE id = ?", $this->model->getId());jeudi 11 novembre 2010
  19. 19. $data = json_decode($this->_getParam ("data")); if (!empty($data->id)) { $nodes[] = $data; } else { $nodes = $data; } //loop through store nodes = documents if (is_array($nodes)) { foreach ($nodes as $node) {jeudi 11 novembre 2010
  20. 20. Bilan Pas de protections au niveau des requêtes SQL Transmission directe depuis le contrôleur au modèle Utilisation de valeurs sans contrôlejeudi 11 novembre 2010
  21. 21. Bilan Pas de protections au niveau des requêtes SQL Transmission directe depuis le contrôleur au modèle Utilisation de valeurs sans contrôlejeudi 11 novembre 2010
  22. 22. Sessionsjeudi 11 novembre 2010
  23. 23. Session et identification Utilisation des sessions standards Nécessite un arrimage plus fort Durée de vie courte recommandée User-Agent, IP, LANGAGE-ACCEPT, token aléatoire à mettre en session + via le Webjeudi 11 novembre 2010
  24. 24. Bilan Utilisation standard des sessions PHP Pas de mécanisme spécifique d’arrimagejeudi 11 novembre 2010
  25. 25. Bilan Utilisation standard des sessions PHP Pas de mécanisme spécifique d’arrimagejeudi 11 novembre 2010
  26. 26. Redirectionsjeudi 11 novembre 2010
  27. 27. Redirections Redirections mal validée Méthodes redirect ou _redirect Idéalement, interne au site, et fixejeudi 11 novembre 2010
  28. 28. Points d’entrée $this->_redirect("/admin/"); $this->_redirect("/admin/login/"); $this->_redirect("/admin/login/ ?auth_failed=true&inactive=". $userInactive);jeudi 11 novembre 2010
  29. 29. Bilan Validation systématique Bonne disciplinejeudi 11 novembre 2010
  30. 30. Bilan Validation systématique Bonne disciplinejeudi 11 novembre 2010
  31. 31. Accès direct aux objetsjeudi 11 novembre 2010
  32. 32. Accès direct aux objetsjeudi 11 novembre 2010
  33. 33. Accès direct aux objets http://www.elysee.fr/president/les- actualites/les-actualites.4.html http://www.decathlon.fr/tee-shirt- manches-longues-id_8152082.html Les identifiants sont des auto_increment...jeudi 11 novembre 2010
  34. 34. Par fois, c’est drôle http://www.decathlon.fr/ surtout-n-allez-pas-a-l-afup- id_8152082.htmljeudi 11 novembre 2010
  35. 35. public function deleteAction() { $success = false; $document = Document::getById ($this->_getParam("id")); $document->getPermissionsForUser ($this->getUser()); if ($document->isAllowed("delete")) { Element_Recyclebin_Item::create ($document, $this->getUser()); } else { Logger::debug //**** } $this->_helper->json(array ("success" => $success)); }jeudi 11 novembre 2010
  36. 36. Accès direct aux objets Ne jamais exposer ses structures internes sur le site Web Faire une traduction, et stocker les vraies valeurs dans la sessionjeudi 11 novembre 2010
  37. 37. Bilan Accès direct aux objetsjeudi 11 novembre 2010
  38. 38. Bilan Accès direct aux objetsjeudi 11 novembre 2010
  39. 39. Accès aux URL Les URL doivent bien porter des vérifications d’accès (type ACL)jeudi 11 novembre 2010
  40. 40. <?php class Admin_AssetController extends Pimcore_Controller_Action_Admin { public function init() { parent::init(); // check permissions $notRestrictedActions = array("get-im if (!in_array($this->_getParam("actio if (!$this->getUser()->isAllowed( $this->_redirect("/admin/logi die(); } } } ?>jeudi 11 novembre 2010
  41. 41. Accès aux URL 16 contrôleurs d’administration 16 dérivation de Pimcore_Controller_Action_Admin 7 utilisations de /admin/login Vérifier l’héritage ET parent::initjeudi 11 novembre 2010
  42. 42. Bilan Pas de protection particulière Évite les outils ZFjeudi 11 novembre 2010
  43. 43. Bilan Pas de protection particulière Évite les outils ZFjeudi 11 novembre 2010
  44. 44. CSRFjeudi 11 novembre 2010
  45. 45. CSRF Utilisation de Zend_Form et l’anti-csrf ? Non T sur /admin/login est Pas de vérification de token Sur deleteAction? Non Pas moyen de surveiller facilementjeudi 11 novembre 2010
  46. 46. Bilan Pas de protection particulière Évite les outils ZFjeudi 11 novembre 2010
  47. 47. Bilan Pas de protection particulière Évite les outils ZFjeudi 11 novembre 2010
  48. 48. XSSjeudi 11 novembre 2010
  49. 49. XSS Injection de code HTML/Javascript Etudier les Vues Etudier les contrôleurs Grosse partie Javascript de présentation : protection par encodagejeudi 11 novembre 2010
  50. 50. die($document->getPath() . $document->getKey()); $this->removeViewRenderer(); $this->_helper->json( array("docTypes" => $docTypes)); echo Zend_Json::encode( array( "error" => "plugin_dir_error" )); readfile(PIMCORE_DOCUMENT_ROOT . $image->getThumbnail($thumbnail));jeudi 11 novembre 2010
  51. 51. Bilan Peu de suivi des conventions Zend Framework Des die Utilisation intensive de javascript Difficile à auditerjeudi 11 novembre 2010
  52. 52. Bilan Peu de suivi des conventions Zend Framework Des die Utilisation intensive de javascript Difficile à auditerjeudi 11 novembre 2010
  53. 53. Injections CSRF XSS URL Sessions Redirections Accès directjeudi 11 novembre 2010
  54. 54. Récapitulatif Rédigez un référentiel Convertissez-le en code à éviter / recommander Vérifiez le vous-mêmejeudi 11 novembre 2010
  55. 55. Mercijeudi 11 novembre 2010

×