So ändern Sie Registrierungsberechtigungen mit PowerShell

Die Windows-Registrierung kann eine Goldmine für Angreifer und ahnungslose Mitarbeiter sein. Es gibt keinen Ort, der besser geeignet ist, Sicherheitslücken einzuführen oder ein Windows-System vollständig zu vermasseln, als die Registrierung.

Um die Berechtigungen für Registrierungsschlüssel zu Sicherheits- und Fehlerbehebungszwecken zu steuern, können Sie verschiedene Methoden verwenden. In diesem Artikel lernen Sie PowerShell kennen. Mit ein paar PowerShell-Cmdlets und ein wenig .MIT Magic können Sie die Registrierungsberechtigungen nach eigenem Ermessen lesen und bearbeiten.

Was ist eine Registrierungsberechtigung?

In diesem Artikel ist eine Registrierungsberechtigung eine Gruppe von Zugriffssteuerungseinträgen (ACEs), die eine Zugriffssteuerungsliste (ACL) bilden. Diese ACLs gelten dann für einen Registrierungsschlüssel.

ACLs sind ein gebräuchlicher Begriff unter vielen Entitäten in der IT, und ACLs, die Registrierungsschlüsseln zugewiesen sind, unterscheiden sich nicht. Die ACL definiert, was und wie ein Konto auf diesen Registrierungsschlüssel zugreifen kann.

Eine Registrierungsberechtigung (ACL) definiert, welches Konto auf einen bestimmten Registrierungsschlüssel zugreifen kann und über welche Berechtigungen dieses Konto verfügt.

Vorhandene Registrierungsschlüsselberechtigungen suchen

Suchen Sie zunächst nach einem Registrierungsschlüssel, für den Sie die Berechtigungen ändern möchten. Ich wähle zufällig einen mit dem Pfad *HKCU: . Sie können einen beliebigen Schlüssel auswählen, den Sie ausprobieren möchten.

Bevor Sie etwas ändern, ist es eine gute Idee, die aktuelle ACL zu überprüfen und ein Backup zu erstellen, wenn etwas schief geht. PowerShell bietet ein Cmdlet namens Get-Acl, das genau das tut.

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

Nachdem Sie die vorhandene ACL erfasst haben, können Sie sie ändern. Wenn Sie besorgt sind, können Sie die ACL sogar mit dem Cmdlet Export-CliXml im Dateisystem speichern, aber das ist für einen anderen Tag.

Ein Beispiel für die Verwendung des Cmdlets Export-CliXml zum Speichern von Objekten auf der Festplatte finden Sie hier.

Erstellen einer ACL mit PowerShell

Im obigen Abschnitt haben Sie eine ACL mit Get-Acl erstellt. Da Sie die Registrierung verwenden, funktioniert diese spezielle ACL-Funktion nur mit der Registrierung. Um die ACL zu aktualisieren, müssen Sie der ACL eine Regel (ACE) hinzufügen, die für die Registrierung bestimmt ist.

Wenn Sie Berechtigungen für die Windows-Registrierung mit PowerShell definieren, müssen Sie ein System erstellen.Sicherheit.Zugriffskontrolle.RegistryAccessRule Objekt. Mit diesem Objekt können Sie Kriterien wie den Prinzipal (Benutzer, Gruppe usw.) definieren.), für die diese RICHTLINIE gilt, die Zugriffsebene und ob Sie diesen Zugriff zulassen oder verweigern möchten.

Definieren des Rechts

Der erste Schritt besteht darin, dem Registrierungsschlüssel die entsprechenden Rechte zuzuweisen. Es stehen 14 verschiedene Rechte zur Auswahl. Schauen Sie sich die Tabelle in diesem Microsoft-Dokument an, um das Richtige zu finden, nach dem Sie suchen.

Sie können alle möglichen Rechte entdecken, indem Sie :: eingeben und die Tabulatortaste drücken. PowerShell durchläuft alle verfügbaren Rechte.

Erstellen des RegistryAccessRule-Objekts

