SlideShare una empresa de Scribd logo
1 de 28
Descargar para leer sin conexión
SECURISER VOTRE PROJET


     Christophe Villeneuve



        28 février 2013
A l'abordage...


 ✔
     Le fromage, la souris et...
 ✔
     Les techniques
 ✔
     Du PHP
 ✔
     Du Java
 ✔
     Du Web
 ✔
     Du Projet
 ✔
     et...




      nAcademy – 28 Février 2013
Réflexion



Le fromage,
             La souris,
                                 Et...

    nAcademy – 28 Février 2013
Pourquoi ?




         Les hackers sont astucieux
    nAcademy – 28 Février 2013
nAcademy – 28 Février 2013
Notions basics

 ✔
     Rappel des risques (W3C, Spam...)
 ✔
     Front-end sur les entrées (formulaire, url...)
 ✔
     Back-end avec un Framework
 ✔
     La base de données
 ✔
     Tester votre code
 ✔
     Méthodologie




      nAcademy – 28 Février 2013
Les Vulnérabilités reconnues

 ✔
     Insuffisance des tests de sécurité
 ✔
     Configuration par défaut
 ✔
     Pas de cryptage des données sensibles
 ✔
     Pas de mises à jour du système
 ✔
     La sécurité apparaît lors des catastrophes
 ✔
     Surveillance inefficace
 ✔
     Contrôle insuffisant de l'accès par des tiers




      nAcademy – 28 Février 2013
TOP 10 OWASP (Web)


     2007                                                 2010                                                   2013                   Version RC1
✔
     Cross Site Scripting (XSS)                   ✔       Failles d'injection                            ✔      Failles d'injection

✔
     Failles d'injection                          ✔       Cross-Site Scripting (XSS)                     ✔      Violation d'authentification et de Session

✔
     Exécution de Fichier Malicieux               ✔       Violation d'authentification et de Session     ✔      Cross-Site Scripting (XSS)

✔
     Référence directe non Sécurisée à un
                                                  ✔       Référence directe non sécurisée à un           ✔      Référence directe non sécurisée à un
     Objet                                                objet                                                 objet

                                                  ✔       Falsification de requête (CSRF)                ✔      Mauvaise configuration de sécurité
✔
     Falsification de requête (CSRF)

✔
     Fuite d'information et Traitement d'erreur
                                                  ✔
                                                      N Mauvaise configuration de sécurité               ✔
                                                                                                             Z Données sensibles accessible
     Incorrect                                    ✔       Stockage cryptographique non sécurisé          ✔
                                                                                                             Z Manque de sécurité au niveau des rôles
✔
     Violation d'authentification et de Session   ✔       Manque de restriction d'accès URL              ✔      Falsification de requête (CSRF)
✔
     Stockage Cryptographique non Sécurisé        ✔       Communications non sécurisées                  ✔
                                                                                                             N Utilisation de composants connus
                                                                                                                vulnérables
✔
     Communications non sécurisées                ✔
                                                      N Redirections non validées
                                                                                                         ✔      Redirections non validées
✔
     Manque de Restriction d’Accès URL
                                                  ✔       Fuite d'information et Traitement d'erreur
                                                      X Incorrect
                                                                                                         X
                                                                                                         ✔      Communications non sécurisées
                                                  ✔
                                                      X   Exécution de Fichier Malicieux




                                                                                       Hausse          Baisse             Identique


              nAcademy – 28 Février 2013                                           N   Nouveau     Z   Renommé      X     Sortie
nAcademy – 28 Février 2013
Injections applicatives & webs

                                           include ($_GET['x']);
  PHP                                       include ($_GET['x']);
                                      ✔
 ➢                                     ✔




                                  grep -ri include **> incl.php.txt
                                   grep -ri include > incl.php.txt

                                  ✔
                                       Filtrer avec
                                       ✔
                                           $
                                       ✔
                                           . et ..
                                       ✔
                                           Exclure les valeurs filtrés




     nAcademy – 28 Février 2013
Injections applicatives & webs

                                  'WHERE login='.$_GET['x']
 ➢
  PHP                              'WHERE login='.$_GET['x']


 ➢
  SQL
                                  ✔
                                      mysql_escape_string
                                  ✔
                                      addslashes
                                  ✔
                                      pdo_quote




                                  "WHERE login= '".$_GET['x']."'"

     nAcademy – 28 Février 2013
