SlideShare une entreprise Scribd logo
1  sur  55
Télécharger pour lire hors ligne
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
                         Vérifier la sécurité de son code




jeudi 11 novembre 2010
Qui parle?

                         Damien Seguy
                         Verbicruciste
                         Alter Way Consulting
                         L’expertise à coeur ouvert
                         damien.seguy@alterway.fr



jeudi 11 novembre 2010
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
                         Matrice de sécurité
                         Liste des détails des points de sécurité
                         Références



jeudi 11 novembre 2010
Référentiel sécurité

                         Liste des risques
                           Destruction, modification, lecture
                           DOS, détournement, image
                         Liste des vecteurs
                           XSS, CSRF, injections, remplacement



jeudi 11 novembre 2010
Matrice de sécurité
                                   DOS   Destruction   Image


                          XSS                           X


                         CSRF       X        X          X


                         headers    X                   X



jeudi 11 novembre 2010
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éthode


jeudi 11 novembre 2010
Références

                         OWASP             ESSRII

                         PCI               FISMA

                         HIPAA             BASELII

                         ISO-27002         SOX




jeudi 11 novembre 2010
TOP 10 OWASP

                         Injections                  Configuration

                         XSS                         Stockage chiffré

                         Session et identification   Restriction d’URL

                         Accès direct aux objets     Couche de transport

                         CSRF                        Redirections




jeudi 11 novembre 2010
TOP 10 OWASP

                         Injections                  Configuration

                         XSS                         Stockage chiffré

                         Session et identification   Restriction d’URL

                         Accès direct aux objets     Couche de transport

                         CSRF                        Redirections




jeudi 11 novembre 2010
PIMCORE

                         CMS

                         PHP, MySQL

                         Zend Framework

                         Meilleur Projet OS Packt

                         http://www.pimcore.org/




jeudi 11 novembre 2010
Méthode

                         Prendre un point OWASP
                         Trouver le point d’entrée
                         Fouiller le code source
                         Valider manuellement le point



jeudi 11 novembre 2010
Injections




jeudi 11 novembre 2010
Injections
                         Points d’entrées SQL
                            mysql_query, pdo->query
                            query, execute, fetchAll, delete,
                            update, select
                         Injection de variables
                            getParams, getParam, $_GET/POST


jeudi 11 novembre 2010
Recherche
                         Grep
                           Rapide, efficace
                           Trouve trop
                         Tokenizer
                           PHP, sémantique
                           Implique le tri et la reconstruction


jeudi 11 novembre 2010
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
$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
$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
Bilan

                         Pas de protections au niveau des
                         requêtes SQL
                         Transmission directe depuis le
                         contrôleur au modèle
                         Utilisation de valeurs sans contrôle



jeudi 11 novembre 2010
Bilan

                         Pas de protections au niveau des
                         requêtes SQL
                         Transmission directe depuis le
                         contrôleur au modèle
                         Utilisation de valeurs sans contrôle



jeudi 11 novembre 2010
Sessions




jeudi 11 novembre 2010
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 Web


jeudi 11 novembre 2010
Bilan


                         Utilisation standard des sessions PHP
                         Pas de mécanisme spécifique d’arrimage




jeudi 11 novembre 2010
Bilan


                         Utilisation standard des sessions PHP
                         Pas de mécanisme spécifique d’arrimage




jeudi 11 novembre 2010
Redirections




jeudi 11 novembre 2010
Redirections


                         Redirections mal validée
                         Méthodes redirect ou _redirect
                         Idéalement, interne au site, et fixe




jeudi 11 novembre 2010
Points d’entrée

              $this->_redirect("/admin/");
              $this->_redirect("/admin/login/");

              $this->_redirect("/admin/login/
              ?auth_failed=true&inactive=".
              $userInactive);




jeudi 11 novembre 2010
Bilan


                         Validation systématique
                         Bonne discipline




jeudi 11 novembre 2010
Bilan


                         Validation systématique
                         Bonne discipline




