jak změnit oprávnění registru pomocí PowerShell
registr systému Windows může být zlatým dolem pro útočníky a bezradné zaměstnance. Neexistuje místo, které by bylo vhodnější pro zavedení bezpečnostních chyb nebo úplné zašroubování systému Windows než registr.
Chcete-li řídit oprávnění ke klíčům registru pro účely zabezpečení a řešení problémů, můžete použít několik různých metod. V tomto článku se dozvíte PowerShell. Pomocí několika rutin PowerShell a trochu .NET magic, můžete číst a manipulovat s oprávněními registru podle svého uvážení.
co je oprávnění registru?
pro tento článek je oprávnění registru sada položek řízení přístupu (ES), které tvoří seznam řízení přístupu (ACL). Tyto ACL se pak vztahují na klíč registru.
ACL jsou běžným pojmem mezi mnoha entitami v něm a ACL přiřazené klíčům registru se neliší. ACL definuje, co a jak může účet přistupovat k tomuto klíči registru.
oprávnění registru (ACL) definuje, jaký účet má přístup ke konkrétnímu klíči registru a jaká oprávnění má tento účet.
hledání existujících oprávnění klíče registru
začněte hledáním klíče registru, na kterém chcete změnit oprávnění. Budu náhodně vybrat jeden s cestou *HKCU:. Můžete si vybrat libovolný klíč, který chcete vyzkoušet.
než něco změníte, je dobré zjistit, co je Aktuální ACL, a vytvořit zálohu, pokud se věci zhorší. PowerShell poskytuje rutinu nazvanou Get-Acl, která to udělá.
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--
Nyní, když máte existující ACL zachycen, můžete jej změnit. Pokud máte obavy, můžete dokonce uložit ACL do systému souborů pomocí rutiny export-CliXml, ale to je na další den.
zde můžete vidět příklad použití rutiny export-CliXml k ukládání objektů na disk.
vytvoření ACL s PowerShell
ve výše uvedené části jste zachytili ACL s Get-Acl. Vzhledem k tomu, že používáte registr, tento konkrétní zachycený ACL pracuje pouze s registrem. Chcete-li aktualizovat ACL, budete muset přidat pravidlo (ACE) do ACL, které je určeno pro registr.
při definování oprávnění pro registr Windows pomocí PowerShell budete muset vytvořit systém.Zabezpečení.AccessControl.RegistryAccessRule objekt. Tento objekt umožňuje definovat kritéria jako hlavní (uživatel, skupina atd.), na které se toto eso vztahuje, úroveň přístupu a pokud tento přístup povolíte nebo odepřete.
definování práva
prvním krokem je přiřazení příslušných práv klíči registru. Na výběr je 14 různých práv. Podívejte se na tabulku v tomto dokumentu společnosti Microsoft a objevte to pravé, které hledáte.
všechna možná práva můžete zjistit zadáním:: a stisknutím klávesy tab. PowerShell bude procházet všemi dostupnými právy.
vytvoření objektu RegistryAccessRule
jakmile budete mít správný správný název, budete muset vytvořit objekt RegistryAccessRule. Tento objekt má tři argumenty, které budete muset předat:
- identita (účet Windows)
- Právo (Má více různých objektů k vytvoření tohoto)
- povolit nebo zakázat toto právo
nejprve vytvořte identitu vytvořením systému.Zabezpečení.Hlaveň.NTAccount objekt procházející v odkazu identity, jak je uvedeno níže.
$idRef = ("HOSTNAME\username")
dále vytvořte systém.Zabezpečení.AccessControl.RegistryRights objekt pomocí jednoho z práv v tabulce výše.
$regRights = ::FullControl
nyní definujte příznaky dědičnosti a šíření. Zde si můžete vybrat mezi None, ContainerInherit nebo ObjectInherit. Více informací o těchto možnostech naleznete zde.
následující nastavení dědičnosti úryvku je nastaveno na None, což znamená, že nezdědí žádná oprávnění z nadřazeného klíče registru.
$inhFlags = ::None
$prFlags = ::None
Jakmile nastavíte příznaky dědičnosti a šíření, nastavte typ řízení přístupu enum.
$acType = ::Allow
nakonec vytvořte objekt RegistryAccessRule pomocí všech objektů, které jste právě shromáždili.
$rule = New-Object System.Security.AccessControl.RegistryAccessRule ($idRef, $regRights, $inhFlags, $prFlags, $acType)
Nyní máte RegistryAccessRule definovanou v proměnné $rule. Budete to potřebovat v další části.
přidání ACL
dalším krokem je přidání RegistryAccessRule, který jste vytvořili v předchozí části, do aktuálního ACL pomocí metody AddAccessRule() na objekt ACL, který jste popadli dříve.
PS> $acl.AddAccessRule($rule)
přepsání existujícího ACL
Alternativně můžete také zcela přepsat existující ACL pomocí metody SetAccessRule ().
PS> $acl.SetAccessRule($rule)
přiřazení ACL
ale ještě jste neskončili! Ve skutečnosti jste nezavázali nový ACL ke klíči registru. Chcete-li použít nový ACL na klíč registru, použijte příkaz Set-Acl. Chcete-li použít příkaz Set-Acl, předejte uložený ACL v $acl přímo do Set-Acl, zatímco ukazujete na klíč, na který chcete použít.
chcete nastavit ACL na stejném klíči, ze kterého jste shromáždili původní ACL. Předejte tuto klíčovou cestu parametru cesta Set-Acl a použijte ji.
$acl | Set-Acl -Path 'HKCU:\AppEvents\EventLabels\ActivatingDocument'
ACL s přidaným pravidlem přístupu k registru byl použit na původní klíč registru. Nyní můžete ověřit, že změna byla provedena opětovným voláním Get-Acl a zajistit, aby Vlastnosti IdentityReference, RegistryRights a AccessControlType byly tak, jak očekáváte.
PS> (Get-Acl 'HKCU:\AppEvents\EventLabels\ActivatingDocument').Access
RegistryRights : FullControl
AccessControlType : Allow
IdentityReference : <hostname>\Administrator
IsInherited : False
InheritanceFlags : None
PropagationFlags : None
shrnutí
v tomto blogu jste se naučili, jak zachytit, změnit a odevzdat esa do ACL klíče registru. Cmdlet get-Acl PowerShell jste použili k nalezení existujících ACL a cmdlet Set-Acl k jejich změně. Použití těchto dvou rutin je téměř vše, co potřebujete pro práci s oprávněními registru v PowerShell.