Kapitel 1. Introduktion til sikkerhed

1.1. Hvorfor er netværk usikkert?

Din maskine har ofte en del netværksservices åbne på forskellige "porte", når du har adgang til internettet. En port er ikke en fysisk port, men en logisk indgang til din maskine via netværksenheden (modem eller netværkskort). Disse "åbne porte" benyttes til at udføre netværkskommunikation, hvis maskinen tilbyder netværksservices som f.eks. ftp. Men de kan også misbruges, så uautoriserede personer kan komme ind på din computer via nettet. Dette kan ske, hvis der er fejl i netværksprogrammer (services, firewall og styresystem), eller hvis du lader dem stå helt åbne uden nogen form for adgangskontrol. Det kan også ske selvom du har adgangkontrol, hvis folk har mulighed for at opsnappe dit brugernavn og password via nettet. Ofte kan man direkte samle brugernavne og passwords op på nettet ved at bruge et "sniffer" program, som lytter til trafikken på et givent sted.

Dette er bare en forsmag på de emner, vi vil komme nærmere ind på i de kommende kapitler. Se også http://securityfocus.com/infocus/1539 om samme emne.

1.1.1. Er Linux et usikkert system?

Nogen har anklaget Linux for at være et meget usikkert system, idet alle kan læse kildeteksten. Når man kan læse kildeteksten til f.eks. netværksprogrammer og se, hvordan de fungerer, er det nemt finde eventuelle fejl. Disse kan bruges til at lave angreb på Linux-maskiner. Dette er delvis sandt! Men alligevel ikke. Vi ser på hvorfor.

For at knække sikkerheden på et UNIX-system, skal man enten kende en fejl eller lede efter fejl i systemet herunder systemopsætning og netværksprogrammer. For en kommerciel leverandør er en fejl ofte et prestigetab, og derfor er det måske ikke alle fejl, som bliver offentligt kendt. Hvis ingen kendte de fejl, der er i de lukkede systemer, ville alt være godt. Men ofte bliver fejl i lukkede systemer opdaget og kendt. Det kan skyldes at nogen udefra opdager fejlen ved et tilfælde, eller måske leder de bevidst efter fejl - eller at nogen indefra lækker information eller taler over sig. Så ender fejlen måske på en hjemmeside eller som en artikel i en avis. Så har du problemet: Hvis den, der vil bryde ind, kender fejlen, og du som systemadministrator ikke kender og tager højde for den, kan han komme ind på dit system.

Det er nok nærmest umuligt at gardere sig imod at en sikkerhedsbrist bliver offentligt kendt.

Ud over kendte sikkerhedshuller kan den, der vil bryde ind, selv lede efter fejl. I et lukket system er det langt sværere at lede efter fejl end i åbent system som Linux, fordi man ikke har kildeteksten. Men en måde at finde sikkerhedsfejl på, er at prøve kendte sikkerhedshuller af på nye maskinopsætninger - men med ændringer svarende til nye ideer. Nogle gange sker det så, at der er bid. Et system er ikke sikret imod indbrud, bare fordi kildeteksten er lukket.

Erfaring viser, at nogle af de helt store firmaer er meget ringe til at oplyse om sikkerhedsfejl - de skal helst negligeres eller skjules. Sikkerhedsbristerne bliver ofte hurtigt annonceret på internettet, mens firmaerne tit bruger lang tid på at lukke sikkerhedshullet ordentligt. I al den tid fra annoncering til rettelse er maskinerne åbne for mulige sikkerhedsangreb.