jeudi 11 novembre 2010
Accès direct aux objets




jeudi 11 novembre 2010
Accès direct aux objets




jeudi 11 novembre 2010
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
Par fois, c’est drôle



                         http://www.decathlon.fr/
                         surtout-n-allez-pas-a-l-afup-
                         id_8152082.html


jeudi 11 novembre 2010
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
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 session




jeudi 11 novembre 2010
Bilan



                         Accès direct aux objets




jeudi 11 novembre 2010
Bilan



                         Accès direct aux objets




jeudi 11 novembre 2010
Accès aux URL


                         Les URL doivent bien porter des
                         vérifications d’accès (type ACL)




jeudi 11 novembre 2010
<?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
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::init



jeudi 11 novembre 2010
Bilan


                         Pas de protection particulière
                         Évite les outils ZF




jeudi 11 novembre 2010
Bilan


                         Pas de protection particulière
                         Évite les outils ZF




jeudi 11 novembre 2010
CSRF




jeudi 11 novembre 2010
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 facilement


jeudi 11 novembre 2010
Bilan


                         Pas de protection particulière
                         Évite les outils ZF




jeudi 11 novembre 2010
Bilan


                         Pas de protection particulière
                         Évite les outils ZF




jeudi 11 novembre 2010
XSS




jeudi 11 novembre 2010
XSS

                         Injection de code HTML/Javascript
                         Etudier les Vues
                           Etudier les contrôleurs
                         Grosse partie Javascript de
                         présentation : protection par encodage



jeudi 11 novembre 2010
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
Bilan

                         Peu de suivi des conventions Zend
                         Framework
                         Des die
                         Utilisation intensive de javascript
                         Difficile à auditer



jeudi 11 novembre 2010
Bilan

                         Peu de suivi des conventions Zend
                         Framework
                         Des die
                         Utilisation intensive de javascript
                         Difficile à auditer



jeudi 11 novembre 2010
Injections        CSRF


                         XSS         URL


                    Sessions      Redirections


                         Accès
                         direct


jeudi 11 novembre 2010
Récapitulatif

                         Rédigez un référentiel
                         Convertissez-le en code à éviter /
                         recommander
                         Vérifiez le vous-même




jeudi 11 novembre 2010
Merci
jeudi 11 novembre 2010

Contenu connexe

En vedette

A quoi va ressmbler le projet spo wordpress
A quoi va ressmbler le projet spo wordpressA quoi va ressmbler le projet spo wordpress
A quoi va ressmbler le projet spo wordpressaureliegarrigues
 
SG Associations (Tunisia)
SG Associations (Tunisia)SG Associations (Tunisia)
SG Associations (Tunisia)CITIZEN ACT
 
Location auvergne ski & nature
Location auvergne    ski & natureLocation auvergne    ski & nature
Location auvergne ski & natureKarine Le Bris
 
Equipo 1 planificador aamtic 2 retro 24 nov
Equipo 1  planificador aamtic  2 retro 24 novEquipo 1  planificador aamtic  2 retro 24 nov
Equipo 1 planificador aamtic 2 retro 24 novGerman Gutierrez
 
Aperçu de la présentation de la journée de stage pratique
Aperçu de la présentation de la journée de stage pratiqueAperçu de la présentation de la journée de stage pratique
Aperçu de la présentation de la journée de stage pratiqueFormationMixPros
 
F:\manos a la_masa
F:\manos a la_masaF:\manos a la_masa
F:\manos a la_masapamela brum
 
Equipo 1 planificador aamtic 2 retro 24 nov
Equipo 1  planificador aamtic  2 retro 24 novEquipo 1  planificador aamtic  2 retro 24 nov
Equipo 1 planificador aamtic 2 retro 24 novGerman Gutierrez
 
Winter ed’ a&d
Winter ed’ a&dWinter ed’ a&d
Winter ed’ a&dthermador
 
