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ó

6.7. Biztonsági alrendszer

6.7. Biztonsági alrendszer

A Windows NT olyan átfogó és konfigurálható biztonsági szolgáltatáso­kat nyújt, amelyek együttesen kielégítik az USA Védelmi Minisztériuma által a megbízható operációs rendszerekre előírt C2-es szintű biztonsági követel­ményeket. A Windows NT Server és a Windows NT Workstation 3.51 1996. októberben, a Windows NT 4.0 1999. márciusban kapta meg a C2-es biztonsági jóváhagyást.

A biztonsági szolgáltatások és a szükséges alapvető tulajdonságaik a következők:

  • A biztonságos logon (bejelentkezés) lehetősége megköveteli, hogy a felhasználó egyedi logon azonosítóval és jelszóval azonosítsa magát bejelentkezéskor.

  • A tetszőlegesen konfigurálható (discretionary) elérési ellenőrzés lehetővé teszi, hogy egy erőforrás tulajdonosa meghatározza, hogy ki érheti el az erőforrást, és mit tehet vele. Így olyan jogosultságok adhatók, amelyek egy felhasználónak vagy egy felhasználói csoportnak engedélyeznek különböző fajta hozzáférést.

  • A biztonsági auditálás azt a képességet jelenti, amivel a biztonságot érintő események felismerése és feljegyzése történik, beleértve a rendszer-erőforrások létrehozására, elérésére vagy törlésére irányuló lépéseket. Mindez megkönnyíti az illetéktelen akciót végrehajtó személy kinyomozását.

  • A memóriavédelem megakadályozza, hogy egy jogosulatlan processz egy másik folyamat privát virtuális memóriáját elérhesse. Ezen túlmenően a Windows NT garantálja, hogy amikor egy memóriaoldal hozzárendelődik egy felhasználói folyamathoz, ebbe az oldalba soha nem kerülhetnek bele adatok másik folyamattól.

A fenti követelmények teljesítése a Windows NT biztonsági alrendszerén és az ahhoz kapcsolódó komponenseken keresztül valósul meg.

6.7.1. A biztonsági alrendszer komponensei

A Windows NT biztonságát megvalósító legfontosabb komponensek a következők:

  • Biztonsági referencia monitor (SRM: Security Reference Monitor). Ez a komponens az executive-ban van (NTOSKRNL.EXE). Funkciói: az objektumok biztonsági elérésének ellenőrzése, privilégiumok (felhasználói jogok) kezelése, biztonsági auditálási üzenek előállítása.

  • Helyi biztonsági jogosultság ellenőrző (LSA: Local Security Authority) szolgáltatása. Ez egy felhasználói módú folyamat, az LSASS.EXE image-et futtatja, ami a felhasználók bejelentkezési jogait és jelszavát ellenőrzi, a felhasználóknak és csoportoknak adott privilégiumokat, továbbá a biztonsággal kapcsolatos auditálás üzeneteit küldi az események naplójába.

  • LSA adatbázis. Ez az adatbázis tartalmazza a rendszer biztonságos mű­ködésére vonatkozó beállításokat.

  • Biztonsági témaszám kezelő (SAM: Security Accounts Manager) szerver. Ez egy szubrutinok halmazából álló szolgáltató. A szubrutinok a felhasználói neveket és a csoportokat tartalmazó adatbázist kezelik. Ezek a nevek és csoportok vagy a helyi gépre vannak definiálva, vagy – ha a gép egyben tartomány (domain) vezérlő – az adott domainre. Utóbbi esetben a rendszer tartományvezérlő. A SAM az LSASS folyamat környezetében fut.

  • SAM adatbázis. Adatbázis, ami tartalmazza a definiált felhasználókat és csoportjaikat, jelszavukkal és egyéb attribútumaikkal együtt.

  • Logon processz. Felhasználói módú folyamat, amely a WINLOGON.EXE-t futtatja. A folyamat a felhasználói nevet és jelszót veszi át, majd elküldi őket az LSA-hoz ellenőrzés céljából, ezután pedig a kezdeti folyamatot hozza létre.

  • Hálózati logon szolgáltatás. Felhasználói módú szolgáltatás a SER­VICES.EXE processzen belül, amely a hálózati logon kérésekre válaszol. A jogosultságot úgy kezeli, mint a helyi logonokat, azáltal, hogy ellenőrzés végett ezeket is az LSA processzhez küldi el.

