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

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 – 28Fé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 – 28Fé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 cacherles 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 – 28Fé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