La tramitación parlamentaria del proyecto de ley por la que se modifica y act...
La tramitación parlamentaria del proyecto de ley por la que se modifica y act...La tramitación parlamentaria del proyecto de ley por la que se modifica y act...
La tramitación parlamentaria del proyecto de ley por la que se modifica y act...Universidad Autónoma de Barcelona
 
Los ficheros de internos de especial seguimiento. análisis de la normativa re...
Los ficheros de internos de especial seguimiento. análisis de la normativa re...Los ficheros de internos de especial seguimiento. análisis de la normativa re...
Los ficheros de internos de especial seguimiento. análisis de la normativa re...Asociación Lazos Pro Solidariedade
 

En vedette (18)

A quoi va ressmbler le projet spo wordpress
A quoi va ressmbler le projet spo wordpressA quoi va ressmbler le projet spo wordpress
A quoi va ressmbler le projet spo wordpress
 
SG Associations (Tunisia)
SG Associations (Tunisia)SG Associations (Tunisia)
SG Associations (Tunisia)
 
Yafa presentation
Yafa presentationYafa presentation
Yafa presentation
 
test
test test
test
 
Informe vih y discapacidad
Informe vih y discapacidadInforme vih y discapacidad
Informe vih y discapacidad
 
Location auvergne ski & nature
Location auvergne    ski & natureLocation auvergne    ski & nature
Location auvergne ski & nature
 
Equipo 1 planificador aamtic 2 retro 24 nov
Equipo 1  planificador aamtic  2 retro 24 novEquipo 1  planificador aamtic  2 retro 24 nov
Equipo 1 planificador aamtic 2 retro 24 nov
 
Aperçu de la présentation de la journée de stage pratique
Aperçu de la présentation de la journée de stage pratiqueAperçu de la présentation de la journée de stage pratique
Aperçu de la présentation de la journée de stage pratique
 
F:\manos a la_masa
F:\manos a la_masaF:\manos a la_masa
F:\manos a la_masa
 
Spot Extrema Pobreza
Spot Extrema PobrezaSpot Extrema Pobreza
Spot Extrema Pobreza
 
Equipo 1 planificador aamtic 2 retro 24 nov
Equipo 1  planificador aamtic  2 retro 24 novEquipo 1  planificador aamtic  2 retro 24 nov
Equipo 1 planificador aamtic 2 retro 24 nov
 
Interaction webinair google_panda
Interaction webinair google_pandaInteraction webinair google_panda
Interaction webinair google_panda
 
Livret synthese barometre diversite 2015
Livret synthese barometre diversite 2015Livret synthese barometre diversite 2015
Livret synthese barometre diversite 2015
 
Unidad didáctica integrada
Unidad didáctica integradaUnidad didáctica integrada
Unidad didáctica integrada
 
Winter ed’ a&d
Winter ed’ a&dWinter ed’ a&d
Winter ed’ a&d
 
La tramitación parlamentaria del proyecto de ley por la que se modifica y act...
La tramitación parlamentaria del proyecto de ley por la que se modifica y act...La tramitación parlamentaria del proyecto de ley por la que se modifica y act...
La tramitación parlamentaria del proyecto de ley por la que se modifica y act...
 
Prototipo victor luzardo
Prototipo victor luzardoPrototipo victor luzardo
Prototipo victor luzardo
 
Los ficheros de internos de especial seguimiento. análisis de la normativa re...
Los ficheros de internos de especial seguimiento. análisis de la normativa re...Los ficheros de internos de especial seguimiento. análisis de la normativa re...
Los ficheros de internos de especial seguimiento. análisis de la normativa re...
 

Plus de ALTER WAY

Drupagora 2019 : Drupal, accessibilité et RGAA
Drupagora 2019 : Drupal, accessibilité et RGAADrupagora 2019 : Drupal, accessibilité et RGAA
Drupagora 2019 : Drupal, accessibilité et RGAAALTER WAY
 
