• Aucun résultat trouvé

Qualit´ e des gadgets par compilateur

3.1 Le compilateur

3.1.4 Qualit´ e des gadgets par compilateur

Les r´esultats sur la quantit´e de gadgets de chaque cat´egorie apportent des informations concluantes sur la surface utilisable par un attaquant. Cette section montre les r´esultats obtenus cette fois en s’int´eressant `a l’utilisabilit´e des gadgets. Cela est fait en utilisant la m´etrique d´efinie au chapitre pr´ec´edent en section 2.3.2. Cette m´etrique permet d’avoir un score donnant la difficult´e d’utilisation des gadgets pr´esents dans un binaire. Il est `a noter que cette m´etrique, contrairement

200 300 400 500 600 700 800

Execution size (KB)

0.4

0.6

0.8

1.0

1.2

Score

Compiler

clang

gcc

clang-gfree

Figure 3.4 – Score moyen des gadgets avec diff´erents compilateurs et options pour le logiciel tar, version 1.30

`

a ce qui a ´et´e fait dans le chapitre pr´ec´edent, change l´eg`erement la notion de cat´egorie de gadgets. En effet, notre analyse pr´ec´edente consid`ere l’int´egralit´e des instructions pr´ec´edent le saut pour d´eterminer l’ensemble des cat´egories auxquelles le gadget appartient, alors que pour l’utilisabilit´e, seule la cat´egorie de la premi`ere instruction du gadget est consid´er´ee. La section 2.3.2 de description de la m´etrique explique pourquoi ce choix a ´et´e fait.

La m´etrique pr´ec´edemment d´efinie donne un score `a chaque gadget. Le gadget le plus facile `a utiliser est un gadget ayant un score nul. Plus le score du gadget est important, plus il est difficile `a utiliser. Cette difficult´e est due par exemple `a des effets de bords `a prendre en compte, et des instructions parasites qu’il faut ´eviter d’activer. On peut penser par exemple `a un saut conditionnel au milieu du gadget.

Pour comparer les diff´erents compilateurs utilis´es sur tar, dans un premier temps, le score moyen des gadgets de chaque binaire a ´et´e calcul´e. La figure 3.4 pr´esente les r´esultats associ´es. Plusieurs points ressortent de cette figure. Tout d’abord, le compilateur gfree, qui prot`ege donc les binaires contre du d´etournement de flot d’ex´ecution, pr´esente deux groupes bien diff´erents en termes de score. Ces deux groupes sont caract´eris´es par l’absence totale d’optimisation d’un cˆot´e (-O0 ou pas d’option), et la pr´esence d’options d’optimisation de l’autre cˆot´e. Le score moyen des gadgets sur ces binaires passe d’environ 0,2 pour les binaires sans optimisation `a environ 0,9. Les binaires ayant ´et´e compil´es avec l’option -O1 ont moins de gadgets que ceux utilisant les options d’optimisations sup´erieures, et ont un score moyen de gadget similaire. L’option -O1 produit donc, selon ces m´etriques, des binaires plus difficiles `a exploiter que les binaires utilisant les options -O2 et -O3. Pour l’option -O0, il est plus difficile de conclure. En effet, les gadgets sont plus facilement utilisables, dus `a leur faible score, mais il a ´et´e montr´e en section pr´ec´edente que ces binaires pr´esentent un nombre bien inf´erieur de gadgets. Les deux autres compilateurs ont des comportements plus vari´es. Le compilateur gcc va avoir un ensemble de binaires assez regroup´e. De mˆeme, `a quelques exceptions pr`es pour le compilateur clang, la variation moyenne de score est assez faible. Pour ces compilateurs, l’´evaluation des crit`eres qui entrent en compte dans la position d’un binaire dans un groupe ne donne pas de r´esultat clair. On ne trouve pas d’option commune `a certains groupes, comme cela est v´erifi´e en terme quantitatif.

Cependant, comme cela a ´et´e relev´e lors de la pr´esentation de la m´etrique au chapitre pr´ec´edent en section 2.3.2, le r´esultat d’un score moyen peu pr´ecis ´etait attendu. En effet, certaines cat´egories ´etant sous repr´esent´ee dans les binaires, certains points sont cach´es par d’autres cat´egories plus larges. La section pr´ec´edente

3.1. LE COMPILATEUR 85

