Vous êtes nouveau sur Developpez.com ? Créez votre compte ou connectez-vous afin de pouvoir participer !

Vous devez avoir un compte Developpez.com et être connecté pour pouvoir participer aux discussions.

Vous n'avez pas encore de compte Developpez.com ? Créez-en un en quelques instants, c'est entièrement gratuit !

Si vous disposez déjà d'un compte et qu'il est bien activé, connectez-vous à l'aide du formulaire ci-dessous.

Identifiez-vous
Identifiant
Mot de passe
Mot de passe oublié ?
Créer un compte

L'inscription est gratuite et ne vous prendra que quelques instants !

Je m'inscris !

Des chercheurs proposent un système capable de détecter et de corriger automatiquement
Des vulnérabilités dans un logiciel

Le , par Stéphane le calme

0PARTAGES

2  2 
Des chercheurs du MIT ont présenté un système capable de détecter et de corriger automatiquement des vulnérabilités sérieuses dans un logiciel en y insérant des fonctionnalités d’autres applications jaugées plus sécurisées. Baptisé CodePhage, le système ne requiert pas d’avoir accès au code source des applications d’où seront empruntées les fonctionnalités. Il se contente plutôt d’analyser l’exécution de l’application et caractérise les types de vérification de sécurité qu’il effectue.

« Nous avons des tonnes de codes source disponibles dans les dépôts open-source, des millions de projets et nombreux d’entre eux implémentent des spécifications similaires », a expliqué Stelios Sidiroglou-Douskos, le chercheur au CSAIL (Computer Science and Artificial Intelligence Laboratory) du MIT qui a dirigé le développement de CodePhage.

Les tests des chercheurs du MIT ont fait valoir que CodePhage était en mesure de corriger des failles dans la sécurité de sept projets open-source, passant entre deux et 10 minutes par correction, important des fonctionnalités de deux à quatre programmes « donneurs » à chaque fois.

Comment CodePhage fonctionne-t-il ? Pour commencer son analyse, CodePhage a besoin de deux échantillons d’entrées : un qui provoque un bug du programme et un autre qui ne le fait pas. Pour se faire, il va utiliser un localisateur de bug appelé DIODE que le même groupe de chercheurs a présenté en mars et qui va s’occuper de générer automatiquement les entrées qui provoquent des bugs.

Tout d’abord, CodePhage utilise l’entrée « saine » (celle qui ne provoque pas un bug du programme) sur le programme « donneur ». Il enregistre par la suite la séquence d’opérations que le donneur exécute en utilisant une chaîne de symboles qui décrivent les contraintes logiques imposées par les opérations. Par exemple, il peut arriver que le donneur cherche à vérifier si la taille de l’entrée est en dessous d’un certain seuil. Dans ce cas de figure, CodePhage ajoutera un terme à sa chaîne de symboles qui représente la condition d’être en dessous de ce seuil sans pour autant enregistrer la taille actuelle de l’entrée (uniquement la contrainte imposée par la vérification).

Ensuite, CodePhage utilise l’entrée qui provoque un bug du programme. Encore une fois, CodePhage va utiliser une chaîne de symbole pour représenter les opérations que le donneur exécute. Toutefois, lorsque cette nouvelle expression symbolique diverge de l’ancienne, CodePhage interrompt le processus étant donné que la divergence représente une contrainte remplie par l’entrée saine qui n’est pas remplie par cette nouvelle entrée. Aussi, cela pourrait être une validation oubliée par le programme de départ.

CodePhage analyse alors le programme de départ pour trouver les zones où entrées répondent à la plupart des contraintes décrites par la nouvelle expression symbolique. Le programme de départ pourrait effectuer différentes opérations dans un ordre différent de celui du programme donneur et il pourrait enregistrer les données de manière différente, mais la chaîne symbolique décrit l’état de l’entrée après qu’elle ait été traitée, pas le processus en lui-même.

A chaque endroit identifié, CodePhage peut se passer de la plupart des contraintes décrites dans l’expression symbolique. A commencer par la première zone, il traduit les contraintes restantes dans le langage du programme de départ et l’insert dans le code source, puis il exécute le programme à nouveau en utilisant l’entrée qui provoquait le bug.

Si le programme fonctionne normalement, le nouveau code a résolu le problème. Sinon, CodePhage va à la prochaine zone du programme de départ pour recommencer l’opération. Si le programme a encore des bugs après que CodePhage ait tenté de réparer toutes les zones possibles, il retourne alors au programme donneur et continue à construire son expression symbolique jusqu’à ce qu’il arrive à un autre point de divergence.

Comme les chercheurs l'expliquent, dans un logiciel commercial moderne, des contrôles de sécurité peuvent prendre jusqu'à 80 pour cent du temps de conception, voire même plus. Un de leurs espoirs est que les futures versions de CodePhage pourraient considérablement réduire ce temps en automatisant l'insertion de ces contrôles. « La vision à long terme est que vous n’ayez pas à écrire une portion de code que quelqu’un aurait déjà écrite avant », a expliqué Martin Rinard, un diplômé du MIT faisant également partie de l’équipe. « Le système trouve cette portion de code et la connecte automatiquement à toutes les portions de code dont vous avez besoin pour faire fonctionner votre programme ».

Pour Emery Berger, un professeur de sciences informatiques au MIT, « la technique d’emprunter du code à un autre programme qui a les mêmes fonctionnalités et être capable de prendre un programme qui présente des failles et les colmater de cette façon est un résultat assez cool ». Et de rajouter « pour être honnête, j’ai été surpris que cela fonctionne ».

« Le programme donneur n’a pas été écrit par les mêmes personnes » rappelle Berger. « Ils ont différentes normes de codage, ils utilisent toutes sortes de variables différentes ; les variables pourraient être locales ou à un plus haut niveau dans la pile. Et CodePhage est capable d’identifier ces connexions et de dire ‘ces variables sont liées à celles-ci‘. En parlant en termes de don d’organe, il transforme ce code pour en faire la greffe parfaite, comme si elle avait été écrite de cette façon dès le début. Le fait que cela fonctionne aussi bien que c’est actuellement le cas est surprenant et cool », a-t-il avancé.

Les chercheurs du MIT ne sont pas les seuls à s’intéresser à de nouvelles façons de colmater des failles dans les logiciels. Plus tôt cette année, le vendeur de produit de sécurité Qualys a proposé un logiciel qui peut appliquer des patchs virtuels à des vulnérabilités connues, éliminant le besoin d’attendre que le vendeur propose ses correctifs pour résoudre le problème.

Source : MIT , Qualys

Et vous ?

Qu'en pensez-vous ?

Une erreur dans cette actualité ? Signalez-le nous !