[tilbakemelding] [Gisle Hannemyrs hjemmeside] [opp] [forrige] [neste]

SCRIPT, LØGN OG WEB-TJENERE

av Gisle Hannemyr

Innholdsfortegnelse


Natt til søndag den 6. april 1997 ble mer enn 11 tusen hjemmesider tilhørende bedrifter og privatpersoner slettet på en web-tjener tilhørende Telenor Nextel. En triviell programmeringsfeil i et script utviklet av en av Telenors kunder ga utenfor­stående adgang til å sende en kommando som slettet samtlige sider gjennom en såkalt bakdør, og feilkonfigurasjon gjorde at kommandoer sendt på denne måten ble akseptert av web-tjeneren. En del av kommentarene omkring hendelsen i Computerworld gir etter min mening et skjevt bilde av hva det var som skjedde og hvorledes man skal kunne unngå slike ting i fremtiden. Jeg ber derfor Computerworld om spalteplass til en kommentar.

Lenger nede på siden vil jeg i beskrive i detalj hvordan inntrengeren gikk frem å gjennomføre data­innbruddet, samt skissere noen enkle forholdsregler for å sikre delte webtjenere. Først vil jeg imidlertid drøfte sikkerhetsfilosofi for slike webtjenere med utgangspunkt i denne konkrete hendelsen.

Webtjener-sikkerhet

Computerworld har omtalt innbruddet i to separate reportasjer i Computerworld #13 (11. april 1997):

Ja – det var feil i et script. Og denne feilen ble utnyttet – enten det nå var en ondsinnet handling eller (som vedkommende selv hevder) et «arbeidsuhell» – til å slette samtlige web-sider på Telenor Nextels web-tjener. Det er ikke lenger noen tvil om hva som faktisk skjedde i denne saken.

Men der hvor Telenor Nextel tåkelegger, og der hvor NR-forskerene bommer på poenget, er hvor alvorlig og hvor ødeleggende en slikt scriptfeil bør være. Et webhotell av den typen Telenor Nextel opererer, med en rekke store innholdsleverandører som Dagbladet, Hjemmet-Mortensen og Nettavisen som gjester, huser bokstavelig talt hundretusenvis av programner, websider og script. Og fordi web er et dynamisk medium, går det ikke en dag uten at et script videreutvikles eller skiftes ut. Utviklingen og vedlikeholdet av scriptene gjøres til dels av Telenor Nextels egne folk, dels av kundene, og dels av selskaper og free-lancere som kundene leier inn. Knapt noe universitet eller høyskole gir fagutdanning i web-programmering og sikkerhet i åpne systemer, og derfor er selv faginformatikerene blant web-programmererene i dag selvlærte. Men svært mange av de som i dag utvikler innhold for web er rekruttert fra reklamebransjen eller har bakgrunn fra grafisk design. De er flinke til å lage slående og visuelle web-sider, men de har aldri blitt lært opp til å tenke datasikkerhet, og fordi de foretrekker grafiske grensesnitt er de knapt oppmerksom på hvilke krefter det underliggende operativsystem og kommandoskall kan romme.

Det er selvsagt dumt at det lages script som inneholder feil, og jeg er hjertens enig med NR-forskerne i at kvaliteten på dette gjerne kan bli bedre.

Men gitt knappheten på virkelig gode web-programmerere, og gitt den store mengde script det er å holde styr på, så er det neppe realistisk å forutsette at alle web-script på en større web-installasjon skal være 100% feilfri. Selvsagt er dette noe som bør tilstrebes, men dersom sikkerheten ved installasjonen skal gjøres avhengig av slik perfeksjon, så er man sanynligvis nødt til å begrense mengden script man kjører til et lite antall som så kontinuerlig overvåkes og kvalitetssikres av et toppkvalifisert team spesialister på web-sikkerhet. Slikt er nok vanskelig å gjennomføre når konkurransen er så hard som den er på web-publisering i dag, spesielt dersom en skal operere med realistiske inntjeningskrav i en markedsøkonomi.

Gitt slike rammebetingelser må en søke etter alternative tilnærmingsmåter. Jeg mener at det eneste som er realistisk, er å ta det for gitt at script vil inneholde feil, og at enkeltprogrammer kan bli kompromittert. Ja, dersom man tillater kunder og andre utenforstående å installere programmer på ens maskiner – slik alle som tilbyr web-hoteller og web-publisering i dag gjør – så må man også ta høyde for at den risiko at utro tjenere som leies inn for utviklingsoppdrag bevisst plasserer «bakdører» i programmene de skriver (jeg presiserer at det ikke finnes noe grunnlag for å tro at noe slikt har skjedd i denne saken).

