241 Åtkomstkontroll. Följande metoder/tekniker är/var vanliga för skydd av primärminne, filer, mm.

Relevanta dokument
Några gamla tentamensuppgifter: Minneshantering

Fö 8: Operativsystem II. Minneshantering. Minneshantering (1) Minneshantering (2) Minneshantering och Virtuelltminne.

Behörighetssystem. Ska kontrollera att ingen läser, skriver, ändrar och/eller på annat sätt använder data utan rätt att göra det

SVAR TILL TENTAMEN I DATORSYSTEM, VT2013

Svar till tentamen den 16 december 2013 Datorarkitekturer med operativsystem, EDT621, 7,5 poäng

Operativsystem ID2200 Tentamen TEN1 3.8 hp :00-18:00

Operativsystem ID2206 Tentamen TEN1 4.5 hp :00-18:00

Minneshantering segmentering och virtuellminne. Föreläsning 3

F2: Motorola Arkitektur. Assembler vs. Maskinkod Exekvering av instruktioner i Instruktionsformat MOVE instruktionen

Datorteknik ERIK LARSSON

System S. Datorarkitektur - en inledning. Organisation av datorsystem: olika abstraktionsnivåer. den mest abstrakta synen på systemet

F5: Högnivåprogrammering

Operative system. LRU-algoritm (2 p) Svar: 7 fel. c) Optimal algoritm (2 p) Svar: 6 fel

HF0010. Introduktionskurs i datateknik 1,5 hp

Introduktion till algoritmer - Lektion 4 Matematikgymnasiet, Läsåret Lektion 4

Minnet från processorns sida Datorteknik

Föreläsning 6: Introduktion av listor

F5: Högnivåprogrammering

Operativsystem - input/output, skydd, virtualisering

Operativsystem ID1200/06 (ID2200/06 6hp) Tentamen :00-18:00

Grundläggande datavetenskap, 4p

Tentamen den 12 januari 2017 Datorarkitektur med operativsystem, EDT621

155 Datasäkerhet. Här är ett antal konkreta hot problem vad avser säkerheten i datorsystem.

Vektorgeometri för gymnasister

Föreläsning 9: Turingmaskiner och oavgörbarhet. Turingmaskinen. Den maximalt förenklade modell för beräkning vi kommer använda är turingmaskinen.

Tentamen den 18 mars svar Datorteknik, EIT070

Turingmaskiner och oavgörbarhet. Turingmaskinen. Den maximalt förenklade modell för beräkning vi kommer använda är turingmaskinen.

Närliggande allokering Datorteknik

Datorsystem. Laboration 3: Operativsystem Senast uppdaterad: 14 oktober 2012 Version 1.3. Student: Underskrift: Underskrift: Datum:

En Von Neumann-arkitektur ( Von Neumann-principen i föreläsning 1) innebär:

Dagens föreläsning. Diverse Common Lisp. Konstanter, parametrar, globala variabler

Digital- och datorteknik

Datorarkitekturer med Operativsystem

Dagens föreläsning Programmering i Lisp. - Bindning av variabler (avs 14.6) fria variabler statisk/lexikalisk och dynamisk bindning

Informationssäkerhet - en översikt. Louise Yngström, DSV

Operativsystem (ID2200/06) XX XX:00-XX:00

Tentamen PC-teknik 5 p Lösningar och kommentarer

Datorarkitekturer med operativsystem ERIK LARSSON

Flera processer. Minneshantering. Trashing kan uppstå ändå. Ersätta globalt

Föreläsning 5: Introduktion av pekare

TDDC74 Lab 04 Muterbara strukturer, omgivningar

DAT 015 Maskinorienterad programmering 2010/2011. Uppbyggnad_och_funktion.pdf

Operativsystem ID1200/06 (ID2200/06 6hp) Tentamen :00-18:00

Operativsystem (IS1350) :00-12:00

Föreläsning 2. Operativsystem och programmering

Idag: Par och listor. Scheme. DA2001 (Föreläsning 6) Datalogi 1 Hösten / 29

F8: Undantagshantering

Idag: Par och listor. Symboler. Symboler används för att uttrycka icke-numeriska data såsom namn, adress, bilregisternummer, boktitel, osv.

1 De fyra fundamentala underrummen till en matris

Fö 7: Operativsystem. Vad är ett operativsystem? Målsättning med operativsystem. Styr operativsystemet datorn?

Introduktion till formella metoder Programmeringsmetodik 1. Inledning

Hjälpmedel: Inga hjälpmedel förutom penna, suddgummi och glatt humör.

Filsäkerhet i Windows NT (NTFS)

Databasdesign. E-R-modellen

SVAR TILL TENTAMEN I DATORSYSTEM, HT2013

Försättsblad till skriftlig tentamen vid Linköpings Universitet

Per Holm Lågnivåprogrammering 2014/15 24 / 177. int och double = = 2, 147, 483, 647

Objektorienterade programmeringsspråk. Objektorienterade språk. Den objekt-orienterade modellen. Jämför med icke-oo

Tentamen i Digitala system - EITA15 15hp varav denna tentamen 4,5hp

Digital- och datorteknik

Säkerhet. Vad är det vi pratar om??

Datastrukturer och algoritmer

Vad är en dator? Introduktion till datorer och nätverk. Pontus Haglund Institutionen för datavetenskap (IDA) 21 augusti 2018

TDDC74 Programmering, abstraktion och modellering. Tentamen

Digital och Datorteknik EDA /2011. EDA 451 Digital och datorteknik 2010/2011. Uppbyggnad_och_funktion.pdf

Lågnivåprogrammering. Föreläsning 2 Lågnivåprogrammering. Binära tal. En enkel modell av datorns inre

Övning1 Datorteknik, HH vt12 - Talsystem, logik, minne, instruktioner, assembler