Az SRM, ami kernel módban fut, és az LSA, ami felhasználói módban fut, egymás között a helyi eljáráshívás (LPC) révén kommunikálnak.

6.7.2. Az objektumok védelme

Az objektumvédelem a konfigurálható elérési ellenőrzés és az auditálás alapját képezi. A Windows NT-ben védhető objektumok a következők lehetnek: fájlok, hardver eszközök, postázási helyek, elnevezett és névtelen csővezetékek, folyamatok, szálak, események, szemaforok, időmérők, elérési to­ke­nek, ablak-állomások, desktopok, hálózati megosztások, szolgáltatások, illetve nyomtatók.

Mivel a rendszer felhasználói szálba exportált erőforrásai objektumként vannak megvalósítva, a Windows NT objektumkezelője kulcsszerepet kap a biztonsági elérések szervezése során. Annak érdekében, hogy ellenőrizni lehessen, ki manipulálhat egy objektumot, a biztonsági rendszernek mindegyik felhasználó kilétéről tudnia kell. Ez az oka annak, hogy a Windows NT megköveteli a hitelesített logont, mielőtt a felhasználó bármelyik rendszer-erőforráshoz hozzáférne. Amikor egy szál megnyit egy objektumhoz tartozó handle-t, az objektumkezelő és a biztonsági rendszer a hívó biztonsági azonosítóját használja fel annak eldöntésére, hogy a hívó megkaphatja-e a kért handle-t.

A védelemben részesítendő objektumok ún. biztonsági adatokkal (security descriptors) rendelkeznek. Ezek szabják meg, hogy kinek milyen jellegű hozzáférési joga van az objektumhoz. A főbb biztonsági adatok a következők:

  • a tulajdonos biztonsági azonosítója (security ID, SID),

  • a felhasználó csoport biztonsági azonosítója (grup security ID; ezt csak a POSIX használja),

  • konfigurálható elérési lista Azt specifikálja, hogy kinek milyen fajta elérése van az objektumhoz

  • rendszerelérési lista

Azt specifikálja, hogy mely felhasználók mely műveleteit kell felsorolni a biztonsági auditálási naplóba.

Egy elérési token (access token) az az adatstruktúra, amely egy folyamat vagy egy szál biztonsági adatait tartalmazza: a biztonsági azonosítót, azon csoportok listáját, amelyeknek a felhasználó a tagja, valamint a megengedett és letiltott privilégiumok listáját. Mivel az elérési tokenek felhasználói módba vannak exportálva, számos Win32 függvény hoz létre elérési tokeneket, illetve változtat rajtuk.

Mindegyik folyamatnak van egy elsődleges elérési tokenje, amelyet az őt előállító folyamattól örököl. Logonnál az LSA folyamat győződik meg arról, hogy a felhasználói név és a jelszó összhangban van-e az SAM adatbázisában levő információval. Ha igen, akkor az LSA logon folyamatnak visszaad egy elérési tokent a WinLogon, amely ekkor ezt a tokent hozzárendeli a kezdeti folyamathoz a felhasználói területen. A felhasználói területen létrejövő további folyamatok ezt az elérési tokent öröklik.

Az egyes szálaknak szintén lehet saját elérési tokenjük. Ez akkor van így, ha azok egy klienset személyesítenek meg. Ez a képesség lehetővé teszi a szálaknál, hogy olyan elérési tokenjük legyen, ami különbözik a folyamat elérési tokenjétől. Például, a szerver folyamatok tipikusan kliens folyamatokat személyesítenek meg úgy, hogy egy szerver folyamat egy kliensnek a nevében hajt végre műveleteket, a kliens biztonsági adatait használva a saját adatai helyett.

6.7.3. A biztonsági auditálás

Az objektumkezelő auditálási eseményeket tud generálni egy-egy elérési ellenőrzés eredményeként. A Win32-es alkalmazások számára elérhetők olyan API-függvények, melyek segítségével auditálási eseményeket közvetlenül is képesek generálni. A kernel módú kód mindig generálhat auditálási eseményt. Ugyanakkor pedig azok a folyamatok, amelyek auditálási rendszer­szolgáltatást hívnak, a SeAuditPrivilege privilégiummal kell rendelkez­zenek, hogy sikeresen generálhassanak egy auditálási rekordot. Ez a követelmény megakadályozza azt, hogy egy rosszindulatú felhasználói módú program elrontsa a biztonsági naplózást.