#sharingLille : L'Open Source pour une société numérique ouverte, transparent...
#sharingLille : L'Open Source pour une société numérique ouverte, transparent...#sharingLille : L'Open Source pour une société numérique ouverte, transparent...
#sharingLille : L'Open Source pour une société numérique ouverte, transparent...ALTER WAY
 
Flyer promotions Alter Way Formation Avril Mai 2015
Flyer promotions Alter Way Formation Avril Mai 2015Flyer promotions Alter Way Formation Avril Mai 2015
Flyer promotions Alter Way Formation Avril Mai 2015ALTER WAY
 
Alter Way's digitalks - Docker : des conteneurs pour tout faire ?
Alter Way's digitalks - Docker  : des conteneurs pour tout faire ? Alter Way's digitalks - Docker  : des conteneurs pour tout faire ?
Alter Way's digitalks - Docker : des conteneurs pour tout faire ? ALTER WAY
 
Alter Way's digitalks - Docker : des conteneurs pour tout faire ?
Alter Way's digitalks - Docker  : des conteneurs pour tout faire ?Alter Way's digitalks - Docker  : des conteneurs pour tout faire ?
Alter Way's digitalks - Docker : des conteneurs pour tout faire ?ALTER WAY
 
Open World Forum 2014 : From ES6 to Javascript 2.0. What use today ? par Jon...
Open World Forum 2014  : From ES6 to Javascript 2.0. What use today ? par Jon...Open World Forum 2014  : From ES6 to Javascript 2.0. What use today ? par Jon...
Open World Forum 2014 : From ES6 to Javascript 2.0. What use today ? par Jon...ALTER WAY
 
Open World Forum 2014 : Guerre des IAAS par Stéphane Vincent
Open World Forum 2014 : Guerre des IAAS par Stéphane Vincent Open World Forum 2014 : Guerre des IAAS par Stéphane Vincent
Open World Forum 2014 : Guerre des IAAS par Stéphane Vincent ALTER WAY
 
Séminaire Big Data Alter Way - Elasticsearch - octobre 2014
Séminaire Big Data Alter Way - Elasticsearch - octobre 2014Séminaire Big Data Alter Way - Elasticsearch - octobre 2014
Séminaire Big Data Alter Way - Elasticsearch - octobre 2014ALTER WAY
 
Meetup Drupal Paris : Connexion Drupal et Elasticsearch
Meetup Drupal Paris : Connexion Drupal et Elasticsearch Meetup Drupal Paris : Connexion Drupal et Elasticsearch
Meetup Drupal Paris : Connexion Drupal et Elasticsearch ALTER WAY
 
Solutions Linux 2014 – Alter Way : Révélations sur les pratiques de la NSA
Solutions Linux 2014 – Alter Way : Révélations sur les pratiques de la NSASolutions Linux 2014 – Alter Way : Révélations sur les pratiques de la NSA
Solutions Linux 2014 – Alter Way : Révélations sur les pratiques de la NSAALTER WAY
 
Solutions Linux 2014 – Alter Way : Industrialisation des développements en Ja...
Solutions Linux 2014 – Alter Way : Industrialisation des développements en Ja...Solutions Linux 2014 – Alter Way : Industrialisation des développements en Ja...
Solutions Linux 2014 – Alter Way : Industrialisation des développements en Ja...ALTER WAY
 
Solutions Linux 2014 - Alter Way : Évolutions des back offices des CMS/CMF
Solutions Linux 2014 - Alter Way : Évolutions des back offices des CMS/CMF Solutions Linux 2014 - Alter Way : Évolutions des back offices des CMS/CMF
Solutions Linux 2014 - Alter Way : Évolutions des back offices des CMS/CMF ALTER WAY
 
Elasticsearch : petit déjeuner du 13 mars 2014
Elasticsearch : petit déjeuner du 13 mars 2014Elasticsearch : petit déjeuner du 13 mars 2014
Elasticsearch : petit déjeuner du 13 mars 2014ALTER WAY
 