Programmera i C Varför programmera i C när det finns språk som Simula och Pascal??

Universitetet i Linköping Institutionen för datavetenskap Anders Haraldsson

Lösningar till tentamen i EIT070 Datorteknik

Kompletteringsmaterial. K2 Något om modeller, kompakthetssatsen

Tommy Färnqvist, IDA, Linköpings universitet. 1 ADT Map/Dictionary Definitioner Implementation... 2

Datastrukturer och algoritmer

Rekursiva algoritmer sortering sökning mönstermatchning

Arv. Fundamental objekt-orienterad teknik. arv i Java modifieraren protected Lägga till och modifiera metoder med hjälp av arv Klass hierarkier

Lösningar till tentamen i EIT070 Datorteknik

K2 Något om modeller, kompakthetssatsen

Omgivningar. Omgivningar är viktiga eftersom de avgör vilka namn som är synliga och därmed dessas innebörd och de värden som är förknippade med dem.

Operativsystem Lektion 1. Lärare. Schema. Kurssajten Finns på adressen. Jan Erik Moström. Set Norman

4 grundregler. Minneshantering. Problemet. Windows minkrav

Introduktion. Klasser. TDP004 Objektorienterad Programmering Fö 2 Objektorientering grunder

DIG IN TO Dator och nätverksteknik

Classes och Interfaces, Objects och References, Initialization

Assemblerprogrammering del 3

Tildatenta Lösningsskiss

Magnus Nielsen, IDA, Linköpings universitet

PROV. 12 Egenskaper (provavsnitt)

Övningshäfte 2: Induktion och rekursion

CE_O3. Nios II. Inför lab nios2time

Introduktion Schenker-BTL AB, Stab IT Beskrivning över informationsintegreringmed Schenker, metodbeskrivning version 1.

En processor kan ha en klockfrekvens på flera GHz. Det går alltså a9 exekvera en instruk=on väldigt for, givet a9 instruk=onen finns i processorn.

Föreläsningsanteckningar, Introduktion till datavetenskap HT S4 Datastrukturer. Tobias Wrigstad

Vektorgeometri för gymnasister

Datalogi, grundkurs 1. Lösningsförslag till tentamen

Digitalitet. Kontinuerlig. Direkt proportionerlig mot källan. Ex. sprittermometer. Elektrisk signal som representerar ljud.

Datorsystem 2 CPU. Förra gången: Datorns historia Denna gång: Byggstenar i en dators arkitektur. Visning av Akka (för de som är intresserade)

Inkapsling tumregler. Åtkomstmodifikatorer, instantiering, referenser, identitet och ekvivalens, samt klassvariabler. public och private

Tentamen för DD1370 Databasteknik och informationssystem

Pipelining i Intel Pentium II

Kontinuitet och gränsvärden

Transkript:

241 10 S. Sontag. Tolkningen är intellektets hämnd på konsten. är som bekant tekniken att reglera subjekts (användares, processers, funktioners,...) möjligheter att operera (skriva, läsa, exekvera) på objekt (filer, noder, processer, yttre enheter,...). står också, enligt OSI, för en tjänst. Metoderna används som komplement till kryptografi bland annat därför att de är mycket mindre resurskrävande i termer av tid och minne. 10.1 Ambitionsnivåer Avgörande för val av mekanism är ambitionsnivån avseende åtkomstskyddet. Nivåerna kan formuleras som 'policies' på många olika sätt. Här är ett förslag. - Oskyddade system. - 'All-or-nothing systems'. - Operativsystemkontrollerad delning. - Användarstyrd delning. Den första nivån avser operativsystem byggda på maskiner som saknar minnesskydd i maskinvara. Programvarumässigt interpreterad åtkomstkontroll är i allmänhet för kostsam för objekt i primärminnet, varför man väljer att avstå från skydd. Den andra typen av system har sin grund i kombinationen av 'supervisor/user state' och privilegierade instruktioner. Namnet kommer därav att operativsystemet tillåts utföra alla instruktioner; användarna är mer begränsade. Ett system med endast dessa faciliteter måste betraktas som fullständigt oskyddat. Bättre skydd erhålls om operativsystemet därutöver sätter läs- skriv- och exekveringsskydd på minnesdelar, sidor eller segment med maskinvarustöd och för filer, terminaler och noder implementerat i programvara. I de mer avancerade systemen sker styrningen av åtkomst efter användarnas intentioner: Inte helt fritt, då skulle kaos uppstå, men efter ramar fastställda av operativsystemet då systemets 'policy' formuleras. Observera att benämningen vanligen är delning och inte skydd. Anledningen är att det just är delningen som gör skyddsaspekterna svårhanterliga och kanske intressanta. 10.2 Tekniker Följande metoder/tekniker är/var vanliga för skydd av primärminne, filer, mm. i. Gränsregister och supervisor state'. Åtkomstskyddat område där operativsystemet har allokerats sätts via ett register med hjälp av privilegierad instruktion. En användares försök till referens till skyddat område ger 'trap'. Ett anrop till en förutbestämd adress kan tolkas som ett systemanrop (i system där en 'trap'- instruktion saknas). I övrigt är operativsystemarean oåtkomlig för användarprocesser. Figur 10.1 illustrerar tekniken.