Det som skjedde hos Telenor Nextel den 6. april var at en triviell og relativt vanlig programmerings­feil ga full adgang til det underliggende operativsystemet og kommandoskallet. Å sikre at det ikke finnes en eneste feil i de hundretusener av programmer, script og html-sider som en slik web-tjener huser er en enorm oppgave. Å sikre maskinen slik at slike feil kun gir en kontrollert og begrenset adgang til operativsystemet og kommandoskallet er en langt mindre og mer overkommelig oppgave.

Det som var årsaken til at Telenor Nextel web-tjener lot seg kompromittere, var at Telenor hadde unnlatt å sikre tjeneren på noen som helst måte. Døren sto ulåst, bordet var dekket, og den første og beste programmerings­feil stilte døren på vidt gap.

Slik ble ble innbruddet gjennomført

Den umiddlelbare årsaken til at innbruddet lot seg gjennomføre, var – slik Telenors Arne Cartridge og forskerne fra NR beskriver – en programmeringsfeil i et script utviklet av en av Telenors kunder som en del av en større webløsning.

Programmeringsfeilen befant seg i ett av de mange tusen script som utgjorde tjenestene på Telenor Nextels web-tjener. Scriptet var svært enkelt, og hadde som oppgave å sende data fra et bestillingsskjema til noen som skulle effektuere bestillingen.

Den som har laget scripet har ønsket at det skal gjøre følgende:

Problemet med scriptet er at en kommando som inneholder e-mail-adressen $adresse overlates til shellet uten at det er gjort noe forsøk på å sjekke at det faktisk er en gyldig epost-adresse eller noe helt annet.

Setningen:

   open (MAIL,"|mail $adresse");

legger, slik Telenors web-tjener var konfigurert, adgangen til systemet temmelig åpent for den person som bestemmer hva som står i feltet $adresse.

Det store problemet er nemlig ikke programmeringsfeilen, men det faktum at Telenor hadde konfigurert webtjeneren sin slik at alle filene på denne hadde samme eier (nobody). Dermed gir en programmeringsfeil hos en kunde automatisk adgang til alle filene som befinner seg på maskinen - uavhengig av hvilken kunde som har lastet dem opp.

Vedkommende kan slette de filer han vil (slik det skjedde her), men hullet kunne like gjerne vært brukt til å bryte seg inn helt inn på webtjeneren ved å utplassere egne programmer som fungerer som «bakdører». (Telenor har nok rett når de sier at dette ikke skjedde i den aktuelle situasjon — men det skyldes i så fall at vedkommende inntrenger ikke hadde noen interesse av å gjøre det).

Hvordan kan man så bestemme hva som skal stå i feltet $adresse?

Vel, ganske enkelt ved selv å bygge parametrene til den URL man bruker for å aktivisere scriptet. Her er hvordan man sletter filer — i tre enkle steg:

  1. Start opp Netscape Navigator eller Microsoft IE.
  2. I feltet «Location» (Netscape) eller «Adresse» (Microsoft IE) skriver du følgende URL:
       http://www.doktoronline.no/ta_i_mot_best.pl?7=a%3b+rm+-rf+%2f
  3. Trykk på <enter>-tasten.

Den aktuelle kommando i programmet ser nå slik ut:

   open (MAIL,"|mail a;rm -rf /");

som betyr følgende. Utfør først kommandoen «mail a» (send elektronisk post til adressen «a») — utfør deretter kommandoen «rm -rf /» (slett alle filer på disken).

Andre observasjoner:

Forslag til forholdsregler

Nedenfor listes en del enkle forholdsregler som kan bidra til å innkapsle og skadebegrense programmerings­feil i script og html-sider til den bruker som gjør feilen, slik at en feil hos en enkelt bruker ikke kompromitterer sikkerheten for en hel web-tjener.

I tillegg kommer det en rekke ting som kan gjøres med brannvegger, med varslingssystemer og med ulike former for «tuning» av en installasjon, men listen over er i alle fall en start dersom man ønsker å forhindre at en skade i form av en programmeringsfeil utvikler seg til en katastrofe.


Creative Commons License Basert på artikler opprinnelig publisert i: Digi, 11. april 1997 og i Computerworld, 25. april 1997.
Copyright © 1997 Gisle Hannemyr. Noen rettigheter reservert.
Dette verk gjøres tilgjengelig under en Creative Commons Attribution-NonCommercial-ShareAlike 2.5 License.

[Engelsk innholdsfortegnelse] [Norsk innholdsfortegnelse]
[tilbakemelding] [Gisle Hannemyrs hjemmeside] [opp] [forrige] [neste]