Ugrás a tartalomhoz

Operációs rendszerek mérnöki megközelítésben

Benyó Balázs, Fék Márk, Kiss István, Kóczy Annamária, Kondorosi Károly, Mészáros Tamás, Román Gyula, Szeberényi Imre, Sziray József

Panem Kiadó

2.5. Védelem és biztonság

2.5. Védelem és biztonság

Védelemnek nevezzük eljárásoknak és módszereknek azon rendszerét, mely lehetőséget teremt a számítógép erőforrásainak programok, folyamatok, illetve felhasználók által történő elérésének szabályozására. A védelem fogalmát fontos megkülönböztetnünk a rendszer biztonságának (vagy biztonságosságának) fogalmától. A rendszer biztonsága annak a mértéke, hogy mennyire lehetünk bizonyosak a számítógépes rendszer, illetve a rendszerben tárolt adatok sérthetetlenségében. Míg a védelem szigorúan a rendszer belső problémája, kizárólagosan csak a rendszeren belüli objektumokkal foglakozik, addig a rendszer biztonságának biztosításakor figyelembe kell venni a rendszer működési környezetét, amelyből a rendszerünket potenciális támadások érhetik. Természetesen a két témakör szervesen összefügg, hiszen minden biztonsági rendszer feltételez egy megfelelően működő védelmi mechanizmust, amire építhet.

2.5.1. Védelem

A védelemről beszélve célszerű szétválasztani a védelem módszerét és a védelem szabályrendszerét. A védelem szabályrendszere meghatározza, hogy mit kell tenni a rendszer zökkenőmentes biztonságos használatához, míg a védelem módszere (vagy mechanizmusa) lehetőséget teremt a szabályozás megvalósítására, vagyis a rendszerobjektumok kezelésének módját határozza meg.

2.5.1.1. Védelmi tartományok

Védelmi szempontból a számítógépes rendszereket tekinthetjük úgy, mint objektumok, illetve az objektumokat használó folyamatok halmazát. Az objektumok ebben a modellben lehetnek mind szoftver komponensek (például fájlok, programok, szemaforok stb.), mind pedig hardver komponensek (például CPU, memória, nyomtató stb.). Az objektumok egyedi névvel érhetők el a rendszerben, és mindegyiken az objektumra jellemző műveletek végezhetők. Például egy fájlt a fájl nevével és az elérési útjával azonosítunk. A fájlon végezhető tipikus műveletek, például olvasás, írás, végrehajtás. A rendszermodellt általánosan tekinthetjük úgy, hogy az objektumok absztrakt adattípusok, amin végezhető műveletek függenek az adott objektum típusától.

A folyamatok működése a fenti modellben gondolkodva nem más, mint a fent definiált absztrakt adattípusok példányain végzett műveletek sorozata. A rendszert biztonságossá tehetjük, ha az objektumokon végzett műveletek végrehajtását jogosítványokhoz kötjük. Természetesen egy folyamat végrehajtásához szükségünk van a folyamat által használni kívánt objektum elérését lehetővé tevő jogosítványra, ami az objektumon végzendő műveletet engedélyezi. A rendszer abszolút biztonságosan működik, ha minden pillanatban minden folyamat pontosan csak azokkal a jogosítványokkal rendelkezik, ami feltétlenül szükséges az aktuálisan végzett művelet végrehajtásához, hiszen ha más objektumot próbálna elérni a folyamat, vagy az adott objektumot nem megengedett módon használná, a számítógép védelmi rendszere azonnal jelezne. (A szabályozásnak ezt a formáját ún. need-to-know szabályozásnak – szükséges, hogy ismerje, elérje szabályozásnak – nevezik.) Ez az ideális szabályozás a valóságban nem valósítható meg elsősorban a szükséges tetemes rendszeradminisztráció miatt.

