A fully reproducible C toolchain rooted on POSIX shell
Abstract
Les attaques de chaîne d'approvisionnement sont de plus en plus communes et sont notamment difficiles à détecter. La compilation reproductible (reproducible builds) est une manière de prévenir ces attaques, en permettant à quiconque de recréer les artefacts de compilation de manière exacte (bit à bit) à partir du code source. Or, les outils de compilation nécessaires pour recréer ces artefacts sont à leur tour vulnérables à ces attaques. Ainsi, une solution complète au problème de chaîne d'approvisionnement doit inclure la compilation reproductible de tous ces outils. Avec ce problème comme motivation, nous démontrons l'utilité des shells POSIX, disponibles sur la grande majorité des ordinateurs, comme point de départ pour la compilation reproductible. Pour ce faire, nous présentons pnut-sh, un compilateur C vers POSIX shell écrit en C dont la sortie est conçue pour être lisible. Puisque le compilateur peut s'auto-compiler, il est donc possible de produire un script implémentant un compilateur C qui ne nécessite qu'un shell conforme à la spécification POSIX tels que bash, ksh, zsh, etc. Ensemble, pnut-sh et le shell servent alors de point de départ pour la compilation d'une série d'outils de plus en plus complets jusqu'à atteindre une version récente du GNU Compiler Collection (GCC). GCC peut alors servir de fondation pour tout autre outil. Afin de pouvoir passer de l'environnement limité du shell au reste du système d'exploitation, nous présentons également pnut-exe, un compilateur C plus complet produisant des exécutables x86, ainsi qu'une implémentation sur mesure de la bibliothèque standard C depuis lesquels le Tiny C Compiler (TCC) peut être compilé. TCC peut ensuite être utilisé pour amorcer GCC. Le résultat est une chaîne de compilation produite exclusivement à partir d'un shell et de fichiers source lisibles. Nous discutons de comment compiler reproductiblement TCC à partir du shell POSIX, le niveau de support pour le langage C requis pour atteindre cet objectif, l'architecture des deux versions de pnut, la génération de code shell POSIX portable et suffisamment performant, et finalement, l'empaquetage et la distribution des fichiers servant au processus de compilation reproductible de TCC.
Fields of Study & Subjects
Security and Verification in Computing
Software Engineering Research
Logic
programming
and type systems
Publication details
- Publication date
- 1 January 2026
- Language
- EN
- Document type
- Thesis