Injections applicatives & webs

                                  echo $_GET['x'];
 ➢
  PHP                             echo $_GET['x'];

                                  <?php
 ➢
  SQL                             echo htmlentities($_GET['x']) ;
                                  ?>
 ➢
  XSS




     nAcademy – 28 Février 2013
Injections applicatives & webs

                                  <input type="text" size=20 name="name">
 ➢
  PHP                              <input type="text" size=20 name="name">


                                  String ldapSearchQuery = "(cn=" +
                                   String ldapSearchQuery = "(cn=" +
 ➢
  SQL                             $username + ")";
                                   $username + ")";
                                  System.out.println(ldapSearchQuery);
                                  System.out.println(ldapSearchQuery);
 ➢
  XSS
                                  ✔
                                      Pas de GetParameter
 ➢
  LDAP                            ✔
                                      Pas de requête paramétré




                                  ✔
                                      Valider les données
                                   avant de générer une requête de
                                  recherche
     nAcademy – 28 Février 2013
Injections applicatives & webs

                                  <% String pageToInclude =
 ➢
  PHP                              <% String pageToInclude =
                                  getDataFromUntrustedSource(); %>
                                   getDataFromUntrustedSource(); %>

                                  <Jsp: include = la page "<% =%
                                   <Jsp: include = la page "<% =%
 ➢
  SQL                             pageToInclude>" />
                                   pageToInclude>" />

 ➢
  XSS                             ✔
                                      Filtrer avec
 ➢
  LDAP                                ✔
                                          $
                                      ✔
                                          . et ..
 ➢
  JAVA                                ✔
                                          Exclure les valeurs filtrés




     nAcademy – 28 Février 2013
Injections applicatives & webs

                                   $sql = "SELECT **FROM users WHERE
 ➢
  PHP                               $sql = "SELECT FROM users WHERE
                                   name = ?";
                                    name = ?";

                                   $qid= $cnx->executeQuery($sql,
                                    $qid= $cnx->executeQuery($sql,
 ➢
  SQL                              array($_GET['rname']));
                                    array($_GET['rname']));

 ➢
  XSS                               $sql = " SELECT *
                                    FROM users
 ➢
  LDAP                              WHERE name = " .
                                       $cnx->quote(
 ➢
  JAVA                                 $_GET['username'],
                                       PDO::PARAM_STR);
 ➢
     ORM = Doctrine


      nAcademy – 28 Février 2013
Injections applicatives & webs

                                   $qid = $sql->where("id ='".$_GET['id']."'");
 ➢
  PHP                               $qid = $sql->where("id ='".$_GET['id']."'");


                                    $where =
 ➢
  SQL                              $this->getAdapter()->quoteInto("id =?',
                                   $_GET['id']);
 ➢
  XSS

 ➢
  LDAP

 ➢
  JAVA
 ➢
     ORM = Doctrine
 ➢
  Framework = Zend
      nAcademy – 28 Février 2013
Au niveau projet




                                 //


    nAcademy – 28 Février 2013
STEGANOGRAPHIE




L'art de cacher les             Q   Trouver la courbe la
choses à la vue de tous             plus longue dans
                                    l'image
   nAcademy – 28 Février 2013
Code sécurisé

    3 points à connaître
✔   Défense en profondeur


✔   Limité les accès de données à l'extérieur


✔   Maximiser les droits




      nAcademy – 28 Février 2013
Mais... Quoi affiché !!!

    Un minimum d'informations lors d'un crash
✔
    Erreur 404                           ✔   Erreur 500




                       ✔   Fichier Log



      nAcademy – 28 Février 2013
Minimum de sécurité... 1 / 3

    Le contrôle : Authentification
✔
    Mettre une bonne stratégie de mot de passe (Jpassword)
✔
    Ne pas le stocker en clair
✔
    Pensez au captcha ou au jeton
✔
    Force le mode SSL / TLS
✔
    Limité le délais pour modifier son profil utilisateur
✔
    Identification session
✔
    Authentification coté serveur
