laboratoire sécurité : audit de code php - conférence php québec 2009

97
Audit Sécurité 1 vendredi 13 novembre 2009

Upload: philippe-gamache

Post on 07-Dec-2014

3.031 views

Category:

Technology


5 download

DESCRIPTION

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.

TRANSCRIPT

Page 1: Laboratoire sécurité : audit de code PHP - Conférence PHP Québec 2009

Audit Sécurité

1vendredi 13 novembre 2009

Page 2: Laboratoire sécurité : audit de code PHP - Conférence PHP Québec 2009

Ordre du jour

• Présentation de l’atelier

• Audit boîte noire

• Audit à code ouvert

2vendredi 13 novembre 2009

Page 3: Laboratoire sécurité : audit de code PHP - Conférence PHP Québec 2009

Qui parle?

• Philippe Gamache

• Parler haut, interagir librement : audit de sécurité, formations

• Caviste de cidres de glace

[email protected]

3vendredi 13 novembre 2009

Page 4: Laboratoire sécurité : audit de code PHP - Conférence PHP Québec 2009

Qui parle?

• Damien Seguy

• Alter Way Consulting : services experts enlogiciels libres

• Editeur de calendriers

[email protected]

4vendredi 13 novembre 2009

Page 5: Laboratoire sécurité : audit de code PHP - Conférence PHP Québec 2009

Livre sécurité

• Nouvelle édition 2009

• Bilan complet de lasécurité : système, MySQL, PHP, etc

• Edité chez Eyrolles

• Dédicaces sur demande

5vendredi 13 novembre 2009

Page 6: Laboratoire sécurité : audit de code PHP - Conférence PHP Québec 2009

Cligraph CRM• CRM/GRC Open Source

• Version 0.991

• Activement développé

• Soutenu par Cogiveahttp://www.cogivea.com/

• Léger, rapide et puissant

• http://www.cligraphcrm.com/

6vendredi 13 novembre 2009

Page 7: Laboratoire sécurité : audit de code PHP - Conférence PHP Québec 2009

Cligraph CRM

• Technologies PHP et MySQL, Javascript

• Code développé depuis 5 ans

• 4970 fichiers

• 1200 fichiers PHP

• 320 000 lignes de code

7vendredi 13 novembre 2009

Page 8: Laboratoire sécurité : audit de code PHP - Conférence PHP Québec 2009

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

8vendredi 13 novembre 2009

Page 9: Laboratoire sécurité : audit de code PHP - Conférence PHP Québec 2009

Tests boîte noire

99vendredi 13 novembre 2009

Page 10: Laboratoire sécurité : audit de code PHP - Conférence PHP Québec 2009

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?

1010vendredi 13 novembre 2009

Page 11: Laboratoire sécurité : audit de code PHP - Conférence PHP Québec 2009

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?

1111vendredi 13 novembre 2009

Page 12: Laboratoire sécurité : audit de code PHP - Conférence PHP Québec 2009

Tests boîte noire

• Attaquer

• Attaquer une vulnérabilité avec un but précis

1212vendredi 13 novembre 2009

Page 13: Laboratoire sécurité : audit de code PHP - Conférence PHP Québec 2009

Recherche d’informations

• Moteurs de recherches

• Facebook, LinkedIn, Joboom, Monster

• Langage de programmation

• Logiciels utilisés

1313vendredi 13 novembre 2009

Page 14: Laboratoire sécurité : audit de code PHP - Conférence PHP Québec 2009

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>

1414vendredi 13 novembre 2009

Page 15: Laboratoire sécurité : audit de code PHP - Conférence PHP Québec 2009

Recherche d’informations

• Moteurs de recherches (suite)

• Krugle : echo $_GET

• Bases de données de vulnérabilités

• BUGTRAQ

• CERT

• CVE

• Milw0rm

1515vendredi 13 novembre 2009

Page 16: Laboratoire sécurité : audit de code PHP - Conférence PHP Québec 2009

Recherche d’informations

• Google codesearch :

• XSSlang:php (echo|print).*\$_(GET|POST|COOKIE|REQUEST)

• Injection SQLlang:php query\(.*\$_(GET|POST|COOKIE|REQUEST).*\)

• Injection de codelang:php (include|include_once| require|require_once).*\$_(GET| POST|COOKIE|REQUEST)