I Open Source-verdenen vender man alle disse problemstillinger på hovedet. For det første findes al relevant kode på internettet til offentlig beskuelse. Så nok er der mennesker, som kan læse og bryde sikkerheden for andre, men Open Source-verdenen er indrettet, så der er en meget stor prestige i at finde og specielt lappe sikkerhedshuller. Derfor vil folk, der finder fejl, oftest fortælle offentligt om de fundne fejl fremfor at gemme informationen. Det kan selvfølgelig også være, at man i stedet vælger at udnytte informationen til at bryde ind på andres systemer. Så kan det være, at det er et af de første "ofre", som rapporterer fejlen. Man vil så fokusere på hvilken service, der gav sikkerhedshullet, som man så lukker (eller giver speciel opmærksomhed gennem overvågning, hvis man ikke kan lukke servicen f.eks. webserveren for en internet-butik). I Open Source-verdenen indleder man så en klapjagt for at få fjernet problemet og udgive nye versioner af de berørte programmer. Det bliver en slags "trofæ" at komme først med den korrekte rettelse. Normalt er man nede på dage og ofte timer, fra en sikkerhedsfejl er rapporteret, til den er fundet og rettet, hvilket er markant mindre end på nogen af de andre lukkede systemer.

Alt dette lyder meget rosenrødt, men hvis din Linux-maskine har en kendt sikkerhedsbrist, og maskinen er på et usikkert netværk såsom internettet, så er der er en pris at betale. Du skal opdatere din maskine, når der er fundet sikkerhedsbrister, og den tilsvarende sikkerhedsrettelse er offentliggjort. Ellers har du reelt set nul sikkerhed! Alle kan jo se hvad, der er galt i din kode - det har jo været diskuteret på internettet, så man har kunnet lave rettelsen. På rootshell på freebsd.org er der en lang række henvisninger til artikler og software. Det er ofte beskrivelse af problemets omfang og karakter og anvisninger på udnyttelse og reparation.

Det typiske forløb for en systemadministrator i forbindelse med opdagelsen af et sikkerhedsbrist vil være:

  • Sikkerhedsbristen bliver annonceret

  • Man lukker for den service, som bristen tilhører. Hvis det ikke er muligt iværksættes ekstra overvågning af servicen samt de filer, som kan påvirkes af sikkerhedsbristen.

  • Annoncering af rettelse.

  • Installation af rettelsen.

  • Starte servicen igen eller stoppe den ekstra overvågning.

1.1.2. Hvilke angreb kan jeg blive udsat for

Der er flere forskellige typer angreb, der kan ramme din maskine. Der er forskellige metoder, en angriber kan benytte sig af, og som man kan gøre noget for at beskytte sig imod. Der er også forskel på, hvilken type adgang en angriber får til dit system, og hvor alvorlige konsekvenser et vellykket angreb har for dig.

