reproducible builds in debian and everywhere
play

Reproducible builds in Debian and everywhere Lunar - PowerPoint PPT Presentation

Reproducible builds in Debian and everywhere Lunar lunar@debian.org Libre Software Meeting 2015-06-07 Lunar (Debian) Reproducible builds LSM2015 1 / 126 What? Lunar (Debian) Reproducible builds LSM2015 2 / 126 What are reproducible


  1. Test (and test again) Lunar (Debian) Reproducible builds LSM2015 34 / 126

  2. Finding variations Build the package Re build the package Compare the results Lunar (Debian) Reproducible builds LSM2015 35 / 126

  3. reproducible.debian.net Continuous test system driven by Jenkins Bad ass hardware sponsored by ProfitBricks Tests about 1300 source packages each day on average Results are visible on a website Recent additions: Coreboot and OpenWrt Lunar (Debian) Reproducible builds LSM2015 36 / 126

  4. Variations for Debian packages The second build differs by: time timezone file ordering process ordering cores used for the build Lunar (Debian) Reproducible builds LSM2015 37 / 126

  5. Variations for Debian packages hostname, domainname username, uid, gid umask language ( LANG ) and locale ( LC_ALL ) kernel version (using linux64 --uname-2.6 ) PATH Lunar (Debian) Reproducible builds LSM2015 38 / 126

  6. Still the same for now date ( but we cheat with timezone ) /proc/cpuinfo rebuilds on different filesystems (currently tmpfs only) Are we forgetting something? Lunar (Debian) Reproducible builds LSM2015 39 / 126

  7. Findings Lunar (Debian) Reproducible builds LSM2015 40 / 126

  8. Identified issues Timestamps (recording current time) File order (Pseudo-)randomness: Lunar (Debian) Reproducible builds LSM2015 41 / 126 ◮ Temporary file paths ◮ UUID ◮ Protection against complexity attacks

  9. Identified issues (cont.) CPU and memory related: Build-path Others, eg. locale settings Lunar (Debian) Reproducible builds LSM2015 42 / 126 ◮ Code optimizations for current CPU class ◮ Recording of memory addresses

  10. Identified issues (cont.) Examples Timestamps added by build systems Lunar (Debian) Reproducible builds LSM2015 43 / 126

  11. Timestamps in gzip headers Lunar (Debian) Reproducible builds LSM2015 44 / 126

  12. Timestamps written by Maven Lunar (Debian) Reproducible builds LSM2015 45 / 126

  13. Timestamps in generated Makefiles Lunar (Debian) Reproducible builds LSM2015 46 / 126

  14. Timestamps in header files Lunar (Debian) Reproducible builds LSM2015 47 / 126

  15. Timestamps written by PyQt4 Lunar (Debian) Reproducible builds LSM2015 48 / 126

  16. Timestamps written by Erlang compiler Lunar (Debian) Reproducible builds LSM2015 49 / 126

  17. Timestamps in PE binaries Windows, UEFI, Mono… Lunar (Debian) Reproducible builds LSM2015 50 / 126

  18. Timestamps in ADA library information Lunar (Debian) Reproducible builds LSM2015 51 / 126

  19. Timestamps in Ruby gemspec files Lunar (Debian) Reproducible builds LSM2015 52 / 126

  20. Timestamps in PHP registry Lunar (Debian) Reproducible builds LSM2015 53 / 126

  21. Timestamps by a template engine Lunar (Debian) Reproducible builds LSM2015 54 / 126

  22. Timestamps in Python version Lunar (Debian) Reproducible builds LSM2015 55 / 126

  23. Identified issues (cont.) Examples Archives Lunar (Debian) Reproducible builds LSM2015 56 / 126

  24. Timestamps in static libraries Lunar (Debian) Reproducible builds LSM2015 57 / 126

  25. Timestamps in static libraries (cont.) Lunar (Debian) Reproducible builds LSM2015 58 / 126

  26. Timestamps in ZIP archives Lunar (Debian) Reproducible builds LSM2015 59 / 126

  27. Timestamps in Java jar They are actually ZIP archives. Lunar (Debian) Reproducible builds LSM2015 60 / 126

  28. Timestamps in tarballs Lunar (Debian) Reproducible builds LSM2015 61 / 126

  29. Users and groups in tarballs Lunar (Debian) Reproducible builds LSM2015 62 / 126

  30. Random order in tarballs Lunar (Debian) Reproducible builds LSM2015 63 / 126

  31. Identified issues (cont.) Examples Timestamps in documentation Lunar (Debian) Reproducible builds LSM2015 64 / 126

  32. Timestamps written by Doxygen Lunar (Debian) Reproducible builds LSM2015 65 / 126

  33. Timestamps written by docbook-to-man Lunar (Debian) Reproducible builds LSM2015 66 / 126

  34. Timestamps written by Groovydoc Lunar (Debian) Reproducible builds LSM2015 67 / 126

  35. Timestamps written by Epydoc Lunar (Debian) Reproducible builds LSM2015 68 / 126

  36. Timestamps written by Sphinx Lunar (Debian) Reproducible builds LSM2015 69 / 126

  37. Timestamps written by Ghostscript Lunar (Debian) Reproducible builds LSM2015 70 / 126

  38. Timestamps written by LaTeX Lunar (Debian) Reproducible builds LSM2015 71 / 126

  39. Timestamps written by texi2html Lunar (Debian) Reproducible builds LSM2015 72 / 126

  40. Timestamps written by texi2html (cont.) Lunar (Debian) Reproducible builds LSM2015 73 / 126

  41. Timestamps written by help2man Lunar (Debian) Reproducible builds LSM2015 74 / 126

  42. Timestamps written by GNU groff Lunar (Debian) Reproducible builds LSM2015 75 / 126

  43. Timestamps written by Javadoc Lunar (Debian) Reproducible builds LSM2015 76 / 126

  44. Timestamps written by man2html Lunar (Debian) Reproducible builds LSM2015 77 / 126

  45. Timestamps in TeX output (.dvi) Lunar (Debian) Reproducible builds LSM2015 78 / 126

  46. Identified issues (cont.) Examples “Compiled at/on/by” Lunar (Debian) Reproducible builds LSM2015 79 / 126

  47. Build time via C preprocessor macros Lunar (Debian) Reproducible builds LSM2015 80 / 126

  48. Build time via C preprocessor macros Lunar (Debian) Reproducible builds LSM2015 81 / 126

  49. Build time recorded via Makefile Lunar (Debian) Reproducible builds LSM2015 82 / 126

  50. Hostname recorded via ./configure Lunar (Debian) Reproducible builds LSM2015 83 / 126

  51. Build time recorded via ./configure Lunar (Debian) Reproducible builds LSM2015 84 / 126

  52. m4 macros for autoconf (build time) Lunar (Debian) Reproducible builds LSM2015 85 / 126

  53. m4 macros for autoconf (username) Lunar (Debian) Reproducible builds LSM2015 86 / 126

  54. m4 macros for autoconf (hostname) Lunar (Debian) Reproducible builds LSM2015 87 / 126

  55. Recorded kernel version Lunar (Debian) Reproducible builds LSM2015 88 / 126

  56. Bonus points for programmers Lunar (Debian) Reproducible builds LSM2015 89 / 126

  57. Identified issues (cont.) Examples File ordering Lunar (Debian) Reproducible builds LSM2015 90 / 126

  58. File ordering in python-support files Lunar (Debian) Reproducible builds LSM2015 91 / 126

  59. Identified issues (cont.) Examples Randomness Lunar (Debian) Reproducible builds LSM2015 92 / 126

  60. Random Perl hash order See Algorithmic complexity attacks in perlsec(1). Lunar (Debian) Reproducible builds LSM2015 93 / 126

  61. Random serial numbers in Ogg streams Lunar (Debian) Reproducible builds LSM2015 94 / 126

  62. Random import order in Python code Lunar (Debian) Reproducible builds LSM2015 95 / 126

Recommend


More recommend