(Norwegian) Om infeksjoner, rootkits og antiware

Her er neste artikkel i serien… tja…

Ok, det er ikke egentlig en serie, da, og den har i allefall ikke noe navn, men åkke som. Jeg skriver en rekke artikler som er ment å analysere en del myter innen sikkerhet, informere og opplyse om alskens aspekter av datasikkerhet, forhåpentligvis skrevet på en forståelig måte.

Denne gangen er temaet infeksjoner. Inspirasjonen til å skrive denne gangen kom fra en spørsmålsstiller på newsgruppa no.it.sikkerhet.diverse som spurte om det var noen enkel måte å oppdage en infeksjon. For å svare på spørsmålet må man forstå litt hvordan en infeksjon fungerer.

Så la oss ta definisjonen først. En infeksjon er når skadeprogramvare blir installert eller sikkerhetshull utnyttet, enten gjennom aktiv handling fra en angriper eller gjennom uvøren omgang med ukjent programvare fra brukeren. Jeg bruker det som en samlebetegnelse for der sikkerhetsproblemer er blitt utnyttet av noen utenforstående som helst ikke skulle utnyttet disse problemene.

For å ta det mest banale med en gang: infeksjoner er laget av mennesker. Du aner ikke hvem, derfor bør du anta at de er svært dyktige og trolig har tenkt på – og eksperimentert med – hvordan de kan skjule en infeksjon.

Dette er forresten en veldig vanlig holdning blant de som er litt ferske innenfor sikkerhet: man antar at en angriper enten vet det samme som en selv eller bare litt mer enn en selv. Det er naturlig, jeg har gått i samme fella mange ganger selv, fordi så lenge man ikke kjenner alle aspektene av et tema er det vanskelig å se for seg totalt ukjente problemområder.

Et generelt råd er derfor å anta at en angriper vet uendelig mye. Dette igjen betyr at du vet uendelig lite. Dette er hovedårsaken til at jeg også til stadighet oppfordrer folk til å innse at de ikke vet noe som helst og forsvare seg ut fra det perspektivet i stedet for å anta at man vet litt og så forsøke å forstå hva en angriper kan gjøre utifra hva man selv forstår.

Tilbake til dagens tema. Dersom en angriper får en infeksjon inn på en pc er pc’en plutselig angriperens eiendom, for de fleste praktiske formål. Vedkommende kan bruke pc’en som platform for angrep på nye enkeltmaskiner eller som del av massive nettverk for utsending av spam eller såkalte tjenestenektangrep. Alt du kan bruke maskinen til kan angriperen også få til. Innenfor naturlige grenser, selvfølgelig, det er vanskelig å kaste en pc ut av vinduet via TCP/IP.

Dessverre.

Så lenge pc’en er under angriperenes kontroll er den derfor svært verdifull. Du kan og bør anta at et mål for infeksjonen er å unngå å bli oppdaget i tillegg til det angriperen faktisk skal utføre av skadeverk.

For å forstå hvordan det er mulig å skjule en infeksjon må man gå litt ned i materien, og jeg skal forklare prinsippene her. Jeg skal ikke lage noen lang teknisk utredelse, og for de som er veldig interessert i mer informasjon anbefales boka ‘Rootkits – subverting the Windows kernel’ av Greg Hoglund og Jamie Butler. Vær dog klar over at læringskurven i boka er skyhøy, man går mer eller mindre rett fra introduksjon til tekniske finurligheter rundt minnebeskyttelse på cpu-nivå.

Det er viktig å forstå hvordan todeling av minnebeskyttelse fungerer på et abstrakt nivå. I utgangspunktet er det to beskyttelsessoner for minne på en PC – kernelmode og usermode. Dette implementeres på cpu-nivå, og støttes i operativsystemet. Forskjellen på de to sonene er, for enkelthetens skyld, at operativsystemet og drivere kjører i kernelmode mens brukerprogrammer, altså type internet explorer, antiware, word og excel, kjører i usermode.

Kernelmode programvare har utvidede tilganger til andre prosesser på pc’en, for eksempel til minneområder og hardware. Usermode programvare har begrensede muligheter og har for eksempel kun tilgang til sitt eget minne. Alle operasjoner usermode applikasjoner skal gjøre mot hardware, for eksempel å lese inn informasjon fra tastatur, sende informasjon ut på nettverket, lese filer fra harddisk og liknende, gjøres via kernelmode drivere. Det er ingen måte som usermode programvare kan lese dette direkte. Dette sikres både av operativsystemet og på cpu-nivå.

Sånn. Forstår du de to siste avsnittene er det tyngste stoffet over. Resten er bare en forklaring på hvordan man utnytter denne informasjonen til å skjule ting på en pc.