✔
    Pas d'authentification en JS / Ajax


      nAcademy – 28 Février 2013
Minimum de sécurité... 2 / 3

    Le contrôle des accès
✔
    Gestion des sessions aléatoire
                                     (JSESSIONID / $_SESSION)
✔
    Minimum d'informations visibles (ex URL)
✔
    Eviter les données sensibles sur le réseau
                                    (VS scanner de réseau)
✔
    Cookie sécurisé (onglets des navigateurs)
✔
    Limiter la fin de session pour les projets sensibles (ex 5 minutes)
✔
    Bloquer les doubles logins / accès
✔
    1 Authentification = 1 utilisateur = 1 connexion BDD



       nAcademy – 28 Février 2013
Minimum de sécurité... 3 / 3

    Logique de code... Pas sûr
✔
    Contrôler le cache
✔
    Penser à vider le cache
                   ✔
                       Fermer fenêtre
                   ✔
                       Fermer Navigateur
                   ✔
                       Fermer Application




       nAcademy – 28 Février 2013
nAcademy – 28 Février 2013
Scanneurs automatiques

✔
    Acunetix Web Vulnerability Scanner
           http://www.acunetix.com/vulnerability-scanner/

✔
    BeEF
           http://www.bindshell.net/tools/beef/

✔
    Burp Suite
           http://portswigger.net/suite/

✔
    Metasploit
           http://www.metasploit.com/
      nAcademy – 28 Février 2013
