Thèse soutenue

Vérification de scripts Shell effectuant des transformations de système de fichiers hiérarchiques

FR  |  
EN
Auteur / Autrice : Nicolas Jeannerod
Direction : Ralf Treinen, Yann Régis-Gianas
Type : Thèse de doctorat
Discipline(s) : Informatique
Date : Soutenance le 30/03/2021
Etablissement(s) : Université Paris Cité
Ecole(s) doctorale(s) : École doctorale Sciences mathématiques de Paris centre (Paris ; 2000-....)
Partenaire(s) de recherche : Laboratoire : Institut de recherche en informatique fondamentale (Paris ; 2016-....)
Jury : Président / Présidente : Roberto Di Cosmo
Examinateurs / Examinatrices : Yann Régis-Gianas, Roberto Di Cosmo, Julia L. Lawall, Michael Greenberg
Rapporteurs / Rapporteuses : Andreas Podelski, Stéphane P. Demri

Résumé

FR  |  
EN

Cette thèse vise à appliquer des techniques de vérification déductive de programmes et d’analyse de transformations d’arbres au problème de l’analyse de scripts Shell. En particulier, nous visons à analyser les scripts Shell utilisés pendant l’installation de logiciels de la distribution Debian GNU/Linux. Le but final est de démontrer la faisabilité de notre analyse en développant un outil capable de lire des paquets Debian – le format dans lequel Debian distribue des logiciels – et de fournir un rapport sur leur qualité et sur les bogues potentiels qu’on pourrait y trouver.Shell est un langage de script qui fournit des structures de contrôle autour d’appels d’utilitaires Unix. Les utilitaires Unix sont des objets qui peuvent effectuer toutes sortes de transformations sur des systèmes de fichiers Unix. Nous modélisons les systèmes de fichiers Unix à l’aide d’arbre de traits et les transformations de tels systèmes de fichiers à l’aide de formules dans une logique d’arbres de traits nommée FTS. Nous décrivons ces modélisations en détails et discutons leur validité. Les structures de contrôle des scripts Shell sont converties en des structures de contrôle d’un langage intermédiaire avec une sémantique clairement définie. Cela implique la définition du langage intermédiaire en question et le développement d’un parseur statique pour les scripts Shell et d’une conversion qui respecte les sémantiques des deux langages. La sémantique d’un script Shell est ensuite calculée par exécution symbolique sur le langage intermédiaire susmentionné en utilisant une base de spécifications des utilitaires Unix comme des formules de FTS. Pour chaque trace d’exécution d’un script Shell, le résultat est une formule de FTS décrivant la transformation de système de fichiers qu’effectue cette trace.La partie principale de cette thèse s’intéresse à la décidabilité de formules de FTS. L’objectif est d’être capable de détecter des traces d’exécution de scripts Shell qui ne peuvent pas arriver et de vérifier des propriétés sur les scripts Shell, comme par exemple le fait que « si le script échoue, alors il ne doit pas avoir effectué de transformation. » Une première approche théorique vise à montrer que la théorie du premier ordre de FTS est décidable. Cela se fait par un raisonnement sur les formules Σ1 de FTS et par la définition d’un système de règles R1 qui transforme les formules Σ1. Nous montrons que nous pouvons utiliser R1 pour décider de la satisfiabilité de formules Σ1, parmi d’autres propriétés. Nous étendons ensuite le raisonnement des formules Σ1 vers les formules du premier ordre de FTS à l’aide de propriétés de R1 et d’éliminations faible des quantificateurs. Nous concluons en disant que la théorie du premier ordre de FTS est bien décidable. Une seconde approche, plus pratique, vise à créer des procédures de décision efficaces pour un sous-ensemble de FTS assez riche pour exprimer les sémantiques des utilitaires Unix et des scripts Shell. Nous faisons cela en nous intéressant en particulier aux formules conjonctives et en améliorant R1. Le résultat est un système R2 qui est plus efficace sur les formules conjonctives mais qui n’a pas les propriétés nécessaires pour prouver la décidabilité du premier ordre. Nous montrons ensuite comment R2 peut être implémenté efficacement et comment il peut être étendu pour supporter des formes spécifiques de formules de Σ1 sans pertes d’efficacité.Enfin, cette thèse décrit les applications de ce travail théorique à l’implémentation d’un groupe d’outils capable d’analyser tous les paquets logiciels de la distribution Debian et de fournir un rapport. Nous décrivons notre analyse et les bogues que nous avons trouvé au long du projet. Cette thèse s’inscrit dans le projet CoLiS, ANR-15-CE25-0001, se déroulant entre octobre 2015 et mars 2021.