Alter way-wordcamp-paris-2014
Alter way-wordcamp-paris-2014Alter way-wordcamp-paris-2014
Alter way-wordcamp-paris-2014ALTER WAY
 
Présentation Drupal - Global Training Days
Présentation Drupal - Global Training DaysPrésentation Drupal - Global Training Days
Présentation Drupal - Global Training DaysALTER WAY
 
OpenStack havana tour d'horizon
OpenStack havana tour d'horizonOpenStack havana tour d'horizon
OpenStack havana tour d'horizonALTER WAY
 
H2O, le Cloud par Alter Way
H2O, le Cloud par Alter WayH2O, le Cloud par Alter Way
H2O, le Cloud par Alter WayALTER WAY
 
Industrialisez vos projets Php
Industrialisez vos projets Php Industrialisez vos projets Php
Industrialisez vos projets Php ALTER WAY
 
Reprise sur incident , par Jean Marc Fontaine
Reprise sur incident , par Jean Marc FontaineReprise sur incident , par Jean Marc Fontaine
Reprise sur incident , par Jean Marc FontaineALTER WAY
 
Organiser efficacement son depot de code par Jean Marc Fontaine
Organiser efficacement son depot de code par Jean Marc FontaineOrganiser efficacement son depot de code par Jean Marc Fontaine
Organiser efficacement son depot de code par Jean Marc FontaineALTER WAY
 

Plus de ALTER WAY (20)

Drupagora 2019 : Drupal, accessibilité et RGAA
Drupagora 2019 : Drupal, accessibilité et RGAADrupagora 2019 : Drupal, accessibilité et RGAA
Drupagora 2019 : Drupal, accessibilité et RGAA
 
#sharingLille : L'Open Source pour une société numérique ouverte, transparent...
#sharingLille : L'Open Source pour une société numérique ouverte, transparent...#sharingLille : L'Open Source pour une société numérique ouverte, transparent...
#sharingLille : L'Open Source pour une société numérique ouverte, transparent...
 
Flyer promotions Alter Way Formation Avril Mai 2015
Flyer promotions Alter Way Formation Avril Mai 2015Flyer promotions Alter Way Formation Avril Mai 2015
Flyer promotions Alter Way Formation Avril Mai 2015
 
Alter Way's digitalks - Docker : des conteneurs pour tout faire ?
Alter Way's digitalks - Docker  : des conteneurs pour tout faire ? Alter Way's digitalks - Docker  : des conteneurs pour tout faire ?
Alter Way's digitalks - Docker : des conteneurs pour tout faire ?
 
Alter Way's digitalks - Docker : des conteneurs pour tout faire ?
Alter Way's digitalks - Docker  : des conteneurs pour tout faire ?Alter Way's digitalks - Docker  : des conteneurs pour tout faire ?
Alter Way's digitalks - Docker : des conteneurs pour tout faire ?
 
Open World Forum 2014 : From ES6 to Javascript 2.0. What use today ? par Jon...
Open World Forum 2014  : From ES6 to Javascript 2.0. What use today ? par Jon...Open World Forum 2014  : From ES6 to Javascript 2.0. What use today ? par Jon...
Open World Forum 2014 : From ES6 to Javascript 2.0. What use today ? par Jon...
 
Open World Forum 2014 : Guerre des IAAS par Stéphane Vincent
Open World Forum 2014 : Guerre des IAAS par Stéphane Vincent Open World Forum 2014 : Guerre des IAAS par Stéphane Vincent
Open World Forum 2014 : Guerre des IAAS par Stéphane Vincent
 
Séminaire Big Data Alter Way - Elasticsearch - octobre 2014
Séminaire Big Data Alter Way - Elasticsearch - octobre 2014Séminaire Big Data Alter Way - Elasticsearch - octobre 2014
Séminaire Big Data Alter Way - Elasticsearch - octobre 2014
 