242 Primärminnet OS i 'supervisor state' Användare (en åt gången) i 'user state') Ett gränsregister som definieras av OS med privilegierad instruktion Figur 10.1. Gränsregister ii. Lås och nycklar. Minnesblock av fix storlek åsätts mha en privilegierad instruktion ett låsvärde (tex 0-15). Endast processer som har motsvarande nyckel i 'process status word', psw, kan referera detta block. Detta är grundmodellen i OS/370. iii. Bas- och gränsregister. En modifikation av tekniken med gränsregister som möjliggör inkapsling av en process' namnrum inom visst område. Denna teknik har alltid vad jag vet kombinerats med dynamisk relokering via detta basregister. Bas- och gränsregistertekniken illustreras av figur 10.2. Primärminnet OS Åtkomligt område En annan uppehållen process Dessa sätts av OS B L Adresser relokeras via B Kontroll av adress L görs Figur 10.2. Bas- och gränsregister Observera att dessa tre tekniker verkar i det fysiska adressrummmet. Nu till skydd i den logiska adressrymden. iv. Sid- eller segmentskydd. Läs- skriv- och exekveringsrättigheter (rwe) sätts av operativsystemet på basis av allokeringsenhet i respektive tabell. En otillåten operation ger ett 'trap'. Den helt dominerande tekniken idag går via sidsystem och sidskydd. v. Ringskydd. Detta kan sägas vara en generalisering av 'user/supervisor state' så att dels fler processortillstånd (ringnummer, pr.rn) kan lagras i processtatusordet, dels att varje objekt (segment) kan tilldelas ett ringnummer s.rn i segmenttabellelementet. De olika processtillstånden kan också låtas definiera olika klasser av privilegierade instruktioner. Vid varje referens kontrolleras att pr.rn s.rn. Om så inte är fallet fås en 'trap'. Detta skydd, där objekt och subjekt ordnas hierarkiskt (linjärt), verkar oberoende av rwebitarna. Eftersom en naiv tillämpning av denna regel skulle omöjliggöra anrop "inåt" från användare till systemrutiner måste regeln kompletteras. Ett sätt är att tillåta anrop, men bara anrop, inåt och då till förutsatt certifierade anropsställen [s, w] (sk 'protected calls').