Az auditálási rekordok a megérkezésük után azonnal bekerülnek az LSA-nak küldendő rekordok sorába, a rendszer nem várakozik, hogy csomagokban küldje azokat tovább. Az auditálási rekordok az SRM-ről kétféle módon kerülnek át a biztonsági alrendszerhez. Ha a rekord kicsi (kisebb, mint a maximális LPC üzenetméret), akkor LPC üzenetként lesz elküldve. Az audi­tá­lási rekordok az SRM címteréből az LSA folyamat címterébe másolódnak át. Ha a rekord nagy, az SRM megosztott memóriát használ, hogy elérhetővé te­gye az üzenetet az LSA számára. Ilyenkor egyszerűen csak egy pointert továbbít egy LPC üzenetben.

6.7.4. A logon

A logon (bejelentkezés) a WinLogon processz, az LSA, egy vagy több hitelesítő rutin, valamint az SAM közreműködésével megy végbe. A hitelesítő rutinok olyan DLL-ek, amelyek jogosultsági ellenőrzé­seket hajtanak végre.

A WinLogon egy megbízható folyamat, amely a biztonsággal kapcsolatos felhasználói beavatkozásokat kezeli. Koordinálja a logont, kezeli a logoffot, illetve olyan műveleteket irányít, mint a jelszavak bevitele logonnál, jelszavak megváltoztatása, a munkaállomás lezárása és a lezárás megszüntetése. A WinLogon processznek kell biztosítania azt, hogy a biztonsággal kapcsolatos műveletek ne legyenek láthatóak semelyik más aktív folyamat számára. Például, a WinLogon garantálja, hogy egy megbízhatatlan folyamat nem juthat hozzá egy desktop vezérléséhez ezen műveletek során, és ezáltal nem érheti el a jelszót.

A WinLogon az egyetlen folyamat, amely logon kérést fogad a billentyűzetről. Ekkor hívja az LSA-t, hogy az ellenőrizze a felhasználó jogosultságát a bejelentkezésre. Ha a jogosultság fennáll, a logon folyamat egy logon shellt aktivizál a felhasználó számára. A logonban részt vevő komponensek közötti kapcsolatot a 6.26. ábra mutatja be.

6.26. ábra. ábra - A logonban részt vevő komponensek

A logonban részt vevő komponensek


A rendszer inicializálásakor, amikor még egyik felhasználói alkalmazás sem aktivizálódott, a WinLogon olyan lépéseket hajt végre, amiknek eredményeként nála lesz a munkaállomás vezérlése, amikor a rendszer már kész kiszolgálni a felhasználót.

Ide tartozik például az, hogy létrehoz és megnyit három desktopot: egy alkalmazási desktopot, egy WinLogon desktopot és egy képernyő-mentési desktopot. A Winlogon desktop biztonságát az teremti meg, hogy ezt a desktopot egyedül csak a WinLogon képes elérni. A másik két desktop elérése a WinLogonon kívül a felhasználók számára is megengedett. Ez az elrendezés azzal jár, hogy ha a WinLogon desktop aktív, akkor semmilyen más folyamat nem férhet hozzá olyan aktív kódhoz vagy adathoz, amely ezzel a desktoppal van összefüggésben. A Windows NT ezt a megoldást arra használja fel, hogy védje azoknak a műveleteknek a biztonságát, amelyek a jelszó kezelésére, valamint a desktop zárására és a zárás feloldására vonatkoznak.

Miután a WinLogon desktop létrejött az inicializálás során, ő lesz az aktív desktop. Amikor a WinLogon desktop aktív, akkor mindig lezárt állapotban van. A WinLogon csak akkor oldja fel a lezárást, amikor átkapcsol az alkalmazási desktopra, vagy a képernyő-mentési desktopra. Ehhez még megjegyzendő, hogy egyedül csak a WinLogon folyamat képes egy desktopot lezárni vagy a lezárást feloldani.