como alterar as permissões de registro com PowerShell

o registro do Windows pode ser uma mina de ouro para invasores e funcionários sem noção. Não há lugar mais adequado para introduzir vulnerabilidades de segurança ou estragar completamente um sistema Windows do que o registro.

para controlar permissões para chaves de registro para fins de segurança e Solução de problemas, você pode usar alguns métodos diferentes. Neste artigo, você aprenderá o PowerShell. Usando um par de cmdlets PowerShell e um pouco .Net magic, você pode ler e manipular permissões de registro a seu critério.

o que é uma permissão de registro?

para este artigo, uma permissão de registro é um conjunto de entradas de controle de acesso (ACEs) que compõem uma lista de controle de acesso (ACL). Esses ACLs se aplicam a uma chave de registro.

ACLs são um termo comum entre muitas entidades nele, e ACLs atribuídos a Chaves de registro não são diferentes. O ACL define o que e como uma conta pode acessar essa chave de registro.

uma permissão de registro (ACL) define qual conta pode acessar uma chave de registro específica e que tipo de permissões essa conta possui.

encontrar Permissões de Chave de registro existentes

comece procurando uma chave de registro na qual você gostaria de alterar as permissões. Vou escolher aleatoriamente um com o caminho de * HKCU:. Você pode escolher qualquer chave que você gostaria de experimentar isso.

Antes de alterar qualquer coisa, é uma boa ideia ver qual é a ACL atual e fazer um backup se as coisas derem errado. PowerShell fornece um cmdlet chamado Get-Acl que fará exatamente isso.

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

agora que você tem o ACL existente capturado, você pode alterá-lo. Se você estiver preocupado, você pode até salvar o ACL no sistema de arquivos usando o cmdlet Export-CliXml, mas isso é para outro dia.

você pode ver um exemplo de Uso do cmdlet Export-CliXml para salvar objetos no disco aqui.

Criando um ACL com PowerShell

na seção acima, você capturou um ACL com Get-Acl. Como você está usando o registro, esse ACL capturado em particular só funciona com o registro. Para atualizar o ACL, você precisará adicionar uma regra (ACE) ao ACL que é destinado ao registro.

ao definir permissões para o registro do Windows com o PowerShell, você precisará criar um sistema.Seguranca.AccessControl.RegistryAccessRule objeto. Este objeto permite definir critérios como o principal (usuário, grupo, etc.) que este ACE se aplica a, nível de acesso, e se você vai permitir ou negar esse acesso.

definindo o direito

o primeiro passo é atribuir os direitos apropriados à chave do registro. Existem 14 Direitos diferentes para escolher. Confira a tabela neste documento da Microsoft para descobrir o direito que você está procurando.

você pode descobrir todos os direitos possíveis digitando :: e pressionando a tecla tab. O PowerShell percorrerá todos os direitos disponíveis.

criando o objeto RegistryAccessRule

depois de ter o nome correto, você precisará criar o objeto RegistryAccessRule. Este objeto tem três argumentos que você precisará passar para ele:

  • Uma identidade (uma conta do Windows)
  • A direita (tem vários objetos diferentes para criar este)
  • Permitir ou Negar que o direito

Primeiro, criar a identidade através da criação de um Sistema.Seguranca.Principal.NTAccount objeto passando na referência de identidade como mostrado abaixo.

$idRef = ("HOSTNAME\username")

em seguida, crie um sistema.Seguranca.AccessControl.RegistryRights objeto usando um dos direitos na tabela acima.

$regRights = ::FullControl

agora defina os sinalizadores de herança e propagação. Aqui você pode escolher entre None, ContainerInherit ou ObjectInherit. Você pode encontrar mais informações sobre essas opções aqui.

a seguinte configuração de herança do snippet está definida como None, O que significa que ele não herdará nenhuma permissão de sua chave de registro pai.

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

depois de definir os sinalizadores de herança e propagação, defina o tipo de controle de acesso enum.

$acType = ::Allow

finalmente, crie o objeto RegistryAccessRule usando todos os objetos que você acabou de coletar.

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

agora você tem um RegistryAccessRule definido na variável $rule. Você precisará disso na próxima seção.

adicionando o ACL

o próximo passo é adicionar o RegistryAccessRule que você criou na seção anterior ao ACL atual usando o método AddAccessRule() no objeto ACL que você pegou anteriormente.

PS> $acl.AddAccessRule($rule)

sobrescrevendo um ACL existente

Alternativamente, você também pode sobrescrever completamente o ACL existente usando o método SetAccessRule ().

PS> $acl.SetAccessRule($rule)

atribuindo o ACL

mas você ainda não terminou! Na verdade, você não comprometeu o novo ACL com a chave do registro. Para aplicar o novo ACL à chave do Registro, use o comando Set-Acl. Para usar o comando Set-Acl, passe o ACL salvo em $acl diretamente para Set-Acl enquanto aponta para a chave à qual você gostaria de aplicá-lo.

você deseja definir o ACL na mesma chave da qual você reuniu o ACL original. Passe esse caminho de chave para o parâmetro Path do Set-Acl para aplicá-lo.

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

a ACL com a regra de acesso ao registro adicionada foi aplicada à chave de registro original. Agora você pode verificar se a alteração foi feita chamando novamente Get-Acl e garantindo que as propriedades IdentityReference, RegistryRights e AccessControlType sejam como você espera.

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

resumo

nesta postagem do blog, você aprendeu como capturar, alterar e confirmar ACEs para ACLs de chave de registro. Você usou o cmdlet Get-Acl PowerShell para encontrar ACLs existentes e o cmdlet Set-Acl para alterá-los. Usar esses dois cmdlets é quase tudo que você precisa para trabalhar com permissões de registro no PowerShell.

Leave a Reply

O seu endereço de email não será publicado.