Les articles de MISC N°39

Article mis en avant

Introduction au fuzzing : principes et enjeux

La recherche de vulnérabilités par techniques de fuzzing est devenue extrêmement populaire. Trouver des vulnérabilités avec des techniques qui peuvent être triviales – et donc à moindres coûts – est à la fois séduisant et effrayant. Bien qu'il soit utopique de penser que le fuzzing est une technique miracle, il faut avouer qu'elle reste néanmoins pertinente dans de nombreux cas et en particulier lors de tests en boite noire. Nous décrirons dans cet article les principales techniques utilisées dans le domaine du fuzzing et tenterons d'étayer ce que le fuzzing peut apporter.

Grâce à la prise de conscience générale de l'importance de la sécurité informatique, le nombre de mécanismes de protection dédiés aux applications userland n'a cessé d'augmenter (adresse aléatoire de la pile, Canary, SafeSEH…). Il est devenu difficile, avec des droits restreints, d'exploiter les programmes les plus privilégiés. En effet, leur exécution est de plus en plus restreinte et leur sécurité est plus étudiée.Les systèmes d'exploitation ont été créés selon un modèle en couches : les programmes utilisateurs font appel à des fonctionnalités du noyau qui, lui, dialogue avec les périphériques. Dans ce modèle, le noyau a le niveau de privilège le plus élevé.L'exploitation d'une vulnérabilité noyau permet de faire exécuter du code arbitraire avec les privilèges les plus élevés. Cette exploitation permet une escalade de privilèges en contournant les contrôles d'accès habituels, propres au niveau utilisateur. Le fait que la vulnérabilité se trouve dans l'espace noyau implique des difficultés supplémentaires telles que l'impossibilité d'accèder la libC [2].Dans cet article, nous allons voir comment un attaquant peut exploiter une vulnérabilité du noyau afin d'en détourner le fonctionnement normal dans le but d'exécuter du code arbitraire. Nous allons prendre l'exemple de la faille vmsplice publiée le 09/02/2008.
Les atteintes aux données personnelles touchent indistinctement entreprises, institutions publiques et privées, acteurs civils et militaires, révélant l’existence de failles importantes dans l’organisation des systèmes et processus de sécurisation des données. Ces données attisent bien des convoitises en raison de leur nature spécifique, en raison de leur valeur propre. L’analyse des évènements les plus marquants en matière d’atteintes aux données permet de mettre en exergue les caractéristiques de cette forme d’incident (§1). Mais ces atteintes aux systèmes et aux données sont-elles uniquement des actes de délinquance ? Ne pourrait-on envisager qu’elles puissent être, dans certains cas, des agressions lancées contre l’espace informationnel d’un adversaire ? Ne doit-on pas s’interroger sur le possible recours à ces atteintes aux données dans le cadre d’opérations de guerre de l’information (§2) ?
Décomposer le nombre 767 en produits de facteurs premiers est assez simple, mais qu'en est-il pour le nombre 214 465 394 374 108 286 597 905 734 489 835 068 072 488 263 267 274 573 651 ? Ce nombre de 57 chiffres n'est pourtant pas très grand comparé à ceux de plus de 300 utilisés par les systèmes de chiffrement actuels. Les techniques de factorisation évoluent et deviennent de plus en plus efficaces. Nous nous intéressons à la méthode de factorisation qui s'appuie sur les courbes elliptiques, objet mathématique déjà bien connu dans la cryptographie moderne.
Cet article est la suite de l'article « Comment réaliser un fuzzer » (MISC 36). Maintenant que les bases sont posées, voyons la mise en pratique. Fusil le fuzzer est une boîte à outils libre pour écrire ses propres fuzzers. Nous allons voir comment mettre en place l'environnement pour fuzzer une application, puis comment faire muter un fichier ou bien générer des données. Les sondes et le fonctionnement de Fusil seront détaillés pour bien comprendre ce qui se passe. Pour finir, l'exécution du fuzzer Python sera expliquée.
Depuis quelques années, rechercher et trouver (ou pas) des vulnérabilités grâce au fuzzing devient extrêmement commun. Nous présentons dans cet article un framework de fuzzing très populaire : le Sulley Fuzzing Framework. Nous montrerons que développer des fuzzers grâce à Sulley s'avère à la fois facile, efficace et pérenne grâce à la réutilisation des briques déjà développées.
La voix sur IP (VoIP) s’impose aujourd’hui comme l’une des technologies clefs de l’Internet actuel et futur. Dans cet article, nous partageons l’expérience pratique acquise ces deux dernières années par notre équipe de recherche sur l’automatisation des processus de découverte de vulnérabilités dans le monde VoIP. Nous dressons un portrait relativement sombre de la sécurité actuelle de la sphère VoIP en présentant les vulnérabilités les plus dangereuses capables d’aboutir à la compromission de réseaux entiers. Toutes les vulnérabilités présentées dans cet article ont été publiées par notre équipe de recherche et ont été découvertes à l’aide de notre propre suite logicielle de fuzzing appelée « KIF ». Toute vulnérabilité présentée dans l’article est également accompagnée d’une présentation d’une solution permettant de s’en prémunir.
Comme l’indiquent plusieurs articles de ce dossier, des techniques de fuzzing peuvent être appliquées aux protocoles. Elles permettent alors de détecter des vulnérabilités sur des implémentations particulières. Mais qu’en est-il de la détection des erreurs de conception ? Comment s’assurer qu’un nouveau protocole est sain d’un point de vue purement logique avant même de disposer de son implémentation ? Les techniques récentes de vérification automatique de protocoles s’avèrent à cet égard très utiles. Plusieurs outils d’animation et de vérification existent : tout au long de cet article, nous utilisons conjointement SPAN (www.irisa.fr/lande/genet/span) et AVISPA (www.avispa-project.org). D’une certaine manière, l’animation est à la spécification ce que le fuzzing est à l’implémentation.
Nous présentons dans cet article quelques techniques de construction de topologie réseau de niveau 2 et 3, sur un cœur de réseau MPLS, permettant d’assurer une protection par isolation.
Sortez les vieux dossiers, soufflez fort pour enlever la poussière et cherchez en quoi cela peut nous servir aujourd'hui ! Au programme : comment une vulnérabilité de 1999 peut nous aider à pénétrer une architecture sans fil apparemment conforme à l'état de l'art de la sécurité des réseaux sans fil (802.11i [1]). Nous allons ici exploiter une faiblesse, déjà montrée il y a quelques années, sous certaines conditions.