• Aucun résultat trouvé

2.3 M´ etriques de protection

2.3.3 Equivalence de gadgets

La classification syntaxique des gadgets a quelques limitations sur le d´enombrement de gadgets uniques pr´esents dans un binaire. Consid´erons les deux gadgets suivants : pop %rbx; add %rax,0; retet add %rax,0; pop %rbx; ret. Ils sont syntaxiquement diff´erents et donc class´es comme tels dans notre analyse pr´ec´edente. Ils font cependant la mˆeme op´eration, dans un ordre diff´erent. Les ins-tructions add et pop sont ici commutables, car elles utilisent des registres diff´erents. Cette section pr´esente une forme normale de gadget permettant d’identifier ces deux gadgets comme ´equivalents.

Deux instructions sont commutables si la premi`ere n’´ecrit pas dans les registres lus par la seconde et si la seconde n’´ecrit pas dans les registres lus par la premi`ere. D´efinition. Soit deux instructions i et i0.

i ↔ i0 ssi w(i) ∩ r(i0) = ∅ ∧ w(i0) ∩ r(i) = ∅ ∧ w(i0) ∩ w(i) = ∅

o`u w(i) (resp. i0) est l’ensemble des registres potentiellement ´ecrits par i (resp. i0) et r(i) (resp. i0) l’ensemble des registres potentiellement lus par i (resp. i0)

Les registres implicites sont aussi consid´er´es. Par exemple l’instruction pop %rbx modifie le registre %rsp, puisqu’il est d´ecr´ement´e de 8. L’instruction add %rax,0 va potentiellement toucher les fanions du registre EFLAGS. Ce registre est donc toujours consid´er´e comme modifi´e par cette instruction. Enfin les ins-tructions critiques qui changent le flot d’ex´ecution ou le contexte d’ex´ecution sont

2.3. M ´ETRIQUES DE PROTECTION 65

toujours d´efinies comme non commutables. Par exemple les instructions syscall, break ou encore sysexit sont pr´esentes dans cette cat´egorie. Pour d´eterminer les w et r de toutes les instructions de la famille x86, je me suis bas´e sur la r´ef´erence des instructions disponible ici3. L’int´egralit´e des registres touch´es, acc`es m´emoires et autres particularit´es des instructions de l’architecture y est d´etaill´e.

L’assembleur utilis´e dans le document est celui d’Intel contrairement `a celui qui est utilis´e par ROPgadget. Une traduction de certaines instructions de l’assembleur GNU (GAS) vers l’assembleur Intel a ´et´e r´ealis´ee. Par exemple l’instruction RET

utilis´ee par ROPgadget n’est pas pr´esente dans le document `a disposition, qui utilise RETN. La correspondance ´etant directe avec le document, quelques instructions ont n´ecessit´e ces traductions suppl´ementaires. Le tableau 2.4 liste toutes les traductions que j’ai op´er´ees. Certaines traductions avec changement d’op´erandes entre les formalismes, par exemple implicite dans l’assembleur Intel et explicite pour GAS, ne sont pas pr´ecis´ees dans le tableau.

Ensuite une relation d’ordre entre les instructions a ´et´e d´efinie. Cette relation va permettre de mettre en place une forme minimale d’un gadget en triant les instructions commutables du corps du gadget. Cette relation d’inf´eriorit´e d’une instruction sur une autre est applicable sur deux instructions commutables. Soit deux instructions a et b telles que a ↔ b. On d´efinit la relation d’ordre entre a et b en algorithme 1.

On d´efinit la commutation adjacente de deux gadgets comme suit :

D´efinition. X = (x1, ..., xn) ≡ Y = (y1, ..., yn) ssi ∃i < n, xi = yi+1, xi+1 = yi, xi ↔ xi+1, ∀j < n, j 6= i et j 6= i + 1 ⇒ xj = yj

Cette d´efinition n’est cependant pas transitive. Elle n’est donc pas suffisante pour lier des gadgets entre eux. Elle permet quand mˆeme d’avoir une premi`ere classe de similitude pour des gadgets. Cette premi`ere relation est utilis´ee pour mettre en place une relation d’´equivalence ensuite.