Sobald Sie den richtigen richtigen Namen haben, müssen Sie das RegistryAccessRule-Objekt erstellen. Dieses Objekt hat drei Argumente, die Sie an es übergeben müssen:

  • Eine Identität (ein Windows-Konto)
  • Das Recht (hat mehrere verschiedene Objekte, um dies zu erstellen)
  • Dieses Recht zulassen oder verweigern

Erstellen Sie zunächst die Identität, indem Sie ein Konto erstellen.Sicherheit.Principal.NTAccount Objekt, das die Identitätsreferenz wie unten gezeigt übergibt.

$idRef = ("HOSTNAME\username")

Erstellen Sie als Nächstes ein System.Sicherheit.Zugriffskontrolle.RegistryRights-Objekt mit einem der Rechte in der obigen Tabelle.

$regRights = ::FullControl

Definieren Sie nun die Vererbungs- und Ausbreitungsflags. Hier können Sie zwischen None, ContainerInherit oder ObjectInherit wählen. Weitere Informationen zu diesen Optionen finden Sie hier.

Die Vererbungseinstellung des folgenden Snippets ist auf None festgelegt, dh es erbt keine Berechtigungen von seinem übergeordneten Registrierungsschlüssel.

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

Sobald Sie die Vererbungs- und Ausbreitungsflags festgelegt haben, legen Sie die Zugriffssteuerungsart enum fest.

$acType = ::Allow

Erstellen Sie schließlich das RegistryAccessRule-Objekt mit allen Objekten, die Sie gerade gesammelt haben.

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

Sie haben jetzt eine RegistryAccessRule in der Variablen $rule definiert. Sie benötigen dies im nächsten Abschnitt.

Hinzufügen der ACL

Der nächste Schritt ist das Hinzufügen der RegistryAccessRule, die Sie im vorherigen Abschnitt erstellt haben, zur aktuellen ACL mithilfe der AddAccessRule() -Methode für das zuvor aufgerufene ACL-Objekt.

PS> $acl.AddAccessRule($rule)

Überschreiben einer vorhandenen ACL

Alternativ können Sie die vorhandene ACL auch mit der Methode SetAccessRule() vollständig überschreiben.

PS> $acl.SetAccessRule($rule)

Zuweisen der ACL

Aber Sie sind noch nicht fertig! Sie haben die neue ACL nicht tatsächlich an den Registrierungsschlüssel übergeben. Verwenden Sie den Befehl Set-Acl, um die neue ACL auf den Registrierungsschlüssel anzuwenden. Um den Befehl Set-Acl zu verwenden, übergeben Sie die gespeicherte ACL in $acl direkt an Set-Acl, während Sie auf den Schlüssel zeigen, auf den Sie sie anwenden möchten.

Sie möchten die ACL auf denselben Schlüssel setzen, von dem Sie die ursprüngliche ACL erhalten haben. Übergeben Sie diesen Schlüsselpfad an den Pfadparameter von Set-Acl, um ihn anzuwenden.

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

Die ACL mit der hinzugefügten Registrierungszugriffsregel wurde auf den ursprünglichen Registrierungsschlüssel angewendet. Sie können nun überprüfen, ob die Änderung vorgenommen wurde, indem Sie erneut Get-Acl aufrufen und sicherstellen, dass die Eigenschaften IdentityReference, RegistryRights und AccessControlType den Erwartungen entsprechen.

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

Zusammenfassung

In diesem Blogbeitrag haben Sie gelernt, wie Sie ACEs erfassen, ändern und an Registrierungsschlüssel-ACLs übergeben. Sie haben das PowerShell-Cmdlet Get-Acl verwendet, um vorhandene ACLs zu finden, und das Cmdlet Set-Acl, um sie zu ändern. Die Verwendung dieser beiden Cmdlets ist fast alles, was Sie zum Arbeiten mit Registrierungsberechtigungen in PowerShell benötigen.

Leave a Reply

Deine E-Mail-Adresse wird nicht veröffentlicht.