Meetup Drupal Paris : Connexion Drupal et Elasticsearch
Meetup Drupal Paris : Connexion Drupal et Elasticsearch Meetup Drupal Paris : Connexion Drupal et Elasticsearch
Meetup Drupal Paris : Connexion Drupal et Elasticsearch
 
Solutions Linux 2014 – Alter Way : Révélations sur les pratiques de la NSA
Solutions Linux 2014 – Alter Way : Révélations sur les pratiques de la NSASolutions Linux 2014 – Alter Way : Révélations sur les pratiques de la NSA
Solutions Linux 2014 – Alter Way : Révélations sur les pratiques de la NSA
 
Solutions Linux 2014 – Alter Way : Industrialisation des développements en Ja...
Solutions Linux 2014 – Alter Way : Industrialisation des développements en Ja...Solutions Linux 2014 – Alter Way : Industrialisation des développements en Ja...
Solutions Linux 2014 – Alter Way : Industrialisation des développements en Ja...
 
Solutions Linux 2014 - Alter Way : Évolutions des back offices des CMS/CMF
Solutions Linux 2014 - Alter Way : Évolutions des back offices des CMS/CMF Solutions Linux 2014 - Alter Way : Évolutions des back offices des CMS/CMF
Solutions Linux 2014 - Alter Way : Évolutions des back offices des CMS/CMF
 
Elasticsearch : petit déjeuner du 13 mars 2014
Elasticsearch : petit déjeuner du 13 mars 2014Elasticsearch : petit déjeuner du 13 mars 2014
Elasticsearch : petit déjeuner du 13 mars 2014
 
Alter way-wordcamp-paris-2014
Alter way-wordcamp-paris-2014Alter way-wordcamp-paris-2014
Alter way-wordcamp-paris-2014
 
Présentation Drupal - Global Training Days
Présentation Drupal - Global Training DaysPrésentation Drupal - Global Training Days
Présentation Drupal - Global Training Days
 
OpenStack havana tour d'horizon
OpenStack havana tour d'horizonOpenStack havana tour d'horizon
OpenStack havana tour d'horizon
 
H2O, le Cloud par Alter Way
H2O, le Cloud par Alter WayH2O, le Cloud par Alter Way
H2O, le Cloud par Alter Way
 
Industrialisez vos projets Php
Industrialisez vos projets Php Industrialisez vos projets Php
Industrialisez vos projets Php
 
Reprise sur incident , par Jean Marc Fontaine
Reprise sur incident , par Jean Marc FontaineReprise sur incident , par Jean Marc Fontaine
Reprise sur incident , par Jean Marc Fontaine
 
Organiser efficacement son depot de code par Jean Marc Fontaine
Organiser efficacement son depot de code par Jean Marc FontaineOrganiser efficacement son depot de code par Jean Marc Fontaine
Organiser efficacement son depot de code par Jean Marc Fontaine
 