Az objektumok elérésének szabályozására az ún. védelmi tartományok szolgálnak. A védelmi tartomány nem más, mint jogosítványok gyűjteménye objektumokon végezhető műveletek végrehajtására. Egy védelmi tartomány tartalmazhat jogosítványt egyazon objektum többféle művelettel történő elérésére, illetve egy objektum-művelet páros akár több különböző tartományban is szerepelhet. A védelmi tartományokat a legegyszerűbben táblázatos formában, az ún. elérési mátrix segítségével ábrázolhatjuk. A 2.17. ábra egy statikus elérési mátrixot mutat. A táblázatból kiolvashatjuk például, hogy csak a B tartományban tartózkodó folyamat jogosult nyomtatni a nyomtatón, vagy azt, hogy az A tartományban tartózkodó folyamat két fájlt olvashat: az adat.txt-t és a help.bat-ot.

Egy rendszerben használhatunk

  • dinamikus és

  • statikus

2.18.ábra. táblázat - Elérési mátrix dinamikus védelmi tartományokkal

  

Objektumok

  

adat.txt

doc.doc

help.bat

nyomtató

Tartományok

A

olvasás

 

olvasás

 

B

   

nyomtatás

C

 

olvasás

végrehajtás

 

D

olvasás, írás

 

olvasás, írás

 

védelmi tartományokat attól függően, hogy egy folyamathoz tartozó védelmi tartomány változik-e a folyamat végrehajtása során. Ha nem változhat, statikus, míg az ellenkező esetben dinamikus védelmi tartományról beszélünk.

Dinamikus védelmi tartományok használatakor szabályozni kell a védelmi tartomány váltásának illetve megváltoztatásának módját. Több módszer létezik ennek megvalósítására.

  • Védelmi tartomány váltás (switch). A legegyszerűbb módszer, hogy definiálják, mely védelmi tartományból mely védelmi tartományba léphet át egy folyamat. Ennek ábrázolása lehetséges az előbb megismert elérési mátrixban is. A 2.18. ábra első sorában például láthatjuk, hogy az A jelű tartományból csak a B jelű tartományba léphetünk át, a B jelű tartományból a C és a D jelű tartományokba léphet a folyamat, míg a C jelű tartományból nem lehetséges a védelmi tartomány megváltoztatása.

  • Elérési jogosítványok másolása (copy). Lehetséges, hogy a rendszer engedélyezi egy bizonyos objektumon történő művelet végrehajtására vonatkozó jogosítvány másolását egy adott védelmi tartományban. Ez azt jelenti, hogy az adott védelmi tartományban futó folyamat jogosult az általa birtokolt, egy adott művelet elvégzésére szóló jogosítványt odaadni más védelmi tartományoknak.

  • Objektumok tulajdonlása (owner). Az előző másolási jogot általánosíthatjuk. Kijelölhetünk egyes védelmi tartományokat, melyek ún. tulajdonosi joggal rendelkeznek egy adott objektum felett, ami azt jelenti, hogy az általuk birtokolt objektumon végezhető bármelyik műveletre adhatnak jogosítványt egy másik tartománynak.

4.6.ábra. táblázat - A centralizált rendszer rétegstruktúrája

  

Objektumok

Tartományok

  

adat.txt

doc.doc

help.bat

printer

A

B

C

D

 

A

olvasás

 

olvasás

  

váltás

  

B

   

nyomtatás

  

váltás

váltás

C

 

olvasás

végre-hajtás

     

D

olvasás írás

 

olvasás írás

 

váltás

   

2.5.1.2. Elérési mátrix ábrázolása és kezelése

Egy valós rendszerben igen sok objektum és nagyon sok védelmi tartomány létezhet, azonban egy-egy tartomány általában csak néhány objektum elérésére tartalmaz jogosítványokat. Az elérési mátrix ennek megfelelően egy igen nagy, de ritka mátrix, melynek optimális tárolására és kezelésére számos különböző módszert használnak.

Globális tábla

