Cogito est une chaîne de compilation qui permet d’appliquer automatiquement des contremesures afin d’accroître la sécurité des logiciels et des données embarquées dans les systèmes électroniques contre les attaques par canal auxiliaire et par injection de fautes.
Les logiciels embarqués dans les systèmes électroniques, tels que les cartes à puces, les objets connectés ou les smartphones, sont amenés à collecter, stocker et traiter des données sensibles. Or, ces logiciels se révèlent, en particulier, vulnérables à une classe d’attaques appelée attaques matérielles qui sont les attaques par canaux auxiliaires et celles par injection de fautes.
Les premières procèdent par l’observation du comportement physique du système (e.g., consommation électrique) lors de l’exécution du logiciel. Les deuxièmes provoquent des perturbations physiques, par exemple, en injectant des parasites sur le signal d’alimentation ou d’horloge du processeur. Ces attaques en fautes visent à détourner le logiciel de son fonctionnement normal dans le but de divulguer de l’information cachée ou de court-circuiter des protections.
Cogito sécurise les applications embarquées contre ce type d’attaques en intégrant automatiquement, lors de la phase de compilation, des contremesures dans les logiciels potentiellement vulnérables. Cette approche de sécurisation du logiciel lors de la compilation conduit à :
Les contremesures proposées par Cogito sont variées et nombreuses. Le CEA-List a développé des briques logicielles reposant sur des techniques qu’il a lui-même brevetées, comme la sécurisation basée sur le polymorphisme de code. Cette technique consiste à générer des variations de comportement du logiciel sans modifier ses propriétés fonctionnelles afin de réduire fortement l’efficacité des attaques.
Cogito est une chaîne de compilation qui s’appuie sur la plateforme LLVM.
Le développement de Cogito repose sur de nombreux projets collaboratifs de recherche français et européens, dont un projet éponyme de l’ANR qui s’est déroulé entre 2013 et 2017.
Les forces principales de l’outil sont :
Banc de mesure de rayonnement électromagnétique observé avec une sonde et un oscilloscope. L’enjeu de Cogito est, par exemple, d’empêcher ce vecteur d’attaques.
Runtime Code Polymorphism as a Protection against Side Channel Attacks, D. Couroussé, T. Barry, B. Robisson, P. Jaillon, O. Potin, and J.-L. Lanet, in 10th IFIP International Conference on Information Security Theory and Practice (WISTP), 2016.
Compilation of a Countermeasure against Instruction-Skip Fault Attacks, T. Barry, D. Couroussé, and B. Robisson, in Proceedings of the Third Workshop on Cryptography and Security in Computing Systems (CS2), 2016.
Automated Software Protection for the Masses against Side-Channel Attacks, N. Belleville, D. Couroussé, K. Heydemann, and H.-P. Charles, ACM Transactions on Architecture and Code Optimization (TACO), vol. 15, no. 4, 2019.
Maskara: Compilation of a Masking Countermeasure with Optimised Polynomial Interpolation, N. Belleville, D. Couroussé, K. Heydemann, Q. Meunier, and I. Ben El Ouahma. IEEE Transactions on Computer-Aided Design of Integrated Circuits and Systems (TCAD), 2020.
PROSECCO: Formally-Proven Secure Compiled Code, N. Belleville, D. Couroussé, E. Encrenaz, K. Heydeman and Q. Meunier, in C&ESAR, 2021.
Code Polymorphism Meets Code Encryption: Confidentiality and Side-Channel Protection of Software Components, L. Morel, D. Couroussé, and T. Hiscock ACM Digital Threats: Research and Practice (DTRAP), 2021.
SCI-FI – Control Signal, Code, and Control Flow Integrity against Fault Injection Attacks, T. Chamelot, D. Couroussé, and K. Heydeman. Design, Automation & Test in Europe Conference (DATE), 2022.