Le terrible audit de sécurité

  • 1. TAS Le Terrible Audit de Sécurité jeudi 11 novembre 2010
  • 2. Ordre du jour Identifier les objectifs de sécurité Préparer un référentiel Vérifier la sécurité de son code jeudi 11 novembre 2010
  • 3. Qui parle? Damien Seguy Verbicruciste Alter Way Consulting L’expertise à coeur ouvert damien.seguy@alterway.fr jeudi 11 novembre 2010
  • 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érences jeudi 11 novembre 2010
  • 6. Référentiel sécurité Liste des risques Destruction, modification, lecture DOS, détournement, image Liste des vecteurs XSS, CSRF, injections, remplacement jeudi 11 novembre 2010
  • 7. Matrice de sécurité DOS Destruction Image XSS X CSRF X X X headers X X jeudi 11 novembre 2010
  • 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éthode jeudi 11 novembre 2010
  • 9. Références OWASP ESSRII PCI FISMA HIPAA BASELII ISO-27002 SOX jeudi 11 novembre 2010
  • 10. TOP 10 OWASP Injections Configuration XSS Stockage chiffré Session et identification Restriction d’URL Accès direct aux objets Couche de transport CSRF Redirections jeudi 11 novembre 2010
  • 11. TOP 10 OWASP Injections Configuration XSS Stockage chiffré Session et identification Restriction d’URL Accès direct aux objets Couche de transport CSRF Redirections jeudi 11 novembre 2010
  • 12. PIMCORE CMS PHP, MySQL Zend Framework Meilleur Projet OS Packt http://www.pimcore.org/ jeudi 11 novembre 2010
  • 13. Méthode Prendre un point OWASP Trouver le point d’entrée Fouiller le code source Valider manuellement le point jeudi 11 novembre 2010
  • 15. Injections Points d’entrées SQL mysql_query, pdo->query query, execute, fetchAll, delete, update, select Injection de variables getParams, getParam, $_GET/POST jeudi 11 novembre 2010
  • 16. Recherche Grep Rapide, efficace Trouve trop Tokenizer PHP, sémantique Implique le tri et la reconstruction jeudi 11 novembre 2010
  • 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. $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. $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. Bilan Pas de protections au niveau des requêtes SQL Transmission directe depuis le contrôleur au modèle Utilisation de valeurs sans contrôle jeudi 11 novembre 2010
  • 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ôle jeudi 11 novembre 2010
  • 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 Web jeudi 11 novembre 2010
  • 24. Bilan Utilisation standard des sessions PHP Pas de mécanisme spécifique d’arrimage jeudi 11 novembre 2010
  • 25. Bilan Utilisation standard des sessions PHP Pas de mécanisme spécifique d’arrimage jeudi 11 novembre 2010
  • 27. Redirections Redirections mal validée Méthodes redirect ou _redirect Idéalement, interne au site, et fixe jeudi 11 novembre 2010
  • 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. Bilan Validation systématique Bonne discipline jeudi 11 novembre 2010
  • 30. Bilan Validation systématique Bonne discipline jeudi 11 novembre 2010
  • 31. Accès direct aux objets jeudi 11 novembre 2010
  • 32. Accès direct aux objets jeudi 11 novembre 2010
  • 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. Par fois, c’est drôle http://www.decathlon.fr/ surtout-n-allez-pas-a-l-afup- id_8152082.html jeudi 11 novembre 2010
  • 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. 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 session jeudi 11 novembre 2010
  • 37. Bilan Accès direct aux objets jeudi 11 novembre 2010
  • 38. Bilan Accès direct aux objets jeudi 11 novembre 2010
  • 39. Accès aux URL Les URL doivent bien porter des vérifications d’accès (type ACL) jeudi 11 novembre 2010
  • 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. 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::init jeudi 11 novembre 2010
  • 42. Bilan Pas de protection particulière Évite les outils ZF jeudi 11 novembre 2010
  • 43. Bilan Pas de protection particulière Évite les outils ZF jeudi 11 novembre 2010
  • 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 facilement jeudi 11 novembre 2010
  • 46. Bilan Pas de protection particulière Évite les outils ZF jeudi 11 novembre 2010
  • 47. Bilan Pas de protection particulière Évite les outils ZF jeudi 11 novembre 2010
  • 49. XSS Injection de code HTML/Javascript Etudier les Vues Etudier les contrôleurs Grosse partie Javascript de présentation : protection par encodage jeudi 11 novembre 2010
  • 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. Bilan Peu de suivi des conventions Zend Framework Des die Utilisation intensive de javascript Difficile à auditer jeudi 11 novembre 2010
  • 52. Bilan Peu de suivi des conventions Zend Framework Des die Utilisation intensive de javascript Difficile à auditer jeudi 11 novembre 2010
  • 53. Injections CSRF XSS URL Sessions Redirections Accès direct jeudi 11 novembre 2010
  • 54. Récapitulatif Rédigez un référentiel Convertissez-le en code à éviter / recommander Vérifiez le vous-même jeudi 11 novembre 2010