Damien Seguy, co-auteur du livre "Sécurité PHP" (éditions Eyrolles) et membre du PHPGroup. L’atelier consiste à examiner une vraie application PHP présentée puis de tenter toutes les manœuvres retorses possibles pour la mettre en péril.
2. MENU DU JOUR
Comment vérifier la sécurité de son application
Vérification du site en production
Analyse à code ouvert
Rédaction d’un rapport d’audit
2
6. OWASP
Cod Nom Site Code
e
A1 Injection X
A2 Cross-Site Scripting (XSS) X X
A3 Broken Authentication and Session X
A4 Insecure Direct
Management Object References X
A5 Cross-Site Request Forgery (CSRF) X X
A6 Security Misconfiguration X
A7 Insecure Cryptographic Storage X
A8 Failure to Restrict URL Access X
A9 Insufficient Transport Layer Protection X
A10 Unvalidated Redirects and Forwards X
7. VOCABULAIRE
Découverte
En apprendre plus sur l’application
Vulnérabilité
Une faille qui permet de perturber le système
Attaque
Une vulnérabilité avec un objectif
7
16. INJECTION PAR GIF
Prenez une image GIF, ajoutez phpinfo()
Envoyez la sur le site
Si tous les fichiers sont traités par PHP...
17. NETTOYER LES DONNÉES
On a une injection quand une valeur parvient à une autre
technologie que PHP, et y fait autre chose que ce qui est attendu.
Toutes les injections ont la même origine :
18. NETTOYER LES DONNÉES
On a une injection quand une valeur parvient à une autre
technologie que PHP, et y fait autre chose que ce qui est attendu.
Toutes les injections ont la même origine :
.
19. NETTOYER LES DONNÉES
On a une injection quand une valeur parvient à une autre
technologie que PHP, et y fait autre chose que ce qui est attendu.
Toutes les injections ont la même origine :
.
21. METHODES DE
PROTECTION
HTML : htmlentities, htmlspecialchars
URL : rawurlencode
Query : urlencode
SQL : requêtes préparées, mysql_real_escape_string..
et encore Shell, XML, LDAP, Path, PDF, Javascript, header HTTP,
cookies, ...
22. BONNE PRATIQUE
Systématisez les protections avec le framework
Framework généralistes
Classe maison
Assurez un nettoyage minimal au retour des données
Qui d’autre manipule la base de données?
23. APPROCHE D’AUDIT
Identifiez les données entrantes
Notion de variables corrompues (tainted variables) : on se méfie des
variables tant qu’elles n’ont pas été validée
24. TRACABILITÉ
$_CLEAN
public function nameAction() {
$request = $this->getRequest();
$validator = new Zend_Validate_Alnum();
$_CLEAN['username'] = $validator->isValid(
$request->getParam('username'));
}
les variables locales ne sont créées qu’apres validation
public function nameAction() {
$request = $request->query;
$validator = $this->get('validator');
$username = $validator->validate($request->get('username'))
}
25. RETRO-TRACABILITÉ
En Zend Framework, surveillez les Db:factory
En Symfony, les appels à getCurrentConnection()
mysql_query, pg_query.
Puis, remontez à l’origine du code
26. STÉGANOGRAPHIE
L’art de cacher les choses à
la vue de tous
Trouvez la tour l’une des
tours les plus hautes du
monde dans l’image
suivante
27. STÉGANOGRAPHIE
L’art de cacher les choses à
la vue de tous
Trouvez la tour l’une des
tours les plus hautes du
monde dans l’image
suivante
28. STÉGANOGRAPHIE
L’art de cacher les choses à
la vue de tous
Trouvez la tour l’une des
tours les plus hautes du
monde dans l’image
suivante
40. ROBOTS.TXT
Empoisonnez les données
Ne mettez pas seulement les dossiers à protéger
Mettez des dossiers qui n’existent pas
Notez les IP qui s’y connectent
Vérifiez en ligne les URLs de votre site
44. BONNES PRATIQUES
Masquez les informations sur votre systeme
expose_php = off, ServerSignature Off
Ayez un dossier hors Web Root
Listez votre racine Web
Faites la chasse aux debug :
echo, print, print_r, var_dump, krumo
45. RAPPORT D’AUDIT
Consignez vos audits
Un rapport, un wiki, un log ou blog
Notez les réussites et les points à améliorer
Automatisez ce qui est important
Integration continue, cron, scripts manuels...
Faites le reste a la main, a budgeter
46. STRUCTURE
Résumé exécutif
3 paragraphes, simples à lire
Liste des vérifications réalisées et résultats (OK, KO)
Détails et explications sur chaque point à améliorer
47. RÉSUMÉ
Point sécurité Impact Probabilité Correctif
XSS Important Forte Lourd
Zone privée sans
Moyen Toujours Faible
SSL
Fichiers
Important Faible Faible
découverts
URLs mal
Fort Faible Moyen
protégées
48. DÉTAILS
Titre
Exemple dans le code, explications théoriques
Suggestion de correction
Mentionner les limitations de la correction
Liste des occurrences
Ou le moyen de les trouver