107
Compilations reproductibles Permettre le lien entre un binaire et sa source Lunar [email protected] Lunar (Debian) Compilations reproductibles 1 / 101

Permettrelelienentreunbinaireetsasource Lunar lunar@debian€¦ · Compilationsreproductibles Permettrelelienentreunbinaireetsasource Lunar [email protected] Lunar (Debian) Compilationsreproductibles

  • Upload
    others

  • View
    8

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Permettrelelienentreunbinaireetsasource Lunar lunar@debian€¦ · Compilationsreproductibles Permettrelelienentreunbinaireetsasource Lunar lunar@debian.org Lunar (Debian) Compilationsreproductibles

Compilations reproductibles

Permettre le lien entre un binaire et sa source

Lunar

[email protected]

Lunar (Debian) Compilations reproductibles 1 / 101

Page 2: Permettrelelienentreunbinaireetsasource Lunar lunar@debian€¦ · Compilationsreproductibles Permettrelelienentreunbinaireetsasource Lunar lunar@debian.org Lunar (Debian) Compilationsreproductibles

Compilation reproductible?

Le principe de

« compilation reproductible »

permet à quiconque de reproduire,

des binaires identiques

à partir de la même source

Lunar (Debian) Compilations reproductibles 2 / 101

Page 3: Permettrelelienentreunbinaireetsasource Lunar lunar@debian€¦ · Compilationsreproductibles Permettrelelienentreunbinaireetsasource Lunar lunar@debian.org Lunar (Debian) Compilationsreproductibles

Avoir confiance dans la compilation?

source binairecompilation

logiciel libre

liberté

d’étudier

liberté

d’éxecuter

peut-être vérifié peut-être utilisé

comment avoir confiance ?

Lunar (Debian) Compilations reproductibles 3 / 101

Page 4: Permettrelelienentreunbinaireetsasource Lunar lunar@debian€¦ · Compilationsreproductibles Permettrelelienentreunbinaireetsasource Lunar lunar@debian.org Lunar (Debian) Compilationsreproductibles

Avoir confiance dans la compilation?

source binairecompilation

logiciel libre

liberté

d’étudier

liberté

d’éxecuter

peut-être vérifié peut-être utilisé

comment avoir confiance ?

Lunar (Debian) Compilations reproductibles 3 / 101

Page 5: Permettrelelienentreunbinaireetsasource Lunar lunar@debian€¦ · Compilationsreproductibles Permettrelelienentreunbinaireetsasource Lunar lunar@debian.org Lunar (Debian) Compilationsreproductibles

Avoir confiance dans la compilation?

source binairecompilation

logiciel libre

liberté

d’étudier

liberté

d’éxecuter

peut-être vérifié peut-être utilisé

comment avoir confiance ?

Lunar (Debian) Compilations reproductibles 3 / 101

Page 6: Permettrelelienentreunbinaireetsasource Lunar lunar@debian€¦ · Compilationsreproductibles Permettrelelienentreunbinaireetsasource Lunar lunar@debian.org Lunar (Debian) Compilationsreproductibles

Avoir confiance dans la compilation?

source binairecompilation

logiciel libre

liberté

d’étudier

liberté

d’éxecuter

peut-être vérifié peut-être utilisé

comment avoir confiance ?

Lunar (Debian) Compilations reproductibles 3 / 101

Page 7: Permettrelelienentreunbinaireetsasource Lunar lunar@debian€¦ · Compilationsreproductibles Permettrelelienentreunbinaireetsasource Lunar lunar@debian.org Lunar (Debian) Compilationsreproductibles

Point de vue du dév.

« Je suis au courant de ce qu’il y a dans le binaire, c’est moi qui l’ai

compilé !”

« Je prends toute les précautions possibles ! La machine de

compilation est ultra-sécurisée ! »

« Pourquoi est-ce que je devrais m’embêter avec des risques

hypothétiques ? »

Lunar (Debian) Compilations reproductibles 4 / 101

Page 8: Permettrelelienentreunbinaireetsasource Lunar lunar@debian€¦ · Compilationsreproductibles Permettrelelienentreunbinaireetsasource Lunar lunar@debian.org Lunar (Debian) Compilationsreproductibles

Sans blague

Pendant une conférence de la CIA en 2012 :

Source : The Intercept, 2015-03-10

Lunar (Debian) Compilations reproductibles 5 / 101

Page 9: Permettrelelienentreunbinaireetsasource Lunar lunar@debian€¦ · Compilationsreproductibles Permettrelelienentreunbinaireetsasource Lunar lunar@debian.org Lunar (Debian) Compilationsreproductibles

Une backdoor, c’est petit comment?

OpenSSH 3.0.2 (CVE-2002-0083) – trou de sécurité (avec élévation

de privilèges : accès root à distance)