A globális tábla a legegyszerűbb tárolási mód. Egyszerűen a rendszer tárolja a <tartomány, objektum, műveletvégzési jog> hármasokat, vagyis egy­sze­rűen egy listába gyűjti az elérési mátrix kitöltött elemeit. (A 2.17. ábra el­ső sora alapján például a következő két elemet tárolná a rendszer: <A, adat.txt, olvasás>, <A, help.bat, olvasás>.) A módszer hibája, hogy az adódó lista igen hosszú egy valós rendszerben, ami hosszadalmassá teszi a táblázaton végzett műveleteket (keresés, beszúrás, változtatás). A műveletek elvégzését gyakran a háttértár elérése is meghosszabbítja, hiszen nagy táblázat nem fér be teljesen a memóriába.

Objektumelérési lista

Ennél a módszernél az elérési mátrixot lényegében az oszlopai mentén feldaraboljuk, és az oszlopok tartalmát tároljuk. Van egy listánk a rendszerben létező összes objektumokról, és minden objektumhoz tároljuk a hozzá tartozó <tartomány, műveletvégzési jog> párokat.

Tartományok jogosítványainak listája

Ennél a módszernél az elérési mátrixot a sorai mentén daraboljuk fel, és a sorok tartalmát tároljuk. A rendszerben létezik egy lista a védelmi tartományokról, és minden tartományhoz tároljuk a hozzá tartozó <objektum, műveletvégzési jog> párokat.

Zár–kulcs (lock–key) módszer

A zár–kulcs módszer átmenet az előző két módszer között. Minden objektumhoz tartoznak egyéni bitminták. Ezek töltik be a zár szerepét. Hasonlóan, minden védelmi tartomány rendelkezik egy vagy néhány bitmintával. Ezek töltik be a kulcs szerepét. Ha egy tartomány bitmintája egyezik az objektum bitmintájával, vagyis a tartomány egyik kulcsa illeszkedik az objektum zárjába, azt jelenti, hogy a tartományt birtokló folyamat elvégezheti a kulcshoz tartozó műveletet.

Mint említettük, a globális tábla módszer nehézkes, így a gyakorlatban ritkán használják. A objektum elérési lista használata gyorsítja a jogosultság ellenőrzését és annak elérését az objektum alapján. A tartományok jogosítványainak tárolása viszont a tartományok szerinti elérést támogatja, ami hasznos lehet egy folyamat jogainak meghatározásakor. Látható, hogy más-más szituációkban használható ki a két módszer előnyös tulajdonsága, emiatt ez utóbbi módszereket gyakran kombinálják.

Vegyünk egy példát. Tételezzük fel, hogy a védelmi tartományok egyszerűen folyamatokhoz kötődnek, minden folyamatnak van egy védelmi tartománya. Ha egy folyamat először kezdeményezi egy objektum elérését, ellenőrzi a rendszer az objektum elérési listájában, hogy a folyamat végezheti-e az adott műveletet. Ezek után a rendszer ad egy elérési jogosítványt a folyamatnak, aminek segítségével az objektumon történő további műveletvégzéskor már igazolni tudja a jogosultságát. Ezt a módszert használja például a UNIX-rendszer fájlok elérésekor.

A fájlok használatát minden esetben a fájl megnyitásának kell megelőznie, mikor is a folyamat köteles megadni a fájl adatain kívül a fájlon végzendő művelet típusát is. A megnyitás során az operációs rendszer ellenőrzi a folyamat fájlra vonatkozó jogosultságait. Ha a folyamat számára engedélyezett műveletet kíván végezni, az operációs rendszertől kap egy fájlleírót, melynek használatával további ellenőrzés nélkül érheti el a kívánt fájlt. Természetesen a fájlleíró csak a kért művelettípus végrehajtására alkalmas, a rendszer minden alkalommal ellenőrzi ezt.

Az elérési mátrix ábrázolási módszerek közül a zár–kulcs mechanizmus a leghatékonyabb módszer. Ennek használata rugalmas, a kulcsok egyszerűen adhatók át a tartományok között, a zár egyszerű megváltoztatásával megvonhatók jogosultságok, illetve a jogosultság ellenőrzése is gyors, hiszen nem szükséges nagy tömegű adatot mozgatni. Ez a módszer előnyei miatt gyorsan terjed a modern rendszerekben.

