* 7 *

Sikkerhetsmodeller

Ukens faktum

Siden 50-tallet har man trodd på en sikkerhetsmodell for kroppen som består av et immunsystem som skiller mellom self/non-self (eget og ikke-eget eller fremmed), dvs enten kropp eller innvaderende organisme. Selv om modellens betydning fortsatt er kontroversiell, kan den ikke være en fullstendig beskrivelse av kroppens sikring mot livstruende sykdom. Kreft, lever/nyre-sykdommer er "eget". Også mat (som blir eget) kan føre til sykdom (hjertesykdom) med mindre innholdet kontrolleres.

Chapter 4 Gollmann

Abstraksjoner og modeller

Evnen til å abstrahere og assosiere ideer er nøkkelen til forståelse. Når vi samler fakta og obervasjoner, som frimerkesamlere, ser vi ikke noe annet enn en kjedelig liste. Det er først når vi tar et skritt tilbake og prøver å forstå hvordan brikkene settes sammen i et større puslespill at vi finner mening i de enkelte fakta og observasjonene. Dette er temaet for med forelesningen denne uken.

Hva kan det bety: en sikkerhetsmodell? I vitenskap bruker man modeller for å idealisere virkeligheten, for å forenkle og systematisere virkelighet. En modell er en grov fortolkning av verden. Poenget med å lage modeller er at, vi grupperer lignende ting og tilfeller etter deres generelle egenskaper (dvs ved å lage kvalitative generaliseringer) slik at vi reduserer vi ulike ting til spesialtilfeller av en enkelt generell ting.

I datasikkerhet bør vi kanskje være skeptisk til en slik prosedyre som ser bort fra detaljer. Det er jo en kjensgjerning at datasikkerhetens historie er et litani av tilfeller hvor man klarte å utnytte en svakhet, på grunn av for lite oppmerksomhet på detaljer. Og likevel argumenterer vi for færre detaljer og mer generelle egenskaper. Hva mener vi egentlig?

Både oversikten og detaljene er viktige, selvsagt. Dersom vi betrakter hver modell som et dataprogram, innser vi at vi trenger en høynivå del for å forstå strukturen i problemet. Vi trenger også subrutinene for å presisere detaljene og dekke alle spesialtilfellene. Visdommen bak strukturert programmering er nettopp dette med modellbygning: vi bør ikke blande samme disse to gjensidig utfyllende sidene av saken. Vi skal komme tilbake til strukturert programmering neste uke for å se på det som en modell for software-sikkerhet.

For å vurdere alle nivåene i en diskusjon trenger vi altså et mer formelt språk. Hvis vi bruker formelt språk (som matematikk) har vi muligheten til å bevise at en sikkerhetsmodell er sikker. Her får vi tid kun til å illustrere ideen.

Hva bør en modell dekke?

Vi bør skjelne mellom en sikkerhetsmodell og en sikkerhetspolitikk. En sikkerhetsmodell trenger å omfatte de grunnleggende punktene som vi har referert til flere ganger tidligere: Sikkerhet er umulig uten oppmerksomhet på detaljer. Vi trenger å passe på datamaskiner med: Ethvert system vil tendere mot en uordnet tilstand, eller få økende entropi; dette fordi sannsynligheten for at en tilfeldig forandring vil ødelegge noe er mye større enn sannsynligheten for at det vil gjøre noe bra.

Endelige tilstandsmaskiner

Det fins et begrep i data/vitenskap som brukes gjentatte ganger for å beskrive hvordan systemer forandrer seg med tid. Det er hovedsaklig et geometrisk syn på et systems tilstand. Anta at vi har et sett med variabler (a,b,c,d...) som beskriver hva et system gjør. Dette varibelsettet betegner et punkt i et vektorrom. Vanligvis har datavariabler diskrete verdier (ja/nei, read/write/execute, klar/venter osv). Hver variabel har med andre ord bare et endelig antall mulige verdier. Vi kan representere hele variabelrommet som punkter på et n-dimensjonalt gitter. Vi kaller det punket i rommet som karakteriserer systemet, systemets tilstand.
                          ---------   (x,y,z) = state of system
                        / |        /|
                       /  |       / |
                       ----------   |
                      |   |      |  |
                      |  / ----- |  /
                      | /        | /
                      |/         |/
                       ----------
                 (0,0,0)
