compilations reproductibles
play

Compilations reproductibles Permettre le lien entre un binaire et sa - PowerPoint PPT Presentation

Compilations reproductibles Permettre le lien entre un binaire et sa source Lunar lunar@debian.org Lunar (Debian) Compilations reproductibles 1 / 101 Compilation reproductible? Le principe de compilation reproductible permet


  1. reproducible.debian.net Système de tests en continu piloté par Jenkins Grosse machine sponsorisée par ProfitBricks Vérifie en moyenne autour de 1300 paquets Debian par jour Résultats accessibles via la web Ajoutés récemment : Coreboot et OpenWrt Lunar (Debian) Compilations reproductibles 28 / 101

  2. Variations testées pour les paquets Debian La deuxième compilation est différente sur : l’heure le fuseau horaire l’ordre des fichiers l’ordre des processus le nombre de cœurs alloués Lunar (Debian) Compilations reproductibles 29 / 101

  3. Variations testées pour les paquets Debian le nom de la machine et son nom de domaine le nom du compte, ainsi que uid et gid le umask la locale ( LC_ALL ) et la langue ( LANG ) la version du noyau le PATH Lunar (Debian) Compilations reproductibles 30 / 101

  4. /proc/cpuinfo Variations en projet la date ( mais on triche avec les fuseaux horaires ) le système de fichiers Peut-être qu’il manque encore d’autres variations à ajouter… Lunar (Debian) Compilations reproductibles 31 / 101

  5. Problèmes identifiés L’horodatage ( timestamp ) L’ordre des fichiers Du (pseudo-)aléatoire : ◮ Les chemins de fichiers temporaires ◮ UUID ◮ Les protections contre les attaques de complexité Lunar (Debian) Compilations reproductibles 32 / 101

  6. Problèmes identifiés (suite) Lié au processour ou à la mémoire : ◮ Des optimisations de code liées au type de processeur ◮ L’écriture d’adresses mémoires Le chemin du dossier de compilation Et bien d’autres… (par exemple les options de localisation) Lunar (Debian) Compilations reproductibles 33 / 101

  7. Problèmes identifiés (suite) Examples Horodatage par le système de compilation Lunar (Debian) Compilations reproductibles 34 / 101

  8. Horodatage dans les en-têtes gzip Lunar (Debian) Compilations reproductibles 35 / 101

  9. Horodatage par Maven Lunar (Debian) Compilations reproductibles 36 / 101

  10. Horodatage dans des Makefile générés Lunar (Debian) Compilations reproductibles 37 / 101

  11. Horodatage dans des en-têtes C Lunar (Debian) Compilations reproductibles 38 / 101

  12. Horodatage par PyQt4 Lunar (Debian) Compilations reproductibles 39 / 101

  13. Horodatage par le compilateur Erlang Lunar (Debian) Compilations reproductibles 40 / 101

  14. Horodatage dans les binaires au format PE Windows, UEFI, Mono… Lunar (Debian) Compilations reproductibles 41 / 101

  15. Horodatage dans les bibliothèques ADA Lunar (Debian) Compilations reproductibles 42 / 101

  16. Horodatage dans les gemspec Ruby Lunar (Debian) Compilations reproductibles 43 / 101

  17. Horodatage dans le registre PHP Lunar (Debian) Compilations reproductibles 44 / 101

  18. Horodatage par Cheetah Lunar (Debian) Compilations reproductibles 45 / 101

  19. Horodatage dans la version d’un module Lunar (Debian) Compilations reproductibles 46 / 101

  20. Problèmes identifiés (suite) Examples Les archives Lunar (Debian) Compilations reproductibles 47 / 101

  21. Horodatage dans le bibliothèques statiques Lunar (Debian) Compilations reproductibles 48 / 101

  22. Horodatage dans le bibliothèques statiques Lunar (Debian) Compilations reproductibles 49 / 101

  23. Horodatage dans les archives ZIP Lunar (Debian) Compilations reproductibles 50 / 101

  24. Horodatage dans les .jar Java En fait, ce sont des archives ZIP. Lunar (Debian) Compilations reproductibles 51 / 101

  25. Horodatage dans les archives Tar Lunar (Debian) Compilations reproductibles 52 / 101

  26. Login and groupe dans les archives Tar Lunar (Debian) Compilations reproductibles 53 / 101

  27. Ordre aléatoire dans les archives Tar Lunar (Debian) Compilations reproductibles 54 / 101

  28. Problème identifiés (suite) Examples Horodatage dans la doc Lunar (Debian) Compilations reproductibles 55 / 101

  29. Horodatage par Doxygen Lunar (Debian) Compilations reproductibles 56 / 101

  30. Horodatage par docbook-to-man Lunar (Debian) Compilations reproductibles 57 / 101

  31. Horodatage par Groovydoc Lunar (Debian) Compilations reproductibles 58 / 101

  32. Horodatage par Epydoc Lunar (Debian) Compilations reproductibles 59 / 101

  33. Horodatage par Sphinx Lunar (Debian) Compilations reproductibles 60 / 101

  34. Horodatage par Ghostscript Lunar (Debian) Compilations reproductibles 61 / 101

  35. Horodatage par LaTeX Lunar (Debian) Compilations reproductibles 62 / 101

  36. Horodatage par texi2html Lunar (Debian) Compilations reproductibles 63 / 101

  37. Horodatage par texi2html (suite) Lunar (Debian) Compilations reproductibles 64 / 101

  38. Horodatage par help2man Lunar (Debian) Compilations reproductibles 65 / 101

  39. Horodatage par GNU groff Lunar (Debian) Compilations reproductibles 66 / 101

  40. Horodatage par Javadoc Lunar (Debian) Compilations reproductibles 67 / 101

  41. Horodatage par man2html Lunar (Debian) Compilations reproductibles 68 / 101

  42. Horodatage par LaTeX (.dvi) Lunar (Debian) Compilations reproductibles 69 / 101

  43. Problèmes identifiés (suite) Examples « Compilé le/sur/par » Lunar (Debian) Compilations reproductibles 70 / 101

  44. Horodatage par macros du préprocesseur C Lunar (Debian) Compilations reproductibles 71 / 101

  45. Horodatage par macros du préprocesseur C Lunar (Debian) Compilations reproductibles 72 / 101

  46. Horodatage via Makefile Lunar (Debian) Compilations reproductibles 73 / 101

  47. Nom de machine enregistré via ./configure Lunar (Debian) Compilations reproductibles 74 / 101

  48. Horodotage via ./configure Lunar (Debian) Compilations reproductibles 75 / 101

  49. Macros m4 pour autoconf (horodatage) Lunar (Debian) Compilations reproductibles 76 / 101

  50. Macros m4 pour autoconf (login) Lunar (Debian) Compilations reproductibles 77 / 101

  51. Macros m4 pour autoconf (nom de machine) Lunar (Debian) Compilations reproductibles 78 / 101

  52. Version du noyau Lunar (Debian) Compilations reproductibles 79 / 101

  53. Points bonus Lunar (Debian) Compilations reproductibles 80 / 101

  54. Problèmes identifiés (suite) Examples Aléatoire Lunar (Debian) Compilations reproductibles 81 / 101

  55. Ordre aléatoire des hash Perl cf. Algorithmic complexity attacks perlsec(1). Lunar (Debian) Compilations reproductibles 82 / 101

  56. Numéro de série aléatoire dans les flux Ogg Lunar (Debian) Compilations reproductibles 83 / 101

  57. Ordre aléatoire des imports dans du Python Lunar (Debian) Compilations reproductibles 84 / 101

  58. Nom de fichiers temporaire avec ocamlc Lunar (Debian) Compilations reproductibles 85 / 101

  59. Problèmes identifiés (suite) Examples Toujours plus d’horodatage ! Lunar (Debian) Compilations reproductibles 86 / 101

  60. Horodatage dans les EPUB Lunar (Debian) Compilations reproductibles 87 / 101

  61. Horodatage dans les PNG Even images! Lunar (Debian) Compilations reproductibles 88 / 101

  62. Horodatage dans les polices TrueType And fonts! Lunar (Debian) Compilations reproductibles 89 / 101

  63. Problèmes identifiés (suite) Chemin du dossier de compilation Enregistrement de l’environnement (par exemple le PATH ) Permissions des fichiers Signature cryptographique Et il en manque de nombreux autres… Lunar (Debian) Compilations reproductibles 90 / 101

  64. Comment corriger? Horodatage : ◮ Préférer une référence précise au code en train d’être compilé (numéro de version, hash du commit git) ◮ Utiliser une date de référence (dernière modification du code) ◮ Utiliser le fuseau horaire UTC Ordre aléatoire : ◮ Trier les clés ou les fichiers Lunar (Debian) Compilations reproductibles 91 / 101

  65. Comment corriger? (suite) Chemins : ◮ Utiliser toujours le même dossier Noyau, processeur, login, … : ◮ Ne pas enregistrer d’informations inutiles dans les binaires On peut aussi nettoyer a posteriori . Lunar (Debian) Compilations reproductibles 92 / 101

  66. strip-nondeterminism Normalise divers formats de fichiers Gère pour l’instant : ◮ Archives ar ( .a ) ◮ gzip ◮ Java jar ◮ Javadoc HTML ◮ Maven pom.properties ◮ PNG ◮ Archives ZIP Écrit en Perl (tout comme dpkg-dev ) Lunar (Debian) Compilations reproductibles 93 / 101

  67. Où en est-on dans Debian? Lunar (Debian) Compilations reproductibles 94 / 101

  68. (dans notre environnement de test) Pour celles et ceux dans le fond 82% plus de 18 000 paquets sources ! Lunar (Debian) Compilations reproductibles 95 / 101

Recommend


More recommend