så här ändrar du registerbehörigheter med PowerShell

Windows-registret kan vara en guldgruva för angripare och clueless anställda. Det finns ingen plats som är bättre lämpad för att införa säkerhetsproblem eller helt skruva upp ett Windows-system än registret.

för att styra behörigheter till registernycklar för säkerhets-och felsökningsändamål kan du använda några olika metoder. I den här artikeln lär du dig PowerShell. Använda ett par PowerShell cmdlets och lite .NET magic, du kan läsa och manipulera registerbehörigheter efter eget gottfinnande.

Vad är en Registerbehörighet?

för den här artikeln är en registerbehörighet en uppsättning åtkomstkontrollposter (ACEs) som utgör en åtkomstkontrolllista (ACL). Dessa ACL: er gäller sedan för en registernyckel.

ACL: er är en vanlig term bland många enheter i den, och ACL: er som tilldelats registernycklar är inte annorlunda. ACL definierar vad och hur ett konto kan komma åt den registernyckeln.

en registerbehörighet (ACL) definierar vilket konto som kan komma åt en viss registernyckel och vilken typ av behörigheter det kontot har.

hitta befintliga Registernyckelbehörigheter

börja med att leta efter en registernyckel som du vill ändra behörigheter på. Jag väljer slumpmässigt en med sökvägen till * HKCU:. Du kan välja vilken nyckel du vill prova det här.

innan du ändrar något är det bra att se vad den Nuvarande ACL är och göra en säkerhetskopia om saker går fel. PowerShell tillhandahåller en cmdlet som heter Get-Acl som gör just det.

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

nu när du har tagit den befintliga ACL kan du ändra den. Om du är orolig kan du till och med spara ACL till filsystemet med Export-CliXml cmdlet, men det är för en annan dag.

du kan se ett exempel på att använda Export-CliXml cmdlet för att spara objekt på disken här.

skapa en ACL med PowerShell

i ovanstående avsnitt fångade du en ACL med Get-Acl. Eftersom du använder registret fungerar den här ACL-fångsten bara med registret. För att uppdatera ACL måste du lägga till en regel (ACE) till ACL som är avsedd för registret.

när du definierar behörigheter för Windows-registret med PowerShell måste du skapa ett System.Säkerhet.Åtkomstkontroll.RegistryAccessRule objekt. Med det här objektet kan du definiera kriterier som huvudmannen (användare, grupp etc.) att detta ess gäller, åtkomstnivå, och om du ska tillåta eller neka den åtkomsten.

definiera rätten

det första steget är att tilldela lämpliga rättigheter till registernyckeln. Det finns 14 olika rättigheter att välja mellan. Kolla in tabellen i detta Microsoft-dokument för att upptäcka rätt du letar efter.

du kan upptäcka alla möjliga rättigheter genom att skriva :: och trycka på tab-tangenten. PowerShell kommer att gå igenom alla tillgängliga rättigheter.

skapa RegistryAccessRule-objektet

när du har rätt rätt namn måste du sedan skapa RegistryAccessRule-objektet. Det här objektet har tre argument som du måste skicka till det:

  • en identitet (ett Windows-konto)
  • rätten (har flera olika objekt för att skapa detta)
  • Tillåt eller neka den rätten

skapa först identiteten genom att skapa ett System.Säkerhet.Huvudsaklig.Ntaccount-objekt som passerar i identitetsreferensen som visas nedan.

$idRef = ("HOSTNAME\username")

skapa sedan ett System.Säkerhet.Åtkomstkontroll.RegistryRights objekt med hjälp av en av rättigheterna i tabellen ovan.

$regRights = ::FullControl

definiera nu arv och förökningsflaggor. Här kan du välja mellan None, ContainerInherit eller ObjectInherit. Du kan hitta mer information om dessa alternativ här.

följande snippets arvsinställning är inställd på Ingen, vilket betyder att den inte kommer att ärva några behörigheter från dess överordnade registernyckel.

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

när du har ställt in arv och utbredningsflaggor, ställ sedan in åtkomstkontrolltypen enum.

$acType = ::Allow

slutligen skapa RegistryAccessRule-objektet med alla objekt du just har samlat in.

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

du har nu en RegistryAccessRule definierad i variabeln $ rule. Du behöver detta i nästa avsnitt.

lägga till ACL

nästa steg är att lägga till RegistryAccessRule du skapade i föregående avsnitt till den aktuella ACL med AddAccessRule () – metoden på ACL-objektet du tog tag i tidigare.

PS> $acl.AddAccessRule($rule)

skriva över en befintlig ACL

Alternativt kan du också skriva över den befintliga ACL helt med metoden SetAccessRule ().

PS> $acl.SetAccessRule($rule)

tilldela ACL

men du är inte klar ännu! Du har faktiskt inte begått den nya ACL till registernyckeln. För att tillämpa den nya ACL på registernyckeln, använd kommandot Set-Acl. För att använda kommandot Set-Acl, skicka den sparade ACL i $acl direkt till Set-Acl medan du pekar på nyckeln du vill använda den på.

du vill ställa in ACL på samma tangent som du samlade den ursprungliga ACL från. Passera den nyckelvägen till Sökvägsparametern för Set-Acl för att tillämpa den.

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

ACL med den tillagda registeråtkomstregeln har tillämpats på den ursprungliga registernyckeln. Du kan nu verifiera att ändringen gjordes genom att ringa Get-Acl igen och se till att IdentityReference, RegistryRights och AccessControlType-egenskaperna är som du förväntar dig.

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

sammanfattning

i det här blogginlägget lärde du dig att fånga, ändra och begå ess till registernyckel ACL. Du använde Get-Acl PowerShell cmdlet för att hitta befintliga ACL och Set-Acl cmdlet för att ändra dem. Att använda dessa två cmdlets är nästan allt du behöver för att arbeta med registerbehörigheter i PowerShell.

Leave a Reply

Din e-postadress kommer inte publiceras.