Upload
internet
View
103
Download
1
Tags:
Embed Size (px)
Citation preview
© CODENOMICON Confidential and Proprietary.
Fuzzing : passé, présent et futur
Ari Takanen, CTO, Codenomicon
4 Juin 2009SSTIC, Rennes, France
NOT!
WWW.CODENOMICON.COM2
Traduit par Jean-Philippe Gaulier
(corrections to: [email protected])(or: [email protected])
3WWW.CODENOMICON.COM
Passé : Chercheur et professeur• 1998-2002• Université d'Oulu, Finlande• Groupe de recherche OUSPG/PROTOS
Présent: Entrepreneur et évangéliste• 2001-aujourd'hui• CTO de Codenomicon• 10+ présentations de conférence, chaque année • Auteur de deux livres :
• VoIP sécurité• Le Fuzzing
Au sujet de Ari Takanen
4WWW.CODENOMICON.COM
Trois mots au sujet Codenomicon Compagnie fondée en 2001,
après cinq ans de recherche dans la sécurité de produits logiciels, à l'université d'Oulu (1996-2001)
Quelques références :
• NEMs (Cisco, Alcatel, ...) • La défense • Finances • Grands comptes
95% de notre marché : Produits de Fuzzing pour 200+ protocoles
WWW.CODENOMICON.COM5
Le Fuzzing s’intéresse aux outils et aux vulnérabilités logicielles
6WWW.CODENOMICON.COM
7WWW.CODENOMICON.COM
Vision de sécurité : Fenêtre de la vulnérabilité
SW – durant l’analyse de vulnérabilité
SW – après la mise à disposition
SW – après le process d’analyse de vuln
TIME
Apparition de boguesVersionnageBug trouvé
Vuln trouvéeVuln rapportéeVuln patche disponible
Patch versionnéAvertissement émisPatch installé
Exposition Zéro
ExpositionLimitée
ExpositionPublique
WWW.CODENOMICON.COM8
Point Clé ?
Parler des problèmes dans le logiciel n'est pas le sujet de mon thème aujourd’hui
(Pas de Zero-Days aujourd’hui... Passez me voir après si vous voulez en voir un)
9WWW.CODENOMICON.COM
Mesures pour le fuzzing !!!
Sélection du bon outil pour réaliser les bonnes tâches
Comprendre quand utiliser le fuzzing
Déterminer ce que l’on doit fuzzer
Expliquer l’intérêt du fuzzing au management
Focaliser les ressources sur la recherche de nouveaux bogues plutôt que de chercher à exploiter quelques bogues mis en évidence
Motiver vos vendeurs à utiliser le fuzzing
Les Problèmes du Fuzzing
WWW.CODENOMICON.COM10
Ce qui est « testé » - Les trois caractéristiques
1
2
3
WWW.CODENOMICON.COM11
Le Fuzzing = Test de robustesse
Qu'est-ce que c'est ? Où est-il employé ?
12WWW.CODENOMICON.COM
http://fr.wikipedia.org/wiki/Fuzzing
“Le fuzzing est une technique pour tester des logiciels. L'idée est d'injecter des données aléatoires dans les entrées d'un programme. Si le programme échoue (par exemple en crashant ou en générant une erreur), alors il y a des défauts à corriger.”
Fuzzing - Définition originale
WWW.CODENOMICON.COM13
Fuzz par Barton Miller et al.
http://pages.cs.wisc.edu/~bart/fuzz/fuzz.html
“Le Fuzzing est une technique simple pour alimenter des entrées aléatoires dans les applications. Alors que le test aléatoire est une technique consacrée, notre approche est composée de trois caractéristiques qui, une fois prise ensembles, la rend quelque peu différente d'autres approches.”
La différence principale entre le test aléatoire et le fuzzing est que ce dernier emploie des techniques de tests aléatoires pour trouver des problèmes de sécurité
WWW.CODENOMICON.COM14
Le Fuzzing original était aléatoire
“L'entrée est aléatoire. Nous n'employons aucun modèle de comportement en fonction du programme, du type d'application ou de la description de système.. [...]”
Le but était d'examiner des centaines d'applications, chacune avec des millions de cas de test
Cependant, ils employaient un modèle ! (Paramètres de la ligne de commande)
15WWW.CODENOMICON.COM
usage: vim [arguments] [file ..] edit specified file(s)
or: vim [arguments] - read text from stdin
or: vim [arguments] -t tag edit file where tag is defined
or: vim [arguments] -q [errorfile] edit file with first error
Arguments:
-- Only file names after this
-v Vi mode (like "vi")
-e Ex mode (like "ex")
-s Silent (batch) mode (only for "ex")
-d Diff mode (like "vimdiff")
-y Easy mode (like "evim", modeless)
-R Readonly mode (like "view")
-Z Restricted mode (like "rvim")
Exemple des paramètres d’une commande
16WWW.CODENOMICON.COM
Exemple d’un modèle de protocole simple
WWW.CODENOMICON.COM17
Le verdict des essais était très simple
“Notre critère de fiabilité est simple : si l'application crash ou se gèle, on la considère comme ne passant pas l'essai, autrement c'est ok. Notez que l'application ne doit pas répondre d'une façon sensible à l'entrée, elle peut cependant se terminer silencieusement.”
Il y avait très peu de surveillance de la cible
Cependant il y avait une surveillance des crashes.
WWW.CODENOMICON.COM18
Le Fuzzing était entièrement automatisé
“En raison des deux premières caractéristiques, le fuzzing peut être automatisé à un degré élevé et des résultats peuvent être comparés à travers des applications, des logiciels d'exploitation, et des fournisseurs.”
Génération automatisée de tests.
Exécution automatisée de tests.
Analyse automatisée des résultats des tests.
19WWW.CODENOMICON.COM
Il y a toujours un « modèle » :
• Fichier gabarit, • PCAP, • Spécifications
Il y a toujours surveillance :
• Détection de fuite de mémoire, • Détection de la corruption de heap/stack, • Contrôles de logique d'affaires
Il y a toujours automatisation :
• La génération, • L'exécution, • L'analyse
Résumé de ce qu'est le Fuzzing
WWW.CODENOMICON.COM20
Catégorisation des Fuzzers
(Mi chemin !)
WWW.CODENOMICON.COM21
L'évolution de l'automatisation des tests
Test manuel
Enregistrement
Test scripté
Test Mot-Action
Test selon model
From Olli-Pekka Puolitaival, VTT, 2008
22WWW.CODENOMICON.COM
Fuzzing vs. test de robustesse
Le fuzzing n'embarque pas d'aspect aléatoire
Deux techniques principales de Fuzzing:• Mutation (non intelligent, modification semi-aléatoire)• Génération (intelligent, tests sur models ciblés)
Fuzzing : Les approches de la nouvelle génération
WWW.CODENOMICON.COM23
Principaux axes de recherche de PROTOS
PROTOS s'est concentré sur l'application d'une modélisation plus intelligente sur les interfaces de test afin d'éliminer la nécessité de recourir aux tests aléatoires
Le langage initial de spécifications des interfaces était basée sur BNF, avant de migrer pour adopter ASN.1 et XML
Le framework de génération de tests est propriétaire, le projet libère seulement les logiciels de test de produits ou protocoles.
• Note : Les tests de DNS sont une exception.
WWW.CODENOMICON.COM24
Le Fuzzing par bloc
Explication simple : les fuzzers par bloc traitent les protocoles de manière « plate » (vs structure arborescente de protocole)
Certains pensent que PROTOS est construit comme un fuzzer par bloc bien qu'il emploie une structure arborescente pour spécifier une interface de protocole
Le nom vient en fait de la méthode de génération, qui est basée sur des « meta-data » issus des morceaux de données
• Ceci est une chaîne• Ceci est un entier• ...
WWW.CODENOMICON.COM25
Architecture et vue d'ensemble de Sulley
WWW.CODENOMICON.COM26
Utilisation de Sulley et exécution de tests
27WWW.CODENOMICON.COM
Fuzzing par Mutation/Rejeu : capture et rejeu améliorés par la compréhension du protocole, complexité de mutation, possibilités pour le proxy fuzzing.
Fuzzing Pre-généré/Scripté : plus de cas de test, de cadres d'exécution, de parallélisme.
Fuzzing par bloc : ajoutez le potentiel issu des blocs de données et des structures plus complexes.
Fuzzing par Model : automatisation de la construction des modèles de protocole, automatisation de la nomalisation de la syntaxe et de la sémantique de protocole.
L'évolution du Fuzzing
28WWW.CODENOMICON.COM
Métrique d'efficacité du Fuzzing
Comparaison entre les fuzzers basés sur la mutation et sur la génération (Charlie Miller, CanSecWest 2008):
• Les meilleurs fuzzer ont une meilleure compréhension des protocoles
• Les meilleurs fuzzers couvrent jusqu'à de 70% des bugs.
• La combinaison de deux fuzzers permet de couvrir de 70-90% des bogues.
Résultats de PROTOS contre des cibles précédemment non-fuzzées (1998-2001) :
• 80% de produits testés présentent au moins une vulnérabilité distante, dans la plupart des tests 100% des produits échoués.
• Jusqu'à 50% des tests sont efficaces ! ! Possibilité de crash de 50% !
WWW.CODENOMICON.COM29
Exemples de résultats d'essai
WWW.CODENOMICON.COM30
Résultats de Fuzz de 1990 et 1995
WWW.CODENOMICON.COM31
PROTOS Results
WWW.CODENOMICON.COM32
33WWW.CODENOMICON.COM
L'efficacité contre le WiFi
WWW.CODENOMICON.COM34
L'efficacité contre WiMAX BS
WWW.CODENOMICON.COM35
Qui emploie le fuzzing ?
36WWW.CODENOMICON.COM
Le fuzzing et les produits/logiciels de sécurité
Environ 50% de nos clients n’appartiennent pas à des organisations d’assurance qualité (l’usage du fuzzing est quasiment similaire) :
• Developpeurs (tests unitaires, interopérabilité)
• Organisations de sécurité (audits, pen tests)
• Intégrateurs (tests d’intégration, acceptabilité)
• Equipe IT (acceptabilité, pen test) Activité des groupes de sécurité produit/logiciel et support
nécessaire pour tous les types de profile d’usagers
Le fuzzing aide à la priorisation des bugs, tous les problèmes trouvés étant critiques et ouverts à l’exploitation
Pas de faux positif
Le fuzzing est utilisé pour valider la qualité des composants open source et/ou out sourcés
37WWW.CODENOMICON.COM
Toutes les grandes compagnies utilisent le Fuzzing
From: http://www.google.com/googlebooks/chrome/
Tous les groupes majeurs de sécurité utilisent le fuzzing
• BSIMM: 9 sur 9 interviewés 40-60% des décisionnaires
IT utilisent ou planifient l’usage d’ici à un an
• Forrester: 2000+ décisionnaires participants
Les compagnies majeures de logiciel lancent des initiatives et mentionnent le fuzzing dans leur discours de marketing
38WWW.CODENOMICON.COM
Métriques dans le fuzzing – WORK IN PROGRESS
Sélection d’outils : Génération vs. Mutation
Où utiliser le fuzzing: SDLC
Qui doit utiliser le fuzzing: Testeurs !
Convaincre le management : ROI, TCO
Plus de bugs non exploitables: Maturité de l’Organization
Motivation des vendeurs: Exigeances, Regulations
Check-list !
WWW.CODENOMICON.COM39
Le Buzz sur le Fuzzing – En couverture
http://www.fuzz-test.com/book/
Takanen, DeMott et Miller: “Fuzzing for Software Security Testing and Quality Assurance”
Vous n’avez pas besoin d’être un spécialiste de la sécurité pour lire ce livre
Ecrit pour enseigner les bonnes approches à la prochaine génération de testeurs :
• Utilisateurs de logiciel• Ingénieur en sécurité• Academiciens
WWW.CODENOMICON.COM40
PROACTIVE SECURITY AND ROBUSTNESS SOLUTIONS
Merci – QUESTIONS?
“Frissonnez d’excitation à l’évocation de la chasse !
Traquez les bugs avec soin, méthodologie et raison. Construisez
leurs des pièges. ....
Testeurs!Cassez du logiciel (c’est votre devoir)
et obtenez le graal- mais ne vous amusez pas de la souffrance des programmeurs.”
[de Boris Beizer]