sécuriser votre projet

28
SECURISER VOTRE PROJET Christophe Villeneuve 28 février 2013

Upload: neuros

Post on 27-Jun-2015

650 views

Category:

Documents


0 download

DESCRIPTION

Présentation à la nAcademy (Février 2013) : Sécuriser votre projet par Christophe Villeneuve

TRANSCRIPT

Page 1: Sécuriser votre projet

SECURISER VOTRE PROJET

Christophe Villeneuve

28 février 2013

Page 2: Sécuriser votre projet

nAcademy – 28 Février 2013

A l'abordage...

✔ Le fromage, la souris et...

✔ Les techniques

✔ Du PHP

✔ Du Java

✔ Du Web

✔ Du Projet

✔ et...

Page 3: Sécuriser votre projet

nAcademy – 28 Février 2013

Réflexion

Le fromage,

La souris,

Et...

Page 4: Sécuriser votre projet

nAcademy – 28 Février 2013

Pourquoi ?

Les hackers sont astucieux

Page 5: Sécuriser votre projet

nAcademy – 28 Février 2013

Page 6: Sécuriser votre projet

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

Page 7: Sécuriser votre projet

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

Page 8: Sécuriser votre projet

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é

Page 9: Sécuriser votre projet

nAcademy – 28 Février 2013

Page 10: Sécuriser votre projet

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

Page 11: Sécuriser votre projet

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

Page 12: Sécuriser votre projet

nAcademy – 28 Février 2013

Injections applicatives & webs

➢PHP<?php

echo htmlentities($_GET['x']) ;

?>

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

➢SQL

➢XSS

Page 13: Sécuriser votre projet

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é

Page 14: Sécuriser votre projet

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

Page 15: Sécuriser votre projet

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

Page 16: Sécuriser votre projet

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

Page 17: Sécuriser votre projet

nAcademy – 28 Février 2013

Au niveau projet

//

Page 18: Sécuriser votre 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

Page 19: Sécuriser votre projet

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

Page 20: Sécuriser votre projet

nAcademy – 28 Février 2013

Mais... Quoi affiché !!!

✔ Erreur 404 ✔ Erreur 500

✔ Fichier Log

Un minimum d'informations lors d'un crash

Page 21: Sécuriser votre projet

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

Page 22: Sécuriser votre projet

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

Page 23: Sécuriser votre projet

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

Page 24: Sécuriser votre projet

nAcademy – 28 Février 2013

Page 25: Sécuriser votre projet

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/

Page 26: Sécuriser votre projet

nAcademy – 28 Février 2013

Comment se protéger

✔ Vega (http://subgraph.com)

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

Page 27: Sécuriser votre projet

nAcademy – 28 Février 2013

OWASP (ESAPI)

EASPI Homepage : https://www.owasp.org/index.php/ESAPI

Page 28: Sécuriser votre projet

nAcademy – 28 Février 2013

Questions ?