• Aucun résultat trouvé

2.3 M´ etriques de protection

2.3.2 Mesure de qualit´ e

Pour permettre une classification rapide des gadgets utilisables par un atta-quant et pour mesurer la difficult´e d’utilisation d’un gadget Follner et al. [FBB16] ont mis en place une m´etrique de qualit´e d’un gadget. Chaque gadget a un score. Ce score prend en compte les effets de bord, les registres touch´es et la cat´egorie du gadget. Ce score est calcul´e pour chaque gadget. Pour calculer leur score, ils commencent par caract´eriser les gadgets par leur premi`ere instruction. Dans leur mod`ele l’attaquant s’int´eresse `a la premi`ere instruction pour construire son attaque, la suite du gadget est du bruit jusqu’`a l’instruction pivot. Un gadget a donc la forme suivante : calc;(bruit;)* pivot. Le score du gadget mesure sa difficult´e d’utilisation. L’instruction calc ne contribue pas au score, car elle est l’instruction voulue, et il en va de mˆeme pour l’instruction pivot. Un gadget sans aucun bruit, calc; pivot, a un score de 0.

Ensuite ils mesurent `a quel point le bruit est gˆenant. Pour cela, ils commencent par r´ecup´erer les registres dans lesquels ´ecrit la premi`ere instruction, registres nomm´es rd. Une unique instruction peut ´ecrire dans plusieurs registres, notamment xchg, qui ´echange le contenu de deux registres. Les cat´egories des instructions bruyantes sont aussi consid´er´ees. Ils consid`erent trois cat´egories : data move, arithmetic et shift and rotate. Les scores sont ajout´es au score du gadget pour chaque instruction bruyante selon le tableau 2.3.

D´efinition. Soit un gadget X = (x1, ..., xn), alors score(X) = Pn−1

i=2 w(xi), o`u w(xi) est le poids de l’instruction donn´ee par le tableau 2.3

Quelques gadgets et leurs scores sont donn´es pour exemple : — add 0x5b,%al; ret, score : 0

Pas d’instruction bruyante, le gadget est donc parfait 

— pop %rbx; pop %rbp; ret, score : 2.5

Le registre destination est %rbx, une instruction bruyante modifie deux registres%rbp explicitement et %rsp implicitement.

Pour ´evaluer leur score, ils ont ´etudi´e ce qui impliquait l’activation de la pro-tection MPX2 mise en place par Intel. Cette protection, support´ee par le processeur si le programme est compil´e avec les bonnes options, permettait d’am´eliorer la v´erification de validit´e des pointeurs d’acc`es m´emoire. La protection est aujourd’hui

2. https://software.intel.com/content/www/us/en/develop/articles/ introduction-to-intel-memory-protection-extensions.html

Categorie RSP rd other

data move 2 1 0.5

arithmetic 2 1 0.5

shift and rotate 3 2 0.5

Table 2.3 – Contribution au score d’une instruction bruyante en fonction du registre touch´e en ´ecriture

d´epr´eci´ee, et n’est plus disponible dans leurs processeurs modernes. Pour mesurer la complexit´e de construction d’attaque induite par cette protection, la m´etrique utilis´ee est le d´enombrement des gadgets ayant un score inf´erieur ou ´egal `a 1.

Lorsque j’ai appliqu´e leur score `a mon ensemble de binaires, j’ai aussi ajout´e la moyenne de score des gadgets pr´esents dans le binaire. Cet ajout est motiv´e par la volont´e de pouvoir estimer la qualit´e g´en´erale des gadgets. Cela compl`ete ainsi le d´enombrement simple avec une mesure g´en´erale du bruit `a corriger par les autres gadgets disponibles si besoin. Cette moyenne n’a cependant que peu de variation d’un binaire `a un autre et il n’est pas possible d’en tirer des conclusions int´eressantes.

La p´enalisation du bruit induit par les instructions de type shift and rotate n’est justifi´e que par la difficult´e `a compenser leurs effets, ce qui est discutable. Bien que ce ne soit pas explicitement dit, les op´erations de d´ecalage peuvent avoir une perte d’information. Par exemple, un d´ecalage `a droite de deux bits induit la perte de la valeur des deux bits de poids faible. Le bruit d’une telle instruction doit donc ˆetre compens´e par une sauvegarde au pr´ealable de la valeur ainsi modifi´ee. Cependant, des effets similaires doivent ˆetre consid´er´es pour les d´epassements sur les additions ou multiplications par exemple. Les instructions shift and rotate sont donc consid´er´ees avec le mˆeme poids que les autres. Le calcul du bruit reste cependant sur leurs valeurs arbitraires de 2, 1 et 0.5 en fonction du registre touch´e en ´ecriture. La pond´eration en fonction du type de registre touch´e est int´eressante et n’est pas modifi´ee.

Pour les cat´egories consid´er´ees pour la sensibilit´e des binaires, j’ai aussi d´etaill´e le contenu de certaines cat´egories. La liste des cat´egories qu’ils consid`erent est :

