Come modificare le autorizzazioni del Registro di sistema con PowerShell
Il registro di Windows può essere una miniera d’oro per gli aggressori e dipendenti all’oscuro. Non c’è posto più adatto per introdurre vulnerabilità di sicurezza o rovinare completamente un sistema Windows rispetto al registro.
Per controllare le autorizzazioni alle chiavi di registro per motivi di sicurezza e risoluzione dei problemi, è possibile utilizzare alcuni metodi diversi. In questo articolo, imparerai PowerShell. Utilizzando un paio di cmdlet PowerShell e un po’.NET magic, puoi leggere e manipolare le autorizzazioni del registro a tua discrezione.
Che cos’è un’autorizzazione del Registro?
Per questo articolo, un’autorizzazione del registro di sistema è un insieme di voci di controllo di accesso (ACEs) che costituiscono un elenco di controllo di accesso (ACL). Questi ACL si applicano quindi a una chiave di registro.
Gli ACL sono un termine comune tra molte entità in esso contenute e gli ACL assegnati alle chiavi di registro non sono diversi. L’ACL definisce cosa e come un account può accedere a tale chiave di registro.
Un’autorizzazione di registro (ACL) definisce quale account può accedere a una particolare chiave di registro e che tipo di autorizzazioni ha quell’account.
Trovare le autorizzazioni chiave di registro esistenti
Inizia cercando una chiave di registro su cui desideri modificare le autorizzazioni. Sceglierò a caso uno con il percorso di * HKCU:. Puoi scegliere qualsiasi chiave che vorresti provare.
Prima di cambiare qualcosa, è una buona idea vedere qual è l’ACL corrente e fare un backup se le cose vanno male. PowerShell fornisce un cmdlet chiamato Get-Acl che farà proprio questo.
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--
Ora che hai catturato l’ACL esistente, puoi cambiarlo. Se sei preoccupato, puoi persino salvare l’ACL nel file system usando il cmdlet Export-CliXml, ma questo è per un altro giorno.
È possibile vedere un esempio di utilizzo del cmdlet Export-CliXml per salvare oggetti su disco qui.
Creazione di un ACL con PowerShell
Nella sezione precedente, è stato acquisito un ACL con Get-Acl. Dal momento che si sta utilizzando il registro di sistema, questo particolare ACL catturato funziona solo con il registro di sistema. Per aggiornare l’ACL, è necessario aggiungere una regola (ACE) all’ACL destinata al registro.
Quando si definiscono le autorizzazioni per il registro di Windows con PowerShell, è necessario creare un sistema.Sicurezza.AccessControl.Oggetto RegistryAccessRule. Questo oggetto consente di definire criteri come il principale (utente, gruppo, ecc.) che questo ASSO si applica a, livello di accesso, e se hai intenzione di consentire o negare tale accesso.
Definizione del diritto
Il primo passo consiste nell’assegnare i diritti appropriati alla chiave di registro. Ci sono 14 diversi diritti tra cui scegliere. Controlla la tabella in questo documento Microsoft per scoprire il giusto che stai cercando.
Puoi scoprire tutti i diritti possibili digitando:: e premendo il tasto tab. PowerShell passerà in rassegna tutti i diritti disponibili.
Creazione dell’oggetto RegistryAccessRule
Una volta ottenuto il nome corretto corretto, è necessario creare l’oggetto RegistryAccessRule. Questo oggetto ha tre argomenti che dovrai passare ad esso:
- Un’identità (un account Windows)
- Il diritto (ha più oggetti diversi per creare questo)
- Consentire o negare tale diritto
Innanzitutto, creare l’identità creando un sistema.Sicurezza.Principale.NTAccount oggetto passando nel riferimento identità come mostrato di seguito.
$idRef = ("HOSTNAME\username")
Quindi, creare un sistema.Sicurezza.AccessControl.Oggetto RegistryRights utilizzando uno dei diritti nella tabella sopra.
$regRights = ::FullControl
Ora definisci i flag di ereditarietà e propagazione. Qui puoi scegliere tra None, ContainerInherit o ObjectInherit. Puoi trovare maggiori informazioni su queste opzioni qui.
L’impostazione di ereditarietà del frammento seguente è impostata su None, il che significa che non erediterà alcuna autorizzazione dalla chiave di registro padre.
$inhFlags = ::None
$prFlags = ::None
Una volta impostati i flag di ereditarietà e propagazione, impostare il tipo di controllo di accesso enum.
$acType = ::Allow
Infine, creare l’oggetto RegistryAccessRule utilizzando tutti gli oggetti appena raccolti.
$rule = New-Object System.Security.AccessControl.RegistryAccessRule ($idRef, $regRights, $inhFlags, $prFlags, $acType)
Ora hai un RegistryAccessRule definito nella variabile rule rule. Ne avrai bisogno nella prossima sezione.
Aggiunta dell’ACL
Il passaggio successivo consiste nell’aggiungere il RegistryAccessRule creato nella sezione precedente all’ACL corrente utilizzando il metodo AddAccessRule() sull’oggetto ACL afferrato in precedenza.
PS> $acl.AddAccessRule($rule)
Sovrascrivendo un ACL esistente
In alternativa, è anche possibile sovrascrivere completamente l’ACL esistente utilizzando il metodo SetAccessRule ().
PS> $acl.SetAccessRule($rule)
Assegnazione dell’ACL
Ma non hai ancora finito! Non hai effettivamente impegnato il nuovo ACL nella chiave di registro. Per applicare la nuova ACL alla chiave di registro, utilizzare il comando Set-Acl. Per utilizzare il comando Set-Acl, passare l’ACL salvato in ac acl direttamente a Set-Acl mentre si punta alla chiave a cui si desidera applicarla.
Si desidera impostare l’ACL sulla stessa chiave da cui si è raccolto l’ACL originale. Passare quel percorso chiave al parametro Path di Set-Acl per applicarlo.
$acl | Set-Acl -Path 'HKCU:\AppEvents\EventLabels\ActivatingDocument'
L’ACL con la regola di accesso al registro aggiunta è stata applicata alla chiave di registro originale. Ora è possibile verificare che la modifica sia stata apportata chiamando nuovamente Get-Acl e accertandosi che le proprietà IdentityReference, RegistryRights e AccessControlType siano come previsto.
PS> (Get-Acl 'HKCU:\AppEvents\EventLabels\ActivatingDocument').Access
RegistryRights : FullControl
AccessControlType : Allow
IdentityReference : <hostname>\Administrator
IsInherited : False
InheritanceFlags : None
PropagationFlags : None
Sommario
In questo post del blog, hai imparato come acquisire, modificare e commettere gli ASSI agli ACL della chiave di registro. È stato utilizzato il cmdlet Get-Acl PowerShell per trovare gli ACL esistenti e il cmdlet Set-Acl per modificarli. L’utilizzo di questi due cmdlet è quasi tutto ciò che serve per lavorare con le autorizzazioni del registro di sistema in PowerShell.