Pour mettre en place cette relation d’´equivalence transitive, on effectue une compl´etion transitive de l’´equivalence pr´ec´edemment d´efinie. Pour cela, j’ai com-menc´e par mettre en place une relation d’ordre sur l’ensemble des formes que peut prendre un gadget.

D´efinition. L’ordre de deux gadgets X et Y est donn´e par l’ordre de leur premi`ere instruction distincte.

if b fait au moins un acc`es m´emoire et pas a then a ≺ b

else if (a et b) ou (ni a ni b) n’ont d’acc`es m´emoire then if b modifie au moins un registre et pas a then

a ≺ b else

Soit no a et no

b le nombre d’op´erandes de a et b; if no

a< no b then a ≺ b

else

L’ordre de a et b est l’ordre lexicographique de leur premier op´erande respectif distinct;

end end else

b ≺ a end

Algorithme 1 : Ordre entre deux instructions commutables a et b

L’ensemble des permutations que l’on peut atteindre en partant de X, en ne faisant que des permutations l´egales, peut ˆetre ordonn´e avec la relation d’ordre pr´ec´edemment d´efinie. La proc´edure de r´eduction d’un gadget est comme suit :

X = (x1, ..., xn);

while ∃i < n tel que xi ↔ xi+1 et xi+1< xi do X = (x1, ..., xi+1, xi, ..., xn);

end

Algorithme 2 : R´eduction en forme minimale

La forme de X obtenue `a la fin de l’ex´ecution de l’algorithme est appel´ee forme minimale de X. En se basant sur cette r´eduction, on peut d´efinir une relation d’´equivalence g´en´eralis´ee de la mani`ere suivante.

D´efinition. Deux gadgets sont dits ´equivalents si et seulement si ils ont la mˆeme forme minimale.

Cette nouvelle d´efinition a l’avantage d’ˆetre transitive et permet de faire plus facilement des distinctions entre diff´erents gadgets.

2.3. M ´ETRIQUES DE PROTECTION 67 Ensemble des gadgets possibles e1 e2 e3 e4 e5 e6 e7 < > > < < Transformation par commutation >

Figure 2.8 – Compl´etion transitive de la relation d’ordre des gadgets

Cette r´eduction et ´equivalence est illustr´ee en figure 2.8. Cette figure pr´esente l’ensemble des permutations d’un gadget qui peuvent exister. Sur cette figure on peut voir la r´eduction du gadget e3 vers e7 en passant successivement par les gadgets e1 et e2. Le gadget e4 se r´eduit aussi en e7 en passant par le gadget e2. Les gadgets e1, e2, e3, e4 et e7 ont donc la mˆeme forme minimale e7. Ils sont donc ´equivalents. Les gadgets e5 et e6 sont compos´es des mˆemes instructions, mais ils n’existent pas de commutations possibles pour r´eduire e6 vers un des autres gadgets. e5 et e6 ne sont donc pas ´equivalents aux autres gadgets ´ecrits avec les mˆemes instructions.

R´ealisation

J’ai donc utilis´e cette relation d’´equivalence pour ´etudier de mani`ere plus pr´ecise l’unicit´e des gadgets pr´esents dans des binaires. Les r´esultats pr´ec´edemment peuvent donc ˆetre consolid´es en ne travaillant plus sur l’unicit´e syntaxique des gadgets, mais sur les gadgets ´equivalents.

r´esultats pr´esent´es dans la section suivante ne concernent donc que ces architectures. La m´ethodologie utilis´ee ici n’est pas incompatible avec d’autres architectures. Il faut cependant classifier les instructions de toutes ces architectures ou utiliser un formalisme d’instruction ind´ependant de l’architecture. Les r´esultats sur l’architec-ture x86, qui repr´esente environ 85 % du corpus, n’ont pas pu justifier le travail `a fournir pour faire cette adaptation.