Sécuriser votre projet
description
Transcript of Sécuriser votre projet
SECURISER VOTRE PROJET
Christophe Villeneuve
28 février 2013
nAcademy – 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)
✔ Cross Site Scripting (XSS)
✔ Failles d'injection
✔ Exécution de Fichier Malicieux
✔ Référence directe non Sécurisée à un Objet
✔ Falsification de requête (CSRF)
✔ Fuite d'information et Traitement d'erreur Incorrect
✔ Violation d'authentification et de Session
✔ Stockage Cryptographique non Sécurisé
✔ Communications non sécurisées
✔ Manque de Restriction d’Accès URL
2007✔ Failles d'injection
✔ Cross-Site Scripting (XSS)
✔ Violation d'authentification et de Session
✔ Référence directe non sécurisée à un objet
✔ Falsification de requête (CSRF)
✔ Mauvaise configuration de sécurité
✔ Stockage cryptographique non sécurisé
✔ Manque de restriction d'accès URL
✔ Communications non sécurisées
✔ Redirections non validées
✔ Failles d'injection
✔ Violation d'authentification et de Session
✔ Cross-Site Scripting (XSS)
✔ Référence directe non sécurisée à un objet
✔ Mauvaise configuration de sécurité
✔ Données sensibles accessible
✔ Manque de sécurité au niveau des rôles
✔ Falsification de requête (CSRF)
✔ Utilisation de composants connus vulnérables
✔ Redirections non validées
2010
X✔ Fuite d'information et Traitement d'erreur
Incorrect
✔ Exécution de Fichier Malicieux
N
X
N
2013 Version RC1
✔ Communications non sécuriséesX
N
Z
Z
N Z XHausse Baisse Identique
Nouveau
Baisse
SortieRenommé
nAcademy – 28 Février 2013
nAcademy – 28 Février 2013
Injections applicatives & webs
➢PHP
✔ Filtrer avec
✔ $✔ . et ..✔ Exclure les valeurs filtrés
✔ include ($_GET['x']);✔ include ($_GET['x']);
grep -ri include * > incl.php.txt grep -ri include * > incl.php.txt
nAcademy – 28 Février 2013
Injections applicatives & webs
➢PHP 'WHERE login='.$_GET['x'] 'WHERE login='.$_GET['x']
➢SQL
"WHERE login= '".$_GET['x']."'"
✔ mysql_escape_string
✔ addslashes
✔ pdo_quote
nAcademy – 28 Février 2013
Injections applicatives & webs
➢PHP<?php
echo htmlentities($_GET['x']) ;
?>
echo $_GET['x']; echo $_GET['x'];
➢SQL
➢XSS
nAcademy – 28 Février 2013
Injections applicatives & webs
➢PHP <input type="text" size=20 name="name"><input type="text" size=20 name="name">
➢SQL
➢XSS
➢LDAP
String ldapSearchQuery = "(cn=" + $username + ")";
System.out.println(ldapSearchQuery);
String ldapSearchQuery = "(cn=" + $username + ")";
System.out.println(ldapSearchQuery);
✔ Valider les données
avant de générer une requête de recherche
✔ Pas de GetParameter
✔ Pas de requête paramétré
nAcademy – 28 Février 2013
Injections applicatives & webs
➢PHP <% String pageToInclude = getDataFromUntrustedSource(); %>
<% String pageToInclude = getDataFromUntrustedSource(); %>
➢SQL
➢XSS
➢LDAP
<Jsp: include = la page "<% =% pageToInclude>" /><Jsp: include = la page "<% =% pageToInclude>" />
➢JAVA
✔ Filtrer avec
✔ $✔ . et ..✔ Exclure les valeurs filtrés
nAcademy – 28 Février 2013
Injections applicatives & webs
➢PHP $sql = "SELECT * FROM users WHERE name = ?";
$sql = "SELECT * FROM users WHERE name = ?";
➢SQL
➢XSS
➢LDAP
$qid= $cnx->executeQuery($sql, array($_GET['rname']));$qid= $cnx->executeQuery($sql, array($_GET['rname']));
➢JAVA
$sql = " SELECT *
FROM users
WHERE name = " .
$cnx->quote(
$_GET['username'],
\PDO::PARAM_STR);➢ORM = Doctrine
nAcademy – 28 Février 2013
Injections applicatives & webs
➢PHP $qid = $sql->where("id ='".$_GET['id']."'"); $qid = $sql->where("id ='".$_GET['id']."'");
➢SQL
➢XSS
➢LDAP
➢JAVA
$where = $this->getAdapter()->quoteInto("id =?', $_GET['id']);
➢ORM = Doctrine
➢Framework = Zend
nAcademy – 28 Février 2013
Au niveau projet
//
nAcademy – 28 Février 2013
L'art de cacher les choses à la vue de tous
Trouver la courbe la plus longue dans l'image
STEGANOGRAPHIE
Q
nAcademy – 28 Février 2013
Code sécurisé
✔ Défense en profondeur
✔ Limité les accès de données à l'extérieur
✔ Maximiser les droits
3 points à connaître
nAcademy – 28 Février 2013
Mais... Quoi affiché !!!
✔ Erreur 404 ✔ Erreur 500
✔ Fichier Log
Un minimum d'informations lors d'un crash
nAcademy – 28 Février 2013
Minimum de sécurité... 1 / 3
✔ 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
Le contrôle : Authentification
nAcademy – 28 Février 2013
Minimum de sécurité... 2 / 3
✔ 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
Le contrôle des accès
nAcademy – 28 Février 2013
Minimum de sécurité... 3 / 3
✔ Contrôler le cache
✔ Penser à vider le cache
✔ Fermer fenêtre✔ Fermer Navigateur✔ Fermer Application
Logique de code... Pas sûr
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 ?