PICON : Control Flow Integrity on LLVM IR

Pendant les conférences SSTIC 2015, l’ANSSI présente PICON (Protect Integrity of CONtrol flow), un ajout au compilateur LLVM visant à détecter et empêcher toute exécution non conforme au comportement prévu initialement.

Publié le 09 Juin 2015 Mis à jour le 09 Juin 2015

L’intégrité de flot de contrôle (Control Flow Integrity, ou CFI) est une technique visant à assurer que l’exécution d’un programme ne suive que des chemins prévus dans son graphe de flot de contrôle, c’est-à-dire que tous les sauts (appels/retours de fonctions, branchements conditionnels et inconditionnels) réellement opérés à l’exécution du programme étaient des sauts prévisibles/attendus.

Les approches actuelles visant à protéger l’intégrité du flot de contrôle présentent des défauts, en particulier elles sont souvent conçues pour diminuer l’impact d’une telle protection sur les performances au détriment de qualité de la protection apportée.

Dans ce papier, l’ANSSI propose un mécanisme dont l’objectif est justement de privilégier la sécurité (au détriment des performances), appelé PICON, pour contraindre un programme à respecter son graphe de flot de contrôle. Ce mécanisme est basé sur l’instrumentation du langage intermédiaire (LLVM IR) pendant la phase de compilation, pour faire communiquer le programme avec un moniteur externe. Ce moniteur vérifie que l’exécution est conforme au graphe de flot de contrôle connu à la compilation, et termine le programme dès qu’une compromission du graphe de flot de contrôle est détectée.