243 Maskinvarumodellen är funktionellt identisk med 'scope'- reglerna för många blockorienterade språk. vi. 'Capability-' (CL, cap-listor) och/eller åtkomstlistor (ACL). Dessa tekniker eller dess ekvivalenser är mig veterligen de enda som gör användarstyrd åtkomstkontroll möjlig. Listorna (registren, segmenten) med 'capabilities' laddas ju av processerna från certifierade platser i operativsystemet. De objekt som innehåller 'capabilities' kan läsas/skrivas om användaren har rättighet i en "primär" 'capability' rc/wc till detta (rc/wc = 'read/write capability'). Figur 10.3 illustrerar CL. Processlista CL Process x Process y (Subjekt) En annan CL Figur 10.3. CL Segment Rättigheter Ett segment (objekt) eller en underordnad CL Byten mellan olika listor (domän) blir också möjliga, så att tex beroende på i vilken funktion en process befinner sig i så kan rättigheterna vara olika. Rätt använd ger tekniken ett bra skydd mot trojanska hästar, den möjliggör små skyddsdomäner ('least priviledge') och kan integreras med namnhanteringen (av segment). Åtkomstlistorna associerar rättigheter för subjekt per objekt och är funktionellt ekvivalent med cap-listor. Cap-listor har fördelen att de är effektivare att utnyttja vid exekveringen av program (processens domän finns ju samlad där), de förra att de är lättare att administrera. Det är dessa aspekter som gör att åtkomstlistor är vanliga i filsystem, medan domänlistorna är nödvändiga vid skydd av primärminnet. I 'capability'-orienterade system är återkallande ('revocation') av rättigheter till ett objekt omständligt. Detta beror på att flera subjekt kan ha 'capabilities' till samma objekt. Om en rättighet ska tas bort för samtliga subjekt till ett objekt måste systemet söka genom alla 'capability lists'. Ett sätt att förenkla detta återkallande är att använda 'capabilities' indirekt. Dessa pekar ut EN deskriptor som i sin tur pekar ut objektet. Fullständigt återkallande kan då ske genom att ta bort denna deskriptor (O' i figuren). Figur 10.4 visar caps som används indirekt. C' CL(användare) Global segmenttabell Objektet O O' CL(ägare) O C' C Ägaren av O (dvs C) delar ut en begränsad kopia C' till användaren som utnyttjar den indirekt. Figur 10.4. 'Capabilities' för återkallande av rättigheter

244 Selektivt återkallande är fortfarande omständligt. Här har 'access control lists' en definitiv fördel. CL-metoden har ibland kallats biljettorienterad eftersom blotta ägandet av en 'capability' visar rättigheten till ett objekt (tex en plats i en teatersalong). ACL-metoden kallas analogt för listorienterad: Användaren anger sin identitet för en kontrollant som avgör om tjänsten kan utföras genom att konsultera en lista (kan liknas vid passkontrollen i vissa länder). vii. 'Capabilities' med kryptochecksumma. I distribuerade system kan 'capabilities' användas för att definiera och adressera objekt i de ingående delsystemen. En 'capability' kan bestå av följande fyra delar (från det distribuerade operativsystemet Amoeba). Maskin, 48 bits Objekt, 24 bits Rättighet, 8 bits 48 'checkbits' Eftersom dessa skickas via datanät är de utsatta för risker för manipulation. I en 'capability' ingår därför det fjärde fältet, som inte brukar finnas i centraliserade system. Detta kan framställas via kryptering som en MAC beräknad utgående från de första tre fälten. viii. med chiffer. Om X är ett objekt som är krypterat med nyckeln K så innebär det att X är skyddat så länge som K är det. För att få tillgång till K är följande "öppnare" ('openers') R tänkbara. -- 'Or-access'. K öppnas med en av flera tänkbara dechiffreringstransformationer d i. R-or = <e 1 (K),..., e n (K)> -- 'And-access'. I detta fall krävs n stycken d i transformationer för att öppna K. R-and = <e n (... e 1 (K)...)> --- 'Quorum-access'. Ett tredje alternativ är att låta delar K i av K läsas med olika d i. R-quorum = <e 1 (K 1 ),..., e n (K n )> K kan därefter återskapas via t, t < n, stycken K i (ett tröskelsystem). ix. Databasskydd med chiffer. Antag en databas B består av filer F 1,..., F n. Dessa betraktas som heltal. Tanken är att chiffrera databasen så att enstaka filer kan läsas utan att de övriga yppas. Välj n olika primtal m 1,..., m n sådana att m i > F i. Som chiffer väljs ett heltal C sådant att C F i (mod m i ). Ett sådant C existerar enligt CRT. Specifikt: Sätt M = Π m i och M i = M / m i. Vidare låt e i = M i y i, där y i = M i -1 (mod m i ). Chiffret definieras nu av C Σ i [1,n] e i F i (mod M). Heltalen e i kallas skriv-delnycklar ('write subkeys'). För att återfå en fil F k, observera att F k C (mod m k ). Man kallar m k för läs-delnycklar; en (1) sådan behövs för varje fil man vill dechiffrera.

245 x. Skydd och minneshantering i i80486 mfl Arkitekturen understödjer sidindelad segmenterad minneshantering och sk ringskydd. Totala antalet segment är 16 K (2 14 ) varav sex är adresserbara samtidigt, maximal segmentstorlek är 1 M (2 20 ) bytes eller 1 M sidor a 4 Kbytes, dvs 4 Gbytes. Virtuella adressrummet är alltså (maximalt) 2 14+32 bytes (64 terabytes). Ringnumren ligger i [0, 3]. Det fysika minnet kan vara högst 2 32 bytes. Figur 10.5 visar arkitekturens implementering. Observera att man talar om tre olika adressrum: i. Aktuell omgivning/kontext ('current environment/context'): 6*4 Gbytes. ii. Totalt virtuellt adressrum: 64 Tbytes. ii. Fysiskt adressrum: (maximalt) 4 Gbytes; 32 bitars adressbuss till minnet. Det totala virtuella adressrummet nås genom att aktuell omgivning kan varieras genom att omdefiniera innehållet i 6 sk segmentregister; CS (code), SS (stack), DS (data), ES (extra), FS och GS. Klocka 'Reset' Avbrott mm Exekveringsenhet 2 1 3 Instruktionsenhet 4 5 'Memory management unit' 6 8 7 9 Bussanpassning 10 11 1 = Styrenhet med mikroprogramminne 2 = Register 3 = ALU och 'shifter' 4 = Instruktionskö 5 = Instruktionsavkodare 6 = Segmentdeskriptor'cache' 7 = Segmentering 8 = Sidtabell'cache' 9 = Sidindelning 10 = 'Prefetcher' 11 = Buss'control' Adress- och databuss (till minnet) mm Figur 10.5. Layout för processorn 80386 1. Namnrum. För segmentering utnyttjas processorns register CS, SS, DS, ES, FS och GS, som vardera är 16 bitar. CS laddas av operativsystemet med segmentnumret för aktuellt kodsegment, SS med segmentnumret för aktuellt stacksegment; DS ger ett datasegment, de övriga tre definierar extra segment. Alla instruktion[ssekvens]er kan förses med ett s k prefix som anger vilket register och därmed segment som avses. Registerinnehållet tolkas som en s k selektor: - En index (segmentidentifierare) om 13 bitar. - Ett ringnummer om 2 bitar. - En bit som anger om en global (GDT) eller en lokal (LDT) segmenttabell ska användas. GDT beskriver systemsegment, som är gemensamma för alla processer. Varje LDT anger processens egna segment. Totalt har varje process alltså 8 + 8 K segment. Dessutom finns en IDT ('interrupt descriptor table'), som används av avbrottsrutinerna.

246 2. Segmentdeskriptorer. Index-värdet i selektorn pekar ut ett element, en s k deskriptor, i en LDT eller i GDT. En deskriptor omfattar 64 bitar: - 32 bitar som 'basadress' för segmentet. - 20 bitars längdangivelse för segmentet. - 12 kontrollbitar: (2 bitar "reserverade"), varav 1 bit anger om segmenten omfattar 16- eller 32-bitars ord. 1 bit anger om längdangivelsen avser sidor eller bytes. 1 närvarobit. 2 bitars ringnummer. 5 skydds- och typ-bitar. Aktuellt selektorregister väljer ut en deskriptor vilken ger en basadress till vilken adderas instruktionens adressdel, som kan specificeras på en mångfald sätt, för att forma en 32 bitars sk linjär adress. De maximalt sex segmentdeskriptorer som anges av CS, DS etc laddas maskinvarumässigt till mikroprogramkontrollerade register ('caching') i cpu-n så att de kan nås snabbt. I övrigt återfinns segmenttabellerna i primärminnet på plats som anges av processorregister; GDTR, LDTR, IDTR. Systemet kan användas med enbart segmenterat virtuellt minne; alternativt kan segmenten också sidindelas. Om alla deskriptorers basadressfält sätts till 0 eller om bara ett register utnyttjas blir systemet rent sidindelat. Om sidindelningen dessutom deaktiveras erhålls adressering direkt i fysiskt minne. 3. Sidindelning uppnås genom att uppfatta denna 32 bitars linjära adress som bestående av tre fält (sidtabellen sidindelas eftersom den är så stor; 2 20 element): - 'page directory index' (pdi); 10 bitar. - 'page table index' (pti); 10 bitar. - 'offset'; 12 bitar, sidstorlek 4 K. Varje process tilldelas ett fixt 'page directory' vars adress anges av ett processorregister CR3. Elementen i denna katalog pekar ut en sidtabell var i vilka sidoramsnummer återfinns. Indexkomponenterna indexerar i dessa tabeller. 'Offset'-värdet konkateneras till sidoramsnumret för att forma den fysiska adressen. Elementen i de 1 K (10 bitars indices) stora tabellerna består av 32 bitar. Tabellerna är alltså 4 Kbytes och ryms precis i en sida. Vilken tillfällighet! Av dessa anger 20 bitar sidoramsnumret (pfn) och de resterande 12 består av en närvarobit, referensbit, en bit som anger om sidan är ändrad samt skyddsbitar. Vid 'page [table] fault' anges den felande instruktionens adress i CR2. CR1 används inte och CR0 innehåller maskinstatusord och en bit som anger om 'paging' är aktiverad eller ej. Totalt kan alltså det fysiska minnet vara högst 2 20+12 bytes (2 20 sidoramar med storlek 4 K) i samklang med vald vidd av adressbussen. Figur 10.6 sammanfattar. De mest aktuella tripletterna <pdi, pti, pfn> lagras i ett associativt cachemine (i cpu-n) för att snabba upp adressöversättningen. Både detta och de aktuella segmentdeskriptorerna finns i 80386:s cpu-'chip'. 4. Ringskydd. I varje ögonblick innehåller varje selektor ett s k ringnummer för den exekverande processen, medan varje refererat segments ringnummer återfinns i deskriptorn. Dessa par av ringnummer definierar ett hierarkiskt skyddsystem. Läs- och skrivreferenser till eget nummer eller högre är alltid tillåtna, medan referenser "inåt" ger ett fel-'trap'.

247 För att uföra anrop mellan nivåer specificerar call-instruktionen en selektor i stället för en vanlig anropsadress. Selektorn anger en deskriptor som kallas 'call gate'. En skyddsbit i denna anger om anropet är tillåtet. Denna 'call gate'/'gate descriptor' anger kodsegmentets vanliga deskriptor (indirekt adressering). Vidare tillåts endast anrop till platser i som antas representera certifierade anropspunkter. Ringnumren föreslås allokerade så att operativsystemkärnan har nummer 0, systemanrop exekveras på nummer 1, bibliotek på nummer 2 och användarprocesser på nummer 3. Ringskyddet kan ses som en generaliserad form av 'user/supervisor state' och definierar också olika klasser av privilegierade instruktioner. Figur 10.7 visar skyddade proceduranrop via 'call gates'. i call 0 Proceduranrop/instruktion Primärminnet i Register Segmenttabell gate descriptor 16 bitars offset + Aktuell procedur Aktuellt kodsegment Sidindelningen visas inte code descriptor 24 bitars basadress Figur 10.7.Proceduranrop i i80286 5. Sammanfattningsvis innefattar Adresseringsvägen: - Ett prefix till instruktionen som anger ett selektorregister (sex möjligheter). - En selektor med deskriptorindex och ringnummer (16 K möjligheter). - En deskriptor med basadress (32 bitar), åtkomsträttigheter och typmarkering. - En linjär adress som bildas mha basadressen och instruktionens adressdel (32 bitar). - Ett sidoramsnummer (20 bitar) som framställs av två nivåers sidtabeller. - En sidorelativ adress (12 bitar). Åtkomstskyddet: - Ringnummer i selektorerna och i deskriptorerna. - Accessbitar i deskriptorerna. - Längdangivelser i deskriptorerna. - 'Call gate'- typmarkering i deskriptorerna. - Processlokala LDT. - Segmenttyper; kod, data, stack och "extra". Figur 10.6. Adressering och skydd i i80486

248 Segmenteringsdelen Från processorn prefix adress INSTRUKTION/IR 15 3 0 63 51 31 0 IDTR GDTR LDTR CS DS ES FS GS SS CR0 CR2 CR3 i i' ppl ppl' paging on/off page fault addr REGISTERFIL I PROCESSORN i i' diverse base length + 0 8191 Aktuella (6) tabellelement ligger i ett 'segmentation cache' SEGMENT- TABELL diverse = typ- och skyddsbitar, närvarobit, dpl, mm. pdi base + adress pti 31 19 0 pdi 0 offset 31 21 11 0 Aktuella tabellelement ligger i ett 'paging cache' control = närvarobit, rättigheter, rw, refererad, ändrad, user/supervisor state... LINJÄR ADRESS SIDTABELLER 0 control pfn1 pfn1 pti Tabellerna ligger på jämna sidskarvar Max. PM är 4G, 32 bitar Sidindelningen SIDTABELL-KATALOG 1023 pfn2 20 bitar offset 12 bitar Till primärminnet control pfn2 pfn2 31 19 0 FYSISK ADRESS 1023 Ringskydd 2 0 1 3 'Access sector' för process x process y 63 Segmenttabellelement dpl base length... SUBJEKT/PROCESS G/ i ppl Segmentregister; cs, ds, etc L OBJEKT/SEGMENT Vid varje referens kontrolleras att ppl dpl. Om inte så sker 'trap'; 'access violation'. Anrop specialhanteras 0

249 10.3 Accessmatrismodellen Modellen har utvecklats för att systematisera den myriad av tekniker som förekommer och för att kunna syntetisera och analysera konkreta skyddssystem. Modellen består av tillstånd (matriser) och tillståndsövergångar (kommandon). Matrisen definierar ett skyddsystems momentana tillstånd och ges av följande tre delar. - En mängd subjekt ( S = {s}). -- kolumnindex - En mängd objekt ( O = {o}). -- radindex - Sekvenser av rättigheter A[s, o]. -- matriselement Subjekten är systemets aktiva agenter. Beroende på om studieobjektet är maskinvara, operativsystem, programspråk, kommunikationssystem eller databashanterare så ser vi olika subjekt. I operativsystem tänker vi oss vanligen subjekten som instruktioner, funktioner, processer eller användare. Objekten är de element som man avser åtkomstskydda. Exempel på objekt är segment, filer, terminaler och portar. Alla subjekt betraktas som objekt eftersom processer eller funktioner kan referera andra processer eller funktioner eller dessas rättigheter. Elementen A[s, o] anger de operationer som s tillåts utföra på o. En matrisrad brukar kallas ett domän ('protection domain') och definierar samtidigt ett kontext kompletterat med rättigheter. De rättigheter som kan ingå i elementen (sekvenserna) A[s, o] är av tre typer: - För verkställighet av skyddet; read, write, execute, osv - För att flytta rättigheter; own, control, +, * - För att byta matrisrad (domän); enter 10.3.1 Modellens attribut i. Skyddets verkställighet ('enforcement') Rättigheter som beskriver de vanliga operationer som ett subjekt kan utföra på ett objekt: läsa, skriva, lägga till (på filer), starta (processer) osv. Förutsättningar för att skyddet ska kunna upprätthållas är att skyddskontrollen alltid genomförs korrekt. För att detta ska vara möjligt måste subjekt och objekt identifieras korrekt, dvs - entydigt - oförfalskat - alltid. För 'enforcement' brukar det i praktiken finnas en 'protection monitor' för varje typ av objekt: filsystemet för filer, drivrutiner för i/o-enheter, adresseringslogiken för segment, schemaläggaren för processer, sk brandväggar för subnät osv, som kontrollerar om referensen är tillåten eller inte. Den del som påverkar skyddsystemet i sig ('rights movement') kontrolleras av 'kärnan' i skyddsystemet. En operation a som s önskar utförd på o handhas som följer a1. s startar operationen a genom att skicka <s, o, a> till aktuell 'protection monitor'. a2. Denna kontrollerar med skyddsystemet om a A[s, o]. a3. Om så är fallet utförs a, annars sker 'trap' ('access violation'). ii. Förändringar i matrisen ('rights movement'); tillståndsövergångar. De speciella rättigheterna own, control, + och * anger huruvida ett subjekt får ändra ett objekts (subjekts) rättigheter. En ägare kan lägga till rättigheter för subjekt till ett objekt vilket han äger.

250 Control kan användas för att definiera möjligheter att återkalla rättigheter,* för att ange att kopiering av rättigheter är möjlig och + för att ange att rättigheter kan flyttas. Det är denna klass som gör ett skyddsystem dynamiskt. Exempel på regler (kommandon, se nedan) för 'rights movement' är b1. Om own A[s, o] kan s lägga till en godtycklig rättighet till A[s', o] för alla s'. b2. Om control A[s, s'] kan s ta bort en godtycklig rättighet från A[s', o] för alla o. b3. Om *a A[s, o] så kan s lägga till a eller *a i A[s', o] för alla s'. b4. Om +a A[s, o] så kan s flytta a eller +a från A[s, o] till A[s', o] för alla s'. Om objekten är subjekt kan man också införa rättigheter som 'read/write capability'. iii. Domänbyte. Rättigheten som används är enter. Den kan ses som en rättighet att göra ett funktionsanrop som samtidigt ger ett domänbyte. Vi skiftar sas rad i matrisen och erhåller 'domain switching'. c. Om enter A[s, s'] så kan subjektet/processen s anropa subjektet/processen s'. Rättigheten används för att implementera en något generaliserad 'call gate' och betyder i praktiken att en aktiv process/användare omfattar fler subjekt (s, s',...) och att operationen enter s' utförd av s resulterar i ett byte av aktuell rad ('protection domain') från s till s' i matrisen. 10.3.2 Kommandon Matrisen beskriver i varje ögonblick ett specifikt tillstånd hos skyddsystemet. Tillståndsövergångar modelleras av kommandon som sammansätts av primitiva operationer. Följande är ett exempel på en uppsättning primitiva operationer. PRIMITIVA Tilläggande Borttagande OPERATIONER Subjekt create subject s destroy subject s Objekt create object o destroy object o Rättighet enter r into A[s, o] delete r from A[s, o] Tabell 10.1. Primitiva operationer Semantiken kan formuleras i termer av matrisens utseende före och efter de primitiva operationerna. Observera att create subject skapar såväl en ny rad som en ny kolumn i matrisen A. Kommandon består av parametriserade och villkorade sekvenser av primitiva operationer. Som exempel kan följande tre tjäna: command create-file (p, f): command confer-read(x, y, f): create object f if own A[x, f] enter own into A[p, f] then enter read into A[y, f] enter read into A[p, f] enter write into A[p, f] command take-subordinate-read (p,q,m): if control A[p,q] and read A[q,m] then enter read into A[p,m] Figur 10.8 visar matriser före och efter några kommandon.

251 P1 P2 Starttillstånd M1 M2 F1 F2 P1 P2 rwe rwe own rw own re Subjekten är processerna P1 och P2 Objekten är filer (F) och minnessegment (M) och processerna (P) Transitioner Motsvarande sk accessgraf är Antag att följande sekvens utförs create.subordinate (P2, P3, M3) take.subordinate.read (P2, P3, M3) take.subordinate.write (P2, P3,M3) confer.read (P2, P3, F2) own, rw P1 rwe M1 P2 own, re F1 rwe F2 M2 Då erhålls med lämpliga (vilka?) definitioner av dessa kommandon Nytt tillstånd P1 P2 M1 M2 M3 F1 F2 P1 P2 P3 rwe rwe rw own rw own rw control P3 rwe r Figur 10.8. Accessmatrismodellen 10.3.3 Oavgörbarhet i. Läckage och 'safeness'. Ett givet system sägs orsaka läckage med avseende på en rättighet om denna via de givna kommandona kan införas på en plats i matrisen där denna rättighet inte tidigare fanns. Det är dessa läckage som ger systemet dynamik. Om ett läckage uppstår på en plats som strider mot systemets 'policy' så är alltså systemet felaktigt, men om systemet är fritt från oavsiktliga läckage på otillåtna platser kallas det säkert ('safe'). Tyvärr är mängden av möjliga tillstånd så mäktig att frågan om 'safeness' är oavgörbar. Beviset för denna sats kan genomföras genom att påvisa att ett skyddsystem kan simulera en Turingmaskin och att identifiera oavsiktliga läckage(tillstånd) med stopptillstånd i Turingmaskinen. Eftersom stopproblemet för en Turingmaskin är oavgörbart så är alltså läckagefrågan det också. Mängden av system som är 'safe' är alltså inte rekursiv. Resultatet är för en praktiker inte så nedslående som det kan låta: Ett enskilt system (begynnelsetillstånd och mängd kommandosekvenser) kan mycket väl bevisas vara 'safe'. ii. 'Computable functions'. En funktion kallas primitivt rekursiv om den kan framställas från begynnelsefunktioner och ändligt många kompositioner (sammansättningar) och rekursion.

252 Begynnelsefunktionerna är - nollfunktionen Z(x) = 0, för alla x. - alternativt null - successorfunktionen S(x) = x + 1, för alla x - alternativt cons - projektionen P x (x, y) = x. - alternativt car Rekursion har formen (x är en vektor så f är en flervariabelfunktion) f (x, 0) = g (x) f (x, y+1) = h (x, y, f (x, y)), där g och h är givna funktioner. En relation eller en mängd (t ex ett språk) är primitivt rekursiv om dess karakteristiska funktion är primitivt rekursiv. Givet en mängd M definieras dess karakteristiska funktion χ via χ M (x) = 1 om x M. χ M (x) = 0 om x M. Primitivt rekursiva funktioner kan generaliseras till sk rekursiva funktioner med hjälp av en sk minimeringsoperator (if-sats). De kan i sin tur vara totala (definierade överallt) eller partiella (vara odefinierade för vissa argument). De är de partiellt rekursiva funktionerna som är "Turing computable", d v s som kan beräknas m h a en Turingmaskin. En Turingmaskin är, lite slarvigt uttryckt, en finit automat med ett oändligt minne i form av ett/en band/remsa. Automatens tillståndsövergångar består av att läsa denna remsa, skriva ett nytt värde och höger- eller vänsterskifta bandpositionen. De flesta tror att en Turingmaskin är den mest kraftfulla maskin som kan uppfinnas. Stopp-problemet för en Turingmaskin TM och godtyckligt indata w är frågan: "Givet en godtycklig TM, kommer TM att stanna då dess indata är w?" Frågan är oavgörbar i den meningen att det inte finns någon Turingmaskin T' som kan avgöra detta inom ändlig tid, dvs beräkna problemets karakteristiska funktion [Tur36]. En mängd [ett språk] är rekursiv[t] om dess karakteristiska funktion kan beräknas av någon Turingmaskin. En Turingmaskin kan beskrivas som en 6-tupel TM = <K, Γ, δ, q 0, F, R>, där K är en tillståndsmängd, Γ ett symbolalfabet (vanligen representerat av {0, 1}), δ en tillståndsövergångsfunktion, q 0 ett start- tillstånd, F en mängd av sluttillstånd och en remsa (minne, implicit given av Γ) utan begränsning åt höger; exvis 00100111001010111.... Tillståndsövergångsfunktionen är av typen δ (q, x) = <p, y, *> δ: K Γ K Γ {H, V} Funktionen läser x, ändrar tillståndet från p till q, skriver y på x:s plats och skiftar "minnesadressregistret" ett steg * = H(öger) eller V(änster). iii. TM och AMM är ekvivalenta. För att visa att ett accessmatrissystem kan simulera en TM behöver vi representera tillstånd och tillståndsövergångar med hjälp av accessmatriser respektive kommandon. TM-tillståndet q kan representeras av en matris med bara subjekt som rad- och kolumnindex enligt följande regler.

253 - Antag att vi kommit till plats k på remsan och att platser k+1,... är tomma. - Om cell s på remsan innehåller X så låt A[s, s] innehålla X. - Ordna matriselementen genom att sätta tex own i A[s, s+1], för s = 1, 2,..., k - 1. - Sätt end i elementet A[k, k]. - Om remsadressen är s så sätt q i A[s, s] Tillstånd q 1, q own 0, end Figur 10.9. Ett tillstånd En tillståndsövergångsfunktion kan simuleras med kommandon. Exempelvis kan den funktion som ger nytt tillstånd enligt nedan och som motsvaras av följande access matris skrivas som command C qx (s, s'). Turingmaskin Accessmatris Remsa 0 1 1 0 0 own Adress 1 own Turingmaskin Accessmatris Remsa 0 1 Y 0 0 own Adress 1, p own Tillstånd p Y own 0, end Figur 10.10. Ett annat tillstånd command CqX (s, s'): if own in A[s, s'] and q, X in A[s', s'] then delete q, X from A[s', s']; enter Y into A[s', s'] enter p into A[s, s] För att göra simuleringen fullständig måste också högerskift implementeras. I detta fall uppstår två delfall för kommandot; ett fall då vi håller oss inom redan definierad remsa, ett fall då remsan och därmed också matrisen (create subject) utökas. iv. 'Safeness' är oavgörbart. Följer av ovanstående. v. Kommentarer 1. För sk mono-operationella system, d v s system i vilka alla kommandon innehåller endast en primitiv operation, är 'safeness' avgörbart (men NP-fullständigt). För att modellera endast 'transfer of authority' har utvecklats de s k 'take-grant'-systemen. I dessa inkluderas inte subjekten bland objekten och man kan visa att 'safeness' är avgörbart för dessa system. 2. Intresset för åtkomstkontroll var stort i samband med både operativsystem och databassystem och accessmatrismodellen utvecklades för bådadera. För moderna distribuerade system behöver teknikerna baserade härpå kompletteras med kryptotekniker. 3. Ett CL-system uppstår om matrisen representeras radvis. Ett ACL-system erhålls via kolumnvis representation.

254 10.4 'Policy/mechanism' Säkerhetssystemets mekanismer specificeras av begynnelsetillståndet och möjliga sekvenser av kommandon. Systemets policy kan specificeras som en mängd A av auktoriserade tillstånd. Om mekanismerna kan skapa exakt den mängden så sägs systemet vara precist. Om de möjliga tillstånden är en delmängd av A kallas systemet säkert ('secure'). I övrigt finns problem (fel) i specifikationen eller i implementeringen. 10.5 Generiska versus typspecifika rättigheter Rättigheter (operationer, funktioner) som är tillämpbara på objekt av olika typer brukar kallas generiska. Exempel är 'read' som kan avse tex filer, terminaler och brevlådor. Observera att 'extended type objects' tex brevlådor bör ha såväl generiska som typspecifika rättigheter. Rättigheten 'read' kan avse att utnyttjande subjekt har rättighet att läsa representationen av brevlådan, dvs godtyckliga element i brevlådestrukturen: pekare, låsfält och andra attribut. Detta blir då en rättighet som operativsystemet bör besitta. Användarprocesser ska inte tillåtas ha denna rättighet. En användare kan däremot behöva rättigheten 'receive', som innebär att processen tillåts utföra motsvarande brevlådeoperation. Samma resonemang kan föras för alla abstrakta datatyper. Observera att det finns rättigheter som inte går att kontrollera redan vid kompileringen. Speciellt gäller detta dynamiska strukturer eller processer. Typdeskriptorer måste då finnas med under exekveringen. De kan användas endera av ett 'run time system' associerat till språket eller administreras av operativsystemet. Figur 10.11 visar operativsystemdelar som är inblandade vid åtkomstkontroll. 10.6 Brandväggar Begreppet brandvägg ('firewall') står för en åtkomstteknik avpassad för datornät. De verkar genom att filtrera nättrafiken. Olika typer av filter finns; det som karakteriserar just brandväggar är att de opererar på de övre skikten i OSI-stacken. Huvudmålet med brandväggar är att isolera nät från varandra och bilda sk 'security domains'. I TCP/IP-nät sker detta genom att brandväggarna undersöker IP- och TCP-'headers' för ut- och ingående paket. En brandvägg är en speciell form av 'protection monitor' ('reference monitor') och ska alltså som en sådan alltid användas, vara oinkräktbar och tillräckligt liten för att kunna "verifieras". Man brukar räkna med tre typer av brandväggar: - 'screening routers', - 'proxy gateways' - 'guards'. Screening routers filtrerar packet grundat på ip-adresser. Proxy gateways ('bastion hosts') tar även hänsyn till data så att t ex html-filer kan läsas men inte skrivas utifrån. Guards utgör en generalisering av proxies och kan t ex också kontrollera mängden av data som tillåts transporteras, den kan skicka ftp-hämtade filer via en "virus scanner", m m.

255 Subjekt 'Protection monitor' Objekt Attribut (exempel på operation) (predikat) (kan vara subjekt) (predikativt?) S: (f) Filsystemet S: read-file (f) Filer 'Enforcement' S: move d1, [s,w] Adresseringslogik Segment ibid S: send (to process) Schemaläggare Processer ibid S: doio(...) Drivrutin Enhet ibid S: enter (S') Avkodning Instr. 'Domain switching' S:change access right Skyddsystemet 'Rights movement' Kan skriva s r o Accessmatrisen Läser här (som ACL eller CL) Figur 10.11. Allmän översikt av direkt åtkomstkontroll Noter Detta material brukar återfinnas i böcker om operativsystem; t ex [SP97] och [Sta98]. Satsen om skyddsystems oavgörbarhet är från [HRU76]. En klassiker. Bra böcker om brandväggar är [CB94] och [Sta99]. Övningar 10.1. I texten visas hur ett accessmatrissystem kan simulera en Turingmaskin bara "till hälften" genom att endast vänsterskift beaktas. Visa den resterande delen. 10.2. Accesskontroll kan ske med 'authorization lists' ('access control lists', ACL) eller 'capability lists'. Gör en jämförelse mellan metoderna med avseende på att a. förändra (lägga till och ta bort) rättigheter ('rights movement') b. utföra domänbyte ('domain switching'). c. kontrollera rättigheter ('enforcement'). 10.3. Genomför en marknadsundersökning av sk brandväggar ('firewalls').

256 10.4. Den teknik som refereras i avsnitt 10.2.vii är från David Giffords artikel "Cryptographic Sealing for Information Secrecy and Authentication" presenterad vid ACM/SIGOPS 8:e symposium om Operativsystemprinciper, 14-16 december, 1981, i Pacific Grove, CA, USA. Visa hur denna teknik kan användas för att implementera ACL- och CL-metoderna och även informationsflödesskydd, som beskrivs i nästa kapitel. Anmärkning. I en av de första kursinstanserna ingick implementering av denna teknik som "laboration/projekt". 10.5. Varför skydda segment via 'capability lists' med filer via 'access control lists'? 10.6. I SunOS-4.0-dokumentationen rekommenderas att lösenordsfilen ersätts med en publikt läsbar fil /etc/publickey, som för varje användare A innehåller identiteten id(a), As publika nyckel a och As privata nyckel a -1 krypterad med DES och en nyckel k som härleds från As lösenord. När A gör log-in så dekrypterar systemet fram As privata nyckel och kontrollerar att lösenordet var det korrekta. a. Hur går detta till? b. Är det möjligt för en 'hacker' att komma åt As lösenord?