Systemets tilstand forandrer seg med tid. Dersom tilstandene inkluderer informasjon om tilgangsrettigheter, innholdet i filer osv, kan vi si at noen tilstander vil være sikre og andre usikre. Dette indikerer at en grunnleggende styring på attributter (f.eks. cfengine) er det første skrittet mot et sikkert system.

Tilgangsmatriser

Si at vi har n subjekter (S) (dvs brukere eller klienter) og m objekter (O) (filer, prosesser osv). En tilgangsmatrise M(S,O) er en beskrivelse av tilgangsrettighetene som hvert subjekt har til hvert objekt.
                                    Objects

                       |  m(1,1)  m(1,2)  m(1,3) ..  .. |
   M(S,0) =            |                                |
             Subjects  |  m(2,1)  m(2,2)  ...    ..  .. |
                       |  ..                            |
                       |                                |
e.g. m(s,o). s=mark, o=/etc/passwd, m(s,o)=read.

Sikkerhetens fiender

Det er noen krefter som hindrer oss i å lage sikre systemer.

Noen sikkerhetsmodeller

Gollmann beskriver flere modeller på formelt vis. Her er en kort oppsummering av de viktige punktene. Du bør lese kapitlet der for flere detaljer.

Bell-LaPadula modellen (BLP)

Dette er en formell beskrivelse av et system som har statisk tilgangskontroll, dvs fortrolighet. Modellen forteller oss ingenting om integritet eller tillit. For å beskrive modellens tilstandsrom trenger vi å spesifisere variablene som karakteriserer systemet. Systemet består av Systemets tilstand blir beskrevet ved hjelp av disse. Gollmann skriver dette tilstandsrommet som et direkte product av settene:
nåværende tilstand = B x M x F
Der Det maksimale sikkerhetsnivået kalles ofte for subjektets sikkerhetsklarering. Legg merke til at modellen ikke prøver å beskrive det å forandre rettigheter. Alt er statisk.

Sikkerhetspolitikk innen BLP

Den såkalte simple security property:
Et tilstand (b,m,f) i systemet oppfyller ss-egenskapen dersom read/write rettigheter kun er mulig når fo <= fs, dvs. når en bruker har tilstrekkelig høy sikkerhetsnivå i forhold til objektet.
Dette er ikke mer enn vår hverdagslige oppfatning av hva filrettigheter betyr. Men dette er ikke tilstrekkelig for å hindre en lavnivå bruker i å aksessere et høynivå objekt. Dersom vi bare har ss-egenskapen kunne en bruker lage en ny fil/program med høy sikkerhetsklarering, bruke denne til å lese en høynivå fil og kopiere den til et lavere nivå (som ved et setuid script). Den såkallte stjerne egenskapen forsøker å rette på dette problemet:
En tilstand (b,m,f) i systemet oppfyller * egenskapen dersom append/write access nektes for fc <= fo, dvs når sikkerhetsnivået til en bruker er mindre enn det som kreves av objektet, er det umulig å skrive til eller opprette filer. I tillegg må enhver write/append operasjon til en fil eid av subjektet oppfylle fo' <= fo, dvs, det skal ikke være mulig for en fil å skape en ny fil med høyere sikkerhetsnivå enn det en selv har.
Dette har bivirkningen at et høynivå subjekt ikke kan sende informasjon eller beskjeder til et lavnivå subjekt. Derfor trenger vi begrepet om en nåværende sikkerhetsnivå, slik at sikkerhetsnivået kan midlertidig nedgraderes mens brukere kommuniserer. En annen fremgangsmåte ville vært å definere et sett med trusted users, eller brukere som har implisitt tillit og som får lov til å bryte tilgangsreglene.

Den såkallte discretionary security property er en triviell definisjon:

En tilstand (b,m,f) oppfyller ds-egenskapen dersom hver vektor (s,o,a) har a=M(s,o), dvs at filrettigheter avgjøres av en matrise med elementer som kan defineres. Rettighetene er ikke fastsatte. "They are at the discretion of the users who control the file."

Et fundamentalt sikkerhetsteorem: sant eller usant?