Option average bit inout datamov arith branch shftrot conver break logical flgctrl segreg stack control -O0 0.0(0.1) -1.3(0.8) 0.2(0.3) 0.3(0.1) 0.3(0.3) -0.1(0.1) 0.0(0.1) 1.1(0.2) -0.1(0.2) -0.1(0.0) -0.0(0.9) -0.4(0.6) -0.0(0.0) -0.0(0.3) -O1 -0.1(0.2) 0.8(0.9) -0.1(0.2) -0.2(0.2) 0.1(0.2) -0.1(0.3) -0.0(0.1) -0.5(0.6) 0.4(0.3) 0.0(0.2) -0.7(0.7) 0.1(0.9) 0.1(0.0) -0.0(0.1) -O2 -0.2(0.2) -0.1(1.4) -0.3(0.2) -0.3(0.2) -0.1(0.1) -0.3(0.4) -0.1(0.1) -0.5(0.5) 0.3(0.3) -0.1(0.2) -0.8(0.8) 0.6(1.1) -0.1(0.1) -0.1(0.2) -O3 -0.2(0.2) 0.1(1.3) -0.3(0.2) -0.3(0.2) -0.1(0.1) -0.3(0.4) -0.1(0.1) -0.6(0.5) 0.3(0.2) -0.1(0.2) -0.9(0.8) 0.0(0.8) -0.1(0.1) -0.2(0.1) -flto -0.0(0.2) -0.0(1.2) -0.1(0.2) -0.1(0.1) -0.0(0.1) 0.0(0.3) -0.0(0.1) -0.3(0.5) -0.1(0.2) 0.0(0.1) -0.0(0.7) 0.3(1.4) -0.0(0.1) -0.0(0.1) -fstack-protector 0.0(0.0) 0.2(0.5) 0.0(0.1) -0.0(0.0) 0.0(0.0) 0.0(0.0) -0.0(0.0) 0.0(0.1) -0.1(0.3) 0.0(0.0) -0.0(0.1) 0.0(0.9) 0.0(0.0) -0.0(0.3) -fstack-protector-all 0.2(0.2) -0.7(0.8) -0.1(0.2) -0.2(0.2) 0.1(0.2) 0.5(0.4) -0.1(0.1) -0.1(0.2) -0.4(0.2) 0.1(0.2) 0.2(0.8) 0.6(1.7) -0.1(0.1) -0.2(0.2) -fstack-protector-strong 0.0(0.0) 0.0(0.0) -0.0(0.1) -0.0(0.0) 0.0(0.0) 0.1(0.1) -0.0(0.0) 0.0(0.1) -0.1(0.2) 0.1(0.1) -0.0(0.2) -0.2(0.6) 0.0(0.0) -0.1(0.1)

Table 3.3 – Influence de chacune des options utilis´ees pour le compilateur clang, en termes de score pour chacune des cat´egories, sur le logiciel tar en version 1.30

montre aussi cette repr´esentation pr´epond´erante de certaines cat´egories comme arith par rapport `a control ou shftrort par exemple. Lors de l’´etude de l’in-fluence d’une option comme cela a ´et´e fait pour les trois compilateurs pour les mesures quantitatives, quelques cat´egories pr´esentent des variations de scores qui ne peuvent pas ˆetre associ´ees `a une seule option. La table 3.3 pr´esente les r´esultats pour le compilateur clang. Les deux autres compilateurs ayant des r´esultats beaucoup plus stables, ils sont disponibles en annexe 4.5. Quelques cat´egories montrent des variations de score assez faibles, et ce pour toutes les options pr´esent´ees ici. Les cat´egories pr´esentant le plus de variations de score sont flgctrl, segreg et bit. Les deux derni`eres pr´esentant un tr`es faible nombre de gadgets, il est difficile de conclure sur la sensibilit´e du binaire apport´ee. Pour les gadgets de type flgctrl par contre, le nombre de gadgets associ´e est suffisamment important pour que les variations observ´ees ne soient pas juste dues `a l’´echantillon. Encore une fois ici, l’´ecart type des variations ´etant tr`es fort vis-`a-vis de la moyenne implique qu’une option seule n’est pas responsable de la diminution de la sensibilit´e du binaire.

Lors de la conception d’un logiciel, le choix des options avec un compilateur clang ne peut donc pas ˆetre fait de mani`ere incr´ementale. Chaque ensemble d’options doit ˆetre test´e au cas par cas pour savoir si le binaire produit contient des gadgets plus ou moins faciles `a utiliser pour un attaquant. Pour le compilateur gfree, le choix des options influe assez peu sur la qualit´e des gadgets pr´esents, `a l’exception des options d’optimisation qui induisent une difficult´e suppl´ementaire significative, notamment sur les gadgets de type stack et arith, des cat´egories importantes `a prot´eger. Le compilateur gcc quant `a lui n’influe que tr`es peu sur la qualit´e des gadgets, `a l’exception de la cat´egorie control.