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 2015-03-31 23:07:40, par Stéphane le calme, Chroniqueur Actualités
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 ?
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 ?
-
UtherExpert éminent séniorIl 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 pasle 31/03/2015 à 23:58 -
TiranusKBXExpert confirmé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 breakle 01/04/2015 à 0:18
-
marsupialExpert éminentEn langage machine, la contrainte pourrait peut-être disparaître ?le 01/04/2015 à 2:43
-
BufferBobExpert éminentsi 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.le 01/04/2015 à 7:17 -
TaurreMembre du ClubSalut,
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.le 01/04/2015 à 13:11