Etude comparative des outils de vérification d'algorithmes ... - LIFL

propriétés à vérifier (son contrat, ou sa spécification) exprimées dans un langage de spécification formelle. Un des greffons de Frama-C, nommé WP, permet de ...
169KB taille 2 téléchargements 216 vues
Proposition de stage de BAC+4 ou BAC+5 Pro ou Recherche

Etude comparative des outils de vérification d'algorithmes parallèles Cadre du stage : Le CEA LIST est un centre de recherche technologique sur les systèmes à logiciel prépondérant qui mène ses recherches en partenariat avec les grands acteurs industriels du nucléaire, de l’automobile, de l’aéronautique, de la défense et du médical pour étudier et développer des solutions innovantes adaptées à leurs besoins. Au sein du CEA LIST, le Laboratoire Sûreté des Logiciels (LSL), localisé à Palaiseau (Essonne), développe les outils d'aide à la validation et à la vérification de logiciels et de systèmes matériels/logiciels. L'un des nos outils, nommé Frama-C (http://frama-c.com) , permet d'utiliser l'analyse statique pour calculer les valeurs possibles des variables à chaque point de programme, trouver des menaces d'erreurs à l'exécution, prouver des propriétés du programme, etc. Objectifs du stage : Ce stage vise à étudier différents outils de vérification de programmes parallèles tels que TLA+, VERISOFT, VCC, ainsi que la preuve manuelle à l'aide de logiques adaptées, éventuellement aidée par un assistant de preuve interactive comme Coq. Le travail consistera à essayer les différents outils, comprendre leur fonctionnement et comparer leurs fonctionnalités sur différents exemples de programmes, ou plus généralement, d'algorithmes parallèles. Les exemples seront composés d'algorithmes connus dans la littérature, en commençant par les exemples de programmes qui ont été précédemment vérifié avec l'un des outils. Il faudra modéliser les algorithmes dans les formalismes adaptés aux différents outils et comparer les capacités de vérification à l'aide des outils et par la preuve manuelle. Un deuxième axe de travail comprendra la vérification des algorithmes d'Anaxagoros, un hyperviseur de Cloud développé au CEA LIST. En se basant sur les résultats de la première partie du stage, nous allons formellement vérifier un ou plusieurs algorithmes d'Anaxagoros à l'aide des outils étudiés. Ce stage permettra au stagiaire de découvrir divers outils et méthodes de vérification de programmes parallèles et les technologies utilisées, les appliquer à la vérification d'études de cas réels, et d'acquérir ainsi des compétences en vérification de plus en plus demandées par les entreprises. Il existe des possibilités de continuer en thèse au CEA après le stage. Profil des candidats :  Très bonnes connaissances en génie logiciel et méthodes formelles.  Un goût prononcé pour les mathématiques et le raisonnement formel.  Langage C, notions en systèmes d'exploitation souhaitées.  Capacité de travail en équipe. Conditions : stage indemnisé, aide au logement possible, transport CEA en Ile-de-France gratuit. Encadrement : Nikolay Kosmatov, Matthieu Lemerre (CEA LIST), Frédéric Loulergue (LIFO) Contact : Nikolay Kosmatov, email : [email protected] (Les délais administratifs au CEA étant assez longs, merci de nous contacter le plus tôt possible.)

Proposition de stage de BAC+5 Pro ou Recherche

