Code-injection i Open source software

by Jesper april 12, 2007 11:00

Af og til vikler jeg mig ind i til tider ophedede diskussioner om sikkerhed i softwareudvikling og specielt om forskellen ved open source software (OSS) og closed source software (CSS). Det er som oftest spændende at deltage i. Det er ikke så meget fordi argumenterne skifter så meget - faktisk er der ret meget "Tordenskjolds soldater" over det, men det er spændende, da jeg oplever at mine holdninger bliver udfordret og dermed afpudset.

Nå ... en diskussion for nyligt fik mig til at tænke på, om OSS i sig selv indebærer større sikkerhed end CSS, og jeg fremtænkte dette scenarium:

(afsnit fra indlæg som jeg planlagde at poste på version2.dk)

En person tæt på build-processen for openoffice.org ønsker at indsætte overvågning i kildekoden. Hun gør herefter følgende:

  1. Kildekoden trækkes ud af repository på ganske normal vis.
  2. Inden kildekoden kompileres modificeres et par af filerne, hvor et par liniers kode tilføjes
  3. Hun publicerer herefter den binære fil på da.openoffice.org sammen med en checksum af den binære kode.
Hvad har hun nu opnået med dette? Jo, hun har opnået at lave en modifikation af koden, der ikke kan linkes tilbage til kildekoden og CVS/SVN etc. Størstedelen af de brugere, der downloader openoffice, vil slet ikke bekymre sig om checksummen - men de der gør vil opleve, at checksummen er korrekt - den er jo lavet på baggrund af den modificerede binære fil.

Den eneste måde at opdage fixet på er ved at hente kildekoden, kompilere den selv samt sammenligne resultatet af de to binære filer. Problemet i dette er, at størrelsen af den binære fil vil være afhængig af en lang række parametre såsom valg af oversætterværktøj, platform, eventuelle valgte optimizers etc. Det er derfor ikke ganske entydigt, at forskellige størrelser filer betyder forskellig kildekode.

Mit spørgsmål til jer, kære læsere, er naturligvis ... holder scenariet vand? Der er jo mange af jer, der som jeg arbejder med software hver dag, så jeres input vil blive værdsat. Det er som sådan ikke så interessant om scenariet er sandsynligt - men mere om det rent faktisk er muligt.

På forhånd tak :o)

Tags:

Kommentarer

16-04-2007 11:00:00 #

Tobias Tobiasen

Jo, det ser rigtigt ud. Det eneste der kræves er at du har skrive rettigheder til et mirror. Det kan du opnå ved at cracke et mirror eller bare have et login.

Der er dog en løsning. Mange projekter bruger PGP signering i stedet for almindelige checksums (md5 sha-1). Hvis PGP nøglen så holdes tæt ind til kroppen så kan man ikke lave et falsk build.
Der er naturligvis altid et bootstrap problem i at give brugerne de rigtige offentlige nøgle.

Nå du vil gerne opfordres. Hvordan adskiller dette sig fra CSS projekter? Her kan man jo lave det samme trick hvis man har adgang til et mirror.

Tobias Tobiasen

16-04-2007 11:00:00 #

Tobias Tobiasen

Paranoid som jeg er har jeg altid hentet checksummer fra et andet mirror end det jeg henter den binære fil fra. Det giver mig en god fornemmelse i maven.

Tobias Tobiasen

16-04-2007 11:00:00 #

Jesper

Tobias, tak for dit svar :o)

Udfordring: Det adskiller sig slet ikke fra CS-verdenen - og det er netop pointen. Mit mål var ikke at vise, at OSS er mindre sikkert end CSS men derimod at OSS i sig selv ikke medfører en garanti for, at der ikke kan indføres ond kode i produktet.

Mht at hente checksummer fra andre sites, så er der tydeligvis noget, som jeg ikke helt har forstået i processen. Hvordan distribueres binære filer til mirrors?

Hvis jeg er "buildmaster" på openoffice.org [0] og laver et "root"-build med ond kode i - danner dette build så basis for de builds, der ligger på mirrors - eller henter de selv kildekoden og kompilerer den? Hvis de selv kompilerer kildekoden - vil de så ikke få forskellige binære filer ud af det - jvf mit argument med, at kompilering i sig selv er afhængig af en masse parametre og derfor sandsynligvis vil give forskellige binære filer?

[0} Fuck, hvor er det et latterligt navn!

Jesper

17-04-2007 11:00:00 #

Tobias Tobiasen

Man bygger ikke et nyt build til hvert mirror.
Det hele bygges centralt og så kopieres de binære filer ud til alle mirrors. Derfor vil checksummen være ens for alle mirrors.

Tobias Tobiasen

23-04-2007 11:00:00 #

Anders

En klassiker om det emne ...

[http://www.acm.org/classics/sep95/]

Anders

24-04-2007 11:00:00 #

Christian Schmidt

Så vidt jeg ved (uden at det dog er særlig meget), udkommer sikkerhedsopdateringer til Firefox som "binære diff'er". Hvis det ellers er korrekt forstået, så kræver det vel ret godt styr over de distribuerede filer og at man kan genskabe de kompilerede filer bit for bit, hvilket gør det lidt mere sandsynligt, at nogen vil ane uråd.

En løsning kunne være, at softwareudgivere offentliggør de præcise parametre, som er brugt ved kompileringen (OS, kompilerversion osv.), således at tredjepart kan verificere, at kildetekst og binær fil hører sammen. Jeg er enig i, at den binære fil kan være svær at genskabe 100%, men så svært er det vel heller ikke - skulle man tro (jeg antager, at en given kompiler i det mindste er deterministisk).

Christian Schmidt

Kommentarerne er lukkede

Powered by BlogEngine.NET 1.5.0.7
Theme by Mads Kristensen | Modified by Mooglegiant