Kryptografi og nettverkssikkerhet (Kapittel 1: Sikkerhetskonsepter)

Dagens tekst er hentet fra kapittel 1 i Cryptography and Network Security.

Kryptografiske algoritmer og protokoller kan deles inn i fire hovedområder:

  • Symmetrisk kryptering
    • Brukes for skjuling av store og små mengder data; meldinger, dokumenter, krypteringsnøkler og passord
  • Asymmetrisk kryptering
    • Brukes for å skjule små mengder data, som krypteringsnøkler og hasher som brukes i digitale signaturer
  • Integritetsalgoritmer
    • Brukes for å beskytte datablokker mot uautorisert endring
  • Autentiseringsprotokoller
    • Mekanismer som ved hjelp av kryptografiske algoritmer verifiserer identiteten til brukere og prosesser

Nettverkssikkerhet består i mekanismer for å avverge, forhindre, detektere og korrigere sikkerhetsbrudd som involverer overføring av informasjon. Datasikkerhet omfatter også sikkerhet for data som er i ro.

Tradisjonelt har vi hatt tre mål for datasikkerhet:

  • Konfidensialitet
    • Kun den som er autorisert har tilgang til informasjonen.
    • Personvern er et spesialtilfelle som delvis er avhengig av konfidensialtitet, men også andre mekanismer
  • Integritet
    • Informasjon er ikke endret av uvedkommende, og avsenderen er den den gir seg ut for
    • Systemer utøver sin funksjon på forventet måte, og er ikke manipulert av utenforstående
  • Tilgjengelighet
    • Informasjon og ressurser er tilgjengelige for autoriserte brukere når disse har behov for det

Disse tre konseptene kalles “The CIA Triad” på utenlandsk, men i senere år har man lagt til to konsepter:

  • Autentisitet
    • Informasjonen er ekte (her er det en viss grad av overlapp mot integritet)
  • Ansvarlighet (Accountability)
    • Det går an å stille aktører til ansvar for sine handlinger, f.eks. med mekanismer slik som ikke-fornekting.

Når sikkerhetsmålene blir brutt snakker vi ikke overraskende om “sikkerhetsbrudd”; disse kan ha konsekvenser (impact) av forskjellig alvorlighetsgrad. Hvis alvorlighetsgraden er høy, kan man forvente at tapet vil ha alvorlig eller katastrofal påvirkning på virksomhetens drift, verdier, eller mennesker. Sikkerhetsbrudd med moderat alvorlighetsgrad han forventes å ha betydelig negativ påvirkning av de samme, mens lav alvorlighetsgrad  betyr at de negative virkningene er begrensede. I mange sammenhenger kvantifiserer man disse virkningene mer detaljert, f.eks. ved å bruke økonomiske kostnader som en målestokk.

Sikkerhet er vanskelig

Det er en rekke utfordringer med datasikkerhet. Sikkerhet er ikke enkelt; selv i de tilfellene hvor man lett klarer å se HVA som må gjøres er det ikke alltid lett å vite hvordan man skal gjøre det. Man må også tenke på mulige angrep på selve sikkerhetsmekanismene, og man må bestemme hvor de forskjellige mekanismene skal brukes. En gitt sikkerhetmekanisme består typisk av mer enn en algoritme eller protokoll, og prosedyrer som brukes for å tilby en gitt tjeneste er ofte ikke-intuitive.

Sikkerhet krever konstant overvåkning, og er å anse som en intellektuell krig mellom angripere og de som utvikler systemer. Dessverre er sikkerhet alt for ofte noe som legges til i etterkant, dette gir sjelden gode resultater. For ledelsen er det ofte vanskelig å se verdien av å investere i sikkerhet (før et sikkerhetsbrudd skjer); sterk sikkerhet oppleves tvert imot som en fartshump som hindrer effektiv og brukervennlig drift.

Begreper

ITU har i X.800 definert en del begreper som kan være nyttige. Et sikkerhetsangrep er en  handling som kompromitterer sikkerheten av informasjon som eies av en virksomhet. En sikkerhetmekanisme er en prosess (eller dings som realiserer en slik prosess) som er laget for å detektere, hindre, eller foreta gjenoppretting etter et sikkerhetsangrep. En sikkerhetstjeneste er en prosesserings- eller kommunikasjonstjeneste som forbedrer sikkerheten til dataprosesseringssytemene og informasjonsoverføringene til en virksomhet. Slike tjenester brukes til å motvirke sikkerhetsangrep, og bruker en eller flere sikkerhetmekanismer for å oppnå dette.

