Un bon audit, c’est-à-dire un regard sans complaisance sur les petits travers du code, la configuration et de l’architecture d’une application.
Différentes techniques permettent d’évaluer PHP et les applications Web : les tests automatiques, le fuzzing, les scénarios, les tests boîte
noire, les analyses à code ouvert.
1. Auditer son code PHP
pour plus de sécurité
NEXEN - ALTER WAY GROUP 1
2. Agenda
Tests boîte noire
Scanners automatiques
Fuzzing
Scénarios
Test à code ouvert
Outils et techniques
NEXEN - ALTER WAY GROUP
3. Qui parle?
Damien Seguy
Eleveur d'éléPHPants
Architecte Open
Source
Audits sécurité et
performances
NEXEN - ALTER WAY GROUP
4. Un audit
La confiance
n'exclut pas le contrôle™
Pour valider un travail externe
Pour valider un travail interne
Pour faire le point
Pour avoir un regard externe
Aussi souvent que possible
NEXEN - ALTER WAY GROUP
5. Deux types d'audit
Boîte noire
Comme un pirate
Eviter les préjugés
Code ouvert
Plus efficace
Plus théorique
NEXEN - ALTER WAY GROUP
6. Scanners automatiques
Simple à mettre en oeuvre
Nikto (http://www.cirt.net/)
Doivent être adaptés
Mis à jour régulièrement
Personnalisables
NEXEN - ALTER WAY GROUP
7. Fuzzing
De la friture sur la ligne
Stress des formulaires
Bases de données
Valeur Erreurs
Application Crash
Aléatoire
Test décomplexé OK
NEXEN - ALTER WAY GROUP
8. Fuzzing : valeurs
Tous les caractères de 0 à x255
Unicode
Les nombres 1, 0, -1, 0.99, infini
Chaînes
Longues, courtes
Dictionnaires de valeurs
de vulnérabilités
NEXEN - ALTER WAY GROUP
9. Fuzzing : moyens
GET, POST, COOKIE
Des variables tableaux : c[]=1
Excédents de variables
debug=1, task=view
Manque de variables
Encodages variés
UTF-8, Latin1, HTML, hexa
NEXEN - ALTER WAY GROUP
10. Scénarios
Des tests plus construits
Plus adaptés mais fragiles
Automatiser les tests
A utiliser avec le fuzzing
NEXEN - ALTER WAY GROUP
11. Scénarios
Navigateur Proxy Application
Valeurs Log Navigateur
Funkload, WebScarab
NEXEN - ALTER WAY GROUP
12. Plan d'audit PHP
Passer en revue le code
Dégrossir le travail avec un outil
Rechercher les trous possibles
Affiner manuellement
NEXEN - ALTER WAY GROUP
13. Trous fréquents
Injections PHP
include ($_GET['x']);
Injections SQL
'WHERE login='.$_GET['x']
Injections XSS
echo $_GET['x'];
NEXEN - ALTER WAY GROUP
14. Outils
grep
Rapide mais trop
PHP
preg_match + toilettages
code_sniffer
tokenizer
Perl, Python, etc...
NEXEN - ALTER WAY GROUP
15. Injections PHP
Liste des include/require
grep -ri include * > incl.php.txt
Filtrage avec
$ : variables
.' et .quot; : pour les constantes
Exclure les valeurs filtrées
phpMyAdmin : de 960 à 82
NEXEN - ALTER WAY GROUP
17. XSS
$_GET, $_POST, $_COOKIE
précédé par
.
(
,
echo ou print
phpMyAdmin : 90k => 70 à traiter
NEXEN - ALTER WAY GROUP
18. Divers
print_r, var_dump
die, exit
html_entity_decode
htmlentities sans 2eme paramètre
eval et ` (guillemets obliques)
NEXEN - ALTER WAY GROUP
19. Pour aller plus loin
Adapter le code
aux outils
d'analyse
Automatiser
l'analyse avec
cron
phpUnderControl
Audits croisés
NEXEN - ALTER WAY GROUP