Lad os først se på, hvordan en angriber kan bære sig ad med at få adgang til dit system.

  • Exploits Det mest almindelige er at gå efter nogle netværksservice-programmer, der er fundet fejl i. Disse fejl udnyttes ofte for at få fuld adgang til maskinen (Se nedenfor og Kapitel 3). Som tidligere nævnt skal man holde øje med annoncerede sikkerhedsfejl, og få opdateret de anfægtede programmer. Vi vil i Kapitel 2 se på hvordan du minimerer disse problemer.

  • Password angreb Den klassiske måde at komme ind på et system på er at få fat i et brugernavn og password (helst root passwordet).

    • Packet sniffing Man kan opsnappe brugernavne og passwords, hvis disse sendes i klar, ukrypteret form over nettet - se "man-in-the-middle angreb" herunder. Vi kommer desuden tilbage til emnet i Kapitel 4.

    • Brute force Man kan knække et svagt password med rå computerkraft. Se Kapitel 3.

    • Social engineering angreb Ofte kan en angriber slutte sig til ting ud fra sin viden om menneskelig adfærd. F.eks. at en bruger vil benytte det samme passwords til mange ting for at slippe for at huske så mange passwords. Så har man et password fra en telnet session, man har overvåget, kan det sikkert bruges i andre henseender.

  • Man-in-the-middle angreb Her er tale om at angriberen befinder sig et sted på netværket, hvor dine data-pakker kommer forbi. F.eks. hos din internet-udbyder eller på dit lokalnetværk. Eller i princippet et vilkårligt sted på internettet, hvor dine pakker kommer forbi.

    • Packet sniffing Det mest almindelige man-in-the-middle angreb er, at angriberen kigger på dine data-pakker for at opsnappe information. Det kan f.eks.være brugernavne og passwords, som sendes i klar tekst over nettet, eller dine firmahemmeligheder, hvis du sender dem afsted ukrypteret.

    • Session hijacking En anden type man-in-the-middle angreb er, at en angriber går ind og overtager en igangværende session f.eks. en telnet-session. Dette er i praksis meget vanskeligt på internettet, da det enten kræver at target-maskinen bruger forudsigelige tcp-sekvensnumre, eller at man kan aflytte trafikken. Det første er ikke muligt i Linux, og hvis man kan det andet, er det meget nemmere blot at sniffe brugernavn og password.

  • IP spoofing IP Spoofing går ud på at få systemet til at tro, at angriberens computer er en autoriseret computer, der har lovlig adgang. Dvs. at angriberens computer udgiver sig for at være en autoriseret host ved at bruge dennes IP-adresse. Dette kan bruges til at indsætte angriberens data i en datastrøm. Hvis angriberen ønsker at opnå tovejskommunikation, hvor han modtager de pakker, der er tiltænkt den, han udgiver sig for, er det sværere, idet han også skal ind og ændre routing-tabellerne. Uanset dette, så kan IP spoofing gøre analyse af angreb til en umulig opgave.

  • Trojanske heste En "trojansk hest" er et program, som indeholder skjult funktionalitet. Et velkendt program på dit system kan se helt uskyldigt ud og udføre sin normale funktion. Programmet kan imidlertid være modificeret, så det ud over sine normale opgaver f.eks. sender navne og passwords til en fast modtager eller lader ukendte personer logge ind på maskinen uden, at dette skrives i systemets logfiler. "Trojanske heste" kan være programmer efterladt af en angriber, der har været inde på dit system. De kan skjule hans spor og lette hans adgang næste gang via bagdøre (back-doors). Det kan imidlertid også være programmer, du selv har hentet ned og installeret. Du tror, du installerer et almindeligt program, men i virkeligheden er det en modificeret udgave, du har fået fat i. Heldigvis medfører traditionen med Open Source programmer, at vi har adgang til kildeteksten, og at man i praksis ikke kan skjule disse problemer for os. Henter du binære programmer ned (såsom RPM-pakker), så bør dette kun ske fra betroede steder, hvor du kan regne med at der bliver holdt styr på sikkerheden - men det er altid en risiko, du må løbe. Ydermere findes der PGP-nøglesignaturer i alle RPM-pakker, som man kan bruge til at kontrollere, hvem der har lavet den enkelte pakke. Heldigvis er problemerne i Open Source-verdenen meget små i forhold til det niveau, som Windows-verdenen er udsat for med virus i programmer og selv i Word-dokumenter. Et velkendt eksempel på en trojansk hest fra Windows verdenen er "Back Orifice". Hvis det først er installeret, giver det folk udefra fuld kontrol over den inficerede maskine via internettet.