2.5.2. Biztonság

Egy számítógépes rendszer biztonsága, mint korábban már meghatároztuk, annak a bizonyosságnak mértéke, hogy a rendszer, illetve a rendszerben tárolt információ nem sérülhet meg vagy illetéktelenül nem kerülhet ki a rendszerből. A védelemmel ellentétben, aminek biztosítása szigorúan a rendszer belső problémája, a rendszer biztonságának meghatározásakor szükség van a rendszer környezetének a vizsgálatára is. Míg a védelem esetén programhibák illetve programok nem kívánt mellékhatásai, vagyis véletlen események ellen kell a folyamatokat megvédeni, addig a biztonság biztosításakor feltételezni kell szándékos és rosszindulatú támadásokat is a rendszer ellen.

A számítógépes rendszerek biztonságáról beszélve nemcsak technikai, hanem rendszerszervezési, rendszeradminisztrációs kérdésekkel is foglalkoznunk szükséges. Technikailag tökéletes biztonságú rendszerben tárolt adatok is könnyűszerrel elérhetővé válnak egy támadó számára, ha nem biztosítunk megfelelő fizikai védelmet a rendszernek. Ha például a rendszer adattárolói a megfelelő védelem hiányában egyszerűen kivehetők a rendszerből és egy másik, védelem nélküli helyen lemásolhatók, a rendszer biztonsága elégtelen, holott az technikailag tökéletes.

A rendszer biztonságát ért sérülések oka lehet szándékos és véletlen. A szándékos támadásoknak három fajtáját különböztetjük meg:

  • adatok illetéktelen olvasása,

  • adatok illetéktelen módosítása,

  • adatok tönkretétele.

A biztonsági rendszer feladata, hogy a szándékos támadások illetve véletlen sérülések ellen védelmet nyújtson. Mivel a gyakorlatban abszolút biztonságos rendszert igen nehéz létrehozni, ezért a gyakorlatban alkalmazott védelmi rendszerek célkitűzése az, hogy a támadó dolgát annyira nehezítse meg, hogy a támadás „költsége” nagyobb legyen, mint a sikeres támadás eredményeként remélt haszon.

2.5.2.1. A felhasználók azonosítása

A számítógépes rendszerhez történő jogosulatlan hozzáférés megakadályozásának első lépése a felhasználók azonosítása. A felhasználók azonosítására több módszer létezik:

  • felhasználó azonosítása személyes tulajdonságai, például ujjlenyomata, retinamintázata, aláírása, kezének erezete stb. alapján

  • felhasználó azonosítása annak birtokában lévő tárgyak, például kulcs, azonosító kártya stb. alapján

  • felhasználó azonosítása csak általa ismert információ, például név, jel­szó, esetleg algoritmus alapján.

A személyes tulajdonság és a tárgyak alapján történő azonosítás esetén a számítógépes rendszer valamilyen speciális periféria (aláírás-scanner, ujjlenyomat digitalizáló, kártyaolvasó stb.) segítségével végzi a felhasználó azonosítását.

A számítógépes rendszerekben a jelszóval történő azonosítás a legelterjedtebb elsősorban azért, mert ez a módszer valósítható meg a legegyszerűbben. A jelszóval történő azonosítás tipikusan két problémát vet fel: ne lehessen a jelszót egyszerűen kitalálni, illetve annak megadásakor azt „kihallgatni”. Gyakori, hogy a felhasználók mások által egyszerűen kitalálható jelszót használnak: például saját login nevüket, házastársuk nevét, születésük dátumát stb. A jelszó kihallgatása történhet egyszerűen annak begépelésekor, de gyakori támadási forma volt a korai hálózati rendszerekben a hálózaton kódolatlanul továbbított jelszók begyűjtése is.