Développement d'un simulateur de parallélisme pour la vérification d'algorithmes parallèles dans Frama-C Cadre du stage : Le CEA LIST est un centre de recherche technologique sur les systèmes à logiciel prépondérant qui mène ses recherches en partenariat avec les grands acteurs industriels du nucléaire, de l’automobile, de l’aéronautique, de la défense et du médical pour étudier et développer des solutions innovantes adaptées à leurs besoins. Au sein du CEA LIST, le Laboratoire Sûreté des Logiciels (LSL), localisé à Palaiseau (Essonne), développe les outils d'aide à la validation et à la vérification de logiciels et de systèmes matériels/logiciels. L'un des nos outils, nommé Frama-C (http://frama-c.com) , permet d'utiliser l'analyse statique pour calculer les valeurs possibles des variables à chaque point de programme, trouver des menaces d'erreurs à l'exécution, prouver des propriétés du programme, etc. Dans Frama-C, un programme C peut être spécifié ou annoté, c'est-à-dire, contenir des propriétés à vérifier (son contrat, ou sa spécification) exprimées dans un langage de spécification formelle. Un des greffons de Frama-C, nommé WP, permet de prouver qu'un programme spécifié respecte sa spécification. Objectifs du stage : La version actuelle de Frama-C ne permet pas directement de vérifier un programme parallèle dont certaines fonctions peuvent être exécutées par plusieurs fils (threads) en même temps. Cependant, cette exécution parallèle peut être parfois simulée par un programme séquentiel avec une spécification adaptée. Ce stage vise à développer un générateur de simulateurs de parallélisme permettant de vérifier, sous certaines conditions, que le programme respecte sa spécification. On pourra utiliser des variables dupliquées (ou des variables ghost) pour représenter l'état de chacun des threads, afin de pouvoir exprimer les propriétés globales de tout le système. Ensuite, le greffon de preuve WP pour les programmes séquentiels pourra être appliqué. Ensuite, le prototype développé sera utilisé pour prouver des algorithmes de programmes parallèles connus dans la littérature ou issu d'une étude de cas réelle. Ce stage permettra au stagiaire de découvrir des méthodes de vérification de programmes, les appliquer à la vérification d'études de cas réels, et d'acquérir ainsi des compétences en vérification de plus en plus demandées par les entreprises. Il existe des possibilités de continuer en thèse au CEA après le stage. Profil des candidats :  Très bonnes connaissances en génie logiciel et méthodes formelles.  Bonne maîtrise des langages OCAML et C.  Capacité de travail en équipe. Conditions : stage indemnisé, aide au logement possible, transport CEA en Ile-de-France gratuit. Encadrement : Nikolay Kosmatov, Matthieu Lemerre Contact : Nikolay Kosmatov, email : [email protected] (Les délais administratifs au CEA étant assez longs, merci de nous contacter le plus tôt possible.)

Proposition de stage de BAC+4 ou BAC+5 Pro ou Recherche

Vérification combinée par preuve et test structurel d'un module critique d'hyperviseur de Cloud Cadre du stage : Le CEA LIST est un centre de recherche technologique sur les systèmes à logiciel prépondérant qui mène ses recherches en partenariat avec les grands acteurs industriels du nucléaire, de l’automobile, de l’aéronautique, de la défense et du médical pour étudier et développer des solutions innovantes adaptées à leurs besoins. Au sein du CEA LIST, le Laboratoire Sûreté des Logiciels (LSL), localisé à Saclay (Essonne), développe les outils d'aide à la validation et à la vérification de logiciels et de systèmes matériels/logiciels. L'un des nos outils, nommé Frama-C, permet d'utiliser l'analyse statique pour calculer les valeurs des possibles des variables à chaque point de programme, trouver des menaces d'erreurs à l'exécution, prouver des propriétés du programme, etc. Un autre outil, nommé PathCrawler, permet de générer des cas de test et de les exécuter afin d'activer tous les chemins d'exécution possibles d'un programme C. Il utilise une instrumentation fine du programme sous test, le traduit vers un ensemble de contraintes et applique une stratégie spécifique de parcours et de résolution de contraintes à l'aide d'un solveur de contraintes. Un prototype d'hyperviseur de Cloud sécurisé appelé Anaxagoros a été développé par un autre laboratoire du CEA LIST. Objectifs du stage : Ce stage vise à vérifier des algorithmes extraits des composants critiques de systèmes d'exploitation (ou d'hyperviseurs de Cloud) à l'aide des méthodes formelles (preuve de programmes, analyse de valeurs) et de test structurel. Un des composants critiques à vérifier, le service de mémoire virtuelle, permet d'allouer la mémoire dynamiquement, créer, modifier et détruire des objets systèmes tels que les domaines, les threads, etc. Un autre exemple de module critique nécessitant une vérification formelle est le module de contrôle d'accès basé sur un mécanisme de capacités. Les algorithmes seront spécifiés et prouvés à l'aide des greffons de preuve de Frama-C. Le prototype Anaxagoros sera utilisé comme point de départ des travaux. Le test structurel avec PathCrawler sera utilisé pour la validation des parties du code qui ne pourront pas être entièrement prouvées. Ce stage permettra au stagiaire de découvrir divers outils de vérification de logiciels et les technologies utilisées, les appliquer à la vérification d'un cas d'étude réel, et d'acquérir ainsi des compétences de plus en plus demandées par les entreprises. Il existe des possibilités de continuer en thèse au CEA après le stage. Profil des candidats :  Très bonnes connaissances en génie logiciel, un goût pour les mathématiques et la logique.  Langage C, notions en architecture et systèmes d'exploitation souhaités.  Capacité de travail en équipe. Conditions : stage indemnisé, aide au logement possible, transport CEA en Ile-de-France gratuit. Encadrement : Nikolay Kosmatov, Matthieu Lemerre Contact : Nikolay Kosmatov, email : [email protected] (Les délais administratifs au CEA étant assez longs, merci de nous contacter le plus tôt possible.) Références [1] F. Loulergue, F. Gava, N. Kosmatov, M. Lemerre, Towards Verified Cloud Computing Environments, In HPCS, pages 91-97, IEEE, 2012 [2] M. Lemerre, N.Kosmatov, C.Alec. Verified secure kernels and hypervisors for the cloud. In C&ESAR 2012, pages 89-104, France, 2012

