Windows - Biztonsági szintek használata

WMI 3.rész

forráskód letöltése
A Windows Management Instrumentation (WMI) szolgáltatás segítségével a Windows operációs rendszer gyakorlatilag minden része elérhető. Információkat kérdezhetünk le és bizonyos összetevőket be is állíthatunk. Figyelembe véve, hogy a Windows 2000 szigorú biztonsági előírásokkal rendelkezik, a fejlesztőknek programjaik és szkriptjeik megírása során figyelembe kell venni ezeket. Cikkünkben arról esik szó, hogy a WMI a gyakorlatban milyen megoldásokat kínál a biztonsági szintek beállítására az objektum hozzáférések során. Egy egyszerű példa: az Eseménynapló (Event Viewer) szolgáltatás Biztonsági naplóját (Security Log) nem érhetik el a felhasználók. Ha írunk egy szkriptet, amely kiolvassa a naplóbejegyzéseket és ezt egy rendszergazdai jogosultságokkal rendelkező egyén futtatja, akkor a szkript lefut. Ha viszont ugyanezt a szkriptet egy felhasználó futtatja - hibajelzést fog kapni és nem jut hozzá a naplóadatokhoz. Mindezt a WMI megoldja, de nekünk is van némi tennivalónk programozás közben...
Cikkünkhöz mellékeltünk egy Registry exportállományt, amelyet futtatva visszaállítja a WMI objektumelérések alapértelmezett szintjét.
Az elso alkalommal, amikor egy adott szkripttel végrehajtunk egy objektum hozzáférést, be kell állítanunk a jogosultsági szintet. Figyelembe kell venni, hogy a Windows 2000 kiszolgáló verziók sokkal szigorúbb eloírásokkal rendelkeznek, mint a Professional változat és a Windows XP Professional is szigorúbb Windows 2000-beli névrokonánál. Elofordulhat, hogy ugyanaz a program egyik rendszer alatt muködik, másik alatt nem.
A biztonsági szint beállításának VB szkriptek esetében két módja van. Az egyik a "SWbemSecurity" objektumon keresztüli megvalósítás. Például a következo objektumok végrehajtása során - SWbemLocator, SWbemServices, SWbemObject, SWbemObjectSet, SWbemObjectPath, SWbemLastError, SWbemEventSource - a "Security__" tulajdonság írásával lehet a szintet beállítani és ugyanitt kiolvasni.
Például VB szkriptekben a következo minta sor alkalmazható:
services.Security_.ImpersonationLevel = wbemImpersonationLevelImpersonate
Másik megoldás cikksorozatunk elozo részéhez kötodik. Ott mutattuk be a "Winmgmts" szolgáltatást, amelynek feladata, hogy összekösse a felhasználói alkalmazásokat a WMI objektumokkal. Lehetoséget biztosít továbbá a biztonsági szintek beállítására is a "Getobject" metódusa segítségével. Például:
Set Service = GetObject ( "winmgmts:{impersonationLevel = impersonate,authenticationLevel = pktPrivacy }!root/cimv2" )
VB szkriptbol az alábbi hitelesítési eljárásokat használhatjuk:
Név Értéke Beállítható szint Leírás
wbemAuthenticationLevelDefault 0 Default WMI az alapértelmezett Windows hitelesítési beállításokat alkalmazza.
wbemAuthenticationLevelNone 1 None Nincs hitelesítési eljárás.
WbemAuthenticationLevelConnect 2 Connect Kliens szerver kapcsolat kialakítása során csak a kliens azonosítja magát.
WbemAuthenticationLevelCall 3 Call Kliens szerver kapcsolat kialakítása során a kliens minden egyes kérésénél azonosítania kell magát.
WbemAuthenticationLevelPkt 4 Pkt Minden egyes adatküldésnél a kiszolgáló is azonosítja magát.
WbemAuthenticationLevelPktIntegrity 5 PktIntegrity Hitelesíti és folyamatosan ellenorzi a kiszolgáló és az ügyfél közötti adatforgalmat.
WbemAuthenticationLevelPktPrivacy 6 PktPrivacy Az összes elozo szintet véghezviszi és minden távoli eljárás hívást titkosít.
Íme egy gyakorlati példa a használatára:
Set objservices = GetObject _ ( "WinMgmts:{impersonationLevel = impersonate}!/root/cimv2" )
objservices.Security_.AuthenticationLevel = wbemAuthenticationLevelPktIntegrity
A bevezetoben írtunk arról, hogy adott szkriptet nem mindegy, hogy egy felhasználó vagy egy rendszergazda futtat, ugyanis a futtató személy adataival próbál a szkript a rendszerobjektumokhoz hozzáférni. Ha valaki rendszergazdaként indítja még nem jelenti automatikusan azt, hogy mindenhez hozzá is férhet. Vannak olyan objektumok, amelyeket csak a tulajdonosa vagy a SYSTEM fiók jogosult elérni. Nagyon egyszeru példa az Exchange 2000 Server által kezelt E-mail üzenetek elérése. Alapértelmezésben a legmagasabb szintu rendszergazda (vállalati rendszergazda) is csak korlátozott hozzáférésben részesül.
A hitelesítésen kívül elég gyakran szükséges az Azonosítási szint (Impersonation Level) beállítása is. Foleg COM objektumok WMI-on keresztüli elérésénél. A következo lehetoségeink vannak:
Megnevezés Azonosítási szint Alkalmazási név Leírás
wbemImpersonationLevelAnonymous 1 Anonymous Névtelen azonosítási szint. A futtató adatai rejtve maradnak.
wbemImpersonationLevelIdentify 2 Identify Engedélyezi az elérendo objektumok számára, hogy lekérdezzék a hívó adatait. Ha az objektum nincs erre felkészítve, akkor sikertelen lesz az azonosítás.
wbemImpersonationLevelImpersonate 3 Impersonate Ez az alapértelmezett beállítási szint és erre lesz a leggyakrabban szükség. Muködése során az alkalmazást futtató adatai átadódnak a hívott objektum számára. Ha engedélyezett az egyén hozzáférése sikeres lesz a futtatás, ha nem, akkor hibaüzenet generálódik.
wbemImpersonationLevelDelegate 4 Delegate Csak Windows 2000-ben és az azt követo verziókban áll rendelkezésre. Lényege, hogy bizonyos személyek meghatalmazhatók, bizonyos feladatok elvégzésére. Ehhez és csak ehhez az alapértelmezett jogosultsági szintjüknél magasabb jogokat is kaphatnak.
Alkalmazási példa:
set object = GetObject ( "winmgmts:{impersonationLevel = impersonate} !root\cimv2:Win32_Process.Handle  =  '0' " )
Az alapértelmezett szint a regisztrációs adatbázisban tárolódik. Innen kiolvashatjuk és meg is változtathatjuk. A
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\WBEM\Scripting
kulcs alatt található egy "Default Impersonation Level" nevu duplaszó típusú bejegyzés. Értéke alapesetben "3". A fenti táblázatban látható, hogy ez az "Impersonate" szint, tehát az alkalmazás futtatójának a felhasználói neve és jelszava adódik át egy objektumelérés alkalmával.

WMI cikksorozat