A jelszó kitalálása ellen a következőképen védekeznek a rendszerek:

  • „Nehezen kitalálható” jelszó választására kényszerítik a felhasználót.

  • Jelszó gyakori cseréjére kötelezik a felhasználót. A jelszó érvényessége időben korlátozott a rendszerben, az érvényesség lejártával a rendszer kéri a felhasználót jelszavának megváltoztatására. Általában a rendszerek tárolják a korábban már használt jelszavakat, és ezeket nem engedik megint használni.

Ha nehezen kitalálható jelszót szeretnénk választani, akkor érdemes figyelembe venni, milyen tipikus támadási stratégiák léteznek egy felhasználó jelszavának megfejtésére. Az egyik ilyen támadási stratégia, hogy a támadó a felhasználók által gyakran használt jelszavakkal, illetve a felhasználó nevéből, esetleg más személyes adataiból generált kulcsszavakkal próbálkozik.

Ennek a támadásnak kiküszöbölésére szolgálnak az ún. jelszóellenőrző programok. A rendszer új jelszó megadásakor vagy valamilyen gyakorisággal rendszeresen lefuttatja a jelszóellenőrző programot. Ez mechanikusan végigpróbálja a felhasználó nevéből, ismert adataiból kikövetkeztethető legkézenfekvőbb, illetve a rendszerben mások által gyakran használt jelszavakat. Ha ilyet talál, felszólítja a rendszer a felhasználót jelszavának megváltoz­ta­tására.

A másik gyakori támadási forma, az ún. szisztematikus támadás, amikor a támadó egy szótárból módszeresen végigpróbálgatja az összes benne szereplő szót. Ezt a támadást nagyban segítheti, ha valamilyen módon ismertté válik a jelszó hossza és ez a hossz rövid.

Az ilyen támadások meghiúsítása érdekében a rendszerek általában megszabják a legrövidebb elfogadható jel­szó méretét és megkövetelik legalább néhány nem alfanumerikus karakter (szám vagy jel) illetve nagy­betű használatát.

A szisztematikus támadást nehezíti, ha gyanúsan sok, rövid időn belül ismétlődő hibás belépési kísérlet esetén a rendszer – esetleg átmeneti időre – letiltja a további próbálkozást.

Az előbbieken túl fontos figyelembeveendő szempont amikor a rendszer nehezen megfejthető jelszavak választására készteti a felhasználókat, hogy a jelszó ne legyen annyira nehezen memorizálható, hogy azt a felhasználó ne tudja megjegyezni. Ezzel ugyanis arra ösztönzi a rendszer a felhasználót, hogy a jelszavát valamilyen formában külön tárolja. Ez igen veszélyes lehet, hiszen ebben az esetben a védtelen helyen tárolt jelszó könnyedén illetéktelen kezekbe kerülhet.

A jelszó kihallgatásának megakadályozása a következőképpen történhet:

  • A legegyszerűbb alapvető védekezés, hogy a jelszó megadásakor az nem jelenik meg a képernyőn.

  • A felhasználók jelszavait a rendszer csak a rendszergazda által elérhető védett állomány­ban, vagy kódoltan tárolja. Gyakran alkalmazott megoldás, hogy a rendszer a jelszavakat kódolja olyan, nem invertálható kóddal, mely esetén az eredeti jelszavak a kódolt állomány alapján nem állíthatók vissza. A rendszer egy felhasználó belépésekor a megadott jelszót ugyanazzal az eljárással kódolja, és a kódolt jelszót hasonlítja össze az általa tárolt változattal. Ebben az esetben a kódolt jelszavakat tartalmazó fájl lehet akár mindenki számára elérhető, hiszen abból az eredeti jelszó nem fejthető meg. Ilyen módszert alkalmaz a UNIX-rendszerek többsége a felhasználók jelszavainak tárolására. Annak oka, hogy az utóbbi időkben fejlesztett UNIX-rendszerek esetén a jelszavakat tartalmazó fájl mégsem publikus az, hogy az ilyen tárolás megkönnyíti a korábban már említett szótárt használó szisztematikus támadást, ha a használt kódolás algoritmusa a támadó számára ismert.

