a rendszerleíró Engedélyek módosítása a PowerShell
A Windows rendszerleíró adatbázis aranybánya lehet A támadók és a tanácstalan alkalmazottak számára. Nincs olyan hely, amely jobban megfelelne a biztonsági rések bevezetésének vagy a Windows rendszer teljes elcseszésének, mint a rendszerleíró adatbázis.
a rendszerleíró kulcsok engedélyeinek biztonsági és hibaelhárítási célú vezérléséhez néhány különböző módszert használhat. Ebben a cikkben megtudhatja a PowerShell-t. Néhány PowerShell parancsmag és egy kicsit .NET magic, elolvashatja és manipulálhatja a regisztrációs engedélyeket saját belátása szerint.
mi az a regisztrációs Engedély?
ebben a cikkben a beállításjegyzék-engedély a hozzáférés-vezérlési listát (ACL) alkotó hozzáférés-vezérlési bejegyzések (Ace) halmaza. Ezek az ACL-ek ezután egy rendszerleíró kulcsra vonatkoznak.
az ACL-ek gyakori kifejezés számos entitás között, és a rendszerleíró kulcsokhoz rendelt ACL-ek nem különböznek egymástól. Az ACL meghatározza, hogy egy fiók mit és hogyan férhet hozzá a rendszerleíró kulcshoz.
a beállításjegyzék-engedély (ACL) határozza meg, hogy mely fiók férhet hozzá egy adott beállításkulcshoz, és milyen engedélyekkel rendelkezik az adott fiók.
meglévő beállításkulcs-engedélyek keresése
Kezdje azzal, hogy megkeresi azt a beállításkulcsot, amelyen módosítani szeretné az engedélyeket. Véletlenszerűen kiválasztok egyet a *HKCU:. Bármelyik kulcsot kiválaszthatod, amit ki szeretnél próbálni.
mielőtt bármit megváltoztatna, érdemes megnézni, mi az aktuális ACL, és biztonsági másolatot készíteni, ha a dolgok rosszul mennek. A PowerShell egy get-Acl nevű parancsmagot biztosít, amely éppen ezt fogja tenni.
PS> $acl = Get-Acl 'HKCU:\AppEvents\EventLabels\ActivatingDocument'
PS> $acl.Access
RegistryRights : ReadKey
AccessControlType : Allow
IdentityReference : APPLICATION PACKAGE AUTHORITY\ALL APPLICATION PACKAGES
IsInherited : False
InheritanceFlags : ContainerInherit
PropagationFlags : None
--snip--
most, hogy már a meglévő ACL rögzített, meg lehet változtatni. Ha aggódik, akár az ACL-t is mentheti a fájlrendszerbe az Export-CliXml parancsmag segítségével, de ez egy másik napra szól.
itt láthat egy példát az Export-CliXml parancsmag használatára az objektumok lemezre mentéséhez.
ACL létrehozása a PowerShell
a fenti szakaszban egy ACL-t készített a Get-Acl segítségével. Mivel a rendszerleíró adatbázist használja,ez a rögzített ACL csak a rendszerleíró adatbázissal működik. Az ACL frissítéséhez hozzá kell adnia egy szabályt (ACE) az ACL-hez, amely a rendszerleíró adatbázis számára készült.
amikor a Windows rendszerleíró adatbázis engedélyeit a PowerShell segítségével határozza meg, Létre kell hoznia egy rendszert.Biztonságiak.Hozzáférés-vezérlés.RegistryAccessRule objektum. Ez az objektum lehetővé teszi olyan kritériumok meghatározását, mint a fő (felhasználó, csoport stb.), amelyre ez az ász vonatkozik, a hozzáférés szintje, és ha engedélyezi vagy megtagadja ezt a hozzáférést.
a jog meghatározása
az első lépés a megfelelő jogok hozzárendelése a rendszerleíró kulcshoz. 14 különböző jog közül lehet választani. Nézze meg a Microsoft doc táblázatát, hogy felfedezze a keresett jogot.
az összes lehetséges jogot a :: beírásával és a tab billentyű lenyomásával fedezheti fel. A PowerShell az összes rendelkezésre álló jogot végigviszi.
a RegistryAccessRule objektum létrehozása
miután megkapta a megfelelő nevet, létre kell hoznia a RegistryAccessRule objektumot. Ennek az objektumnak három argumentuma van, amelyeket át kell adnia:
- identitás (Windows-fiók)
- a jobb (több különböző objektummal rendelkezik ennek létrehozásához)
- engedélyezze vagy tagadja ezt a jogot
először hozza létre az identitást egy rendszer létrehozásával.Biztonságiak.Igazgató.NTAccount objektum halad az identitás hivatkozás az alábbiak szerint.
$idRef = ("HOSTNAME\username")
ezután hozzon létre egy rendszert.Biztonságiak.Hozzáférés-vezérlés.RegistryRights objektum a fenti táblázat egyik jogával.
$regRights = ::FullControl
most határozza meg az öröklési és terjedési jelzőket. Itt választhat a None, a ContainerInherit vagy az ObjectInherit között. További információt ezekről a lehetőségekről itt talál.
a következő kódrészlet öröklési beállítása Nincs értékre van állítva, ami azt jelenti, hogy nem örököl semmilyen engedélyt a szülő rendszerleíró kulcsától.
$inhFlags = ::None
$prFlags = ::None
Miután beállította az öröklési és terjesztési jelzőket, állítsa be az enum hozzáférés-vezérlés típusát.
$acType = ::Allow
végül hozza létre a RegistryAccessRule objektumot az összes összegyűjtött objektum felhasználásával.
$rule = New-Object System.Security.AccessControl.RegistryAccessRule ($idRef, $regRights, $inhFlags, $prFlags, $acType)
most már van egy RegistryAccessRule definiálva a $szabály változó. Szüksége lesz erre a következő részben.
az ACL hozzáadása
a következő lépés az előző szakaszban létrehozott RegistryAccessRule hozzáadása az aktuális ACL-hez a korábban megragadott ACL objektum AddAccessRule() metódusával.
PS> $acl.AddAccessRule($rule)
meglévő ACL felülírása
Alternatív megoldásként teljesen felülírhatja a meglévő ACL-t a SetAccessRule() metódus használatával.
PS> $acl.SetAccessRule($rule)
az ACL hozzárendelése
de még nem végeztél! Valójában nem kötelezte el az új ACL-t a rendszerleíró kulcshoz. Az új ACL alkalmazásához a beállításkulcsra használja a Set-Acl parancsot. A Set-Acl parancs használatához adja át a mentett ACL-t $acl-ben közvetlenül a Set-Acl-be, miközben arra a kulcsra mutat, amelyre alkalmazni szeretné.
az ACL-t ugyanazon a kulcson szeretné beállítani, amelyből az eredeti ACL-t összegyűjtötte. Adja át ezt a kulcsútvonalat a Set-Acl Path paraméteréhez annak alkalmazásához.
$acl | Set-Acl -Path 'HKCU:\AppEvents\EventLabels\ActivatingDocument'
a hozzáadott beállításjegyzék-hozzáférési szabályt tartalmazó ACL az eredeti beállításkulcsra lett alkalmazva. Most ellenőrizheti, hogy a módosítás megtörtént-e, ha ismét meghívja a Get-Acl-t, és biztosítja, hogy az IdentityReference, a RegistryRights és az AccessControlType tulajdonságok a vártnak felelnek meg.
PS> (Get-Acl 'HKCU:\AppEvents\EventLabels\ActivatingDocument').Access
RegistryRights : FullControl
AccessControlType : Allow
IdentityReference : <hostname>\Administrator
IsInherited : False
InheritanceFlags : None
PropagationFlags : None
Összegzés
ebben a blogbejegyzésben megtanultad, hogyan kell rögzíteni, megváltoztatni és elkötelezni az ászokat a rendszerleíró kulcs ACL-ekhez. A Get-Acl PowerShell parancsmagot használta a meglévő ACL-ek megkereséséhez, a Set-Acl parancsmagot pedig a módosításhoz. E két parancsmag használata csak annyit kell tennie, hogy a PowerShell regisztrációs engedélyeivel dolgozzon.