 ja hallo moin guten tag ne hallo moin ja mein name ist heuler ich erzähle so ein bisschen märchen von developern die slide sind in englisch der talk ist auf deutsch und die slide sind auch nicht von mir sondern von chris lamp ich habe den talk schon diverse male geben mit meinen folien und dachte mir ist spannender wenn ich mit anderen folien gebe zu mir das bin ich war schon vor vier jahren auf dem kongress Anfang der 90er das dann auch schon anders aus benutze debian auch schon seit ewig seit 2007 bin ich debian Entwickler und ansonsten bin ich fried lanzer wobei ich die letzten drei jahre an sich hieran gearbeitet habe war sie mir so sicherheitsfürschauer anstatt fried lanzer und wie gesagt die talk die slide sind von ambi wir arbeiten zusammen in diesem reputationsprojekt seit über drei jahren seit zwei jahren auch bezahlt daran ja lambi hat auch einen schönen sudoku soll wer in post kript geschrieben so was wenn man so von software redet denkt man ja normale binaries aber ja viele dokument also pdf ist ein anderes beispiel also wir untersuchen wenn wir software untersuchen meinen wir alles auch den dokumentation und alles progres bahn mit estrace ist auch eine schöne sache das aus lambis folien aber ich dachte es waren schöne beispiele lass ich sie das andere was er gemacht hat was vielleicht auch hier einige interessiert siro cool os ist ein usb stick der bootet und einfach den hackers film zeigt den stick kann man danach rausnehmen und einfach den film laufen lassen falls er wir bedarf hat siro cool us gut jetzt zu diesen märchen die geschichte die wir uns ausgedacht haben weil mit geschichten erzählen sich den eher besser also zum einen gibt es da ellis ellis ist software developerin und entwickelt irgendwas so ein bitcoin client oder eine kryptowollet oder irgendwas schick ist was viele leute haben wollen und sie veröffentlicht den quälkot source code und auch beinaries damit leute es leichter benutzen können also entweder in exe oder debian paketen rpm was auch immer und es schöne software funktioniert tut was sie soll alles gut und irgendwann klopft wer an der tür und sagt du hast ein schönes hauswehr schade wenn ihm was passiert oder wie auch immer da irgendwie sie dazu gebracht wird dass dieser schöne source code eben nicht mehr das ist was in dem releasen beinari drin ist der source code ist noch fein aber der bild pro prozess wird modifiziert so dass was anders rauskommt und leute untersuchen halt den quälkot ein bisschen blöd andere bei spiel bob bob ist mir so der hacker seht ihr in der tastatur die ist ein bisschen merkwürdig und naja und bock bock maintain ganz viele server richtig viele und das in bild server da wird software drauf gebaut für eine firma oder für debian rettet was auch immer und das kommt beim user an der user die userin installiert das irgendwann nachher und genau dasselbe wieder wenn halt diese diese ganzen rechner hier komprimitiert werden und andere beinaries produzieren und bob das gar nicht mitkriegt dann gibt es halt millionen leute die das installieren und darüber halt drojens kriegen und das hat nicht so gut und dann gibt es noch karel karel sitzt dann irgendein standartfoto im hotelzimmer rum und karel ist an sich wichtiger als eaf ist die eaf ist die eaf ist die usb steck wenn der laptop allein im hotel ist oder auch zu hause also die meisten leute lassen wahrscheinlich laptops zuhause und lock picking ist ja auch einfach und dann ist so ein rechner halt komprimitiert und dann nimmt karel halt die software und vergibt sie leuten und dann sind die leute komprimitiert und von den vier freedoms von der free software foundation help your neighbors ist halt nicht so hilfreich wenn ihr euer nachbarn nachbarin irgendwie scheiße gebt wollen wir an sich nicht und das generelle problem ist halt dass wir halt source code für hintertüren oder sonstige probleme angucken können aber user installieren halt prekompilierte binaries und die müssen nicht unbedingt was mit dem source code zu tun haben und es liegt daran dass dieser bildprozess halt nicht vertrauber ist weil man kann halt wie eben gezeigt man passt nicht da auf die rechner auf die werden komprimitiert wie auch immer tja schade und da gibt es auch so ein paar attacks so also an sich werden alle leute mal angegriffen und irgendwelche bekthos nur ein paar server von free bsd werden komprimitiert also einer reicht und das ist auch nicht nur free bsd auch debian wird gehackt und microsoft und alle möglichen das hier finde ich auch sehr schön naja geht fröhlich um sich und jetzt die lösung die wir uns überlegt haben ist halt wenn man einen source code hat und in dieser einen in einer bestimmten bild umgebung den baut dann sollte jeder bild dasselbe ergebnis haben und zwar mit für bitt identisch und die baut man halt mehrmals und stellt das fest und diese vielen die bilder denn hier das ist ja scheiße was auch so jetzt so muss also david baut es einmal kommt dieser häscht raus erinn baut es einmal kommt dieser häscht raus und das red kommt was anderes raus es gibt selbst zwei möglichkeiten entweder ist davin und er ins rechner komprimitiert oder frets aber irgendwas ist auf faule wenn die software sonst reproduzierbar ist und wenn man das so halt feststellen kann dann kann man halt auch sehen dass diese erpressung wird dann gefunden auch der kompromiss der bild umgebung kann gefunden werden und auch das andere wird halt gesehen wenn halt da verschiedene ergebnisse rauskommen und außerdem gibt es dann halt auch weniger initiativen das überhaupt diesen angriff zu machen weil das halt die möglichkeit dass es rauskommt und darum geht es bei reproduzierbilds dass man halt feststellen kann dass keine fehler in bildprozesse zu getan wurden das ist an sich das einzige und es geht nicht darum relay überbilds dass man mehrmals bauen kann und das baut jedes mal es geht auch nicht darum gucken dass man mit das die umgebung sich nicht ändert und es geht darum dass das bild resultat resultat eins zu eins identisch ist und an sich als ich das erste mal das gehört habe dachte ich halt wenn man software zweimal baut kommt an sich dasselbe bithaufen raus das ist aber in der praktisch ist nicht so weil einmal gibt es dictionaries hashes oder database ordering die unterschiedlich sind bei verschiedenen bilds zufällig parallel wenn parallel gebaut wird dann ist es auch unterschiedlich je nachdem welches ergebnis zuerst zu dem resultat zu den zugefügt wird also das einste hau problem sind halt zeitstempel vom bild die aus irgendwelchen gründen da reinkommen auch zeitstempel mit verschiedenen zeitzonen und die zeitstempel sind eben sowohl im kompilaten drin als auch in man pages degeneriert werden in allen möglichen sachen sind zeitstempel drin der bild pass liegt auch rein also wenn ich in hohem holgerbau und ihr baut in hohem in euer usernamen dann ist es bei den meisten sachen auch da drin und auch die feilsysteme sind nicht deterministisch also wenn ihr ls macht kommt immer die selbe reinfolge raus weil es das ordnet aber wenn er mit riet darf systemebene geht dann ist es unterschiedlich x 4 ist es wiederum gleich aber butter fs ist zum beispiel eins dieser feilsysteme unterschiedlich ist und das alles sorgt dafür dass halt bilds nicht reproduzierbar sind und auch noch genau user groups die environment variablen you mask all das geht in einige builds rein das muss nicht reingehen aber wenn der code irgendwie so ist dass das aufnimmt dann kann das da reinkommen und andere vorteile von reproducible builds auch noch wenn man es dann hat dann gibt es halt wenn man bestimmte änderungen gewollt macht gibt es minimale unterschiede also wenn irgendwie ein operator es gab mal so ein ssh remote route x remote exploit und da war da fehler halt ein größer gleich und es war größer gleich und sollte größer sein und wenn man das baut mit dieser änderung dann müsste sich halt wirklich nur ein byte ändern wenn das wenn das vorher reproduzierbar ist dann kann man sowas sehen auch lassen sich reproduziere builds besser cashen und damit es die sowohl zeit als auch geld sparen als auch die umweltschönen also ein fall des google hat das gemacht google hat irgendwie den samt google source code sind 14 gigabyte source code und wenn irgendwer was committelt wird alles gebaut und wenn das meiste davon halt reproduzierbar ist gecached werden kann geht der bild halt deutlich schneller und das lassen sich halt auch schmutzige bild umgebungen damit feststellen die halt das wiederum rein liegen und es ist auch möglich zu gucken brauchen wir diese bild die pens eigentlich in dem man einfach normal baut mit was aus dem bild die pens raus tut und wenn das Ergebnis gleich ist dann weiß man er hat dieses bild die pens war überflüssig und wir haben auch ganz viele normale fehler gefunden einfach fehler werde ich gleichbeispiele zeigen wo halt software unter extremen situationen euch mal komisch baut das war ein open id software da wird so ein hash berechnet so ein rennen hash der halt secret sein soll und der ist halt in jedem binary was gebaut ist gleich drin und das ist nicht so richtig secret wenn jeder das secret hat und das haben wir halt gefunden weil wir halt zweimal bauen vergleichen und dann gesehen haben ah da ist ein unterschied woran liegt das und diese funktionen dann gefunden das hier auch dass man manchmal so man pages sieht diese halt komische strings dazwischen haben und das war m copy wo hier ein schöner fehler war unten das plus ist das richtige und das fühlte dann dazu das man page manchmal anders aussah viel keim auf aber das ist so ich ein back der hier ist auch sehr schön es war so eine test case für irgendwas wo string erzeugt wird der 16 bytes lang ist mit aus den variationen von abc und dann wird er halt geprüft ob da halt die ab und c drin vorkam und manchmal kam es halt nicht vor dass ab und c vorkam wenn halt zufällig überall nur bc strings drin waren oder was doch immer und irgendwer hat seine ausgerechnet die wahrscheinlichkeit ist halt diese und das ist halt software die 99,954 prozent baut also wir finden auch einfach wirklich fehler in software die nichts mit reproduzierbarkeit zu tun das einfach baggie ist und davon haben wir viele gefunden was wir in debian gemacht haben also ich habe zuerst angefangen in 2014 debian zu testen und zwar diesen was lambi den torcher test genannt hat ist daraus in ein zwei jahren entstanden wo wir halt ganz viel variieren also wir bauen bauen auch zweimal so ein a und b bild und das b bild ist halt ein jahr ein monat und ein tag in der zukunft also in 2019 jetzt und da sehen wir halt wenn in einigen man pages 2018 und im zweiten bild 2019 drin ist aha dann wird es halt in der zukunft anders bauen selber variieren host namen und domain namen das filesystem da haben wir disorder fs geschrieben was ein fuse filesystem ist was entweder zufällig die datan zurückgeben kann oder vorwärts sortiert oder rückwärts sortiert und da können wir halt daran feststellen wenn software das nicht selber sortiert genauso bauen wir mit timezone so mit gmt minus 14 und plus 12 glaube ich was dann auch interessant wäre vielleicht noch die variation mit einer halben timezone und locale haben wir im moment auch nur latinische schriften noch keine was auch immer arabisch oder von rechts nach links zu lesen oder so was wir variieren auch die user id und grob id und wir variieren auch den kernel entweder nur die kernel version oder auf 64 bit architekt auf 32 bit architekturen bauen wir auch teilweise mit 64 bit kernel und haben auch software gefunden die das da rein liegt liegt und cpu ist manchmal auch aus irgendwelchen gründen im bini ja drin und so hat sich das entwickelt also im ersten versuch waren 24 prozent aller damals 20.000 passors pakete in debian reproduzierbar heute sind es 93 das schon deutlich besser ist und das gibt halt diesen schönen grafen das grüne sind die reproduzierbaren pakete die orangen sind die die nicht reproduzierbar sind wo irgendwelche unterschiede sind und rot das sind die pakete die gar nicht gebaut haben das ist debian unstable debian testing und stable hat weniger rot aber immer noch ein bisschen und debian wird hat immer größer darum stark der graf und er ist halt die zeitachse wieder eben gesagt und wenn er einfach nur wissen wollt ob wir bei 100 prozent könnte einfach dahin gehen da stehen jetzt nein und jetzt glaube ich steht da und außer debian haben wir dann auch angefangen andere sachen zu testen kurbut testen wir auf unser infrastruktur open suze teste das bei sich selber open vrt testen wir net bsd friebe st und artlinux testen wir auch und eftreut und tails cubes nixos gigs bayser mesen sind halt andere projekte auch die das sehr sehr weit da sind das machen also tails hat neulich gesagt dass ihr das tails iso ist reproducible also wenn ihr das neu baut nach bord kriegt ihr denselben betroffen raus haben sie fürs 3 5 irgendwas release geschafft 3 6 0 war da nicht reproducible 3 6 1 war es dann ein kleiner fehler drin war der unterschied ist aber tails ist halt ein pro eine software bei debian versuchen wir es für 25.000 zu machen und das ist dasselbe problem bei suze und bei den ganzen anderen auch also auch die infrastruktur zum testen komme ich gleich noch wird halt komplizierter wenn du halt mehr ressourcen veriztieren willst als nur eine die anderen es gibt an sich drei projekte dies bis jetzt würde ich machen das tails tour browser und der bitcoin client tour browser und bitcoin haben das schon in 2011 gemacht weil die bitcoin leute haben halt damals gemerkt o bitcoin ist jetzt glaube vier millionen oder vier milliarden also das war schon relativ viel wert scheiße wenn da jetzt irgendein trojan ist dir das ganze geld weg klaut dann könnten die halt sagen das waren die bitcoin entwickeln so haben die halt gesagt der client den wir releasen kommt aus dem source den könnt ihr reviewen genau also wir auf der debian infrastruktur sind halt acht projekte die da getestet werden mehr zu testen ist nicht ein problem von hardware ressourcen sondern von menschen die das integrieren müssen sprich ich mache das hauptsächlich und mehr als acht distros krieg im kopf nicht hin also auch die sind schon zu viel und wir haben treffen gemacht das waren so drei tage treffen ohne laptops wo wir zusammengesessen haben und pläne gemacht haben brainstorming einmal in athin zweimal in berlin wollen wir auch dieses jahr wieder machen wahrscheinlich so im oktober november wo so wir waren zwischen 30 und 45 leuten aus 15 projekten die da zusammengesessen haben und überlegt haben wie probleme zu lösen sind was generell ist die die ganzen projekte haben die meistens den selben source code oder viele teile des source code sind identisch die ganzen linux haben alle den selben kernel und mit bsd haben wir auch das userlens zum teil gemeinsam was ihr unterscheidet ist halt der bildprozess am ende und wie die software ausgeliefert wird da kann man nur konzepte entwickeln aber die eigentlichen tools müssen anders sein werden die die fixes im source code profitieren und sich alle davon sondern das ist ein diff wie ihr alle kennt einfach diff zwischen zwei Dateien funktioniert wunderbar bei text aber wenn ihr zwei binärdinger vergleichen wollt also hier zwei debian pakete kommt halt nichts brauchbares raus und dann luna sich vor fünf jahren vier jahren 2014 hingesetzt und angefangen damals dieses noch dep bind diff debian binary diff zu schreiben inzwischen heißt das ding diffoskop weil es viel viel mehr kann als nur debian pakete und diffoskop in pakthalt rekursiv zwei datain oder datain und guckt da rein und zwar es kann tabos vergleichen iso datain pdf es kann auch verzeichnissen vergleichen irgendwie zwei objekte und das ist ein screenshot der html dann da mitte so sieht das hier aus bei so ein debian paket also ein debian paket ist halt ein ar archiv was ein uraltes fallformat ist darin sind zwei tar archive und die haben unterschiedliche metadaten wie da oben steht und dann ist der inhalt auch noch unterschiedlich mit der daten unterschiede und diffoskop kann halt sehr viele fallformate anzeigen also auch zwei weihershark kap captures zwei was auch immer inkscape datain zwei irgendwas wenn ihr irgendwelche datain objekte habt die diffoskop nicht vergleichen kann bitten backfeilen mit test cases und dann wollen wir das auf jeden fall fixen wir brauchen die test cases dann geht es an sich und es gibt auch drei diffoskop orcs eine online webseite da könnt ihr einfach zwei dinger hochladen dann vergleicht ist das für euch weil wenn der diffoskop offen aus einem basis debian installiert wo nichts installiert ist will es 1,5 gigabytes an recommends haben weil es halt all möglichen file formate kann und zum probieren ist das ganz gut so und diffoskop zeigt halt auch die unterschiede in security ablöse an weil da könnt ihr einfach gucken welche teile sich genau ändern und diffoskop ist aber nicht für die definition was reproducible ist das soll einfach diff sein oder hash hash funktion weil diffoskop analysiert halt was da drin ist und das ist wiederum potentiell exploit bar und darum wollen wir nicht dass alle leute diffoskop auf alles abwerfen weil das ist halt kot verarbeitung und das wollen wir an sich nicht es ist nur zum analysieren zum debacken gelacht und das lassen sie auch irgendwelche binary blobs so router images oder was auch immer vergleichen das zeit auf jeden fall besser die unterschiede an als den diff oder auch nur ein hext am probiert aus file bugs bitte wir wollen bugs wir wollen mehr features und was ist jetzt noch zu tun außer wir haben 93 prozent also klar müssen dann noch diese sieben prozent gemacht werden was noch ein bisschen problem ist aber generell reproducible sorgen nicht dafür dass das sourcecode vernünftig ist also programmierfehler gibt es weiterhin back doors or festicated code kann immer noch drin sein schützt reproducible es nicht vor schlechte algorithmen wenn man md 5 benutzt ist es auch scheiße wenn es reproduzierbar ist und auch so testing mode so der volkswagen modus der sollte halt auch eine produktion nicht laufen das sourcecode muss immer noch richtig sein und uns fehlt auch irgendwie ein user interface was soll was soll dir das was würdet ihr machen wenn ihr das sieht wird wahrscheinlich die software trotzdem haben also das ist nicht wirklich hilfreich wir müssen zu irgendwas anderen hin und wir müssen auch an sich dahin dass wirklich hundert prozent reproduzierbar ist dass man etwas sagen kann nein wenn es nicht reproduziert ist wollen wir es nicht da sind wir noch nicht dann gibt es halt noch probleme also der gcc fix der noch fehlt wir haben paar andere fixes drinnen aber was fehlt ist noch diese bild pass variation dass man in verschiedenen bild passes bauen kann dafür haben wir ein patch der wird von den gcc maintainers noch nicht für gut befunden und der bei so ähnliches fixes es war auch okaml ist gefixt aber er lang macht dasselbe die ganzen dokumentations oder viele dokumentationssysteme im betten auch den bild pass also das muss alles in der toolchain noch gefixt werden sonst müssen halt viel noch viel mehr pakete anders angefasst werden wir wollen weiter diffus grob verbessern auf jeden fall und auch andere tools die wir haben und wir wollen an sich auch dass jetzt seit letztem sommer steht halt in debian policy drin packages should be reproducible also sollten sie sein das ist nett aber pakete werden halt noch released im stable wenn sie nicht reproducible sind und wir wollen da policy ändern ich denke mal bei 99 prozent oder so sind können wir irgendwann sagen okay wer es nicht reproducible ist fliegt raus aber soweit sind wir noch nicht und was auch noch so ein ziel ist dieses trusting trust problem mit dem geback dort ein compiler den man wo man nicht sehen kann dass da die back door drin ist weil du basierst immer auf dem compiler da gibt es dann reverse double compilation heißt dann dieses modell dass du halt zwei c compiler bootstraps und die dann wiederum jeweils den anderen c compiler die große version bauen und derselbe betaufen rauskommt das haben leute auf dem letzten sammelt angefangen zu machen mit tiny cc und ich weiß nicht wieder andere kleine c compiler hieß aber damit sollte es möglich sein dieses trusting trust problem endlich zu lösen dann haben wir nur das problem dass wir auf hardware bauen die an sich auf software ist und aber irgendwo muss man ja anfangen ja wenn ihr mitmachen wollt wir haben diese webseite reproduzable builds org wo wir auch dokumentationen haben wie man diese mit diesen timestamps umzugeht mit bild pass mit allen möglichen sachen wir haben twitter account wir schreiben auch seit 152 wochen jede woche ein blog post was zuerst nur debian war inzwischen ist auch viel über suze drin und arch linux und die blog post ist auch auf dem twitter verlinkt und wir haben aya seed channel es gibt auch noch reproduzable debian debian reproduzable heißt er und arch linux reproduzable so rum und wenn ihr fehler also wenn ihr fehler findet oder wenn ihr software maintain und solche patches kriegt die bitte das war schon von mir noch massig platz für fragen denke ich warte mal kurz auf mich war die bild umgebung aufgesetzt sodass ihr das auch irgendwie unter kontroll haben wir bauen die bild umgebung in debian benutzen wir p-bilder was die aufsetzt bei arch linux benutzen wir packman im cr-root wir wollen aber zu system die ansbarn container gehen also ein jenkins auf dem das ganze läuft und der jenkins steuert über 50 hohes an und da wird dann halt gebaut per ssa das ist auch ein generelles problem sag ich mal für diese für die debian bild weil wir uns überlegt haben wenn leute sollen debian pakete in beliebigen umgebungen bauen du kannst in den debian halt mit p-bilder der s-bild bauen oder aber auch in deinem rumverzeichnen ist einfach mit dem dpkg bild package und dann können halt sowas wie die locales und die anderen environment variabend in den bildprozess reinliegen und wir wollen dass das bild das bildprojekt produkt immer identisch ist auch wenn es in unsauberen umgebung viele bildtools wie mok von fedora oder auch das open wrt bildsystem die machen sehr gut und machen data die umgebung automatisch clean und dadurch ist die variation die durchs bild umgekommen bei solchen projekten viel geringer wir wollen es aber dass es möglich ist auch bei unsauberen umgebungen trotzdem identsche ergebnisse zu haben was dann oft einfach ist lang equals c ja danke für den vortrag sehr interessant das diffoskop kann ich das leuten empfehlen die gibt nicht so gern benutzen möchten weil sie damit ja nicht ihre wortdateien ordentlich diffen können oder wer das nicht so empfehlen wird ich weiß nicht ob wortdateien gehen aber wortdateien sind ja auch nur wiederum tar ich liebe wo xml dateien drin sind also ich vermute dass diffoskop auf wortdateien funktioniert genau stand in der liste aber ich meine so empfehlenswert das zu tun oder eher nicht ist ein kommando teilen tool und sonst halt diese webseite also ganz knallhart zu wird die leute laufen dann eh auf windows und es gibt torteus git und torteus git kann einwandfrei wortdateien diffen side by side mit wort geöffnet also den muss man nicht diffoskop uns hat zu legen also diffoskop hat auch nichts mit git zu tun das war nur dieses plus minus zeichen haben wir da genommen um dieses diff zu zeigen ja also ich kann noch mehr erzählen aber ich muss auch nicht erzählen so oft darüber was die fragen haben wo wenn ihr keine fragen habt gehe ich schon trinken