Eric Gingras, directeur de la R&DSébastien Duquette, analyste en sécuritéLe fuzzing et les tests dintrusions
Objectifs de la présentation   Être complète en soit        – à lexception des vulnérabilités   Faire létat de lart :   ...
Contenu de la présentation   Le concept de "test dintrusion"   Le fuzzing       – définitions       – méthodologies   L...
Contenu de la présentation   Le concept de "test dintrusion"   Le fuzzing       – définitions       – méthodologies   L...
La définition de "test dintrusion"                                 « une   série dactivités effectuées pour               ...
On a besoin de tests dintrusions                           Parce que les logiciels deviennent de plus                    ...
La méthodologie des tests dintrusions    Déroulement dun test dintrusion :    Définition                                 ...
Contenu de la présentation   Le concept de "test dintrusion"   Le fuzzing       – définitions       – méthodologies   L...
Définition du "fuzzing"   Une technique de test qui consiste à    injecter des données :       – invalides       – inatte...
Le fuzzing est un paradigme de test   Buts des méthodes de tests :       – Tests exhaustifs : trouver toutes les         ...
Le fuzzing Fonctionne                         2006 : Month of Browser Bugs                                   – majorité d...
... et 20 lignes de codefrom socket import *                              while True:from time import sleep               ...
La Méthodologie du fuzzing1. Identification de la cible2. Identification des vecteurs   dentrée3. Génération des données  ...
Cibles du fuzzing   Interpréteurs de commandes        – arguments dune commande   Variables denvironnement   Fichiers ...
Cibles du fuzzing (suite)   Protocoles réseau       – Protocoles simples                  • ASCII                  • peu ...
La génération de données pour le fuzzing   Par génération       – Aléatoire       – Pré-génération       – Génération de ...
La génération de données aléatoire  “Poor-man fuzzers”while true; do cat /dev/urandom | nc ADRESSE_IP PORT; done         H...
Hackfest 2009 : Fuzzing et tests dintrusions   18
La Mutation de données automatisée      Hackfest 2009 : Fuzzing et tests dintrusions   19
La Génération de protocole from sulley import * s_initialize("join") s_string("NomJoueur") s_static("^^Ar1111111n") s_stat...
Source du problème   Lorsquun déplacement est demandé, le    numéro de ville est utilisé comme index    dans un tableau. ...
Méthodologie des tests dintrusions vs fuzzing    Méthodologie des tests dintrusions    Définition                        ...
Contenu de la présentation   Le concept de "test dintrusion"   Le fuzzing       – définitions       – méthodologies   L...
Les contraintes liées aux tests dintrusion   Manque de visibilité        – signaux invisibles : logs, mémoire, fichiers, ...
Contenu de la présentation   Le concept de "test dintrusion"   Le fuzzing       – définitions       – méthodologies   L...
Les applications web   Les applications web représentent une cible    intéressante étant donné :       – La standardisati...
identification de la cible et des entrees   Entrées dune application Web       – Paramètres              HTTP GET/POST   ...
Génération des données   Par dictionnaire      – liste de chaines qui risquent de générer des          erreurs si lapplic...
Analyse des resultats et exploitation   Signaux observables        – HTTP Status codes        – Messages dans la page    ...
OWASP Top10 et le fuzzingClasse de vulnérabilité                    Utilité du fuzzingCross-Site Scripting                ...
Outils disponibles   Scanneurs utilisant une base de données de    vulnérabilités :        – Nessus, Nikto        – ne re...
Démo                               Questions ?Hackfest 2009 : Fuzzing et tests dintrusions   32
Démo 1 : ReDoS   Expressions régulières sont répandues pour la    recherche et la validation de paramètres    ^(z[eé]ro|u...
Démo 1 : ReDoS   Les expressions régulières sont un langage    de description formelle         – Certaines expressions re...
Démo 1 : ReDoS   Attaque : viser les pire cas dévaluation    dexpressions régulières       – Contexte des applications we...
Démo 1 : ReDoS                          Ça arrive même aux meilleurs ! (OWASP                           validation Projec...
Démo 2 : Services WebSelon Wikipédia : “un programme informatiquepermettant la communication et léchange dedonnées entre a...
Démo 2 : Services WebGénéralement 3 composants :   Protocole de transport(SOAP, XML-RPC, REST)       – définit la structu...
Démo 2 : Services Web   La description permet de connaître la forme des appels    par analyse syntaxique : idéal pour aut...
Démo 2 : Services Web    Tests possibles :   Analyse syntaxique des requêtes        – requêtes mal-formées, paramètres re...
Démo 2 : Services Web      Hackfest 2009 : Fuzzing et tests dintrusions   41
Questions ?  Hackfest 2009 : Fuzzing et tests dintrusions   42
Prochain SlideShare
Chargement dans…5
×

Du fuzzing dans les tests d'intrusions? (Éric Gingras)

1 780 vues

Publié le

D'abord le concept de tests d'intrusions, tel qu'ils sont habituellement conduits dans l'industrie, sera défini. Après cette brève introduction, le fuzzing sera présenté en détails : définitions, méthodologies, avantages et inconvénients, etc. Le fuzzing est une technique de plus en plus mature et utilisée pour la découverte de vulnérabilités, mais le fuzzing peut-il être utilisé pour améliorer les tests d'intrusions ? Et plus spécifiquement pour les tests d'applications Web ? Si oui, comment? Si non, pourquoi ? Ensuite, dans la deuxième partie de la présentation, nous ferons un survol des différentes utilisations du fuzzing dans les outils les plus populaires pour les tests d'intrusions. Pour conclure, nous discuterons de la questions suivante : Comment le fuzzing pourrait prendre encore plus de place dans les tests d'intrusions ?

Publié dans : Technologie
0 commentaire
1 j’aime
Statistiques
Remarques
  • Soyez le premier à commenter

Aucun téléchargement
Vues
Nombre de vues
1 780
Sur SlideShare
0
Issues des intégrations
0
Intégrations
2
Actions
Partages
0
Téléchargements
0
Commentaires
0
J’aime
1
Intégrations 0
Aucune incorporation

Aucune remarque pour cette diapositive

Du fuzzing dans les tests d'intrusions? (Éric Gingras)

  1. 1. Eric Gingras, directeur de la R&DSébastien Duquette, analyste en sécuritéLe fuzzing et les tests dintrusions
  2. 2. Objectifs de la présentation Être complète en soit – à lexception des vulnérabilités Faire létat de lart : – du fuzzing dans les tests dintrusions – de lutilisation du fuzzing dans les outils pour les tests dintrusions dapplications Web Présenter des exemples concrets Hackfest 2009 : Fuzzing et tests dintrusions 2
  3. 3. Contenu de la présentation Le concept de "test dintrusion" Le fuzzing – définitions – méthodologies Les difficultés du fuzzing dans le cadre dun test dintrusion Le fuzzing et les applications Web Démo Hackfest 2009 : Fuzzing et tests dintrusions 3
  4. 4. Contenu de la présentation Le concept de "test dintrusion" Le fuzzing – définitions – méthodologies Les difficultés du fuzzing dans le cadre dun test dintrusion Le fuzzing et les applications Web Démo Hackfest 2009 : Fuzzing et tests dintrusions 4
  5. 5. La définition de "test dintrusion" « une série dactivités effectuées pour détecter et exploiter les failles de sécurité afin de déterminer dans quelle mesure il est facile ou difficile pour un tiers de déjouer les contrôles de sécurité dune organisation ou daccéder sans autorisation à son information et à ses systèmes »1 Pour évaluer la sécurité (confidentialité, intégrité et disponibilité) dune organisation – robustesse des systèmes – protections – politiques et procédures Hackfest 2009 : Fuzzing et tests dintrusions 51 – Source : le Grand Dictionnaire Terminologique de lOLF (http://www.granddictionnaire.com)
  6. 6. On a besoin de tests dintrusions  Parce que les logiciels deviennent de plus en plus complexes : – de plus en plus de lignes de code – ouverture des systèmes (Internet) – nombre de couches – logiciels plus puissants – expertise en sécurité 1 informationnelle Hackfest 2009 : Fuzzing et tests dintrusions 61 – SANS (http://www.sans.org/top-cyber-security-risks/) : “60% des problèmes de sécurité sur Internet sont liés aux applications Web”
  7. 7. La méthodologie des tests dintrusions Déroulement dun test dintrusion : Définition Découverte de Vérification de Reconnaissance de la cible vulnérabilités lexploitabilité Portée dun test : – Test boîte noire (entrées et sorties) – Test boîte blanche (code source) – Test boîte grise (exécutable) Hackfest 2009 : Fuzzing et tests dintrusions 7
  8. 8. Contenu de la présentation Le concept de "test dintrusion" Le fuzzing – définitions – méthodologies Les difficultés du fuzzing dans le cadre dun test dintrusion Le fuzzing et les applications Web Démo Hackfest 2009 : Fuzzing et tests dintrusions 8
  9. 9. Définition du "fuzzing" Une technique de test qui consiste à injecter des données : – invalides – inattendues – aléatoires Dans le but de générer : – une opération erronée – une exception – un résultat inattendu – un crash, etc. Hackfest 2009 : Fuzzing et tests dintrusions 9
  10. 10. Le fuzzing est un paradigme de test Buts des méthodes de tests : – Tests exhaustifs : trouver toutes les failles – Méthodes formelles : garantir labsence de failles (assurance de qualité) – Fuzzing : trouver des vulnérabilités Hackfest 2009 : Fuzzing et tests dintrusions 10
  11. 11. Le fuzzing Fonctionne  2006 : Month of Browser Bugs – majorité des bugs découverts par fuzzing – publication de fuzzers : AxMan, Hamachi, MangleMe, etc.  Le fuzzing fait partie du SDL (Security Development Lifecycle) de Microsoft  Septembre 2009, découverte dune vulnérabilité majeure dans SMBv2 (Windows Vista & 2008) par L. Gaffié – trouvée en 3 secondes, 15 paquets ... Hackfest 2009 : Fuzzing et tests dintrusions 111 - Source : http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2009-3103
  12. 12. ... et 20 lignes de codefrom socket import * while True:from time import sleep #/Core#from random import choice what = packet[:] where = choice(range(len(packet)))host = "IP_ADDR", 445 which = chr(choice(range(256)))#Negotiate Protocol Request what[where] = whichpacket = [chr(int(a, 16)) for a in """ #/Core#00 00 00 90 ff 53 4d 42 72 00 0000 00 18 53 c8 00 00 00 00 00 00 00 #sending stuff @host00 00 00 00 00 ff ff ff fe 00 00 00 00 sock = socket()00 6d 00 02 50 43 20 4e 45 54 57 4f sock.connect(host)52 4b 20 50 52 4f 47 52 41 4d 20 31 2e30 00 02 4c 41 4e 4d 41 4e 31 2e 30 sock.send( .join(what))00 02 57 69 6e 64 6f 77 73 20 66 6f 72 sleep(0.1) # dont flood it20 57 6f 72 6b 67 72 6f 75 70 73 20 33 print fuzzing param %s %2e 31 61 00 02 4c 4d 31 2e 32 58 30 30 (which.encode("hex"))32 00 02 4c 41 4e 4d 41 4e 32 2e 31 print complete packet %s %00 02 4e 54 20 4c 4d 20 30 2e 31 32 (.join(what).encode("hex"))00 02 53 4d 42 20 32 2e 30 30 32 00""".split()] sock.close() Hackfest 2009 : Fuzzing et tests dintrusions 12
  13. 13. La Méthodologie du fuzzing1. Identification de la cible2. Identification des vecteurs dentrée3. Génération des données pour le fuzzing4. Exécution des tests5. Analyse des exceptions générées6. Analyse de lexploitabilité des vulnérabilités découvertes Hackfest 2009 : Fuzzing et tests dintrusions 13
  14. 14. Cibles du fuzzing Interpréteurs de commandes – arguments dune commande Variables denvironnement Fichiers Librairies Navigateurs web – Javascript, ActiveX, Java – Plugins : Flash, Adobe Reader, etc. Hackfest 2009 : Fuzzing et tests dintrusions 14
  15. 15. Cibles du fuzzing (suite) Protocoles réseau – Protocoles simples • ASCII • peu dauthentification • échanges linéaires – Protocoles complexes • binaires • sécurisés, contrôle derreurs • Fragmentés Applications Web – Vulnérabilités courantes (XSS, CSRF, SQLi, etc.) Hackfest 2009 : Fuzzing et tests dintrusions 15
  16. 16. La génération de données pour le fuzzing Par génération – Aléatoire – Pré-génération – Génération de protocoles Par mutation – Mutation manuelle – Mutation automatisée Hackfest 2009 : Fuzzing et tests dintrusions 16
  17. 17. La génération de données aléatoire “Poor-man fuzzers”while true; do cat /dev/urandom | nc ADRESSE_IP PORT; done Hackfest 2009 : Fuzzing et tests dintrusions 17
  18. 18. Hackfest 2009 : Fuzzing et tests dintrusions 18
  19. 19. La Mutation de données automatisée Hackfest 2009 : Fuzzing et tests dintrusions 19
  20. 20. La Génération de protocole from sulley import * s_initialize("join") s_string("NomJoueur") s_static("^^Ar1111111n") s_static("^^Ac") s_string("NomJoueur") s_static("n") s_initialize("jet") s_static("^AV") s_word(1, format="ascii") s_static("n") sess = sessions.session(timeout=5, sleep_time=0.1) sess.connect(s_get("join")) sess.connect(s_get("join"), s_get("jet")) target = sessions.target("127.0.0.1", 7902) sess.add_target(target) sess.fuzz() Hackfest 2009 : Fuzzing et tests dintrusions 20
  21. 21. Source du problème Lorsquun déplacement est demandé, le numéro de ville est utilisé comme index dans un tableau. case C_REQUESTJET: i = atoi(Data); .... else if (i != Play->IsAt && (NumTurns == 0 || Play->Turn <>EventNum == E_NONE && Play->Health > 0) { dopelog(4, LF_SERVER, "%s jets to %s", GetPlayerName(Play), Location[i].Name); Bug découvert par dougtko, corrigé dans la version 1.5.13 Hackfest 2009 : Fuzzing et tests dintrusions 21
  22. 22. Méthodologie des tests dintrusions vs fuzzing Méthodologie des tests dintrusions Définition Découverte de Vérification de Reconnaissance de la cible vulnérabilités lexploitabilité Méthodologie du fuzzing1. Identification 4. Exécution de la cible et 3. Génération des tests et 6. Vérification de2. Identification des données 5. Analyse lexploitabilité des entrées des résultats Hackfest 2009 : Fuzzing et tests dintrusions 22
  23. 23. Contenu de la présentation Le concept de "test dintrusion" Le fuzzing – définitions – méthodologies Les difficultés du fuzzing dans le cadre dun test dintrusion Le fuzzing et les applications Web Démo Hackfest 2009 : Fuzzing et tests dintrusions 23
  24. 24. Les contraintes liées aux tests dintrusion Manque de visibilité – signaux invisibles : logs, mémoire, fichiers, etc. – Impossibilité dinstrumentaliser le serveur Risques de faire planter le serveur – « peu recommandé » sur les serveurs de production Utilité restreinte – recréer environnement de façon locale • long, pas toujours possible, faible ROI – trouver des dénis de service (DoS) Hackfest 2009 : Fuzzing et tests dintrusions 24
  25. 25. Contenu de la présentation Le concept de "test dintrusion" Le fuzzing – définitions – méthodologies Les difficultés du fuzzing dans le cadre dun test dintrusion Le fuzzing et les applications Web Démo Hackfest 2009 : Fuzzing et tests dintrusions 25
  26. 26. Les applications web Les applications web représentent une cible intéressante étant donné : – La standardisation des protocoles • HTTP, HTML, XML, SOAP – Applications  ”maison” : code peu testé, développement ad-hoc – Couches élevées, donc moins de risque de crash – Messages derreurs souvent bavards Hackfest 2009 : Fuzzing et tests dintrusions 26
  27. 27. identification de la cible et des entrees Entrées dune application Web – Paramètres HTTP GET/POST – Formulaires (cas particulier des paramètres POST) – Champs cachés – Paramètres HTTP : Cookie, Referer, Browser Hackfest 2009 : Fuzzing et tests dintrusions 27
  28. 28. Génération des données Par dictionnaire – liste de chaines qui risquent de générer des erreurs si lapplication est vulnérable Par mutation – Encodages : jeux de caractères, entités HTML, double encodages – Multiples valeurs pour un même paramètre – Valeurs autres que celles permises pour un champ (validation javascript, limite de champ) – Mix and match : utilisation simultané de valeurs qui ne devraient pas être ensemble Hackfest 2009 : Fuzzing et tests dintrusions 28
  29. 29. Analyse des resultats et exploitation Signaux observables – HTTP Status codes – Messages dans la page • Erreurs PHP, ASP, JSP : demande que les erreurs soient affichées • « soft » (404) • Comparaison avec le message attendu – Taille de la réponse – Connexions interrompues Signaux invisibles : logs, traces du serveur, inspection des données (SQL) Hackfest 2009 : Fuzzing et tests dintrusions 29
  30. 30. OWASP Top10 et le fuzzingClasse de vulnérabilité Utilité du fuzzingCross-Site Scripting BeaucoupInjection flaws BeaucoupMalicious File execution Un peuDirect Object Reference BeaucoupCross-Site Request Forgery Beaucoup *Information Leakage / Error BeaucoupHandlingBroken Session Management Du toutInsecure Cryptographic Storage Du toutInsecure communications Un peuFailure to restrict URL access Beaucoup Hackfest 2009 : Fuzzing et tests dintrusions 30
  31. 31. Outils disponibles Scanneurs utilisant une base de données de vulnérabilités : – Nessus, Nikto – ne recherchent pas de nouvelles vulnérabilités Scanneurs utilisant le modèle « Test-case » : – Paros Proxy, w3af, wapiti, XSSploit – utilisation de patterns connus. Fuzzing manuel : – WebScarab, Burp, Paros, w3af Commerciaux – WebInspect, Acunetix, Rational Appscan Hackfest 2009 : Fuzzing et tests dintrusions 31
  32. 32. Démo Questions ?Hackfest 2009 : Fuzzing et tests dintrusions 32
  33. 33. Démo 1 : ReDoS Expressions régulières sont répandues pour la recherche et la validation de paramètres ^(z[eé]ro|un|deux|trois|quatre|cinq|six|sept|huit|neuf)$ devient rapidement très complexe à lire ^(((25[0-5]|2[0-4][0-9]|19[0-1]|19[3-9]|18[0-9]|17[0- 1]|17[3-9]|1[0-6][0-9]|1[1-9]|[2-9][0-9]|[0-9]).(25[0- 5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9]))|(192. (25[0-5]|2[0-4][0-9]|16[0-7]|169|1[0-5][0-9]|1[7-9][0- 9]|[1-9][0-9]|[0-9]))|(172.(25[0-5]|2[0-4][0-9]|1[0-9] [0-9]|1[0-5]|3[2-9]|[4-9][0-9]|[0-9]))).(25[0-5]|2[0- 4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9]).(25[0-5]|2[0-4] [0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])$ Hackfest 2009 : Fuzzing et tests dintrusions 33
  34. 34. Démo 1 : ReDoS Les expressions régulières sont un langage de description formelle – Certaines expressions rendent lévaluation complexe – erreurs : répétitions imbriquées, alternances avec chevauchements “People with little regex experience have surprising skill at coming up with exponentially complex regular expressions.” www.regular-expressions.info Hackfest 2009 : Fuzzing et tests dintrusions 34
  35. 35. Démo 1 : ReDoS Attaque : viser les pire cas dévaluation dexpressions régulières – Contexte des applications web : Alex Roichman(Checkmarx) OWASP Israel 2009 http://www.owasp.org/images/f/f1/OWASP_IL_2009_ReDoS.ppt Vecteurs dentrées – Construire une chaîne de caractères pour une expression régulière existante – Injecter une expression régulière dans une application qui les construit dynamiquement Hackfest 2009 : Fuzzing et tests dintrusions 35
  36. 36. Démo 1 : ReDoS  Ça arrive même aux meilleurs ! (OWASP validation Project)  Exemple 1 : nom dune personne Regex : ^[a-zA-Z]+(([,.-][a-zA-Z ])?[a-zA-Z]*)*$ ReDoS : “aaaaaaaaaaaaaaaaaaaaaaaaaaaa!”  Exemple 2 : nom dune classe Java Regex : ^(([a-z])+.)+[A-Z]([a-z])+$ ReDoS : “aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa!” Hackfest 2009 : Fuzzing et tests dintrusions 361 – « Developers implementing input validation engines should review these regular expressions. Save the time of developing acomplicated regular expression that currently exists! ». [http://www.owasp.org/index.php/Category:OWASP_Validation_Project]
  37. 37. Démo 2 : Services WebSelon Wikipédia : “un programme informatiquepermettant la communication et léchange dedonnées entre applications et systèmeshétérogènes dans des environnementsdistribués.” source: wikipedia.org Hackfest 2009 : Fuzzing et tests dintrusions 37
  38. 38. Démo 2 : Services WebGénéralement 3 composants : Protocole de transport(SOAP, XML-RPC, REST) – définit la structure des requêtes Langage de description(WSDL, WADL) – définit les appels rendus disponibles par le service (noms des méthodes, types des variables) Langage de sérialisation des données(XML, JSON) – définit la représentation des données échangées Hackfest 2009 : Fuzzing et tests dintrusions 38
  39. 39. Démo 2 : Services Web La description permet de connaître la forme des appels par analyse syntaxique : idéal pour automatisation<wsdl:operation name="GetLastTradePrice"> nom de lappel <wsdl:input message="tns:GetLastTradePriceInput"/> <wsdl:output message="tns:GetLastTradePriceOutput"/> </wsdl:operation><wsdl:message name="GetLastTradePriceOutput"> <wsdl:part name="body" element="xsd1:TradePrice"/></wsdl:message><xsd:element name="TradePrice"> xsd:<complexType> <xsd:all> <xsd:element name="price" type="float"/> </xsd:all> </xsd:complexType> Types</xsd:element> nom des variablessource : www.w3.org Hackfest 2009 : Fuzzing et tests dintrusions 39
  40. 40. Démo 2 : Services Web Tests possibles : Analyse syntaxique des requêtes – requêtes mal-formées, paramètres redondants, etc. Code de lapplication : – tests ciblés en fonction des types – même failles que pour les applications web Hackfest 2009 : Fuzzing et tests dintrusions 40
  41. 41. Démo 2 : Services Web Hackfest 2009 : Fuzzing et tests dintrusions 41
  42. 42. Questions ? Hackfest 2009 : Fuzzing et tests dintrusions 42

×