— arithmetic — data move — control flow — logic

2.3. M ´ETRIQUES DE PROTECTION 63

— RETs

— shift and rotate — flag

— NOP

— floating Point — misc

Dans le cadre d’une attaque, certaines autres cat´egories peuvent avoir un int´erˆet. Par exemple, ˆetre capable de g´erer des entr´ees et sorties ou faire de la conversion peut ˆetre int´eressant. Sur des processeurs un peu plus vieux, les instructions g´erant les registres de segmentation sont aussi utiles. Les cat´egories qui sont ajout´ees par rapport `a l’article original sont les suivantes, et correspondent aux cat´egories d´ecrites en section 1.4.2 : — I/O — conver — segreg — system — break

La cat´egorie RETs a ´et´e int´egr´ee `a la cat´egorie control flow. Les gadgets contenant une instruction de contrˆole de flot d’ex´ecution sont tout aussi d´elicats `a utiliser et le type de l’instruction en soit n’importe que peu.

Notre outil nous permet de r´ecup´erer des gadgets utilisant des instructions tr`es particuli`eres (MMX, SIMD, etc.), ces gadgets sont n´eanmoins peu nombreux et difficiles `a utiliser lors d’une attaque. Nous avons donc choisi de ne pas les int´egrer `

a l’analyse de qualit´e. Moins de 1 % des gadgets analys´es ont ainsi ´et´e mis de cˆot´e. Le score mis en place dans [FBB16] est utile pour un attaquant qui cherche des gadgets dans un binaire. Faire un tri des gadgets par score permet de faire ressortir les gadgets facilement utilisables pour construire une chaˆıne. En revanche, cette m´etrique n’est pas pertinente pour d´eterminer la sensibilit´e d’un binaire. Un traitement statistique, comme le calcul de score moyen et variance de score des gadgets dans un binaire n’est pas suffisamment pr´ecis pour mettre en ´evidence un binaire plus ou moins sensible aux attaques par d´etournement de flot de contrˆole. La variation de la m´etrique d’un binaire `a un autre est trop faible pour cela. En effet, la variation observ´ee d’un binaire `a l’autre est de l’ordre de 5 %.

C’est pourquoi j’ai plutˆot mis en place les calculs statistiques de score en fonction de la cat´egorie de la premi`ere instruction d’un gadget. Cela me permet de voir sur un binaire la pr´edominance de gadgets utilisables en fonction des

GAS Intel RET RETN LJMP JMP MOVSB MOVS FUCOMPI FUCOMP MOVABS MOV

Table 2.4 – Traduction d’une instruction en assembleur GNU vers l’assembleur Intel cat´egories. Cette distinction permet une comparaison plus fine que ce qui est propos´e pr´ec´edemment. Les variations observ´ees d’un binaire `a un autre sont suffisamment importantes pour servir de point de comparaison. Cette m´etrique est utilis´ee en section 3.2, pour comparer la sensibilit´e et la diversit´e des gadgets d’un langage de programmation `a un autre.