IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)

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 du MIT mettent au point un algorithme pour détecter les erreurs du type débordement d'entier
Ainsi qu'un outil pour les éliminer

Le , par Stéphane le calme

91PARTAGES

2  2 
Un entier ayant une taille fixe, il y a une valeur maximale qu'il peut stocker. Quand une tentative est faite de stocker une valeur supérieure à cette valeur maximale, nous parlons alors de débordement d'entier (integer overflow). Les débordements d'entiers peuvent être problématiques par exemple dans le cas où le calcul doit gérer la taille d'un tampon ou jusqu'où un index peut aller dans un tableau.

Des chercheurs du MIT s’y sont intéressés et expliquent que non seulement ils peuvent faire planter un programme mais ils peuvent également le laisser vulnérable aux attaques. « Les débordements d’entier sont une source insidieuse de défaillances logicielles et de vulnérabilités de la sécurité. Parce que des programmes comportant des erreurs latentes de débordement traitent souvent correctement les entrées, ce genre d’erreurs peut aisément échapper à la détection durant la phase de test pour apparaître plus tard dans la production » ont-ils expliqué dans un billet.

Aussi, pour résoudre ce problème, les chercheurs du laboratoire d’intelligence artificielle et de sciences informatiques du MIT ont mis au point un moteur de découverte de dépassement d’entier (DIODE – Directed Integer Overflow Discovery Engine -) afin de détecter automatiquement les bugs de dépassement d’entier. L’algorithme a été testé dans cinq programmes open-source populaires comportant trois bugs de ce type connus. DIODE a trouvé les trois … et en a décelé 11 autres.

« DIODE est conçu pour identifier les tests pertinents auxquels les entrées doivent être soumises pour déclencher des débordements sur les sites d’allocation de mémoire cible, ensuite générer ces entrées » ont expliqué les chercheurs. Ils rappellent qu’un débordement d’entier en lui-même ne fera pas planter un programme mais qu’un problème pourrait survenir lorsque le programme va essayer d’utiliser un entier ayant déjà subi un débordement. « C’est comme un compteur kilométrique de voiture. Une fois que vous êtes allé au-delà d’un certain nombre de kilomètres vous revenez à zéro », a expliqué Stelios Sidiroglou-Douskos, l’un des chercheurs.

En marge de DIODE, les chercheurs ont développé CodePhage, un système automatique de transfert de code qui élimine les erreurs du type débordement d’entier une fois que DIODE les a repérées. « La combinaison de CodePhage et DIODE apporte un système qui détecte et élimine automatiquement les erreurs de débordement d’entier. DIODE génère des entrées qui mettent en exergue les erreurs ; CodePhage utilise ces entrées pour localiser et transférer le code depuis les applications afin d’éliminer les erreurs » ont expliqué les chercheurs.

Source : blog MIT

Et vous ?

Qu'en pensez-vous ?

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

Avatar de Uther
Expert éminent sénior https://www.developpez.com
Le 31/03/2015 à 23:58
Il faudrait sans doute détailler ce qu'il y a de nouveau(vitesse, analyse statique, ...) parceque pour le moment je vois pas.

Détecter les overflows, ça fait très longtemps qu'on sait faire ça. Si ce n'est pas fait systématiquement c'est surtout parce que que ça impacte sur les performance, donc le plus souvent on ne le fait pas
2  0 
Avatar de TiranusKBX
Expert confirmé https://www.developpez.com
Le 01/04/2015 à 0:18
je pense qu'au début de ta boucle tu teste si ta valeur est négative (dans le cas de la variable est incrémenté) et si c'est la cas tu fait un petit break
0  0 
Avatar de marsupial
Expert éminent https://www.developpez.com
Le 01/04/2015 à 2:43
En langage machine, la contrainte pourrait peut-être disparaître ?
0  0 
Avatar de BufferBob
Expert éminent https://www.developpez.com
Le 01/04/2015 à 7:17
si j'ai bien compris, l'algorithme fonctionne sur des binaires x86 directement (donc sur le code machine) et non sur le code source, et pas non plus pendant son exécution (ce qui est différent de détecter un overflow quand il se produit via un canary sur la stack par exemple)

le PDF précise par ailleurs :
Because programs with latent overflow errors often process typical inputs correctly, such errors can easily escape detection during testing only to appear later in production.
je sais pas si ça va véritablement révolutionner l'industrie mais il est évident que ça faisait un sujet tout trouvé pour jouer avec les techniques d'exécution concolique assez récentes et très à la mode
0  0 
Avatar de Taurre
Membre du Club https://www.developpez.com
Le 01/04/2015 à 13:11
Salut,

Citation Envoyé par Stéphane le calme Voir le message
Quand en tentative est faite de stocker une valeur supérieure à cette valeur maximale, nous parlons alors de débordement d'entier (integer overflow).
Juste pour dire, un débordement d'entier intervient quand une opération (comme une addition) produit un résultat supérieur à la capacité d'un type donné. Le passage cité donne plutôt l'impression de parler d'une affectation, qui n'est précisémment pas un cas de débordement.
0  0