Forandringer i systemet fra en tilstand til en annen kalles for en overgang (transition). Det fundamentale sikkerhetsteoremet er en egenskap av endeligetilstandsmaskiner. Det heter:
Dersom vi begynner fra en sikker tilstand, og alle overganger er sikre, kan vi aldri komme til en usikker tilstand.
Dette er jo nyttig å vite. Det er ikke noe tvil om dette i prinsippet. Men det at vi har definert en tilstand som sikker, betyr ikke at det er sant!! Kanskje er det noe galt med definisjonen. BLP modellen har blitt kritisert for akkurat dette. Utfra det vi har sagt til nå er det ingen grunn til at vi kunne gjøre følgende: Dette ville være lik MS-DOS/MacOS, med ingen restriksjoner på noe som helst. I følge definisjonene så langt er denne tilstanden sikker, men det er det jo ikke! Det er viktig å innse at:

I ethvert sett med regler, vil det alltid finnes smutthull,
eller uforutsigbare måter å omgå reglene på, som kan utnyttes
i strid med intensjonen.

Andre bemerkninger om BLP

En covert channel er en privat informasjonskanal som ikke kontrolleres av noen sikkerhetsmekanismer. Filnavn kan være et eksempel på en covert kanal hvis alle kan se dem. Bare det å fortelle noen at en operasjon ikke tillates er en form for informasjon som kan være nyttig for dem! Noen ganger er det nødvendig å skjule eksistensen av objekter i tillegg til å sperre tilgang til dem.

Hvordan tolker vi BLP mot Unix

BLPUnix
Subjects (S)UID/Username
GID/Groups
Objects (O)Files
processes
memory segments
Access rights (M)Read
Write
Execute
Security levels (L)Allowed
Disallowed
Setuid
Setgid

Harrison-Ruzzo-Ullman modell

Denne modellen raffinerer BLP ved å inkludere en modell for å forandre rettigheter på samt opprette nye objekter. Den bruker atomære operasjoner for create/delete i hvert av rommene (S,O,A). dvs create/delete user, create/delete file, create/delete entry i tilgangsmatrisen.

Kinesisk mur modell

Hensikten med denne modellen er å unngå interesseskonflikter mellom grupper. Konflikter oppstår når grupper konkurrerer mot hverandre, f.eks. ulike firmaer som deler internettleverandør.

BLPen må igjen modifiseres slik at klasser av subjekter/brukere med mulige interesseskonflikter opprettes for å kunne ta hensyn til dem. Hver overgang i systemet (til en ny tilstand) avhenger nå av hvem som gjør hva. Tilgangsrettigheter må granskes i hver overgang mellom tilstander. Dette skaper et muligens ikke-kommutativt gitter.

Biba modellen

Biba modellen tar seg også av integritetsspørsmålet, dvs om data kan bli korrupt. En ny variabel brukes for å måle integriteten. Dersom et høysikkerhetsobjekt kommer i kontakt med lavsikkerhetsinformasjon kan sikkerhetsnivået nedgraderes. Dersom man bruker et usikkert program for å se på et sikkert dokument, for eksempel, kunne det hende at programmet forandret dokumentet (Trojansk hest) eller sendte det videre via en covert kanal til en annen del av systemet.

The Clark-Wilson model

Clark og Wilson har også laget en modell som tar seg av dataintegritet. Denne modellen er et steg på veien mot neste ukes forelesning om objektorientering. Clark-Wilson modellen forsøker å ta hensyn til relasjonen mellom systemet og omgivelsene, ved å insistere på logging av alle transaksjoner. Dette hjelper ikke sikkerheten nødvendigvis, men det gjør det enklere å detektere brudd på sikkerhet. Oppsummering:

Ukens tanke

Et virus er et stykke RNA eller DNA (genetisk program) som kan omprogrammere kopieringssystemet når celler formerer seg. Det er en slags programmeringsbug som tvinger celleprogrammet inn i en uendelig løkke, slik at viruset kopieres inntil cellen sprenges ihjel. Man tror at virus oppstår på grunn av tilfeldige feil i cellereproduksjon. Kompleksiteten i et genetisk program gjør det statistisk sannsynlig at slike feil vil oppstå (Jo større program desto flere bugs). Virus klarer å bryte inn i celler til tross for omfattende tilgangskontroller basert på molekylsignaturer.

Back