Durant ce laboratoire, nous allons réaliser un audit sécurité d'une application Web Open Source. L'objectif technique est de dresser un rapport complet, et d'assimiler toutes les phases du travail d'enquête : analyse boîte noire, analyse à code ouvert, recensement des vulnérabilités (XSS, injections, dévoilement, etc), recommandations de renforcement, priorisation des tâches. Toutes les compétences seront mises à l'épreuve dans cet excercice complexe.
Nous travaillerons sur une application réelle : (Nom de l'application à venir ultérieurement). Le laboratoire se terminera avec la remise du rapport aux auteurs de l'application pour qu'ils puissent avoir un regard extérieur sur le niveau de sécurité de l'application.
2. Ordre du jour
• Présentation de l’atelier
• Audit boîte noire
• Audit à code ouvert
vendredi 13 novembre 2009 2
3. Qui parle?
• Philippe Gamache
• Parler haut, interagir librement :
audit de sécurité, formations
• Caviste de cidres de glace
• info@ph-il.ca
vendredi 13 novembre 2009 3
4. Qui parle?
• Damien Seguy
• Alter Way Consulting :
services experts en
logiciels libres
• Editeur de calendriers
• damien.seguy@alterway.fr
vendredi 13 novembre 2009 4
5. Livre sécurité
• Nouvelle édition 2009
• Bilan complet de la
sécurité : système,
MySQL, PHP, etc
• Edité chez Eyrolles
• Dédicaces sur demande
vendredi 13 novembre 2009 5
6. Cligraph CRM
• CRM/GRC Open Source
• Version 0.991
• Activement développé
• Soutenu par Cogivea
http://www.cogivea.com/
• Léger, rapide et puissant
• http://www.cligraphcrm.com/
vendredi 13 novembre 2009 6
7. Cligraph CRM
• Technologies PHP et MySQL, Javascript
• Code développé depuis 5 ans
• 4970 fichiers
• 1200 fichiers PHP
• 320 000 lignes de code
vendredi 13 novembre 2009 7
8. L’atelier sécurité
• Réveillez-vous : vous avez du travail!
• Analyse des logs et identification des problèmes
• Discussion des stratégies de protection et contextes
• http://192.168.3.73/ de démonstration
vendredi 13 novembre 2009 8
10. Tests boîte noire
• Recherche d’informations
• Trouver de l’information sur l’application
• Que puis-je faire sur cette application?
• Où sont les points d'entrée les plus
populaires?
10
vendredi 13 novembre 2009 10
11. Tests boîte noire
• Trouver des vulnérabilités
• Trouver les trous dans l’application
• Scanneurs automatiques
• À la main
• Fuzzing
• Scénarios
• Comment puis-je l'utiliser à mon avantage?
11
vendredi 13 novembre 2009 11
12. Tests boîte noire
• Attaquer
• Attaquer une
vulnérabilité avec
un but précis
12
vendredi 13 novembre 2009 12
13. Recherche
d’informations
• Moteurs de recherches
• Facebook, LinkedIn, Joboom, Monster
• Langage de programmation
• Logiciels utilisés
13
vendredi 13 novembre 2009 13
14. Recherche
d’informations
• Moteurs de recherches (suite)
• Google : phpinfo, "Zend engine”,
site:nomsite.com
• Divulgation de renseignements
<b>Notice</b>: undefined </b> on line <b>
<b>Warning</b>: </b> on line <b>
14
vendredi 13 novembre 2009 14
15. Recherche
d’informations
• Moteurs de recherches (suite)
• Krugle : echo $_GET
• Bases de données de vulnérabilités
• BUGTRAQ
• CERT
• CVE
• Milw0rm
15
vendredi 13 novembre 2009 15
25. Recherche
d’informations
• http://www.cligraphcrm.com/
vendredi 13 novembre 2009 25
26. Recherche
d’informations
vendredi 13 novembre 2009 26
27. Recherche
d’informations
• Google
• Google codesearch
• Milm0rm
vendredi 13 novembre 2009 27
28. Trouver des
vulnérabilités
• Où trouver des vulnérabilités?
• XSS
• CSRF
• Injections
• Remplacement de fichiers
• etc.
28
vendredi 13 novembre 2009 28
29. Trouver des
vulnérabilités
• Comment exploiter cette faiblesse?
• Que faire avec cette faille?
29
vendredi 13 novembre 2009 29
31. Outils manuels
• Firefox
• Poster
• SQL Inject Me
• SQL Injection!
• User Agent Switcher
• Web Developer
• X-Forwarded-For Spoofer
• XSS Me Data
31
vendredi 13 novembre 2009 31
32. Outils manuels
• Rex Swain's HTTP Viewer
http://www.rexswain.com/httpview.html
32
vendredi 13 novembre 2009 32
33. Scanneurs
automatiques
• Simple à mettre en oeuvre
• Permets de trouver les attaques les plus courantes
• Doivent être adaptés
• Mis à jour régulièrement
• Personnalisables
33
vendredi 13 novembre 2009 33
34. 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/
34
vendredi 13 novembre 2009 34
35. Scanneurs
automatiques
• Nikto
http://www.cirt.net/
• PBlind
http://www.edge-security.com/pblind.php
• Scrawlr
https://download.spidynamics.com/Products/scrawlr/
• SCRT Mini MySqlat0r
http://www.scrt.ch/pages_en/minimysqlator.html
35
vendredi 13 novembre 2009 35
37. Fuzzing
• Test par valeur aléatoire
• Stress des formulaires
• Bases de données
• Test décomplexé
37
vendredi 13 novembre 2009 37
38. Fuzzing
• Tous les caractères de 0 à x255
• Tous les caractères Unicode
• Les nombres 1, 0, -1, 0.99, extrêmes, infinis
• Chaînes
• Longues
• courtes
38
vendredi 13 novembre 2009 38
39. Fuzzing
• Dictionnaires de valeurs
• de vulnérabilités
• GET, POST, COOKIE
• Des variables tableaux
• c[]=1
39
vendredi 13 novembre 2009 39
40. Fuzzing
• Excédents de variables
• debug=1, task=view
• Manque de variables
• Encodages variés
• UTF-8, Latin1, HTML, hexa
40
vendredi 13 novembre 2009 40
42. Scénarios
• Des tests plus adaptés
• fragiles
• Automatiser les tests
• À utiliser avec le fuzzing
• À utiliser avec des serveurs mandataires
42
vendredi 13 novembre 2009 42
43. Scénarios
• Burp Suite
http://portswigger.net/suite/
• Firefox
• Selenium IDE
• Funkload
http://funkload.nuxeo.org/
• ProxyStrike
http://www.edge-security.com/proxystrike.php
43
vendredi 13 novembre 2009 43
48. Les prolèmes
• Faux sentiment
sécurité
• Ne marche pas
toujours
vendredi 13 novembre 2009 48
49. Notre cas
• La sécurité par
l’insécurité
• La sécurité par
l’instabilité
vendredi 13 novembre 2009 49
50. Que faire?
• Tests manuels
• Les sources
• Installer l’application
vendredi 13 novembre 2009 50
51. Les fichiers
total 592
drwxrwxrwx 25 user group 850 23 Feb 12:03 accueil
drwxrwxrwx 67 user group 2278 23 Feb 12:03 action
drwxrwxrwx 39 user group 1326 23 Feb 12:03 agent
drwxrwxrwx 13 user group 442 23 Feb 12:03 biblio
drwxrwxrwx 39 user group 1326 23 Feb 12:03 compte
-rwxrwxrwx 1 user group 7692 11 Sep 02:44 connect.php
-rwxrwxrwx 1 user group 3856 11 Sep 02:44 err_navig.php
-rwxrwxrwx 1 user group 3165 11 Sep 02:44 erreur404.php
drwxrwxrwx 76 user group 2584 23 Feb 12:03 etat
drwxrwxrwx 171 user group 5814 23 Feb 12:03 fonctions
drwxrwxrwx 8 user group 272 23 Feb 12:03 images
drwxrwxrwx 13 user group 442 23 Feb 12:03 include
-rwxrwxrwx 1 user group 2784 11 Sep 02:44 index.php
drwxrwxrwx 27 user group 918 23 Feb 12:03 install
drwxrwxrwx 80 user group 2720 23 Feb 12:03 inter_pages
drwxrwxrwx 6 user group 204 23 Feb 12:03 langue
…
drwxrwxrwx 7 user group 238 2 Mar 18:15 log
drwxrwxrwx 36 user group 1224 23 Feb 12:03 mail
vendredi 13 novembre 2009 51
52. Les fichiers
total 592
drwxrwxrwx 25 user group 850 23 Feb 12:03 accueil
drwxrwxrwx 67 user group 2278 23 Feb 12:03 action
drwxrwxrwx 39 user group 1326 23 Feb 12:03 agent
drwxrwxrwx 13 user group 442 23 Feb 12:03 biblio
drwxrwxrwx 39 user group 1326 23 Feb 12:03 compte
-rwxrwxrwx 1 user group 7692 11 Sep 02:44 connect.php
-rwxrwxrwx 1 user group 3856 11 Sep 02:44 err_navig.php
-rwxrwxrwx 1 user group 3165 11 Sep 02:44 erreur404.php
drwxrwxrwx 76 user group 2584 23 Feb 12:03 etat
drwxrwxrwx 171 user group 5814 23 Feb 12:03 fonctions
drwxrwxrwx 8 user group 272 23 Feb 12:03 images
drwxrwxrwx 13 user group 442 23 Feb 12:03 include
-rwxrwxrwx 1 user group 2784 11 Sep 02:44 index.php
drwxrwxrwx 27 user group 918 23 Feb 12:03 install
drwxrwxrwx 80 user group 2720 23 Feb 12:03 inter_pages
drwxrwxrwx 6 user group 204 23 Feb 12:03 langue
…
drwxrwxrwx 7 user group 238 2 Mar 18:15 log
drwxrwxrwx 36 user group 1224 23 Feb 12:03 mail
vendredi 13 novembre 2009 52
53. Les fichiers
total 592
drwxrwxrwx 25 user group 850 23 Feb 12:03 accueil
drwxrwxrwx 67 user group 2278 23 Feb 12:03 action
drwxrwxrwx 39 user group 1326 23 Feb 12:03 agent
drwxrwxrwx 13 user group 442 23 Feb 12:03 biblio
drwxrwxrwx 39 user group 1326 23 Feb 12:03 compte
-rwxrwxrwx 1 user group 7692 11 Sep 02:44 connect.php
-rwxrwxrwx 1 user group 3856 11 Sep 02:44 err_navig.php
-rwxrwxrwx 1 user group 3165 11 Sep 02:44 erreur404.php
drwxrwxrwx 76 user group 2584 23 Feb 12:03 etat
drwxrwxrwx 171 user group 5814 23 Feb 12:03 fonctions
drwxrwxrwx 8 user group 272 23 Feb 12:03 images
drwxrwxrwx 13 user group 442 23 Feb 12:03 include
-rwxrwxrwx 1 user group 2784 11 Sep 02:44 index.php
drwxrwxrwx 27 user group 918 23 Feb 12:03 install
drwxrwxrwx 80 user group 2720 23 Feb 12:03 inter_pages
drwxrwxrwx 6 user group 204 23 Feb 12:03 langue
…
drwxrwxrwx 7 user group 238 2 Mar 18:15 log
drwxrwxrwx 36 user group 1224 23 Feb 12:03 mail
vendredi 13 novembre 2009 53
54. Les fichiers
total 592
drwxrwxrwx 25 user group 850 23 Feb 12:03 accueil
drwxrwxrwx 67 user group 2278 23 Feb 12:03 action
drwxrwxrwx 39 user group 1326 23 Feb 12:03 agent
drwxrwxrwx 13 user group 442 23 Feb 12:03 biblio
drwxrwxrwx 39 user group 1326 23 Feb 12:03 compte
-rwxrwxrwx 1 user group 7692 11 Sep 02:44 connect.php
-rwxrwxrwx 1 user group 3856 11 Sep 02:44 err_navig.php
-rwxrwxrwx 1 user group 3165 11 Sep 02:44 erreur404.php
drwxrwxrwx 76 user group 2584 23 Feb 12:03 etat
drwxrwxrwx 171 user group 5814 23 Feb 12:03 fonctions
drwxrwxrwx 8 user group 272 23 Feb 12:03 images
drwxrwxrwx 13 user group 442 23 Feb 12:03 include
-rwxrwxrwx 1 user group 2784 11 Sep 02:44 index.php
drwxrwxrwx 27 user group 918 23 Feb 12:03 install
drwxrwxrwx 80 user group 2720 23 Feb 12:03 inter_pages
drwxrwxrwx 6 user group 204 23 Feb 12:03 langue
…
drwxrwxrwx 7 user group 238 2 Mar 18:15 log
drwxrwxrwx 36 user group 1224 23 Feb 12:03 mail
vendredi 13 novembre 2009 54
55. Les fichiers
total 592
drwxrwxrwx 25 user group 850 23 Feb 12:03 accueil
drwxrwxrwx 67 user group 2278 23 Feb 12:03 action
drwxrwxrwx 39 user group 1326 23 Feb 12:03 agent
drwxrwxrwx 13 user group 442 23 Feb 12:03 biblio
drwxrwxrwx 39 user group 1326 23 Feb 12:03 compte
-rwxrwxrwx 1 user group 7692 11 Sep 02:44 connect.php
-rwxrwxrwx 1 user group 3856 11 Sep 02:44 err_navig.php
-rwxrwxrwx 1 user group 3165 11 Sep 02:44 erreur404.php
drwxrwxrwx 76 user group 2584 23 Feb 12:03 etat
drwxrwxrwx 171 user group 5814 23 Feb 12:03 fonctions
drwxrwxrwx 8 user group 272 23 Feb 12:03 images
drwxrwxrwx 13 user group 442 23 Feb 12:03 include
-rwxrwxrwx 1 user group 2784 11 Sep 02:44 index.php
drwxrwxrwx 27 user group 918 23 Feb 12:03 install
drwxrwxrwx 80 user group 2720 23 Feb 12:03 inter_pages
drwxrwxrwx 6 user group 204 23 Feb 12:03 langue
…
drwxrwxrwx 7 user group 238 2 Mar 18:15 log
drwxrwxrwx 36 user group 1224 23 Feb 12:03 mail
vendredi 13 novembre 2009 55
56. Les fichiers
cligraphcrm/include/fpdf:
total 376
-rwxrwxrwx 1 user group 46002 26 Jan 02:41 fpdf.php
-rwxrwxrwx 1 user group 705 11 Sep 02:44 fpdf_entete.php
-rwxrwxrwx 1 user group 47404 26 Jan 18:07 fpdf_facture.php
-rwxrwxrwx 1 user group 14922 26 Jan 14:50 fpdf_html2pdf.php
-rwxrwxrwx 1 user group 5238 11 Sep 02:44 fpdf_mem_image.php
-rwxrwxrwx 1 user group 7629 11 Sep 02:44 fpdf_memoire.php
-rwxrwxrwx 1 user group 1243 11 Sep 02:44 fpdf_table_def.inc
-rwxrwxrwx 1 user group 27075 11 Sep 02:44 fpdf_tableau.php
-rwxrwxrwx 1 user group 4317 11 Sep 02:44 fpdf_texte.php
-rwxrwxrwx 1 user group 12852 11 Sep 02:44 fpdf_writetag.php
vendredi 13 novembre 2009 56
57. Les fichiers
cligraphcrm/include/fpdf:
total 376
-rwxrwxrwx 1 user group 46002 26 Jan 02:41 fpdf.php
-rwxrwxrwx 1 user group 705 11 Sep 02:44 fpdf_entete.php
-rwxrwxrwx 1 user group 47404 26 Jan 18:07 fpdf_facture.php
-rwxrwxrwx 1 user group 14922 26 Jan 14:50 fpdf_html2pdf.php
-rwxrwxrwx 1 user group 5238 11 Sep 02:44 fpdf_mem_image.php
-rwxrwxrwx 1 user group 7629 11 Sep 02:44 fpdf_memoire.php
-rwxrwxrwx 1 user group 1243 11 Sep 02:44 fpdf_table_def.inc
-rwxrwxrwx 1 user group 27075 11 Sep 02:44 fpdf_tableau.php
-rwxrwxrwx 1 user group 4317 11 Sep 02:44 fpdf_texte.php
-rwxrwxrwx 1 user group 12852 11 Sep 02:44 fpdf_writetag.php
vendredi 13 novembre 2009 57
58. Les fichiers
cligraphcrm/install/sql/tables:
total 928
-rwxrwxrwx 1 user group 4750 29 Jan 10:44 acces.sql
-rwxrwxrwx 1 user group 4802 29 Jan 10:44 acces_type.sql
-rwxrwxrwx 1 user group 190 23 Nov 20:12 admin_crm.sql
-rwxrwxrwx 1 user group 1111 3 Feb 14:45 adresse.sql
-rwxrwxrwx 1 user group 1637 15 Jan 11:24 affaire.sql
-rwxrwxrwx 1 user group 578 17 Jan 19:27 affaire_intvt.sql
-rwxrwxrwx 1 user group 1544 22 Oct 17:49 affaire_pdt.sql
-rwxrwxrwx 1 user group 3231 3 Dec 19:15 agent.sql
-rwxrwxrwx 1 user group 581 22 Oct 17:49 argument.sql
-rwxrwxrwx 1 user group 3062 25 Jan 09:45 avoir.sql
-rwxrwxrwx 1 user group 1605 21 Jan 06:30 avoir_detail.sql
-rwxrwxrwx 1 user group 741 22 Oct 17:49 campagne.sql
-rwxrwxrwx 1 user group 701 22 Oct 17:49 campagne_promo.sql
-rwxrwxrwx 1 user group 537 22 Oct 17:49 categorie_pdt.sql
-rwxrwxrwx 1 user group 527 27 Jan 11:36 cgv.sql
-rwxrwxrwx 1 user group 547 11 Sep 02:44 civilite.sql
-rwxrwxrwx 1 user group 4871 22 Oct 17:49 client.sql
vendredi 13 novembre 2009 58
68. Ordre du jour
• Lire les logs et repérer les vulnérabilités
• Caractériser et supprimer les failles
• Evaluation du volume de correction
vendredi 13 novembre 2009 68
69. Approche
• Un point d’entrée
• Lecture du code
• Ouverture d’esprit et découverte
• Identifier la faille
• Comment l’exploiter
vendredi 13 novembre 2009 69
71. Trois moteurs
• Grep
• Les expressions rationnelles
• Le tokenizer
vendredi 13 novembre 2009 71
72. Approches
Sémantique Rapide
700
• Sémantique : proche
des concepts PHP et 525
de programmation
350
• Rapide à mettre
en place et exécuter 175
0
Grep Regex Tokenizer
vendredi 13 novembre 2009 72
88. Register_globals
• Register globals via fct_urldecode dans fonctions/
fonctions_gen.php
• Utilisation des superglobales, puis intuition sur le
nom de la fonction
• $GLOBALS[$k] et affectation
vendredi 13 novembre 2009 88
89. Injections SQL
• $query="select theme_nom from theme where
theme_id="".$_REQUEST['theme_id'].""";
• Passer par les requêtes SQL, et chercher les variables
globales
• Lire le contexte et repérer les variables sans filtrage
vendredi 13 novembre 2009 89
90. err_nav.php XSS
• init_chem_crm est injecté directement
•
vendredi 13 novembre 2009 90
91. Téléchargements
• Via les fonctions header()
• Téléchargement de fichiers dans lanceur_dl.php
• Pas de protection des variables, ni par session
vendredi 13 novembre 2009 91
92. $_REQUEST DOS
• $_REQUEST est utilisé pour le logout
• if(isset($_REQUEST['opt']) && $_REQUEST['opt']==1)
• $_REQUEST == $_GET && $_POST && $_COOKIE
• Que se passe-t-il quand on pose un cookie ‘opt’ de 1?
vendredi 13 novembre 2009 92
93. include
• $format=$_REQUEST['exp_formdoc'];
• include(fct_lien_page_custom("action/facture_".
$format.".php","abs"));
• Maitrise du chemin d’inclusion
• $exp_formdoc = "/../action/facture_fiche";
<- auto-inclusion!
• ou bien, tentative d’inclusion d’un phpinfo qui traine
vendredi 13 novembre 2009 93
95. die
• $result2=$_SESSION['cligraph']->request($query2)
or die($_SESSION['cligraph']->errormsg)
• Interruption de script en cas de problème de
requêtes
• errormsg ne contient pas de message intéressant
vendredi 13 novembre 2009 95
96. Code OK
• Opérateur @
•
vendredi 13 novembre 2009 96