En trussel representerer en mulighet for at et sikkerhetsbrudd kan skje, når det er gitte forhold, egenskaper, tiltak, eller hendelse som kan forårsake skade. En trussel er en potensielle fare som kan utnytte en sårbarhet. Et angrep på systemet stammer fra en intelligent trussel, dvs. en intelligent handling som er gjort med hensikt (ved hjelp av en metode eller teknikk) for å omgå sikkerhetstjenester og foreta et sikkerhetsbrudd. Vi skiller på aktive og passive angrep; sistnevnte prøver å tilegne seg eller bruke informasjon fra systemet uten å påvirke systemressurser, mens førstnevnte prøver å endre systemet eller påvirke hvordan det fungerer.

Aktive og passive angrep

Passive angrep består altså i å avlytte eller monitorere sending av data. Målet til angriperen er vanligvis å få tilgang til data som sendes, men av og til er trafikkanalyse vel så viktig, dvs. finne ut hvem som kommuniserer med hvem, når, hvor ofte, og hvor mye.

Aktive angrep går ut på å modifisere datastrømmen eller å opprette en falsk strøm. Disse er vanskelige å forhindre, pga. den store variasjonen av potensielle fysiske, programvaremessige eller maskinvaremessige sårbarheter. Målet for forsvarerne er å detektere angrep, og evt. foreta  gjenoppretting for å korrigere brudd eller forsinkelser. Eksempler på aktive angrep omfatter maskerade, avspilling, modifikasjon av meldinger, og tjenestenekt.

Autentisering

Autentisering omfatter å forsikre at kommunikasjon er autentisk. Når det dreier seg om en enkelt melding, snakker vi om autentisering av data opphav (dvs. sikre at en melding kommer fra den som den gir seg ut for å komme fra). I en interaktiv kommunikasjonsprosess betyr autentisering å sikre at partene er autentiske, og at forbindelsen ikke har vært manipulert med slik at en tredjepart kan gi seg ut for å være en av de to legitime partene.

Aksesskontroll

Aksesskontroll er evnen til å kontrollere tilgang til systemer og applikasjoner via kommunikasjonsforbindelser (men også lokalt på et system). Dette forutsetter at alle som prøver å aksessere systemet først må identifisere og autentisere seg, slik at aksessrettigheter kan skreddersys til den enkelte.

Konfidensialitet av data

I kommunikasjonssammenheng dreier konfidensialitet seg primært om å beskytte data fra passive angrep. Den bredeste sikkerhetstjenesten vil beskytte all brukerdata som sendes mellom to brukere over en tidsperiode. Mer begrenset beskyttelse kan omfatte en enkelt melding, eller til og med bestemte deler av en melding. Man kan også beskytte trafikkflyten mot analyse; dette krever at angriperen forhindres fra å observerer kilden og destinasjonen, meldingsfrekvensen, lengden eller andre karakterstikker ved trafikken.

Dataintegritet

Integritet kan gjelde en strøm med meldinger, en enkelt melding, eller utvalgte deler av en melding. En forbindelsesorientert integritetstjeneste som håndterer en strøm av meldinger sørger for at meldinger mottas slik de ble sendt, garantert uten duplisering, injisjering, modifisering, endring av rekkefølge, eller avspilling av tidligere meldinger.  Forbindelsesløs integritet som bare omhandler individuelle meldinger uten kontekst beskytter kun mot endring av meldinger.

Ikke-fornekting (non-repudiation)

Ikke-fornekting forhindrer en avsender fra å nekte for å ha sendt en gitt melding. Når en melding har har blitt sendt, kan mottakeren bevise at den antatte avsenderen faktisk er den som sendte meldingen. Ved ikke-fornekting av mottak kan avsenderen av en melding bevise at den angivelige mottakeren faktisk mottok meldingen.

Tilgjengelighet

En tilgjengelighetstjeneste beskytter et system mot tjenestenekt-angre (DoS). Den avhenger av administrasjon og kontroll av systemressurser, og følgelig på aksesskontroll og andre sikkerhetstjenester.

Fundamentale prinsipper for sikkerhetsdesign

Når man skal lage sikkerhetsmekanismer er det noen fundamentale designprinsipper som kan bidra til å unngå kjedelige sikkerhetsbrudd i neste omgang. Mekanismegjerrighet (Economy of mechanism) betyr at sikkerhetsmekanismer både i maskinvare og programvare bør være så enkle og små som mulig. Enklere, mindre konstruksjoner er lettere å teste og verifisere grundig; med kompleks design vil det være mange flere muligheter for en motstander å oppdage subtile sårbarheter å utnytte, og disse kan være vanskelige å oppdage på forhånd.

Feil trygt (Fail-safe defaults) betyr bl.a. at tilgangsbeslutninger burde baseres på tillatelser snarere enn utestenging. Standardtilstanden bør være fravær av tilgang, og beskyttelsesregimet identifiserer tilstander hvor tilgang er tillatt.

Fullstendig megling (Complete mediation) betyr at hver tilgang må sjekkes eksplisitt mot aksesskontrollmekanismen, uten å basere seg på tidligere lagrede beslutninger i minne. For å implementere dette fullstendig, må systemet hver gang en bruker leser et felt eller innslag i en fil gjennomføre aksesskontroll. I praksis velges ofte en pragmatisk tilnærming. 