Vi har nu set på forskellige metoder, en angriber kan bruge til at få adgang til dit system. Men hvad kan han bruge det til? Lad os dele angrebene op efter resultatet - hvad opnår vedkommende, og hvor farligt er det for dig.

  • Læseadgang Angriberen kan stjæle (kopiere) dine data. Dette er alvorligt, hvis du har hemmelige data, som kan udnyttes af andre på en måde, der skader dig. Læseadgang kan f.eks. opnås ved packet sniffing - hvis der er værdifuld information i pakkerne. Man kan beskytte sig ved at kryptere sine data. Læseadgang kan også opnås ved IP spoofing, hvis angriberen f.eks. giver din maskine besked om at videresende et vigtigt brev til ham. Endelig kan det opnås, hvis angriberen opnår login på dit system f.eks. ved at have skaffet sig et brugernavn og tilhørende password. Har man login på maskinen, kan man naturligvis også skrive men kun i de filer, der er adgang til for den bruger, man er logget ind som. Hvis man er logget ind som root, er det i praksis alle filer.

  • Skriveadgang Ud over at dine data kan blive stjålet, kan du risikere, at de er ændret, og at dit system er modificeret. Dette er meget alvorligt. Dit system er kompromitteret. Er dette tilfældet, skal man være ekstremt forsigtig med systemet, da man typiske ikke ved hvor meget som er ændret.

    Skriveadgang kan opnås, hvis angriberen opnår login på systemet. Han kan modificere de data, som det anvendte brugernavn har adgang til. Hvis han er inde som root, har han fuld adgang til at ødelægge eller modificere dit system. Root-adgang kan opnås ved opsnappe eller knække root passwordet eller ved at udnytte et sikkerhedshul i en netværksservice f.eks. Sendmail. En angriber kan også opnå skriveadgang til dit system ved IP spoofing - hvis man kan ændre indholdet af pakker, der bliver sendt over nettet, uden at modtageren opdager det, så har man effektivt forfalskede data. Det kunne også være kommandoer til systemet. Har en angriber først haft skriveadgang til dit system, skal du være meget forsigtig. Du ved ikke hvilke data, der er ændret - måske er de programmer, du kontrollerer dit system med, selv modificeret, og du kan ikke regne med dem længere. Du ved måske ikke med sikkerhed, hvornår han første gang har været inde, og dine backups kan være inficeret et stykke tid tilbage. Vi kommer tilbage til, hvad du skal gøre for at opdage et indbrud i Kapitel 5. Har en angriber lokket dig til at installere en trojansk hest, er det også en slags skriveadgang - dit system er modificeret. Den eneste sikre kur er geninstallation af hele systemet.

1.1.2.1. Remote og local exploit

Når der findes en fejl i et program kan der ofte laves et lille program der demonstrerer effekten af fejlen. Disse programmer kaldes ofte for proof-of-concept kode. Crackeren kan bruge samme metode til at lave et exploit program, d.v.s. et program, som udnytter fejlen, sårbarheden.

Disse exploit programmer kan fungere via netværk eller afvikles lokalt. Ideen med lokale programmer er typisk at få flere rettigheder på systemet (privilege escalation). Derfor skal programmer som Apache webserveren afvikles med så få privilegier som muligt. Så skal der være to sårbarheder for at få magt over maskinen, - en for at få adgang til maskinen, og en lokal sårbarhed, som kan give root privilegier.

1.1.2.2. Denial of Service angreb

Ude-af-drift angreb (eng. Denial of Service - DoS) har til formål at få din maskine til at holde op med gøre det, den er sat til. Crackeren prøver at forhindre maskinen i at yde den service den skal ved at overbelaste nettet eller maskinens netsoftware. Ofte medfører den slags overbelastning at systemerne crasher. Dette er knap så alvorligt som et reelt indbrud på systemet, men kan alligevel godt koste meget tid og mange penge. Eksempler på DoS angreb er Pentium F00F-fejlen, ping of death og teardrop, som får maskinen til at låse. Disse fejl er rettet i nyere Linux-systemer.

Man kan ikke lokalt i en virksomhed beskytte sig mod almindelig, lovlig, men massivt overbelastende og unyttig traffik til en bestemt server og man ser derfor virksomheder, som opsætter alternative web-sites med nye IP-numre/navne som kan overtage arbejdet mens der køres DoS mod virksomhederne. Andet er der ikke at gøre.

1.1.2.3. Syn flooding og Ping flooding

Ved SYN flooding og Ping flooding udsættes maskinen for en voldsom belastning fra en eller flere angribere med at svare på netværksforespørglser, og det er ikke muligt at bruge andre netværksservices på grund af overbelastning.

1.1.2.4. Smurfing

Ved smurfing er det netværket, der overbelastes. Disse problemer kan der dæmmes op for ved fornuftig router-opsætning. Der er også angreb, hvor der uploades meget store mængder data til en anonym ftp konto, hvor formålet er at få diske til at løbe fulde. Disse problemer kan der dæmmes op for med disk-kvoter og/eller smart partitionering (eller at upload af filer disables).

Fra den mere muntre ende kan vi lige vise lidt om DoS angreb fra User Friendly strippen den 7/8 99 http://www.userfriendly.org/cartoons/archives/99aug/19990807.html.

Figur 1-1. User Friendly