Vulnérabilités aux injections de NOP sur cartes à puce
Franck De Goër
Tuteur : Marie-Laure Potet
Ensimag - Verimag
16 mai 2013
Introduction
Les cartes à puces se sont généralisées depuis les années 80, et contiennent aujourd’hui des
données sensibles (cartes bancaires, e-passeports, badges d’accès, etc.). Il est donc primordial qu’elles
présentent une robustesse maximale à tout type d’attaque, que ce soit matériel ou logiciel. Par
exemple, il est préférable qu’une personne malveillante ne soit pas en mesure d’utiliser une carte
bleue sans connaître son code PIN. À ce titre, de même que l’on teste les serrures de coffre-fort
d’une part, et la résistance de la porte dudit coffre d’autre part, la sécurité du code
ainsi
que la
protection matérielle de la carte doivent être éprouvées.
Nous nous intéressons dans ce papier à l’évaluation de la robustesse d’un code s’exécutant sur
carte à puce, face aux attaques classiques du domaine (ces attaques sont introduites en section 1, et
largement expliquées dans le papier de Bar-El, Choukri, Naccache, Tunstall et Whelan [
1
]). Nous
nous intéresserons particulièrement à la possibilité de détecter au niveau source des vulnérabilités
pouvant être exploitées par un attaquant durant l’exécution du programme.
Les autorités de certification de cartes à puce (CESTI
1
) ont besoin de vérifier la robustesse d’un
code avant de le valider. Il est donc nécessaire de développer des outils d’analyse qui vont dans
ce sens, c’est-à-dire permettant la détection automatisée de vulnérabilités. À l’heure actuelle, leur
protocole de validation, détaillé dans la partie 2.1, est basé sur des tests exhaustifs en brute force,
indépendamment de la sémantique du code testé (nous y reviendrons dans la section 2.1). L’approche
Lazart
(introduite dans le papier de Potet, Mounier et Vivien [
2
], et sur laquelle nous revenons en
section 2.2), quant à elle, bien que non exhaustive, permet de détecter les vulnérabilités au niveau
du code source. L’avantage de cette approche est qu’elle reste praticable même lorsque le modèle de
faute est complexifié (
e.g.
l’attaquant peut introduire un nombre quelconque de fautes). Elle est
complémentaire à l’approche du CESTI, en ce sens qu’elle permet de mettre en évidence des points
sensibles du programme qu’il est particulièrement intéressant de tester. À l’heure actuelle,
Lazart
ne
détecte que les vulnérabilités liées aux inversions de test, comme détaillé section 2.2. L’objectif de ce
papier est d’étendre cette approche aux attaques
NOP
. Ces attaques, décrites plus précisément en sec-
tion 3, consistent à empêcher l’exécution de certaines instructions d’un programme lors de l’exécution.
Dans la section 1, nous décrirons le principe d’une attaque laser sur carte à puce et ses consé-
quences. En 2, nous verrons les différentes approches existantes pour détecter des vulnérabilités
aux attaques laser. Les sections 3 et 4 présentent notre contribution au domaine : en 3, nous ferons
un descriptif détaillé du type d’attaque étudié et ses conséquences ; et en 4 nous présenterons une
implémentation s’insérant dans l’approche Lazart pour détecter ce type d’attaques.
1
. Centre d’Évaluation de la Sécurité des Technologies de l’Information : organisme chargé de valider la robustesse
des codes exécutés sur carte avant commercialisation
1