Date de l'exposé : 12 décembre 2017
Identification d'Algorithmes Cryptographiques dans du Code Natif
Durant ma thèse j’ai travaillé à la conception de méthodes
automatisées permettant l’identification d’algorithmes
cryptographiques dans des programmes compilés en langage machine. Ce
besoin bien spécifique trouve une partie de son origine dans le
domaine de l’évaluation logicielle. L’utilisation d’algorithmes
cryptographiques se fait dans le but d’obtenir des fonctions de
sécurité telles que la confidentialité, l’intégrité et l’authenticité
pour la cryptographie symétrique ou des fonctions plus diverses comme
la signature numérique, l’établissement de secrets partagés ou le
chiffrement à clé publique pour la cryptographie asymétrique.
Cependant le choix des algorithmes, leur implémentation et leur
utilisation au sein d’un programme informatique sont autant de points
sensibles pouvant remettre en cause la robustesse de ces fonctions de
sécurité. Il est donc primordiale dans le cadre de l’évaluation
logicielle d’analyser les implémentations cryptographiques afin de
s’assurer de leur bon niveau de sécurité. Si dans bien des cas il est
possible et plus commode de conduire cette analyse à partir du code
source, il n’en demeure pas moins important de pouvoir également
opérer à partir du code machine. En effet le code source n’est ni
toujours disponible (évaluation pour le compte d’une tierce partie ou
avec des informations limitées dans le but de simuler un attaquant
réel) ni toujours fiable (biais délibéré ou non entre le code source
et le code machine, dû par exemple aux optimisations du compilateur).
L’idée n’est pas ici d’automatiser un type d’analyse particulier (par
exemple: vérifier l’absence
de corrélation entre temps d’exécution et paramètres secrets pour
empêcher les attaques par canaux temporels), mais d’automatiser
l’identification des algorithmes cryptographiques, première étape
nécessaire à toute analyse plus approfondie. A ce titre, les résultats
obtenus ne permettront pas directement dans bien des cas de juger du
bon niveau de sécurité des mécanismes cryptographiques, mais serviront
de socle à l’évaluateur pour débuter son analyse. Pour ce travail je
me suis limité à la cryptographie symétrique, proposant deux méthodes:
une pour l’identification des primitives cryptographiques et l’autre
pour l’identification des modes opératoires. Note: ces deux méthodes
n’ayant pas été conçues pour l’analyse de code obfuscé, elles
n’offrent aucune garantie de bon fonctionnement dans ce domaine.