Proposition de stage niveau bac+5 Analyse statique pour optimiser un générateur de code Mots-clés

: analyse statique, génération de code, spécication formelle, runtime assertion checking

Cadre Le CEA LIST est un centre de recherche technologique sur les systèmes à logiciel prépondérant qui mène ses recherches en partenariat avec les grands acteurs industriels du nucléaire, de l'automobile, de l'aéronautique, de la défense et du médical pour étudier et développer des solutions innovantes adaptées à leurs besoins. Au sein du CEA LIST, le Laboratoire de Sûreté des Logiciels (LSL), localisé à Saclay (Essonne, 91), développe des outils d'aide à la validation et à la vérication de logiciels et de systèmes matériels/logiciels, tout particulièrement dans le domaine des systèmes embarqués critiques. L'un des nos outils, nommé Frama-C (http://frama-c.com), est une plate-forme logicielle facilitant le développement d'outils d'analyses de programmes C. Le stage se déroulera au sein de l'équipe de R&D développant Frama-C .

Objectifs Chaque programme C analysé par Frama-C peut être annoté par des spécications formelles, écrites dans un langage appelé ACSL [1]. Frama-C ore alors diérentes techniques de vérication pour garantir que le programme satisfait sa spécication. Une des techniques a pour but de traduire une sous-classe des annotations ACSL celles dites exécutables  en instructions C intégrées au programme sous analyse [2]. Cette transformation permet d'obtenir un nouveau programme C dont la correction vis-à-vis de sa spécication est vériée dynamiquement, pendant son exécution : cette technique est appelée le runtime assertion checking. Une des dicultés principales de cette transformation réside dans la prise en compte du modèle mémoire du langage C an d'être en mesure de traduire correctement, par exemple, l'expression ACSL \valid(p) qui permet de spécier que le pointeur p est valide (i.e. non nul et accédant à une zone mémoire licite). Ainsi, un accès à un tableau hors limites (e.g. avec un indice trop grand), ou à une zone mémoire allouée dynamiquement et ensuite libérée, serait invalide. Pour ce faire, la transformation instrumente notamment le programme initial pour collecter ses allocations, dé-allocations et initialisations via des appels de fonctions vers une bibliothèque C dédiée préalablement développée [3]. Cette instrumentation est néanmoins très invasive. Pour la rendre plus légère et moins couteuse en temps et en mémoire, une analyse statique ot de données a été développée de façon à n'instrumenter que les opérations sur la mémoire réellement requises. Cette analyse demeure néanmoins perfectible. Le but du stage est de dénir une nouvelle analyse plus précise que celle existante, de la formaliser et de prouver sa correction. Il faudra également l'implémenter en OCaml dans un greon Frama-C .

Références [1] P. Baudin, J.-C. Filliâtre, C. Marché, B. Monate, Y. Moy, and V. Prevosto. ACSL : ANSI/ISO C Specication Language, version 1.7, 2013. http://frama-c.com/acsl.html. [2] M. Delahaye, N. Kosmatov, and J. Signoles. Common specication language for static and dynamic analysis of C programs. In Symposium on Applied Computing (SAC'13), pages 12301235, 2013. [3] N. Kosmatov, G. Petiot, and J. Signoles. An optimized memory monitoring for runtime assertion checking of C programs. In International Conference on Runtime Verication (RV 2013), volume 8174 of LNCS, pages 167182. Springer, September 2013.

Candidatures Maîtriser les langages C et programmes est un plus. Contacts :

OCaml

est nécessaire pour ce stage. Avoir des connaissances en analyse de

Julien Signoles et Nikolaï Kosmatov ([email protected])

Les délais administratifs de recrutement au CEA étant de 2 à 3 mois minimum, merci de prendre contact le plus tôt possible.

Proposition de stage Pro niveau bac+5 Monitoring optimisé pour la détection des erreurs de mémoire dans les programmes C Mots-clés : allocation dynamique, validité des pointeurs, vérification des programmes C, spécification formelle, runtime assertion checking

Cadre Le CEA LIST est un centre de recherche technologique sur les systèmes à logiciel prépondérant qui mène ses recherches en partenariat avec les grands acteurs industriels du nucléaire, de l’automobile, de l’aéronautique, de la défense et du médical pour étudier et développer des solutions innovantes adaptées à leurs besoins. Au sein du CEA LIST, le Laboratoire de Sûreté des Logiciels (LSL), localisé à Saclay (Essonne, 91), développe des outils d’aide à la validation et à la vérification de logiciels et de systèmes matériels/logiciels, tout particulièrement dans le domaine des systèmes embarqués critiques. L’un des nos outils, nommé F RAMA -C (http://frama-c.com), est une plate-forme logicielle facilitant le développement d’outils d’analyses de programmes C. Le stage se déroulera au sein de l’équipe de R&D développant F RAMA -C.

Objectifs Chaque programme C analysé par F RAMA -C peut être annoté par des spécifications formelles, écrites dans un langage appelé ACSL [1]. F RAMA -C offre alors différentes techniques de vérification pour garantir que le programme satisfait sa spécification. Une des techniques a pour but de traduire une sous-classe des annotations ACSL– celles dites exécutables – en instructions C intégrées au programme sous analyse [2]. Cette transformation permet d’obtenir un nouveau programme C dont la correction vis-à-vis de sa spécification est vérifiée dynamiquement, pendant son exécution : cette technique est appelée le runtime assertion checking. Une des difficultés principales de cette transformation réside dans la prise en compte du modèle mémoire du langage C. Par exemple, un accès à un tableau hors limites (e.g. avec un indice trop grand), ou à une zone mémoire allouée dynamiquement et ensuite libérée, serait invalide en C. Une bibliothèque (env. 1000 lignes de code C) a été développée [3] pour collecter les allocations, dé-allocations et initialisations effectuées par le programme C et contrôler ensuite la validité (et d’autres propriétés) des accès mémoires. Ce stage vise à développer une extension de la bibliothèque qui intégrera de nouvelles fonctionnalités pour une meilleure détection de certaines erreurs. Notamment, des tentatives d’utilisation d’une zone mémoire libérée et réallouée à nouveau, ou des décalages de pointeur dans un autre bloc en dehors du bloc mémoire initial, ou des accès à cheval entre deux blocs mémoire seront pris en compte. Un deuxième axe des travaux serait l’intégration des techniques de monitoring récentes consistant à surveiller la validité de la mémoire grâce à une copie (shadow page) avec des accès fortement optimisés qui pourront améliorer les performances de la bibliothèques. Ce stage sera l’occasion d’acquérir une bonne expérience de développement pointu en C ainsi qu’une expertise en gestion de la mémoire et détection des anomalies.

Candidatures Une bonne maîtrise du langage C, notamment en gestion de la mémoire. Connaissances en vérification de programmes seraient un plus. Les délais administratifs de recrutement au CEA étant de 2 à 3 mois minimum, merci de prendre contact le plus tôt possible. Contacts : Nikolai Kosmatov et Julien Signoles ([email protected])

Références [1] P. Baudin, J.-C. Filliâtre, C. Marché, B. Monate, Y. Moy, and V. Prevosto. ACSL : ANSI/ISO C Specification Language, version 1.7, 2013. http://frama-c.com/acsl.html. [2] M. Delahaye, N. Kosmatov, and J. Signoles. Common specification language for static and dynamic analysis of C programs. In Symposium on Applied Computing (SAC’13), pages 1230–1235, 2013. [3] N. Kosmatov, G. Petiot, and J. Signoles. An optimized memory monitoring for runtime assertion checking of C programs. In International Conference on Runtime Verification (RV 2013), pages 167–182, 2013.