Partager

Vérification incrémentale de logiciels pour la cybersécurité

Crédit : kras99 @AdobeStock
En cybersécurité, la détection immédiate de vulnérabilité logicielles nouvellement introduites est essentielle. L’intégration récente dans Frama-C de techniques génériques d’analyse incrémentale permet de vérifier rapidement un code après des modifications localisées. Les premiers résultats sont très prometteurs en termes de temps d’analyse, tout en conservant la fiabilité.

Lorsqu’on cherche à garantir l’absence de vulnérabilités dans un code source, il ne suffit pas de disposer d’un outil capable de les détecter : on souhaite s’assurer qu’il n’en existe aucune.

C’est un des objectifs de l’outil de vérification formelle Frama-C du CEA-List : vérifier automatiquement, à l’aide de preuves mathématiques, l’absence d’une large classe de vulnérabilités, telles que les buffer overflows (dépassements de l’emplacement mémoire réservé pour des données, dus à l’absence de précautions lors de la programmation).
Cette vérification demande un certain investissement, mais est d’autant plus facile à mettre en œuvre qu’elle est intégrée tôt dans le cycle de développement. Cela permet de détecter l’introduction de défauts à un moment où ils restent faciles à corriger. Cela permet également de mettre en évidence, très en amont, les contraintes de l’analyse et d’inciter les développeurs à adopter un style de programmation mieux adapté à la vérification automatique.

L’utilisation de Frama-C s’intègre idéalement dans un processus d’intégration continue, pratique de développement dans laquelle le code est testé et validé à chaque modification, dès le début du projet. Pour que Frama-C puisse être intégré à un tel processus, son temps d’analyse doit rester comparable à l’intervalle entre deux modifications du code. Pour répondre à cette contrainte, nous avons développé dans Frama-C des techniques d’analyse incrémentale.

Le principe consiste à repartir d’une analyse déjà effectuée et à réutiliser autant que possible ses résultats afin d’accélérer l’analyse d’une version modifiée du code. La difficulté majeure est d’établir formellement que cette réutilisation ne compromet pas la correction : les résultats doivent rester aussi fiables que si l’analyse était complète.

Deux techniques ont été mises en œuvre.

La première repose sur la réutilisation de résumés de fonctions du code que l’analyseur a produits lors de la première analyse. Ces résumés correspondent à des propriétés mathématiques déduites de chaque fonction. En comparant les versions du code et en explorant leur structure, on détermine quels résumés peuvent être réutilisés pour la nouvelle analyse de la fonction.

La seconde technique vise à accélérer la recherche des invariants de boucle (propriétés logiques du code) : les invariants découverts lors d’une analyse précédente sont réutilisés comme points de départ pour trouver plus rapidement les invariants de la nouvelle version du code.

Les premiers résultats expérimentaux, à partir de codes open source dont l’historique de modifications est public, montrent que l’analyse incrémentale de code avec Frama-C permet de réduire le temps d’analyse d’un facteur de ×1,5 à ×28, avec une moyenne de ×7,83. L’expérimentation met également en évidence une très faible variation des résultats de l’analyse, sans remettre en cause sa fiabilité. Cela confirme ainsi la pertinence de notre approche dans un contexte d’intégration continue.


 

Réutilisation d’une partie de l’analyse pour analyser le code modifié. Crédit : CEA

 
Gain de temps des analyses incrémentales (vert) par rapport aux analyses complètes (orange) sur cent codes cryptographiques open-source, avec en abscisse le nombre de résumés de fonctions non réutilisables. Crédit : CEA

Un usage précoce de Frama-C dans le développement logiciel permet de détecter les vulnérabilités au moment où elles sont faciles à corriger.

Valentin Perrelle

Ingénieur-chercheur — CEA_List

En savoir plus

Ces travaux ont été réalisés en partenariat avec Sorbonne Université et s’inscrivent dans le cadre du projet SecurEval du PEPR Cybersécurité, financé par France 2030.

Ils ont donné lieu à une publication :

  • M. Razafintsialonina, D. Bühler, A. Miné, Valentin Perrelle, J. Signoles “Reusing Caches and Invariants for Efficient and Sound Incremental Static Analysis” à ECOOP 2025 (rang A) ainsi que “Réutilisations de caches et d’invariants pour l’analyse statique incrémentale” aux JFLA 2024.

Ont contribué à l’écriture de cet article

  • Valentin Perrelle, Ingénieur-Chercheur, CEA-List
  • Mamy Razafintsialonina, Doctorant, CEA-List
  • Julien Signoles, Directeur de recherche, CEA-List

À lire également

Domaines applicatifs

Cybersécurité : garantir la sécurité et la confidentialité par conception

Au cœur des enjeux de souveraineté numérique, la cybersécurité constitue aujourd’hui un pan essentiel de nos sociétés. Garante de l’autonomie et de la paix dans le cyberespace, elle est un ...
Lire la suite
Environnements de développement logiciel

Frama-C

Un environnement open source d’analyse formelle de code C pour garantir la sûreté et la sécurité des programmes.
Lire la suite