jak zmienić uprawnienia rejestru za pomocą PowerShell

rejestr systemu Windows może być kopalnią złota dla atakujących i nieświadomych pracowników. Nie ma lepszego miejsca do wprowadzania luk w zabezpieczeniach lub całkowitego zepsucia systemu Windows niż rejestr.

aby kontrolować uprawnienia do kluczy rejestru w celach bezpieczeństwa i rozwiązywania problemów, możesz użyć kilku różnych metod. W tym artykule nauczysz się PowerShell. Używając kilku cmdletów PowerShell i trochę .NET magic, możesz czytać i manipulować uprawnieniami rejestru według własnego uznania.

co to jest pozwolenie rejestru?

w tym artykule uprawnienie rejestru to zestaw wpisów kontroli dostępu (Ace), które tworzą listę kontroli dostępu (ACL). Te ACL następnie stosuje się do klucza rejestru.

ACL są powszechnym określeniem wśród wielu podmiotów w IT, A ACL przypisane do kluczy rejestru nie różnią się. ACL określa, co i w jaki sposób konto może uzyskać dostęp do tego klucza rejestru.

uprawnienie rejestru (ACL) określa, jakie konto może uzyskać dostęp do określonego klucza rejestru i jakiego rodzaju uprawnienia ma to konto.

znajdowanie istniejących uprawnień klucza rejestru

zacznij od znalezienia klucza rejestru, dla którego chcesz zmienić uprawnienia. Wybieram losowo jeden ze ścieżką * HKCU:. Możesz wybrać dowolny klucz, który chcesz wypróbować.

zanim cokolwiek zmienisz, dobrze jest sprawdzić, czym jest obecny ACL i zrobić kopię zapasową, jeśli coś pójdzie nie tak. PowerShell udostępnia cmdlet o nazwie Get-Acl, który właśnie to zrobi.

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--

teraz, gdy masz już przechwycony ACL, możesz go zmienić. Jeśli jesteś zaniepokojony, możesz nawet zapisać ACL do systemu plików za pomocą polecenia Export-CliXml, ale to na inny dzień.

tutaj możesz zobaczyć przykład użycia polecenia Export-CliXml do zapisywania obiektów na dysku.

Tworzenie ACL za pomocą PowerShell

w powyższej sekcji przechwyciłeś ACL za pomocą Get-Acl. Ponieważ używasz rejestru, ten konkretny plik ACL przechwycony działa tylko z rejestrem. Aby zaktualizować ACL, musisz dodać regułę (ACE) do ACL, która jest przeznaczona dla rejestru.

definiując uprawnienia do rejestru systemu Windows za pomocą PowerShell, musisz utworzyć System.Ochrona.AccessControl.Obiekt RegistryAccessRule. Obiekt ten umożliwia zdefiniowanie kryteriów takich jak główny (użytkownik, grupa, itd.), że ten ACE ma zastosowanie, poziom dostępu, i jeśli masz zamiar zezwolić lub odmówić tego dostępu.

Definiowanie prawa

pierwszym krokiem jest przypisanie odpowiednich praw do klucza rejestru. Istnieje 14 różnych praw do wyboru. Zapoznaj się z tabelą w tym dokumencie Microsoft, aby dowiedzieć się, czego szukasz.

możesz odkryć wszystkie możliwe Prawa, wpisując:: i naciskając klawisz tab. PowerShell przejrzy wszystkie dostępne prawa.

Tworzenie obiektu RegistryAccessRule

po uzyskaniu prawidłowej nazwy należy utworzyć obiekt RegistryAccessRule. Ten obiekt ma trzy argumenty, które musisz mu przekazać:

  • tożsamość (konto Windows)
  • prawo (ma wiele różnych obiektów do utworzenia tego)
  • Zezwalaj lub odmawiaj tego prawa

najpierw Utwórz tożsamość, tworząc System.Ochrona.Dyrektorze.Obiekt ntaccount przekazujący odniesienie do tożsamości, jak pokazano poniżej.

$idRef = ("HOSTNAME\username")

następnie utwórz System.Ochrona.AccessControl.Rejestrujący obiekt korzysta z jednego z praw wymienionych w powyższej tabeli.

$regRights = ::FullControl

teraz zdefiniuj flagi dziedziczenia i propagacji. Tutaj możesz wybrać między None, ContainerInherit lub ObjectInherit. Więcej informacji na temat tych opcji znajdziesz tutaj.

następujące ustawienie dziedziczenia fragmentu jest ustawione na None, co oznacza, że nie dziedziczy on żadnych uprawnień z klucza rejestru nadrzędnego.

$inhFlags = ::None
$prFlags = ::None

po ustawieniu znaczników dziedziczenia i propagacji, Ustaw typ kontroli dostępu enum.

$acType = ::Allow

na koniec utwórz obiekt RegistryAccessRule, używając wszystkich zebranych obiektów.

$rule = New-Object System.Security.AccessControl.RegistryAccessRule ($idRef, $regRights, $inhFlags, $prFlags, $acType)

masz teraz RegistryAccessRule zdefiniowane w zmiennej $rule. Będziesz tego potrzebował w następnej sekcji.

dodawanie ACL

następnym krokiem jest dodanie RegistryAccessRule utworzonego w poprzedniej sekcji do bieżącego ACL przy użyciu metody AddAccessRule() na obiekcie ACL, który wcześniej przechwyciłeś.

PS> $acl.AddAccessRule($rule)

nadpisywanie istniejącego ACL

Alternatywnie można również całkowicie nadpisać istniejący ACL za pomocą metody SetAccessRule ().

PS> $acl.SetAccessRule($rule)

Przypisywanie ACL

ale jeszcze nie skończyłeś! Nie przypisałeś nowego ACL do klucza rejestru. Aby zastosować nowy ACL do klucza rejestru, użyj polecenia Set-Acl. Aby użyć polecenia Set-Acl, przekaż zapisany ACL w $acl bezpośrednio do Set-Acl, wskazując na klucz, do którego chcesz go zastosować.

chcesz ustawić ACL na tym samym kluczu, z którego zebrałeś oryginalny ACL. Przekaż tę ścieżkę klucza do parametru Path Set-Acl, aby ją zastosować.

$acl | Set-Acl -Path 'HKCU:\AppEvents\EventLabels\ActivatingDocument'

do oryginalnego klucza rejestru zastosowano ACL z dodaną regułą dostępu do rejestru. Możesz teraz sprawdzić, czy zmiana została wprowadzona przez ponowne wywołanie Get-Acl i upewnienie się, że właściwości IdentityReference, RegistryRights i AccessControlType są zgodne z oczekiwaniami.

PS> (Get-Acl 'HKCU:\AppEvents\EventLabels\ActivatingDocument').Access
RegistryRights : FullControl
AccessControlType : Allow
IdentityReference : <hostname>\Administrator
IsInherited : False
InheritanceFlags : None
PropagationFlags : None

podsumowanie

w tym poście na blogu dowiesz się, jak przechwytywać, zmieniać i zatwierdzać asy do ACL klucza rejestru. Użyłeś polecenia Get-Acl PowerShell, aby znaleźć istniejące ACL i polecenia Set-Acl, aby je zmienić. Korzystanie z tych dwóch cmdletów to wszystko, czego potrzebujesz do pracy z uprawnieniami rejestru w PowerShell.

Leave a Reply

Twój adres e-mail nie zostanie opublikowany.