Når en usermode applikasjon, for eksempel Windows Explorer, Taskmanager, antiware av ymse slag, og da spesielt disse scannerene som ikke installeres på maskinen, skal lese ut informasjon om for eksempel hva som ligger lagret i en katalog så spør applikasjonen en kernelmode driver. Kerneldriveren har da utvidede muligheter til å lese ut denne informasjonen og rapportere tilbake til applikasjonen som spør om dette. Troverdigheten til informasjonen som usermode applikasjoner ser er derfor avhengig av troverdigheten til driveren.

Heri ligger noe av problemet. Hvis man korruperer driveren på noen måte kan man manipulere hvilken informasjon som sendes til applikasjonen. Man kan la være å si ifra om en katalog, en fil eller en egenskap. Man kan skjule informasjon om minnebruk, åpne tcp-porter, prosesslister og egentlig alt mulig annet. Er driveren kompromittert er informasjonen om systemet også kompromittert.

Det er mange måter å kompromittere en driver på denne måten. Et eksempel, populært men ganske lett å oppdage, er såkalt hooking. Kernelmode programvare har altså utvidede rettigheter til minnet og er ikke i like stor grad begrenset til eget minneområde som usermode applikasjoner. Det er forresten derfor blue screen of death stort sett kun skjer når det er driverfeil – brukerprogramvare kan stort sett kun ødelegge sitt eget minneområde og kan ikke påvirke andre programmer eller systemer.

En driver kan altså manipulere informasjon, inkludert minneområde til andre drivere og prosesser. Dette kan brukes til å koble seg inn i andre programmers programkode og endre på programgangen – det er dette som kalles hooking. Når man hooker seg inn på denne måten overtar man altså eksekveringen av programkode og kan i praksis gjøre hva man vil, inkludert å manipulere, slette og legge til data.

Alt dette er for enkelthetens skyld, det er egentlig langt mer komplekst enn dette, men for å holde nivået litt nede så stanser vi foreløpig her.

En vesentlig ting her er at installasjon av kernelmode programvare krever administratorrettigheter. En vanlig bruker kan ikke installere en driver og kan dermed ikke legge inn programvare som kan manipulere andre prosesser sine minnebaserte data eller programkode. Blant annet på grunn av dette er det usannsynlig viktig at man bruker begrensede kontoer når man jobber til vanlig i stedet for å alltid kjøre som administrator.

En ikke-installert antivirusscanner som ikke krever administratorrettigheter fungerer nødvendigvis i usermode. Usermode applikasjoner må forholde seg til allerede installerte drivere for å finne ut av hva som eksisterer på et system. Problemet her er altså at om de eksisterende driverene er kompromitterte så får antivirusscanneren vite akkurat det skadeprogramvaren vil at antivirusscanneren skal se, og det inkluderer mest sannsynlig ikke at det finnes noen skadeprogramvare på systemet.

Ikke bare det, men i et kompromittert system vil også manipulering av systemet, for eksempel fjerning av et virus, gjøres via kompromitterte drivere. Når antiviruset ber operativsystemet om å fjerne en infisert fil kan skadeprogramvaren overta kontrollen og rapportere tilbake til antiviruset at ‘joda, den infiserte filen ble fjernet’ men la alt sammen være akkurat som det var før.

På en infisert maskin er det umulig å vite hva som skjer – fordi alt kan være styrt at noen som ønsker å manipulere hva du ser. En infisert maskin er dermed umulig å reparere uten intrikat kunnskap om alle detaljer om hva som har skjedd i hvert eneste trinn siden en infeksjon skjedde. Et slikt detaljnivå er f
or alle praktiske formål umulig å oppnå.

Så, om det ikke har vært klart tidligere: ikke bli infisert. Det er kun én måte å unngå disse problemene – og det er å ikke bli infisert. Hvordan? Vel, gi faen i å gjøre ting hvor du ikke kjenner konsekvensene. Vet du ikke hvordan du evaluerer konsekvensene så hold deg unna maskinen eller skaff deg kunnskapen. Ingen antiware kan rense en maskin uten reformatering. Ingen dataekspert kan rense en maskin uten reformatering.

Og om du synes dette høres ut som skremselspropaganda og umulig å oppnå for hackere – ta deg en dag og titt på hva folkene på rootkit.com har gjort de siste månedene.

Found this article valuable? Want to show your appreciation? Here are some options:

a) Click on the banners anywhere on the site to visit my blog's sponsors. They are all hand-picked and are selected based on providing great products and services to the SharePoint community.

b) Donate Bitcoins! I love Bitcoins, and you can donate if you'd like by clicking the button below.

c) Spread the word! Below, you should find links to sharing this article on your favorite social media sites. I'm an attention junkie, so sharing is caring in my book!

Pin It