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


Top Related