Åpen design betyr at konstruksjonen av en sikkerhetsmekanisme bør være åpen snarere enn hemmelig. Krypteringsnøkler må selvfølgelig holdes hemmelig, men kryteringsalgoritmer bør være åpne for offentlig vurdering; dette er filosofien bak NIST’s standardisering av krypterings- og hash-funksjoner.

Separering av privilegier betyr at flere privilegieattributter er nødvendige for å få tilgang til en avgrenset ressurs. Multifaktor autentisering er et eksempel, hvor det kreves flere teknikker, som. f.eks. både passord og et smartkort for å autentisere en bruker.

Minste privilegium betyr at hver prosess og hver bruker av systemet bør operere med det minste og laveste settet privilegier som er nødvendige for å gjøre den aktuelle oppgaven. Et eksempel på dette er rollebasert aksesskontroll (RBAC) hvor systemet identifiserer og definerer de forskjellige rollene til brukere eller prosesser, og hver rolle tildeles kun de rettighetene som trengs for å gjøre akkurat dette.

Minste felles mekanisme betyr å ha færrest mulig funksjoner delt mellom forskjellige brukere, noe som gir gjensidig sikkerhet. Dette prinsippet reduserer antallet utilsiktede kommunikasjonsveier, og reduserer mengden av maskinvare og programvare som alle brukere er avhengige av, som som gjøre det enklere å verifisere at det ikke er noen uønskede sikkerhetkonsekvenser.

Psykologisk aksepterbarhet betyr at sikkerhetsmekanismer ikke unødig skal påvirke brukernes arbeid, men samtidig tilfredsstille behovene til dem som skal autorisere tilgang. Der det er mulig bør sikkerhetsmekanismer være usynlige for brukerne, eller i det minste  introdusere minimalt med obstruksjon. I tillegg bør sikkerhetsprosedyrer reflektere brukerens mentale beskyttelsesmodell.

Isolering kommer til anvendelse i tre kontekster: Offentlig tilgjengelige systemer bør være isolert fra kritiske ressurser for å unngå avsløring eller endringer. Prosesser og filer til individuelle brukere skal være isolert fra alle andre brukere unntatt når deling eksplisitt er ønskelig.Sikkerhetsmekanismer bør være isolert i den forstand at man forhindrer aksess til disse mekanismene.

Innkapsling (encapsulation) kan betraktes som en spesifikk type isolering basert på objekt-orientert funksjonalitet. Man kan oppnå beskyttelse ved å kapsle inn en samling prosedyrer og dataobjekter i et eget domene slik at den interne strukturen til et objekt kun er tilgjengelige for prosedyrene til det beskyttede subsystemet, og prosedyrene kan kun kalles på angitte inngangssteder til domenet.

Modularitet refererer både til utvikling av sikkerhetsfunksjoner som separate, beskyttede moduler, og til bruk av modulær arkitektur for design og implementering.

Lagdeling refererer til bruk av flere overlappende beskyttelsestilnærminger som adresserer mennesker, teknologi og operasjonelle aspekter til informasjonssystemer. Feil eller omgåelse av enhver enkeltstående beskyttelsesmekanisme vil ikke føre til at systemet blir stående uten forsvarsverker.

Minste forbauselse betyr at et program eller grensesnitt alltid bør svare på en måte som det er minst sannsynlig at vil forbause brukeren. Autoriseringsmekanismen bør være transparent nok for en bruker til an hun har en god intuitiv forståelse av hvordan sikkerhetsmålene kan avbildes til den tilbudte sikkerhetsmekanismen.

Angrepsflater

Angrepsflaten til et system består av (de potensielle) sårbarhetene i et system som kan nås og utnyttes av en angriper. Eksempler omfatter åpne eksterne porter på et system, og prosesser som lytter på disse portene, tjenester tilgjengelige på utsiden av en brannmur, kode som prosesserer innkommende data (epost, XML, documenter, andre formater…), grensesnitt, SQL og Web forms, en ansatt med tilgang til sensitiv informasjon, og som er sårbar for sosial manipulering. Vi kan skille mellom nettverks-angrepsflate og programvare-angrepsflate, men også førstnevnte involverer oftest programvare på en eller annen måte.

Angrepstre

Et angrepstre er en datastruktur som representerer et sett av potensielle teknikker for å utnytte sikkerhetshull. Toppen av treet er målet som angrepet søker å oppnå, og grenene og subnodene representerer de alternative måtene angriperen kan nå dette målet. De nederste nodene (bladene) representerer forskjellige måter å starte et angrep på. Angrepstre er en pedagogisk måte å formidle informasjonen som finnes i kjente angrepsmønster.

 

Illustrasjon ved Marco Verch CC BY 2.0