A jelszavak lehallgatásának megakadályozása érdekében fejlesztették ki a felhasználó által ismert algoritmussal történő azonosítást. Ebben az esetben létezik egy, a felhasználó és a rendszer által ismert algoritmus, ami általában két, terminálon begépelhető betűsorozatot rendel egymáshoz. A rendszer belépéskor egy véletlen betűsorozatot ad a felhasználónak. A felhasználónak az algoritmust alkalmaznia kell a megadott sorozaton, és annak eredményével kell válaszolnia. Ebben az esetben az esetleges támadó akár tudhatja is a két karaktersorozatot, de azt nem tudja többet használni, mert a rendszer mindig más és más betűsorozatot használ egy felhasználó beléptetésekor. Ez az azonosítási eljárás természetesen akkor működik jól, ha minden felhasználó esetén különbözik a használt algoritmus. Ezt úgy oldja meg a rendszer, hogy az algoritmusnak két bemeneti paramétere van. Az egyik paramétert a rendszer az első belépéskor közli a felhasználóval, és minden alkalommal ezt a paramétert használja a felhasználó azonosításakor a rendszer által minden belépéskor külön generált változó paraméterrel együtt.

2.5.2.2. A rendszer biztonságát növelő általános módszerek

A rendszer elleni támadások megakadályozásának általános módszere a veszélyeztetett pontok figyelése (threat monitor­ing). Folyamatosan vizs­gálja a rendszer a fel­használók tevékenységét és a gyanús aktivitást jelzi a gép rendszergazdájának vagy a felhasználó­nak. Gyakori például, hogy a felhasználót belépésekor tájékoztatják arról, hogy mikor használta utoljára a rendszert, il­letve az azóta eltelt időben hány sikertelen – hibás jelszavú – belépési kísérlet történt. Gyakori megoldás, hogy a hibás jelszó megadásakor a rendszer mesterségesen lelassul, és egyre hosszabb ideig váratja a felhasználót a jelszó begépelése után, így nehezítve meg a szisztematikus támadást. Még szigorúbb, de gyakori megoldás, hogy a rendszer néhány sikertelen belépési próbálkozás után a felhasználó belépési lehetőségét meghatározott ideig letiltja.

Az esetleges betörések diagnosztizálására szolgál az ún. aktivitás naplózás (audit logging), mely során a rendszer feljegyzi az egyes erő­forrásokhoz történő hozzáférés időpontját, a műveletet végző felhasználót és az erőforráson végzett műveletet. Ez a módszer ugyan nem véd az illetéktelen hozzáférésektől, de az elkövető utólagos azonosítását megkönnyíti.

A rendszer publikus, vagyis több felhasználó által is elérhető csatornán továbbított üzeneteinek lehallgatását megakadályozó módszer a kódolás vagy rejtjelezés (encryption), melynek célja, hogy az üzenetet olyan módon alakítsa át, kódolja, hogy az értelmezhetetlen legyen a csatornát figyelő támadó számára. Az üzenet valódi címzettje valamilyen többletinformáció (ún. kulcs) segítségével képes az üzenet eredeti tartalmát visszaállítani. A rejtjelezés elsődleges felhasználói a katonai alkalmazások, azonban napjainkban a civil szférában is rohamosan terjed a rejtjelezés használata.

A rejtjelezéssel rokon terület az üzenet illetve partner hitelesítés, ami a kommunikációs partner illetve az általa küldött üzenet hitelesítésére szolgál. Egy publikus csatornán érkező üzenet címzettje nem lehet biztos az üzenet küldőjének személyében, illetve abban, hogy az elküldött üzenetet nem változtatta-e meg valaki. Az Interneten például nagyon egyszerű olyan e-mailt küldeni, amelyben nem a tényleges írója van küldőként megnevezve. Az ilyen támadások kivédése érdekében az üzeneteket többletinformációval látják el. Ez lehet a küldőt azonosító ún. elektronikus aláírás (electronic signature), vagy más, a tényleges üzenetből és a küldőt azonosító információból generált kódolt üzenetrész.