1616vendredi 13 novembre 2009

Page 17: Laboratoire sécurité : audit de code PHP - Conférence PHP Québec 2009

Recherche d’informations

• Google codesearch :

• Injection d'en-tête HTTPlang:php header\s*\(.*\$_(SERVER| GET|POST|COOKIE|REQUEST).*\)

• Fixation de sessionlang:php session_start\(\)lang:php session_regenerate_id\(\)

1717vendredi 13 novembre 2009

Page 18: Laboratoire sécurité : audit de code PHP - Conférence PHP Québec 2009

Recherche d’informations

• Google codesearch :

• Affichage arbitraire de fichiers

lang:php (fopen|readfile|file_get_contents)\s*\(.*\$(_GET|_POST|HTTP_GET_VARS|HTTP_POST_VARS).*\)

1818vendredi 13 novembre 2009

Page 19: Laboratoire sécurité : audit de code PHP - Conférence PHP Québec 2009

Recherche d’informations

• Google codesearch :

• Mots de passes

filetype:sql INSERTintitle:"phpinfo()" +".default_password" ! +"Zend Scripting Language Engine"lang:php _connect\s*\(.*,.*,("|').*("|').*\)lang:php "VBULLETIN IS NOT FREE SOFTWARE"lang:php "XCART_SESSION_START"lang:php \$pass\w+\s*=\s*('|")\w+('|");

1919vendredi 13 novembre 2009

Page 20: Laboratoire sécurité : audit de code PHP - Conférence PHP Québec 2009

Recherche d’informations

• robots.txt

• Alias Apache

• /icons/

• Signatures dans les en têtes

• curl, wget, Firefox, Rex Swain's HTTP Viewer

• .phps

2020vendredi 13 novembre 2009

Page 21: Laboratoire sécurité : audit de code PHP - Conférence PHP Québec 2009

Recherche d’informations

• https

• Page 404

• Page blanche

• arrêt de code sans affichage d'erreur

2121vendredi 13 novembre 2009

Page 22: Laboratoire sécurité : audit de code PHP - Conférence PHP Québec 2009

Recherche d’informations

• Répertoires courants

• includes

• admin

• tmp

• data

• db

• uploads

2222vendredi 13 novembre 2009

Page 23: Laboratoire sécurité : audit de code PHP - Conférence PHP Québec 2009

Recherche d’informations

• theHarvesterhttp://www.edge-security.com/theHarvester.php

• MetaGoofilhttp://www.edge-security.com/metagoofil.php

• Nikto

http://www.cirt.net/

• SEAT (Search Engine Assessment Tool)http://midnightresearch.com/projects/search-engine-assessment-tool/

2323vendredi 13 novembre 2009

Page 24: Laboratoire sécurité : audit de code PHP - Conférence PHP Québec 2009

Recherche d’informations

• Subdomainerhttp://www.edge-security.com/subdomainer.php

2424vendredi 13 novembre 2009

Page 25: Laboratoire sécurité : audit de code PHP - Conférence PHP Québec 2009

Recherche d’informations

• http://www.cligraphcrm.com/

25vendredi 13 novembre 2009

Page 26: Laboratoire sécurité : audit de code PHP - Conférence PHP Québec 2009

Recherche d’informations

26vendredi 13 novembre 2009

Page 27: Laboratoire sécurité : audit de code PHP - Conférence PHP Québec 2009

Recherche d’informations

• Google

• Google codesearch

• Milm0rm

27vendredi 13 novembre 2009

Page 28: Laboratoire sécurité : audit de code PHP - Conférence PHP Québec 2009

Trouver des vulnérabilités

• Où trouver des vulnérabilités?

• XSS

• CSRF

• Injections

• Remplacement de fichiers

• etc.

2828vendredi 13 novembre 2009

Page 29: Laboratoire sécurité : audit de code PHP - Conférence PHP Québec 2009

Trouver des vulnérabilités

• Comment exploiter cette faiblesse?

• Que faire avec cette faille?

2929vendredi 13 novembre 2009

Page 30: Laboratoire sécurité : audit de code PHP - Conférence PHP Québec 2009

Outils manuels• Firefox

• Access Me

• Firebug

• Firecookie

• FirePHP

• HackBar

• Header Spy

• JavaScript Debugger

3030vendredi 13 novembre 2009

Page 31: Laboratoire sécurité : audit de code PHP - Conférence PHP Québec 2009

Outils manuels• Firefox

• Poster

• SQL Inject Me

• SQL Injection!

• User Agent Switcher

• Web Developer

• X-Forwarded-For Spoofer

• XSS Me Data

3131vendredi 13 novembre 2009

Page 32: Laboratoire sécurité : audit de code PHP - Conférence PHP Québec 2009

Outils manuels

• Rex Swain's HTTP Viewer

http://www.rexswain.com/httpview.html

3232vendredi 13 novembre 2009

Page 33: Laboratoire sécurité : audit de code PHP - Conférence PHP Québec 2009

Scanneurs automatiques

• Simple à mettre en oeuvre

• Permets de trouver les attaques les plus courantes

• Doivent être adaptés

• Mis à jour régulièrement

• Personnalisables

3333vendredi 13 novembre 2009

Page 34: Laboratoire sécurité : audit de code PHP - Conférence PHP Québec 2009

Scanneurs automatiques

• Acunetix Web Vulnerability Scanner

http://www.acunetix.com/vulnerability-scanner/

• BeEFhttp://www.bindshell.net/tools/beef/

• Burp Suitehttp://portswigger.net/suite/

• Metasploit http://www.metasploit.com/

3434vendredi 13 novembre 2009

Page 35: Laboratoire sécurité : audit de code PHP - Conférence PHP Québec 2009

Scanneurs automatiques

• Nikto

http://www.cirt.net/

• PBlindhttp://www.edge-security.com/pblind.php

• Scrawlrhttps://download.spidynamics.com/Products/scrawlr/

• SCRT Mini MySqlat0rhttp://www.scrt.ch/pages_en/minimysqlator.html

3535vendredi 13 novembre 2009

Page 36: Laboratoire sécurité : audit de code PHP - Conférence PHP Québec 2009

Scanneurs automatiques

• SCRT Webshaghttp://www.scrt.ch/pages_en/outils.html

• XSSploithttp://www.scrt.ch/pages_en/xssploit.html

3636vendredi 13 novembre 2009

Page 37: Laboratoire sécurité : audit de code PHP - Conférence PHP Québec 2009

Fuzzing

• Test par valeur aléatoire

• Stress des formulaires

• Bases de données

• Test décomplexé

3737vendredi 13 novembre 2009

Page 38: Laboratoire sécurité : audit de code PHP - Conférence PHP Québec 2009

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

3838vendredi 13 novembre 2009

Page 39: Laboratoire sécurité : audit de code PHP - Conférence PHP Québec 2009

Fuzzing

• Dictionnaires de valeurs

• de vulnérabilités

• GET, POST, COOKIE

• Des variables tableaux

• c[]=1

3939vendredi 13 novembre 2009

Page 40: Laboratoire sécurité : audit de code PHP - Conférence PHP Québec 2009

Fuzzing

• Excédents de variables

• debug=1, task=view

• Manque de variables

• Encodages variés

• UTF-8, Latin1, HTML, hexa

4040vendredi 13 novembre 2009

Page 41: Laboratoire sécurité : audit de code PHP - Conférence PHP Québec 2009

Fuzzing

• Burp Suitehttp://portswigger.net/suite/

• SCRT Webshaghttp://www.scrt.ch/pages_en/outils.html

• WebSlayerhttp://www.edge-security.com/webslayer.php

• Wfuzzhttp://www.edge-security.com/wfuzz.php

4141vendredi 13 novembre 2009

Page 42: Laboratoire sécurité : audit de code PHP - Conférence PHP Québec 2009

Scénarios

• Des tests plus adaptés

• fragiles

• Automatiser les tests

• À utiliser avec le fuzzing

• À utiliser avec des serveurs mandataires

4242vendredi 13 novembre 2009

Page 43: Laboratoire sécurité : audit de code PHP - Conférence PHP Québec 2009

Scénarios

• Burp Suitehttp://portswigger.net/suite/

• Firefox

• Selenium IDE

• Funkloadhttp://funkload.nuxeo.org/

• ProxyStrikehttp://www.edge-security.com/proxystrike.php

4343vendredi 13 novembre 2009

Page 45: Laboratoire sécurité : audit de code PHP - Conférence PHP Québec 2009

Facilitez votre vie• Backtrack

http://www.remote-exploit.org/backtrack.html

45vendredi 13 novembre 2009

Page 46: Laboratoire sécurité : audit de code PHP - Conférence PHP Québec 2009

Facilitez votre vie• Samurai Web Testing Framework

http://samurai.inguardians.com/

46vendredi 13 novembre 2009

Page 47: Laboratoire sécurité : audit de code PHP - Conférence PHP Québec 2009

Sécure ?47vendredi 13 novembre 2009

Page 48: Laboratoire sécurité : audit de code PHP - Conférence PHP Québec 2009

Les prolèmes

• Faux sentiment sécurité

• Ne marche pas toujours

48vendredi 13 novembre 2009

Page 49: Laboratoire sécurité : audit de code PHP - Conférence PHP Québec 2009

Notre cas

• La sécurité par l’insécurité

• La sécurité par l’instabilité

49vendredi 13 novembre 2009

Page 50: Laboratoire sécurité : audit de code PHP - Conférence PHP Québec 2009

• Tests manuels

• Les sources

• Installer l’application

Que faire?

50vendredi 13 novembre 2009

Page 51: Laboratoire sécurité : audit de code PHP - Conférence PHP Québec 2009

Les fichierstotal 592drwxrwxrwx 25 user group 850 23 Feb 12:03 accueildrwxrwxrwx 67 user group 2278 23 Feb 12:03 actiondrwxrwxrwx 39 user group 1326 23 Feb 12:03 agentdrwxrwxrwx 13 user group 442 23 Feb 12:03 bibliodrwxrwxrwx 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.phpdrwxrwxrwx 76 user group 2584 23 Feb 12:03 etatdrwxrwxrwx 171 user group 5814 23 Feb 12:03 fonctionsdrwxrwxrwx 8 user group 272 23 Feb 12:03 imagesdrwxrwxrwx 13 user group 442 23 Feb 12:03 include-rwxrwxrwx 1 user group 2784 11 Sep 02:44 index.phpdrwxrwxrwx 27 user group 918 23 Feb 12:03 installdrwxrwxrwx 80 user group 2720 23 Feb 12:03 inter_pagesdrwxrwxrwx 6 user group 204 23 Feb 12:03 langue…drwxrwxrwx 7 user group 238 2 Mar 18:15 logdrwxrwxrwx 36 user group 1224 23 Feb 12:03 mail

51vendredi 13 novembre 2009

Page 52: Laboratoire sécurité : audit de code PHP - Conférence PHP Québec 2009

Les fichierstotal 592drwxrwxrwx 25 user group 850 23 Feb 12:03 accueildrwxrwxrwx 67 user group 2278 23 Feb 12:03 actiondrwxrwxrwx 39 user group 1326 23 Feb 12:03 agentdrwxrwxrwx 13 user group 442 23 Feb 12:03 bibliodrwxrwxrwx 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.phpdrwxrwxrwx 76 user group 2584 23 Feb 12:03 etatdrwxrwxrwx 171 user group 5814 23 Feb 12:03 fonctionsdrwxrwxrwx 8 user group 272 23 Feb 12:03 imagesdrwxrwxrwx 13 user group 442 23 Feb 12:03 include-rwxrwxrwx 1 user group 2784 11 Sep 02:44 index.phpdrwxrwxrwx 27 user group 918 23 Feb 12:03 installdrwxrwxrwx 80 user group 2720 23 Feb 12:03 inter_pagesdrwxrwxrwx 6 user group 204 23 Feb 12:03 langue…drwxrwxrwx 7 user group 238 2 Mar 18:15 logdrwxrwxrwx 36 user group 1224 23 Feb 12:03 mail

52vendredi 13 novembre 2009

Page 53: Laboratoire sécurité : audit de code PHP - Conférence PHP Québec 2009

Les fichierstotal 592drwxrwxrwx 25 user group 850 23 Feb 12:03 accueildrwxrwxrwx 67 user group 2278 23 Feb 12:03 actiondrwxrwxrwx 39 user group 1326 23 Feb 12:03 agentdrwxrwxrwx 13 user group 442 23 Feb 12:03 bibliodrwxrwxrwx 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.phpdrwxrwxrwx 76 user group 2584 23 Feb 12:03 etatdrwxrwxrwx 171 user group 5814 23 Feb 12:03 fonctionsdrwxrwxrwx 8 user group 272 23 Feb 12:03 imagesdrwxrwxrwx 13 user group 442 23 Feb 12:03 include-rwxrwxrwx 1 user group 2784 11 Sep 02:44 index.phpdrwxrwxrwx 27 user group 918 23 Feb 12:03 installdrwxrwxrwx 80 user group 2720 23 Feb 12:03 inter_pagesdrwxrwxrwx 6 user group 204 23 Feb 12:03 langue…drwxrwxrwx 7 user group 238 2 Mar 18:15 logdrwxrwxrwx 36 user group 1224 23 Feb 12:03 mail

53vendredi 13 novembre 2009

Page 54: Laboratoire sécurité : audit de code PHP - Conférence PHP Québec 2009

Les fichierstotal 592drwxrwxrwx 25 user group 850 23 Feb 12:03 accueildrwxrwxrwx 67 user group 2278 23 Feb 12:03 actiondrwxrwxrwx 39 user group 1326 23 Feb 12:03 agentdrwxrwxrwx 13 user group 442 23 Feb 12:03 bibliodrwxrwxrwx 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.phpdrwxrwxrwx 76 user group 2584 23 Feb 12:03 etatdrwxrwxrwx 171 user group 5814 23 Feb 12:03 fonctionsdrwxrwxrwx 8 user group 272 23 Feb 12:03 imagesdrwxrwxrwx 13 user group 442 23 Feb 12:03 include-rwxrwxrwx 1 user group 2784 11 Sep 02:44 index.phpdrwxrwxrwx 27 user group 918 23 Feb 12:03 installdrwxrwxrwx 80 user group 2720 23 Feb 12:03 inter_pagesdrwxrwxrwx 6 user group 204 23 Feb 12:03 langue…drwxrwxrwx 7 user group 238 2 Mar 18:15 logdrwxrwxrwx 36 user group 1224 23 Feb 12:03 mail

54vendredi 13 novembre 2009

Page 55: Laboratoire sécurité : audit de code PHP - Conférence PHP Québec 2009

Les fichierstotal 592drwxrwxrwx 25 user group 850 23 Feb 12:03 accueildrwxrwxrwx 67 user group 2278 23 Feb 12:03 actiondrwxrwxrwx 39 user group 1326 23 Feb 12:03 agentdrwxrwxrwx 13 user group 442 23 Feb 12:03 bibliodrwxrwxrwx 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.phpdrwxrwxrwx 76 user group 2584 23 Feb 12:03 etatdrwxrwxrwx 171 user group 5814 23 Feb 12:03 fonctionsdrwxrwxrwx 8 user group 272 23 Feb 12:03 imagesdrwxrwxrwx 13 user group 442 23 Feb 12:03 include-rwxrwxrwx 1 user group 2784 11 Sep 02:44 index.phpdrwxrwxrwx 27 user group 918 23 Feb 12:03 installdrwxrwxrwx 80 user group 2720 23 Feb 12:03 inter_pagesdrwxrwxrwx 6 user group 204 23 Feb 12:03 langue…drwxrwxrwx 7 user group 238 2 Mar 18:15 logdrwxrwxrwx 36 user group 1224 23 Feb 12:03 mail

55vendredi 13 novembre 2009

Page 56: Laboratoire sécurité : audit de code PHP - Conférence PHP Québec 2009

Les fichierscligraphcrm/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

56vendredi 13 novembre 2009

Page 57: Laboratoire sécurité : audit de code PHP - Conférence PHP Québec 2009

Les fichierscligraphcrm/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

57vendredi 13 novembre 2009

Page 58: Laboratoire sécurité : audit de code PHP - Conférence PHP Québec 2009

Les fichierscligraphcrm/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

58vendredi 13 novembre 2009

Page 59: Laboratoire sécurité : audit de code PHP - Conférence PHP Québec 2009

Installation

59vendredi 13 novembre 2009

Page 60: Laboratoire sécurité : audit de code PHP - Conférence PHP Québec 2009

Installation

60vendredi 13 novembre 2009

Page 61: Laboratoire sécurité : audit de code PHP - Conférence PHP Québec 2009

Installation

61vendredi 13 novembre 2009

Page 62: Laboratoire sécurité : audit de code PHP - Conférence PHP Québec 2009

Installation

62vendredi 13 novembre 2009

Page 63: Laboratoire sécurité : audit de code PHP - Conférence PHP Québec 2009

Installation

63vendredi 13 novembre 2009

Page 64: Laboratoire sécurité : audit de code PHP - Conférence PHP Québec 2009

Installation

64vendredi 13 novembre 2009

Page 65: Laboratoire sécurité : audit de code PHP - Conférence PHP Québec 2009

Installation

65vendredi 13 novembre 2009

Page 66: Laboratoire sécurité : audit de code PHP - Conférence PHP Québec 2009

Installation

66vendredi 13 novembre 2009

Page 67: Laboratoire sécurité : audit de code PHP - Conférence PHP Québec 2009

Audit de code

67vendredi 13 novembre 2009

Page 68: Laboratoire sécurité : audit de code PHP - Conférence PHP Québec 2009

Ordre du jour

• Lire les logs et repérer les vulnérabilités

• Caractériser et supprimer les failles

• Evaluation du volume de correction

68vendredi 13 novembre 2009

Page 69: Laboratoire sécurité : audit de code PHP - Conférence PHP Québec 2009

Approche

• Un point d’entrée

• Lecture du code

• Ouverture d’esprit et découverte

• Identifier la faille

• Comment l’exploiter

69vendredi 13 novembre 2009

Page 70: Laboratoire sécurité : audit de code PHP - Conférence PHP Québec 2009

Outils existants• Rats

http://www.fortifysoftware.com/security-resources/rats.jsp

• Yascahttp://www.yasca.org

/accueil/accueil.php:478: High: fopen/action/facture_trt.php:170: High: eval/include/pear/File_Archive/Archive/Reader/Bzip2.php:80: High: bzopen/mail/mess_suppr_trt.php:193: High: mail/include/pear/PEAR/RunTest.php:449: High: system/fonctions/gallery.func.php:95: Medium: is_dir/include/pear/PEAR/Remote.php:296: Medium: fsockopen

70vendredi 13 novembre 2009

Page 71: Laboratoire sécurité : audit de code PHP - Conférence PHP Québec 2009

Trois moteurs

• Grep

• Les expressions rationnelles

• Le tokenizer

71vendredi 13 novembre 2009

Page 72: Laboratoire sécurité : audit de code PHP - Conférence PHP Québec 2009

Approches

• Sémantique : prochedes concepts PHP et de programmation

• Rapide à mettre en place et exécuter

0

175

350

525

700

Grep Regex Tokenizer

Sémantique Rapide

72vendredi 13 novembre 2009

Page 73: Laboratoire sécurité : audit de code PHP - Conférence PHP Québec 2009

Occurrences

$_GET $_POST $_REQUEST

Grep 137 604 2650

Regex 139 667 3279

Token 11 617 1518

73vendredi 13 novembre 2009

Page 74: Laboratoire sécurité : audit de code PHP - Conférence PHP Québec 2009

Choix

• One-liner contre temps de développement

• Précision sémantique face à recherche brute

• Rejouable ou jetable

74vendredi 13 novembre 2009

Page 75: Laboratoire sécurité : audit de code PHP - Conférence PHP Québec 2009

Points d’intérêt

• index.php

• index_bis.php

• err_nav.php

• out.php

• erreur404.php

• verif.php

75vendredi 13 novembre 2009

Page 76: Laboratoire sécurité : audit de code PHP - Conférence PHP Québec 2009

Points d’intérêt

Entrée Filtrage

Traitement Suivi

Sortie Protection

76vendredi 13 novembre 2009

Page 77: Laboratoire sécurité : audit de code PHP - Conférence PHP Québec 2009

Cheminement

$_GET

echo

pdo_query

pdo_fetch

77vendredi 13 novembre 2009

Page 78: Laboratoire sécurité : audit de code PHP - Conférence PHP Québec 2009

Interfaces

• Navigateur

• URL

• Cookies

• JavaScript

• SQL

• Système

• Processus

• PHP

• XML

• LDAP ...

78vendredi 13 novembre 2009

Page 79: Laboratoire sécurité : audit de code PHP - Conférence PHP Québec 2009

Navigateur• Entrées

• $_GET, $_POST, $_REQUEST, $_SERVER, $_COOKIE

• Sorties

• echo, print, var_dump

• Protections

• htmlentities, htmlspecialchars, strip_tagsext/xmlwriter

79vendredi 13 novembre 2009

Page 80: Laboratoire sécurité : audit de code PHP - Conférence PHP Québec 2009

URL• Entrées

• parse_url, urldecode, rawurldecode

• Sorties

• echo, print, http_build_url, http_build_query, http_build_str

• Protections

• url_encode, rawurlencode

80vendredi 13 novembre 2009

Page 81: Laboratoire sécurité : audit de code PHP - Conférence PHP Québec 2009

Cookies

• Entrées

• $_COOKIES, $HTTP_COOKIE_VARS, http_parse_cookies, session_name

• Sorties

• setcookies, setrawcookie, stream_context_create, httpRequest::setcookies, http_build_cookie

• Protections

81vendredi 13 novembre 2009

Page 82: Laboratoire sécurité : audit de code PHP - Conférence PHP Québec 2009

JavaScript

• Entrées

• json_decode

• Sorties

• json_encode, echo, print

• Protections

• Rien vraiment

82vendredi 13 novembre 2009

Page 83: Laboratoire sécurité : audit de code PHP - Conférence PHP Québec 2009

SQL

• Entrées

• pdo_query, mysqli_query, query,

• Sorties

• *fetch*, mysqli_error

• Protections

• pdo_quote, mysqli_real_escape_string, etc.

83vendredi 13 novembre 2009

Page 84: Laboratoire sécurité : audit de code PHP - Conférence PHP Québec 2009

Fichiers

• Entrées

• fopen, file_get_contents, passthru

• Sorties

• fwrite, fread, mkdir,

• Protections

• pathinfo, realpath

84vendredi 13 novembre 2009

Page 85: Laboratoire sécurité : audit de code PHP - Conférence PHP Québec 2009

PHP• Entrées

• eval, include, require et _once, dl, preg_replace, assert

• Sorties

• var_export

• Protections

• Aucune pour le code, fichiers pour les autres.

85vendredi 13 novembre 2009

Page 86: Laboratoire sécurité : audit de code PHP - Conférence PHP Québec 2009

Système• Entrées

• ini_get, set_limit, getenv, getmypid, phpversion, phpinfo,

• Sorties

• ini_set, setenv

• Protections

• Aucune prévue

86vendredi 13 novembre 2009

Page 87: Laboratoire sécurité : audit de code PHP - Conférence PHP Québec 2009

Trouvailles

87vendredi 13 novembre 2009

Page 88: Laboratoire sécurité : audit de code PHP - Conférence PHP Québec 2009

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

88vendredi 13 novembre 2009

Page 89: Laboratoire sécurité : audit de code PHP - Conférence PHP Québec 2009

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

89vendredi 13 novembre 2009

Page 90: Laboratoire sécurité : audit de code PHP - Conférence PHP Québec 2009

err_nav.php XSS

• init_chem_crm est injecté directement

90vendredi 13 novembre 2009

Page 91: Laboratoire sécurité : audit de code PHP - Conférence PHP Québec 2009

Téléchargements

• Via les fonctions header()

• Téléchargement de fichiers dans lanceur_dl.php

• Pas de protection des variables, ni par session

91vendredi 13 novembre 2009

Page 92: Laboratoire sécurité : audit de code PHP - Conférence PHP Québec 2009

$_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?

92vendredi 13 novembre 2009

Page 93: Laboratoire sécurité : audit de code PHP - Conférence PHP Québec 2009

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

93vendredi 13 novembre 2009

Page 94: Laboratoire sécurité : audit de code PHP - Conférence PHP Québec 2009

eval

• $nom=addslashes($_REQUEST['nom']);

• eval('insert_action_agent("'.$LANG_AGENT['cgv_mod'].'",66,'.$param_id.',"","'.$date_du_jour.'",2);');

• PHP injection!

94vendredi 13 novembre 2009

Page 95: Laboratoire sécurité : audit de code PHP - Conférence PHP Québec 2009

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

95vendredi 13 novembre 2009

Page 96: Laboratoire sécurité : audit de code PHP - Conférence PHP Québec 2009

Code OK

• Opérateur @

96vendredi 13 novembre 2009

Page 97: Laboratoire sécurité : audit de code PHP - Conférence PHP Québec 2009

97vendredi 13 novembre 2009