{Channel *c;

- if (id < 0 || id > channels_alloc) {+ if (id < 0 || id >= channels_alloc) {

log("channel_lookup: %d: bad id", id);return;

}

Lunar (Debian) Compilations reproductibles 6 / 101

Page 10: Permettrelelienentreunbinaireetsasource Lunar lunar@debian€¦ · Compilationsreproductibles Permettrelelienentreunbinaireetsasource Lunar lunar@debian.org Lunar (Debian) Compilationsreproductibles

Correction du bug (en assembleur)

cmpl $0x0,0x8(%ebp) cmpl $0x0,0x8(%ebp)js 16 js 16mov 0x4,%eax mov 0x4,%eaxcmp %eax,0x8(%ebp) cmp %eax,0x8(%ebp)jle 30 jl 30mov 0x8(%ebp),%eax mov 0x8(%ebp),%eaxmov %eax,0x4(%esp) mov %eax,0x4(%esp)movl $0x4c,(%esp) movl $0x4c,(%esp)call 25 call 25

Lunar (Debian) Compilations reproductibles 7 / 101

Page 11: Permettrelelienentreunbinaireetsasource Lunar lunar@debian€¦ · Compilationsreproductibles Permettrelelienentreunbinaireetsasource Lunar lunar@debian.org Lunar (Debian) Compilationsreproductibles

Correction du bug (en assembleur)

cmpl $0x0,0x8(%ebp) cmpl $0x0,0x8(%ebp)js 16 js 16mov 0x4,%eax mov 0x4,%eaxcmp %eax,0x8(%ebp) cmp %eax,0x8(%ebp)jle 30 jl 30mov 0x8(%ebp),%eax mov 0x8(%ebp),%eaxmov %eax,0x4(%esp) mov %eax,0x4(%esp)movl $0x4c,(%esp) movl $0x4c,(%esp)call 25 call 25

Lunar (Debian) Compilations reproductibles 7 / 101

Page 12: Permettrelelienentreunbinaireetsasource Lunar lunar@debian€¦ · Compilationsreproductibles Permettrelelienentreunbinaireetsasource Lunar lunar@debian.org Lunar (Debian) Compilationsreproductibles

Différence au niveau du binaire

Quelle est la différence entre if (a > b)et if (a >= b) en assembleur x86?

assembleur : JLE JLopcode : 0x7E 0x7Cbinaire : 01111110 01111100

Un seul bit !

C’est aussi le cas pour d’autres opcodes.

Lunar (Debian) Compilations reproductibles 8 / 101

Page 13: Permettrelelienentreunbinaireetsasource Lunar lunar@debian€¦ · Compilationsreproductibles Permettrelelienentreunbinaireetsasource Lunar lunar@debian.org Lunar (Debian) Compilationsreproductibles

Correction du bug (en héxadécimal)Vulnérable Corrigé

55 89 e5 83 ec28 83 7d 08 0078 0a a1 04 0000 00 39 45 087e 1a 8b 45 0889 44 24 04 c704 24 4c 00 0000 e8 fc ff ffff b8 00 00 0000 eb 35

55 89 e5 83 ec28 83 7d 08 0078 0a a1 04 0000 00 39 45 087c 1a 8b 45 0889 44 24 04 c704 24 4c 00 0000 e8 fc ff ffff b8 00 00 0000 eb 35

Taille totale du fichier : approx. 500 kBLunar (Debian) Compilations reproductibles 9 / 101

Page 14: Permettrelelienentreunbinaireetsasource Lunar lunar@debian€¦ · Compilationsreproductibles Permettrelelienentreunbinaireetsasource Lunar lunar@debian.org Lunar (Debian) Compilationsreproductibles

Correction du bug (en héxadécimal)Vulnérable Corrigé

55 89 e5 83 ec28 83 7d 08 0078 0a a1 04 0000 00 39 45 087e 1a 8b 45 0889 44 24 04 c704 24 4c 00 0000 e8 fc ff ffff b8 00 00 0000 eb 35

55 89 e5 83 ec28 83 7d 08 0078 0a a1 04 0000 00 39 45 087c 1a 8b 45 0889 44 24 04 c704 24 4c 00 0000 e8 fc ff ffff b8 00 00 0000 eb 35

Taille totale du fichier : approx. 500 kBLunar (Debian) Compilations reproductibles 9 / 101

Page 15: Permettrelelienentreunbinaireetsasource Lunar lunar@debian€¦ · Compilationsreproductibles Permettrelelienentreunbinaireetsasource Lunar lunar@debian.org Lunar (Debian) Compilationsreproductibles

Vérification indépendante

environnement de compilation

+

code source

=

binaire

Si tout le monde obtient le même résultat, il n’y a pas eu de

malversations.

Lunar (Debian) Compilations reproductibles 10 / 101

Page 16: Permettrelelienentreunbinaireetsasource Lunar lunar@debian€¦ · Compilationsreproductibles Permettrelelienentreunbinaireetsasource Lunar lunar@debian.org Lunar (Debian) Compilationsreproductibles

Comment je m’y suis mis?

Lunar (Debian) Compilations reproductibles 11 / 101

Page 17: Permettrelelienentreunbinaireetsasource Lunar lunar@debian€¦ · Compilationsreproductibles Permettrelelienentreunbinaireetsasource Lunar lunar@debian.org Lunar (Debian) Compilationsreproductibles

La motivation pour Bitcoin

Des modifications malveillantes des binaires pourraient

permettre des transferts non-désirés et irrévocables de

bitcoins.

Des dév. pourraient être tenu·e·s pour responsables.

Comment croire que c’est leur machine qui a été piratée?

La compilation reproductible permet de protéger les devs !

Lunar (Debian) Compilations reproductibles 12 / 101

Page 18: Permettrelelienentreunbinaireetsasource Lunar lunar@debian€¦ · Compilationsreproductibles Permettrelelienentreunbinaireetsasource Lunar lunar@debian.org Lunar (Debian) Compilationsreproductibles

Rien de neuf

From: Martin Uecker <[email protected]>Cc: [email protected]: Sun, 23 Sep 2007 23:32:59 +0200

I think it would be really cool if the Debian policy required that

packages could be rebuild bit-identical from source. At the moment, it

is impossible to independly verify the integricity of binary packages.

https://lists.debian.org/debian-devel/2007/09/msg00746.html

Lunar (Debian) Compilations reproductibles 13 / 101

Page 19: Permettrelelienentreunbinaireetsasource Lunar lunar@debian€¦ · Compilationsreproductibles Permettrelelienentreunbinaireetsasource Lunar lunar@debian.org Lunar (Debian) Compilationsreproductibles

Pourquoi Debian?

Debian est la plus grande collection de logiciels libres

Plus de 22 000 paquets sources

« Nos priorités sont nos utilisateur·ice·s

et les logiciels libres »

Lunar (Debian) Compilations reproductibles 14 / 101

Page 20: Permettrelelienentreunbinaireetsasource Lunar lunar@debian€¦ · Compilationsreproductibles Permettrelelienentreunbinaireetsasource Lunar lunar@debian.org Lunar (Debian) Compilationsreproductibles

Comment on fait ?

Enregistrer l’environnement de compilation

Reproduire l’environnement de compilation

Éliminer les variations inutiles

Lunar (Debian) Compilations reproductibles 15 / 101

Page 21: Permettrelelienentreunbinaireetsasource Lunar lunar@debian€¦ · Compilationsreproductibles Permettrelelienentreunbinaireetsasource Lunar lunar@debian.org Lunar (Debian) Compilationsreproductibles

Approches possibles pour l’environnement

Recompiler l’environnement

I Coreboot, OpenWrt, Bazel

Image système et script de configuration

I Gitian (Bitcoin, Tor Browser), Docker (Mozilla), Vagrant

Enregistrement des paquets et réinstallation ultérieure

I Debian

I (OpenSuse Build Service)

Lunar (Debian) Compilations reproductibles 16 / 101

Page 22: Permettrelelienentreunbinaireetsasource Lunar lunar@debian€¦ · Compilationsreproductibles Permettrelelienentreunbinaireetsasource Lunar lunar@debian.org Lunar (Debian) Compilationsreproductibles

Recompiler l’environnement

Une recette permet de reproduire l’environnement à partir

des sources

Un fichier (ex. Makefile) décrit la version à récupérer

Dans le cas de Bazel, mettre l’intégralité des sources dans un

système de gestion de versions.

Bonus : les changements dans les outils de compilation ont le

même processus que des changements sur le code.

Lunar (Debian) Compilations reproductibles 17 / 101

Page 23: Permettrelelienentreunbinaireetsasource Lunar lunar@debian€¦ · Compilationsreproductibles Permettrelelienentreunbinaireetsasource Lunar lunar@debian.org Lunar (Debian) Compilationsreproductibles

Image système et paquets

Conteneur ou machine virtuelle

Installation d’une distribution de base (e.g. Ubuntu)

Script d’installation de l’environnement

Ça fonctionne avec des distributions stables ou alors des

recompilations depuis des sources.

Lunar (Debian) Compilations reproductibles 18 / 101

Page 24: Permettrelelienentreunbinaireetsasource Lunar lunar@debian€¦ · Compilationsreproductibles Permettrelelienentreunbinaireetsasource Lunar lunar@debian.org Lunar (Debian) Compilationsreproductibles

Enregistrement des paquets utilisés

Les fichiers *.buildinfo sont en passe d’être ajoutés dans

Debian afin d’enregistrer :

La version des dépendances de compilations

I … et celles de toutes leurs dépendances

Une somme de contrôle pour le paquet source

Une somme de contrôle pour les paquets binaires

Lunar (Debian) Compilations reproductibles 19 / 101

Page 25: Permettrelelienentreunbinaireetsasource Lunar lunar@debian€¦ · Compilationsreproductibles Permettrelelienentreunbinaireetsasource Lunar lunar@debian.org Lunar (Debian) Compilationsreproductibles

Un exemple de *.buildinfo

Format: 1.9Build-Architecture: amd64Source: txtorconBinary: python-txtorconArchitecture: allVersion: 0.11.0-1Build-Path: /usr/src/debian/txtorcon-0.11.0-1Checksums-Sha256:a26549d9…7b 125910 python-txtorcon_0.11.0-1_all.deb28f6bcbe…69 2039 txtorcon_0.11.0-1.dsc

Build-Environment:base-files (= 8),base-passwd (= 3.5.37),bash (= 4.3-11+b1),…

Lunar (Debian) Compilations reproductibles 20 / 101

Page 26: Permettrelelienentreunbinaireetsasource Lunar lunar@debian€¦ · Compilationsreproductibles Permettrelelienentreunbinaireetsasource Lunar lunar@debian.org Lunar (Debian) Compilationsreproductibles

Réinstaller les paquets originaux

snapshot.debian.org archive tous les états de l’archive

Debian

29 Tio de données sur 17 million de fichiers (2015-05-25)

Lunar (Debian) Compilations reproductibles 21 / 101

Page 27: Permettrelelienentreunbinaireetsasource Lunar lunar@debian€¦ · Compilationsreproductibles Permettrelelienentreunbinaireetsasource Lunar lunar@debian.org Lunar (Debian) Compilationsreproductibles

srebuild

Script qui permet de reproduire une compilation à partir

d’un buildinfo

Trouve la sauvegarde de l’archive qui correspond

Installe les paquets listés dans le fichier .buildinfoLance la compilation

Prototype : #774415

Lunar (Debian) Compilations reproductibles 22 / 101

Page 28: Permettrelelienentreunbinaireetsasource Lunar lunar@debian€¦ · Compilationsreproductibles Permettrelelienentreunbinaireetsasource Lunar lunar@debian.org Lunar (Debian) Compilationsreproductibles

Éliminer les variations

Il faut rendre le processus de compilation déterministe :

Même entrée

=

Même sortie

Lunar (Debian) Compilations reproductibles 23 / 101

Page 29: Permettrelelienentreunbinaireetsasource Lunar lunar@debian€¦ · Compilationsreproductibles Permettrelelienentreunbinaireetsasource Lunar lunar@debian.org Lunar (Debian) Compilationsreproductibles

Approche générale

Gitian (Bitcoin, Tor Browser) :

I Utiliser une machine virtuelle (même noyau, même utilisateur,

même chemin, …)

I libfaketime

Debian :

I Corriger les outils

I Corriger les systèmes de compilations

I Bidouiller en dernier recours

Lunar (Debian) Compilations reproductibles 24 / 101

Page 30: Permettrelelienentreunbinaireetsasource Lunar lunar@debian€¦ · Compilationsreproductibles Permettrelelienentreunbinaireetsasource Lunar lunar@debian.org Lunar (Debian) Compilationsreproductibles

Comprendre les différences

diffOpenSUSE build-compare

debbindiff

Lunar (Debian) Compilations reproductibles 25 / 101

Page 31: Permettrelelienentreunbinaireetsasource Lunar lunar@debian€¦ · Compilationsreproductibles Permettrelelienentreunbinaireetsasource Lunar lunar@debian.org Lunar (Debian) Compilationsreproductibles

debbindiff

Examine deux fichiers

Sort les différences au format HTML ou texte

Décompresse les archives de façon récursive

Cherche la lisibilité :

I décompresse les PDF

I désassemble les binaires

I réassemble les fichiers Gettext

I … facile à étendre pour de nouveaux formats de fichiers

Reviens à la comparaison binaire pour tout le reste

Lunar (Debian) Compilations reproductibles 26 / 101

Page 32: Permettrelelienentreunbinaireetsasource Lunar lunar@debian€¦ · Compilationsreproductibles Permettrelelienentreunbinaireetsasource Lunar lunar@debian.org Lunar (Debian) Compilationsreproductibles

Comment trouver les différences?

Compiler la source

Recompiler la source dans un environnement différent

Comparer les résultast

Lunar (Debian) Compilations reproductibles 27 / 101

Page 33: Permettrelelienentreunbinaireetsasource Lunar lunar@debian€¦ · Compilationsreproductibles Permettrelelienentreunbinaireetsasource Lunar lunar@debian.org Lunar (Debian) Compilationsreproductibles

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

Page 34: Permettrelelienentreunbinaireetsasource Lunar lunar@debian€¦ · Compilationsreproductibles Permettrelelienentreunbinaireetsasource Lunar lunar@debian.org Lunar (Debian) Compilationsreproductibles

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

Page 35: Permettrelelienentreunbinaireetsasource Lunar lunar@debian€¦ · Compilationsreproductibles Permettrelelienentreunbinaireetsasource Lunar lunar@debian.org Lunar (Debian) Compilationsreproductibles

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

Page 36: Permettrelelienentreunbinaireetsasource Lunar lunar@debian€¦ · Compilationsreproductibles Permettrelelienentreunbinaireetsasource Lunar lunar@debian.org Lunar (Debian) Compilationsreproductibles

Variations en projet

la date (mais on triche avec les fuseaux horaires)

/proc/cpuinfole système de fichiers

Peut-être qu’il manque encore d’autres variations à ajouter…

Lunar (Debian) Compilations reproductibles 31 / 101

Page 37: Permettrelelienentreunbinaireetsasource Lunar lunar@debian€¦ · Compilationsreproductibles Permettrelelienentreunbinaireetsasource Lunar lunar@debian.org Lunar (Debian) Compilationsreproductibles

Problèmes identifiés

L’horodatage (timestamp)

L’ordre des fichiers

Du (pseudo-)aléatoire :

I Les chemins de fichiers temporaires

I UUID

I Les protections contre les attaques de complexité

Lunar (Debian) Compilations reproductibles 32 / 101

Page 38: Permettrelelienentreunbinaireetsasource Lunar lunar@debian€¦ · Compilationsreproductibles Permettrelelienentreunbinaireetsasource Lunar lunar@debian.org Lunar (Debian) Compilationsreproductibles

Problèmes identifiés (suite)

Lié au processour ou à la mémoire :

I Des optimisations de code liées au type de processeur

I 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

Page 39: Permettrelelienentreunbinaireetsasource Lunar lunar@debian€¦ · Compilationsreproductibles Permettrelelienentreunbinaireetsasource Lunar lunar@debian.org Lunar (Debian) Compilationsreproductibles

Problèmes identifiés (suite)

ExamplesHorodatage par le système de compilation

Lunar (Debian) Compilations reproductibles 34 / 101

Page 40: Permettrelelienentreunbinaireetsasource Lunar lunar@debian€¦ · Compilationsreproductibles Permettrelelienentreunbinaireetsasource Lunar lunar@debian.org Lunar (Debian) Compilationsreproductibles

Horodatage dans les en-têtes gzip

Lunar (Debian) Compilations reproductibles 35 / 101

Page 41: Permettrelelienentreunbinaireetsasource Lunar lunar@debian€¦ · Compilationsreproductibles Permettrelelienentreunbinaireetsasource Lunar lunar@debian.org Lunar (Debian) Compilationsreproductibles

Horodatage par Maven

Lunar (Debian) Compilations reproductibles 36 / 101

Page 42: Permettrelelienentreunbinaireetsasource Lunar lunar@debian€¦ · Compilationsreproductibles Permettrelelienentreunbinaireetsasource Lunar lunar@debian.org Lunar (Debian) Compilationsreproductibles

Horodatage dans des Makefile générés

Lunar (Debian) Compilations reproductibles 37 / 101

Page 43: Permettrelelienentreunbinaireetsasource Lunar lunar@debian€¦ · Compilationsreproductibles Permettrelelienentreunbinaireetsasource Lunar lunar@debian.org Lunar (Debian) Compilationsreproductibles

Horodatage dans des en-têtes C

Lunar (Debian) Compilations reproductibles 38 / 101

Page 44: Permettrelelienentreunbinaireetsasource Lunar lunar@debian€¦ · Compilationsreproductibles Permettrelelienentreunbinaireetsasource Lunar lunar@debian.org Lunar (Debian) Compilationsreproductibles

Horodatage par PyQt4

Lunar (Debian) Compilations reproductibles 39 / 101

Page 45: Permettrelelienentreunbinaireetsasource Lunar lunar@debian€¦ · Compilationsreproductibles Permettrelelienentreunbinaireetsasource Lunar lunar@debian.org Lunar (Debian) Compilationsreproductibles

Horodatage par le compilateur Erlang

Lunar (Debian) Compilations reproductibles 40 / 101

Page 46: Permettrelelienentreunbinaireetsasource Lunar lunar@debian€¦ · Compilationsreproductibles Permettrelelienentreunbinaireetsasource Lunar lunar@debian.org Lunar (Debian) Compilationsreproductibles

Horodatage dans les binaires au format PE

Windows, UEFI, Mono…

Lunar (Debian) Compilations reproductibles 41 / 101

Page 47: Permettrelelienentreunbinaireetsasource Lunar lunar@debian€¦ · Compilationsreproductibles Permettrelelienentreunbinaireetsasource Lunar lunar@debian.org Lunar (Debian) Compilationsreproductibles

Horodatage dans les bibliothèques ADA

Lunar (Debian) Compilations reproductibles 42 / 101

Page 48: Permettrelelienentreunbinaireetsasource Lunar lunar@debian€¦ · Compilationsreproductibles Permettrelelienentreunbinaireetsasource Lunar lunar@debian.org Lunar (Debian) Compilationsreproductibles

Horodatage dans les gemspec Ruby

Lunar (Debian) Compilations reproductibles 43 / 101

Page 49: Permettrelelienentreunbinaireetsasource Lunar lunar@debian€¦ · Compilationsreproductibles Permettrelelienentreunbinaireetsasource Lunar lunar@debian.org Lunar (Debian) Compilationsreproductibles

Horodatage dans le registre PHP

Lunar (Debian) Compilations reproductibles 44 / 101

Page 50: Permettrelelienentreunbinaireetsasource Lunar lunar@debian€¦ · Compilationsreproductibles Permettrelelienentreunbinaireetsasource Lunar lunar@debian.org Lunar (Debian) Compilationsreproductibles

Horodatage par Cheetah

Lunar (Debian) Compilations reproductibles 45 / 101

Page 51: Permettrelelienentreunbinaireetsasource Lunar lunar@debian€¦ · Compilationsreproductibles Permettrelelienentreunbinaireetsasource Lunar lunar@debian.org Lunar (Debian) Compilationsreproductibles

Horodatage dans la version d’un module

Lunar (Debian) Compilations reproductibles 46 / 101

Page 52: Permettrelelienentreunbinaireetsasource Lunar lunar@debian€¦ · Compilationsreproductibles Permettrelelienentreunbinaireetsasource Lunar lunar@debian.org Lunar (Debian) Compilationsreproductibles

Problèmes identifiés (suite)

ExamplesLes archives

Lunar (Debian) Compilations reproductibles 47 / 101

Page 53: Permettrelelienentreunbinaireetsasource Lunar lunar@debian€¦ · Compilationsreproductibles Permettrelelienentreunbinaireetsasource Lunar lunar@debian.org Lunar (Debian) Compilationsreproductibles

Horodatage dans le bibliothèques statiques

Lunar (Debian) Compilations reproductibles 48 / 101

Page 54: Permettrelelienentreunbinaireetsasource Lunar lunar@debian€¦ · Compilationsreproductibles Permettrelelienentreunbinaireetsasource Lunar lunar@debian.org Lunar (Debian) Compilationsreproductibles

Horodatage dans le bibliothèques statiques

Lunar (Debian) Compilations reproductibles 49 / 101

Page 55: Permettrelelienentreunbinaireetsasource Lunar lunar@debian€¦ · Compilationsreproductibles Permettrelelienentreunbinaireetsasource Lunar lunar@debian.org Lunar (Debian) Compilationsreproductibles

Horodatage dans les archives ZIP

Lunar (Debian) Compilations reproductibles 50 / 101

Page 56: Permettrelelienentreunbinaireetsasource Lunar lunar@debian€¦ · Compilationsreproductibles Permettrelelienentreunbinaireetsasource Lunar lunar@debian.org Lunar (Debian) Compilationsreproductibles

Horodatage dans les .jar Java

En fait, ce sont des archives ZIP.

Lunar (Debian) Compilations reproductibles 51 / 101

Page 57: Permettrelelienentreunbinaireetsasource Lunar lunar@debian€¦ · Compilationsreproductibles Permettrelelienentreunbinaireetsasource Lunar lunar@debian.org Lunar (Debian) Compilationsreproductibles

Horodatage dans les archives Tar

Lunar (Debian) Compilations reproductibles 52 / 101

Page 58: Permettrelelienentreunbinaireetsasource Lunar lunar@debian€¦ · Compilationsreproductibles Permettrelelienentreunbinaireetsasource Lunar lunar@debian.org Lunar (Debian) Compilationsreproductibles

Login and groupe dans les archives Tar

Lunar (Debian) Compilations reproductibles 53 / 101

Page 59: Permettrelelienentreunbinaireetsasource Lunar lunar@debian€¦ · Compilationsreproductibles Permettrelelienentreunbinaireetsasource Lunar lunar@debian.org Lunar (Debian) Compilationsreproductibles

Ordre aléatoire dans les archives Tar

Lunar (Debian) Compilations reproductibles 54 / 101

Page 60: Permettrelelienentreunbinaireetsasource Lunar lunar@debian€¦ · Compilationsreproductibles Permettrelelienentreunbinaireetsasource Lunar lunar@debian.org Lunar (Debian) Compilationsreproductibles

Problème identifiés (suite)

ExamplesHorodatage dans la doc

Lunar (Debian) Compilations reproductibles 55 / 101

Page 61: Permettrelelienentreunbinaireetsasource Lunar lunar@debian€¦ · Compilationsreproductibles Permettrelelienentreunbinaireetsasource Lunar lunar@debian.org Lunar (Debian) Compilationsreproductibles

Horodatage par Doxygen

Lunar (Debian) Compilations reproductibles 56 / 101

Page 62: Permettrelelienentreunbinaireetsasource Lunar lunar@debian€¦ · Compilationsreproductibles Permettrelelienentreunbinaireetsasource Lunar lunar@debian.org Lunar (Debian) Compilationsreproductibles

Horodatage par docbook-to-man

Lunar (Debian) Compilations reproductibles 57 / 101

Page 63: Permettrelelienentreunbinaireetsasource Lunar lunar@debian€¦ · Compilationsreproductibles Permettrelelienentreunbinaireetsasource Lunar lunar@debian.org Lunar (Debian) Compilationsreproductibles

Horodatage par Groovydoc

Lunar (Debian) Compilations reproductibles 58 / 101

Page 64: Permettrelelienentreunbinaireetsasource Lunar lunar@debian€¦ · Compilationsreproductibles Permettrelelienentreunbinaireetsasource Lunar lunar@debian.org Lunar (Debian) Compilationsreproductibles

Horodatage par Epydoc

Lunar (Debian) Compilations reproductibles 59 / 101

Page 65: Permettrelelienentreunbinaireetsasource Lunar lunar@debian€¦ · Compilationsreproductibles Permettrelelienentreunbinaireetsasource Lunar lunar@debian.org Lunar (Debian) Compilationsreproductibles

Horodatage par Sphinx

Lunar (Debian) Compilations reproductibles 60 / 101

Page 66: Permettrelelienentreunbinaireetsasource Lunar lunar@debian€¦ · Compilationsreproductibles Permettrelelienentreunbinaireetsasource Lunar lunar@debian.org Lunar (Debian) Compilationsreproductibles

Horodatage par Ghostscript

Lunar (Debian) Compilations reproductibles 61 / 101

Page 67: Permettrelelienentreunbinaireetsasource Lunar lunar@debian€¦ · Compilationsreproductibles Permettrelelienentreunbinaireetsasource Lunar lunar@debian.org Lunar (Debian) Compilationsreproductibles

Horodatage par LaTeX

Lunar (Debian) Compilations reproductibles 62 / 101

Page 68: Permettrelelienentreunbinaireetsasource Lunar lunar@debian€¦ · Compilationsreproductibles Permettrelelienentreunbinaireetsasource Lunar lunar@debian.org Lunar (Debian) Compilationsreproductibles

Horodatage par texi2html

Lunar (Debian) Compilations reproductibles 63 / 101

Page 69: Permettrelelienentreunbinaireetsasource Lunar lunar@debian€¦ · Compilationsreproductibles Permettrelelienentreunbinaireetsasource Lunar lunar@debian.org Lunar (Debian) Compilationsreproductibles

Horodatage par texi2html (suite)

Lunar (Debian) Compilations reproductibles 64 / 101

Page 70: Permettrelelienentreunbinaireetsasource Lunar lunar@debian€¦ · Compilationsreproductibles Permettrelelienentreunbinaireetsasource Lunar lunar@debian.org Lunar (Debian) Compilationsreproductibles

Horodatage par help2man

Lunar (Debian) Compilations reproductibles 65 / 101

Page 71: Permettrelelienentreunbinaireetsasource Lunar lunar@debian€¦ · Compilationsreproductibles Permettrelelienentreunbinaireetsasource Lunar lunar@debian.org Lunar (Debian) Compilationsreproductibles

Horodatage par GNU groff

Lunar (Debian) Compilations reproductibles 66 / 101

Page 72: Permettrelelienentreunbinaireetsasource Lunar lunar@debian€¦ · Compilationsreproductibles Permettrelelienentreunbinaireetsasource Lunar lunar@debian.org Lunar (Debian) Compilationsreproductibles

Horodatage par Javadoc

Lunar (Debian) Compilations reproductibles 67 / 101

Page 73: Permettrelelienentreunbinaireetsasource Lunar lunar@debian€¦ · Compilationsreproductibles Permettrelelienentreunbinaireetsasource Lunar lunar@debian.org Lunar (Debian) Compilationsreproductibles

Horodatage par man2html

Lunar (Debian) Compilations reproductibles 68 / 101

Page 74: Permettrelelienentreunbinaireetsasource Lunar lunar@debian€¦ · Compilationsreproductibles Permettrelelienentreunbinaireetsasource Lunar lunar@debian.org Lunar (Debian) Compilationsreproductibles

Horodatage par LaTeX (.dvi)

Lunar (Debian) Compilations reproductibles 69 / 101

Page 75: Permettrelelienentreunbinaireetsasource Lunar lunar@debian€¦ · Compilationsreproductibles Permettrelelienentreunbinaireetsasource Lunar lunar@debian.org Lunar (Debian) Compilationsreproductibles

Problèmes identifiés (suite)

Examples« Compilé le/sur/par »

Lunar (Debian) Compilations reproductibles 70 / 101

Page 76: Permettrelelienentreunbinaireetsasource Lunar lunar@debian€¦ · Compilationsreproductibles Permettrelelienentreunbinaireetsasource Lunar lunar@debian.org Lunar (Debian) Compilationsreproductibles

Horodatage par macros du préprocesseur C

Lunar (Debian) Compilations reproductibles 71 / 101

Page 77: Permettrelelienentreunbinaireetsasource Lunar lunar@debian€¦ · Compilationsreproductibles Permettrelelienentreunbinaireetsasource Lunar lunar@debian.org Lunar (Debian) Compilationsreproductibles

Horodatage par macros du préprocesseur C

Lunar (Debian) Compilations reproductibles 72 / 101

Page 78: Permettrelelienentreunbinaireetsasource Lunar lunar@debian€¦ · Compilationsreproductibles Permettrelelienentreunbinaireetsasource Lunar lunar@debian.org Lunar (Debian) Compilationsreproductibles

Horodatage via Makefile

Lunar (Debian) Compilations reproductibles 73 / 101

Page 79: Permettrelelienentreunbinaireetsasource Lunar lunar@debian€¦ · Compilationsreproductibles Permettrelelienentreunbinaireetsasource Lunar lunar@debian.org Lunar (Debian) Compilationsreproductibles

Nom de machine enregistré via ./configure

Lunar (Debian) Compilations reproductibles 74 / 101

Page 80: Permettrelelienentreunbinaireetsasource Lunar lunar@debian€¦ · Compilationsreproductibles Permettrelelienentreunbinaireetsasource Lunar lunar@debian.org Lunar (Debian) Compilationsreproductibles

Horodotage via ./configure

Lunar (Debian) Compilations reproductibles 75 / 101

Page 81: Permettrelelienentreunbinaireetsasource Lunar lunar@debian€¦ · Compilationsreproductibles Permettrelelienentreunbinaireetsasource Lunar lunar@debian.org Lunar (Debian) Compilationsreproductibles

Macros m4 pour autoconf (horodatage)

Lunar (Debian) Compilations reproductibles 76 / 101

Page 82: Permettrelelienentreunbinaireetsasource Lunar lunar@debian€¦ · Compilationsreproductibles Permettrelelienentreunbinaireetsasource Lunar lunar@debian.org Lunar (Debian) Compilationsreproductibles

Macros m4 pour autoconf (login)

Lunar (Debian) Compilations reproductibles 77 / 101

Page 83: Permettrelelienentreunbinaireetsasource Lunar lunar@debian€¦ · Compilationsreproductibles Permettrelelienentreunbinaireetsasource Lunar lunar@debian.org Lunar (Debian) Compilationsreproductibles

Macros m4 pour autoconf (nom de machine)

Lunar (Debian) Compilations reproductibles 78 / 101

Page 84: Permettrelelienentreunbinaireetsasource Lunar lunar@debian€¦ · Compilationsreproductibles Permettrelelienentreunbinaireetsasource Lunar lunar@debian.org Lunar (Debian) Compilationsreproductibles

Version du noyau

Lunar (Debian) Compilations reproductibles 79 / 101

Page 85: Permettrelelienentreunbinaireetsasource Lunar lunar@debian€¦ · Compilationsreproductibles Permettrelelienentreunbinaireetsasource Lunar lunar@debian.org Lunar (Debian) Compilationsreproductibles

Points bonus

Lunar (Debian) Compilations reproductibles 80 / 101

Page 86: Permettrelelienentreunbinaireetsasource Lunar lunar@debian€¦ · Compilationsreproductibles Permettrelelienentreunbinaireetsasource Lunar lunar@debian.org Lunar (Debian) Compilationsreproductibles

Problèmes identifiés (suite)

ExamplesAléatoire

Lunar (Debian) Compilations reproductibles 81 / 101

Page 87: Permettrelelienentreunbinaireetsasource Lunar lunar@debian€¦ · Compilationsreproductibles Permettrelelienentreunbinaireetsasource Lunar lunar@debian.org Lunar (Debian) Compilationsreproductibles

Ordre aléatoire des hash Perlcf. Algorithmic complexity attacks perlsec(1).

Lunar (Debian) Compilations reproductibles 82 / 101

Page 88: Permettrelelienentreunbinaireetsasource Lunar lunar@debian€¦ · Compilationsreproductibles Permettrelelienentreunbinaireetsasource Lunar lunar@debian.org Lunar (Debian) Compilationsreproductibles

Numéro de série aléatoire dans les flux Ogg

Lunar (Debian) Compilations reproductibles 83 / 101

Page 89: Permettrelelienentreunbinaireetsasource Lunar lunar@debian€¦ · Compilationsreproductibles Permettrelelienentreunbinaireetsasource Lunar lunar@debian.org Lunar (Debian) Compilationsreproductibles

Ordre aléatoire des imports dans du Python

Lunar (Debian) Compilations reproductibles 84 / 101

Page 90: Permettrelelienentreunbinaireetsasource Lunar lunar@debian€¦ · Compilationsreproductibles Permettrelelienentreunbinaireetsasource Lunar lunar@debian.org Lunar (Debian) Compilationsreproductibles

Nom de fichiers temporaire avec ocamlc

Lunar (Debian) Compilations reproductibles 85 / 101

Page 91: Permettrelelienentreunbinaireetsasource Lunar lunar@debian€¦ · Compilationsreproductibles Permettrelelienentreunbinaireetsasource Lunar lunar@debian.org Lunar (Debian) Compilationsreproductibles

Problèmes identifiés (suite)

ExamplesToujours plus d’horodatage !

Lunar (Debian) Compilations reproductibles 86 / 101

Page 92: Permettrelelienentreunbinaireetsasource Lunar lunar@debian€¦ · Compilationsreproductibles Permettrelelienentreunbinaireetsasource Lunar lunar@debian.org Lunar (Debian) Compilationsreproductibles

Horodatage dans les EPUB

Lunar (Debian) Compilations reproductibles 87 / 101

Page 93: Permettrelelienentreunbinaireetsasource Lunar lunar@debian€¦ · Compilationsreproductibles Permettrelelienentreunbinaireetsasource Lunar lunar@debian.org Lunar (Debian) Compilationsreproductibles

Horodatage dans les PNGEven images!

Lunar (Debian) Compilations reproductibles 88 / 101

Page 94: Permettrelelienentreunbinaireetsasource Lunar lunar@debian€¦ · Compilationsreproductibles Permettrelelienentreunbinaireetsasource Lunar lunar@debian.org Lunar (Debian) Compilationsreproductibles

Horodatage dans les polices TrueType

And fonts!

Lunar (Debian) Compilations reproductibles 89 / 101

Page 95: Permettrelelienentreunbinaireetsasource Lunar lunar@debian€¦ · Compilationsreproductibles Permettrelelienentreunbinaireetsasource Lunar lunar@debian.org Lunar (Debian) Compilationsreproductibles

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

Page 96: Permettrelelienentreunbinaireetsasource Lunar lunar@debian€¦ · Compilationsreproductibles Permettrelelienentreunbinaireetsasource Lunar lunar@debian.org Lunar (Debian) Compilationsreproductibles

Comment corriger?

Horodatage :

I Préférer une référence précise au code en train d’être compilé

(numéro de version, hash du commit git)

I Utiliser une date de référence (dernière modification du code)

I Utiliser le fuseau horaire UTC

Ordre aléatoire :

I Trier les clés ou les fichiers

Lunar (Debian) Compilations reproductibles 91 / 101

Page 97: Permettrelelienentreunbinaireetsasource Lunar lunar@debian€¦ · Compilationsreproductibles Permettrelelienentreunbinaireetsasource Lunar lunar@debian.org Lunar (Debian) Compilationsreproductibles

Comment corriger? (suite)

Chemins :

I Utiliser toujours le même dossier

Noyau, processeur, login, … :

I Ne pas enregistrer d’informations inutiles dans les binaires

On peut aussi nettoyer a posteriori.

Lunar (Debian) Compilations reproductibles 92 / 101

Page 98: Permettrelelienentreunbinaireetsasource Lunar lunar@debian€¦ · Compilationsreproductibles Permettrelelienentreunbinaireetsasource Lunar lunar@debian.org Lunar (Debian) Compilationsreproductibles

strip-nondeterminism

Normalise divers formats de fichiers

Gère pour l’instant :

I Archives ar (.a)I gzip

I Java jar

I Javadoc HTML

I Maven pom.properties

I PNG

I Archives ZIP

Écrit en Perl (tout comme dpkg-dev)

Lunar (Debian) Compilations reproductibles 93 / 101

Page 99: Permettrelelienentreunbinaireetsasource Lunar lunar@debian€¦ · Compilationsreproductibles Permettrelelienentreunbinaireetsasource Lunar lunar@debian.org Lunar (Debian) Compilationsreproductibles

Où en est-on dans Debian?

Lunar (Debian) Compilations reproductibles 94 / 101

Page 100: Permettrelelienentreunbinaireetsasource Lunar lunar@debian€¦ · Compilationsreproductibles Permettrelelienentreunbinaireetsasource Lunar lunar@debian.org Lunar (Debian) Compilationsreproductibles

Pour celles et ceux dans le fond

82%plus de 18 000 paquets sources !

(dans notre environnement de test)

Lunar (Debian) Compilations reproductibles 95 / 101

Page 101: Permettrelelienentreunbinaireetsasource Lunar lunar@debian€¦ · Compilationsreproductibles Permettrelelienentreunbinaireetsasource Lunar lunar@debian.org Lunar (Debian) Compilationsreproductibles

Pour celles et ceux dans le fond

82%plus de 18 000 paquets sources !

(dans notre environnement de test)

Lunar (Debian) Compilations reproductibles 95 / 101

Page 102: Permettrelelienentreunbinaireetsasource Lunar lunar@debian€¦ · Compilationsreproductibles Permettrelelienentreunbinaireetsasource Lunar lunar@debian.org Lunar (Debian) Compilationsreproductibles

Toujours en phase expérimentale

Il n’est pas encore possible de recompiler de façon

reproductible des paquets livrés par Debian.

On teste et raffine des changements sur les outils de

compilation dans un dépôt à part.

Prochaines étapes :

I Permettre les .buildinfo dans l’archive (#763822)

I Faire rentrer les changements pour dpkgI Avoir les .buildinfo sur les miroirs

I Terminer le script srebuild (#774415)

Lunar (Debian) Compilations reproductibles 96 / 101

Page 103: Permettrelelienentreunbinaireetsasource Lunar lunar@debian€¦ · Compilationsreproductibles Permettrelelienentreunbinaireetsasource Lunar lunar@debian.org Lunar (Debian) Compilationsreproductibles

D’autres distributions

Fedora

http://securityblog.redhat.com/2013/09/18/reproducible-builds-for-fedora/OpenSUSE build-compare

https://build.opensuse.org/package/show/openSUSE:Factory/build-compareNixOS

http://lists.science.uu.nl/pipermail/nix-dev/2013-June/011357.htmlFreeBSD

https://wiki.freebsd.org/ReproducibleBuilds and

https://wiki.freebsd.org/PortsReproducibleBuildsOpenWrt

https://lists.openwrt.org/pipermail/openwrt-devel/2015-March/032136.html

Lunar (Debian) Compilations reproductibles 97 / 101

Page 104: Permettrelelienentreunbinaireetsasource Lunar lunar@debian€¦ · Compilationsreproductibles Permettrelelienentreunbinaireetsasource Lunar lunar@debian.org Lunar (Debian) Compilationsreproductibles

Partout ailleurs?

Venez discuter !

Lunar (Debian) Compilations reproductibles 98 / 101

Page 105: Permettrelelienentreunbinaireetsasource Lunar lunar@debian€¦ · Compilationsreproductibles Permettrelelienentreunbinaireetsasource Lunar lunar@debian.org Lunar (Debian) Compilationsreproductibles

Partout ailleurs?

La compilation reproductible doit devenir la norme.

On peut aider à faire du test en continu.

La documentation sur le wiki de Debian souhaite être utile à

tout le monde.

Lunar (Debian) Compilations reproductibles 99 / 101

Page 106: Permettrelelienentreunbinaireetsasource Lunar lunar@debian€¦ · Compilationsreproductibles Permettrelelienentreunbinaireetsasource Lunar lunar@debian.org Lunar (Debian) Compilationsreproductibles

Merci

Asheesh Laroia, Holger Levsen, Reiner Herrmann, Mattia

Rizzolo, Daniel Kahn Gilmor, et tellement d’autres…

Mike Perry et Seth Schoen pour le talk au 31C3

ProfitBricks pour le sponser de jenkins.debian.netGlobalsign pour les certificats X.509

Les designers des icônes Tango

Toutes celles et ceux qui nous soutiennent !

Lunar (Debian) Compilations reproductibles 100 / 101

Page 107: Permettrelelienentreunbinaireetsasource Lunar lunar@debian€¦ · Compilationsreproductibles Permettrelelienentreunbinaireetsasource Lunar lunar@debian.org Lunar (Debian) Compilationsreproductibles

Des questions? Des commentaires?

?https://wiki.debian.org/ReproducibleBuilds

https://reproducible.debian.net/#debian-reproducible on OFTC

Lunar 0603 CCFD 9186 5C17 E88D4C79 8382 C95C 2902 3DF9

Lunar (Debian) Compilations reproductibles 101 / 101