Comment se protéger

 ✔
     Vega (http://subgraph.com)
 ✔
     PHP Lint (http://www.icosaedro.it/phplint/)




      nAcademy – 28 Février 2013
OWASP (ESAPI)




            EASPI Homepage : https://www.owasp.org/index.php/ESAPI
   nAcademy – 28 Février 2013
Questions ?




    nAcademy – 28 Février 2013

Más contenido relacionado

Más de neuros

Solution pour un Réseau Social d'Entreprise (RSE)
Solution pour un Réseau Social d'Entreprise (RSE)Solution pour un Réseau Social d'Entreprise (RSE)
Solution pour un Réseau Social d'Entreprise (RSE)neuros
 
Proteger votre vie privee sur internet
Proteger votre vie privee sur internetProteger votre vie privee sur internet
Proteger votre vie privee sur internetneuros
 
Php 7 Think php7
Php 7 Think php7Php 7 Think php7
Php 7 Think php7neuros
 
RGAA 3 dans un Web Accessible
RGAA 3 dans un Web AccessibleRGAA 3 dans un Web Accessible
RGAA 3 dans un Web Accessibleneuros
 
Les effets de la loi Hamon
Les effets de la loi HamonLes effets de la loi Hamon
Les effets de la loi Hamonneuros
 
La sécurité et php
La sécurité et phpLa sécurité et php
La sécurité et phpneuros
 
Les protocoles temps réels
Les protocoles temps réelsLes protocoles temps réels
Les protocoles temps réelsneuros
 
Vectoriel et 3d en html5 - Animation newschool (partie 2)
Vectoriel et 3d en html5 - Animation newschool (partie 2)Vectoriel et 3d en html5 - Animation newschool (partie 2)
Vectoriel et 3d en html5 - Animation newschool (partie 2)neuros
 
Améliorer les performances SQL
Améliorer les performances SQLAméliorer les performances SQL
Améliorer les performances SQLneuros
 
Newschool partie1 methode HTML5
Newschool partie1 methode HTML5Newschool partie1 methode HTML5
Newschool partie1 methode HTML5neuros
 
Integrons en mode continu
Integrons en mode continuIntegrons en mode continu
Integrons en mode continuneuros
 
Effectuer des tests modernes pour drupal
Effectuer des tests modernes pour drupalEffectuer des tests modernes pour drupal
Effectuer des tests modernes pour drupalneuros
 
Integration Drupal systemes d'informations
Integration Drupal systemes d'informationsIntegration Drupal systemes d'informations
Integration Drupal systemes d'informationsneuros
 
La maitrise des contenus hors internet
La maitrise des contenus hors internetLa maitrise des contenus hors internet
La maitrise des contenus hors internetneuros
 
Pourquoi Firefox OS
Pourquoi Firefox OSPourquoi Firefox OS
Pourquoi Firefox OSneuros
 
Un CRM...sugarCRM
Un CRM...sugarCRMUn CRM...sugarCRM
Un CRM...sugarCRMneuros
 
Neuros Digital
Neuros DigitalNeuros Digital
Neuros Digitalneuros
 
Le cloud ton univers impitoyable
Le cloud ton univers impitoyableLe cloud ton univers impitoyable
Le cloud ton univers impitoyableneuros
 
L Importance des forks de MySQL
L Importance des forks de MySQLL Importance des forks de MySQL
L Importance des forks de MySQLneuros
 
Anticiper les actions utilisateurs
Anticiper les actions utilisateursAnticiper les actions utilisateurs
Anticiper les actions utilisateursneuros
 

Más de neuros (20)

Solution pour un Réseau Social d'Entreprise (RSE)
Solution pour un Réseau Social d'Entreprise (RSE)Solution pour un Réseau Social d'Entreprise (RSE)
Solution pour un Réseau Social d'Entreprise (RSE)
 
Proteger votre vie privee sur internet
Proteger votre vie privee sur internetProteger votre vie privee sur internet
Proteger votre vie privee sur internet
 
Php 7 Think php7
Php 7 Think php7Php 7 Think php7
Php 7 Think php7
 
RGAA 3 dans un Web Accessible
RGAA 3 dans un Web AccessibleRGAA 3 dans un Web Accessible
RGAA 3 dans un Web Accessible
 
Les effets de la loi Hamon
Les effets de la loi HamonLes effets de la loi Hamon
Les effets de la loi Hamon
 
La sécurité et php
La sécurité et phpLa sécurité et php
La sécurité et php
 
Les protocoles temps réels
Les protocoles temps réelsLes protocoles temps réels
Les protocoles temps réels
 
Vectoriel et 3d en html5 - Animation newschool (partie 2)
Vectoriel et 3d en html5 - Animation newschool (partie 2)Vectoriel et 3d en html5 - Animation newschool (partie 2)
Vectoriel et 3d en html5 - Animation newschool (partie 2)
 
Améliorer les performances SQL
Améliorer les performances SQLAméliorer les performances SQL
Améliorer les performances SQL
 
Newschool partie1 methode HTML5
Newschool partie1 methode HTML5Newschool partie1 methode HTML5
Newschool partie1 methode HTML5
 
Integrons en mode continu
Integrons en mode continuIntegrons en mode continu
Integrons en mode continu
 
Effectuer des tests modernes pour drupal
Effectuer des tests modernes pour drupalEffectuer des tests modernes pour drupal
Effectuer des tests modernes pour drupal
 
Integration Drupal systemes d'informations
Integration Drupal systemes d'informationsIntegration Drupal systemes d'informations
Integration Drupal systemes d'informations
 
La maitrise des contenus hors internet
La maitrise des contenus hors internetLa maitrise des contenus hors internet
La maitrise des contenus hors internet
 
Pourquoi Firefox OS
Pourquoi Firefox OSPourquoi Firefox OS
Pourquoi Firefox OS
 
Un CRM...sugarCRM
Un CRM...sugarCRMUn CRM...sugarCRM
Un CRM...sugarCRM
 
Neuros Digital
Neuros DigitalNeuros Digital
Neuros Digital
 
Le cloud ton univers impitoyable
Le cloud ton univers impitoyableLe cloud ton univers impitoyable
Le cloud ton univers impitoyable
 
L Importance des forks de MySQL
L Importance des forks de MySQLL Importance des forks de MySQL
L Importance des forks de MySQL
 
Anticiper les actions utilisateurs
Anticiper les actions utilisateursAnticiper les actions utilisateurs
Anticiper les actions utilisateurs
 

Sécuriser votre projet

  • 1. SECURISER VOTRE PROJET Christophe Villeneuve 28 février 2013
  • 2. A l'abordage... ✔ Le fromage, la souris et... ✔ Les techniques ✔ Du PHP ✔ Du Java ✔ Du Web ✔ Du Projet ✔ et... nAcademy – 28 Février 2013
  • 3. Réflexion Le fromage, La souris, Et... nAcademy – 28 Février 2013
  • 4. Pourquoi ? Les hackers sont astucieux nAcademy – 28 Février 2013
  • 5. nAcademy – 28 Février 2013
  • 6. Notions basics ✔ Rappel des risques (W3C, Spam...) ✔ Front-end sur les entrées (formulaire, url...) ✔ Back-end avec un Framework ✔ La base de données ✔ Tester votre code ✔ Méthodologie nAcademy – 28 Février 2013
  • 7. Les Vulnérabilités reconnues ✔ Insuffisance des tests de sécurité ✔ Configuration par défaut ✔ Pas de cryptage des données sensibles ✔ Pas de mises à jour du système ✔ La sécurité apparaît lors des catastrophes ✔ Surveillance inefficace ✔ Contrôle insuffisant de l'accès par des tiers nAcademy – 28 Février 2013
  • 8. TOP 10 OWASP (Web) 2007 2010 2013 Version RC1 ✔ Cross Site Scripting (XSS) ✔ Failles d'injection ✔ Failles d'injection ✔ Failles d'injection ✔ Cross-Site Scripting (XSS) ✔ Violation d'authentification et de Session ✔ Exécution de Fichier Malicieux ✔ Violation d'authentification et de Session ✔ Cross-Site Scripting (XSS) ✔ Référence directe non Sécurisée à un ✔ Référence directe non sécurisée à un ✔ Référence directe non sécurisée à un Objet objet objet ✔ Falsification de requête (CSRF) ✔ Mauvaise configuration de sécurité ✔ Falsification de requête (CSRF) ✔ Fuite d'information et Traitement d'erreur ✔ N Mauvaise configuration de sécurité ✔ Z Données sensibles accessible Incorrect ✔ Stockage cryptographique non sécurisé ✔ Z Manque de sécurité au niveau des rôles ✔ Violation d'authentification et de Session ✔ Manque de restriction d'accès URL ✔ Falsification de requête (CSRF) ✔ Stockage Cryptographique non Sécurisé ✔ Communications non sécurisées ✔ N Utilisation de composants connus vulnérables ✔ Communications non sécurisées ✔ N Redirections non validées ✔ Redirections non validées ✔ Manque de Restriction d’Accès URL ✔ Fuite d'information et Traitement d'erreur X Incorrect X ✔ Communications non sécurisées ✔ X Exécution de Fichier Malicieux Hausse Baisse Identique nAcademy – 28 Février 2013 N Nouveau Z Renommé X Sortie
  • 9. nAcademy – 28 Février 2013
  • 10. Injections applicatives & webs include ($_GET['x']); PHP include ($_GET['x']); ✔ ➢ ✔ grep -ri include **> incl.php.txt grep -ri include > incl.php.txt ✔ Filtrer avec ✔ $ ✔ . et .. ✔ Exclure les valeurs filtrés nAcademy – 28 Février 2013
  • 11. Injections applicatives & webs 'WHERE login='.$_GET['x'] ➢ PHP 'WHERE login='.$_GET['x'] ➢ SQL ✔ mysql_escape_string ✔ addslashes ✔ pdo_quote "WHERE login= '".$_GET['x']."'" nAcademy – 28 Février 2013
  • 12. Injections applicatives & webs echo $_GET['x']; ➢ PHP echo $_GET['x']; <?php ➢ SQL echo htmlentities($_GET['x']) ; ?> ➢ XSS nAcademy – 28 Février 2013
  • 13. Injections applicatives & webs <input type="text" size=20 name="name"> ➢ PHP <input type="text" size=20 name="name"> String ldapSearchQuery = "(cn=" + String ldapSearchQuery = "(cn=" + ➢ SQL $username + ")"; $username + ")"; System.out.println(ldapSearchQuery); System.out.println(ldapSearchQuery); ➢ XSS ✔ Pas de GetParameter ➢ LDAP ✔ Pas de requête paramétré ✔ Valider les données avant de générer une requête de recherche nAcademy – 28 Février 2013
  • 14. Injections applicatives & webs <% String pageToInclude = ➢ PHP <% String pageToInclude = getDataFromUntrustedSource(); %> getDataFromUntrustedSource(); %> <Jsp: include = la page "<% =% <Jsp: include = la page "<% =% ➢ SQL pageToInclude>" /> pageToInclude>" /> ➢ XSS ✔ Filtrer avec ➢ LDAP ✔ $ ✔ . et .. ➢ JAVA ✔ Exclure les valeurs filtrés nAcademy – 28 Février 2013
  • 15. Injections applicatives & webs $sql = "SELECT **FROM users WHERE ➢ PHP $sql = "SELECT FROM users WHERE name = ?"; name = ?"; $qid= $cnx->executeQuery($sql, $qid= $cnx->executeQuery($sql, ➢ SQL array($_GET['rname'])); array($_GET['rname'])); ➢ XSS $sql = " SELECT * FROM users ➢ LDAP WHERE name = " . $cnx->quote( ➢ JAVA $_GET['username'], PDO::PARAM_STR); ➢ ORM = Doctrine nAcademy – 28 Février 2013
  • 16. Injections applicatives & webs $qid = $sql->where("id ='".$_GET['id']."'"); ➢ PHP $qid = $sql->where("id ='".$_GET['id']."'"); $where = ➢ SQL $this->getAdapter()->quoteInto("id =?', $_GET['id']); ➢ XSS ➢ LDAP ➢ JAVA ➢ ORM = Doctrine ➢ Framework = Zend nAcademy – 28 Février 2013
  • 17. Au niveau projet // nAcademy – 28 Février 2013
  • 18. STEGANOGRAPHIE L'art de cacher les Q Trouver la courbe la choses à la vue de tous plus longue dans l'image nAcademy – 28 Février 2013
  • 19. Code sécurisé 3 points à connaître ✔ Défense en profondeur ✔ Limité les accès de données à l'extérieur ✔ Maximiser les droits nAcademy – 28 Février 2013
  • 20. Mais... Quoi affiché !!! Un minimum d'informations lors d'un crash ✔ Erreur 404 ✔ Erreur 500 ✔ Fichier Log nAcademy – 28 Février 2013
  • 21. Minimum de sécurité... 1 / 3 Le contrôle : Authentification ✔ Mettre une bonne stratégie de mot de passe (Jpassword) ✔ Ne pas le stocker en clair ✔ Pensez au captcha ou au jeton ✔ Force le mode SSL / TLS ✔ Limité le délais pour modifier son profil utilisateur ✔ Identification session ✔ Authentification coté serveur ✔ Pas d'authentification en JS / Ajax nAcademy – 28 Février 2013
  • 22. Minimum de sécurité... 2 / 3 Le contrôle des accès ✔ Gestion des sessions aléatoire (JSESSIONID / $_SESSION) ✔ Minimum d'informations visibles (ex URL) ✔ Eviter les données sensibles sur le réseau (VS scanner de réseau) ✔ Cookie sécurisé (onglets des navigateurs) ✔ Limiter la fin de session pour les projets sensibles (ex 5 minutes) ✔ Bloquer les doubles logins / accès ✔ 1 Authentification = 1 utilisateur = 1 connexion BDD nAcademy – 28 Février 2013
  • 23. Minimum de sécurité... 3 / 3 Logique de code... Pas sûr ✔ Contrôler le cache ✔ Penser à vider le cache ✔ Fermer fenêtre ✔ Fermer Navigateur ✔ Fermer Application nAcademy – 28 Février 2013
  • 24. nAcademy – 28 Février 2013
  • 25. Scanneurs automatiques ✔ Acunetix Web Vulnerability Scanner http://www.acunetix.com/vulnerability-scanner/ ✔ BeEF http://www.bindshell.net/tools/beef/ ✔ Burp Suite http://portswigger.net/suite/ ✔ Metasploit http://www.metasploit.com/ nAcademy – 28 Février 2013
  • 26. Comment se protéger ✔ Vega (http://subgraph.com) ✔ PHP Lint (http://www.icosaedro.it/phplint/) nAcademy – 28 Février 2013
  • 27. OWASP (ESAPI) EASPI Homepage : https://www.owasp.org/index.php/ESAPI nAcademy – 28 Février 2013
  • 28. Questions ? nAcademy – 28 Février 2013