PowerShellでレジストリのアクセス許可を変更する方法
Windowsレジストリは、攻撃者や無知な従業員のための金 セキュリティの脆弱性を導入したり、レジストリよりもWindowsシステムを完全にねじ込むのに適した場所はありません。
セキュリティとトラブルシューティングの目的でレジストリキーへのアクセス許可を制御するには、いくつかの異なる方法を使用できます。 この記事では、PowerShellについて説明します。 いくつかのPowerShellコマンドレットと少しを使用します。NET magicは、あなたの裁量でレジストリの権限を読み取り、操作することができます。
レジストリ権限とは何ですか?
この記事では、レジストリのアクセス許可とは、アクセス制御リスト(ACL)を構成するアクセス制御エントリ(Ace)のセットです。 これらのAclは、レジストリキーに適用されます。
Aclは、その中の多くのエンティティの間で共通の用語であり、レジストリキーに割り当てられたAclは違いはありません。 ACLは、アカウントがそのレジストリキーにアクセスできる内容と方法を定義します。
レジストリ権限(ACL)は、特定のレジストリキーにアクセスできるアカウントと、そのアカウントが持つアクセス許可の種類を定義します。
既存のレジストリキーのアクセス許可の検索
まず、アクセス許可を変更するレジストリキーを探します。 私はランダムに*HKCU:のパスを持つものを選びます。 あなたはこれを試してみたい任意のキーを選ぶことができます。
何かを変更する前に、現在のACLが何であるかを確認し、物事がゆがんでいる場合はバックアップを作成することをお勧めします。 PowerShellには、それを行うGet-Aclというコマンドレットが用意されています。
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--
これで、既存のACLをキャプチャしたので、変更できます。 心配な場合は、Export-CliXmlコマンドレットを使用してACLをファイルシステムに保存することもできますが、それは別の日です。
ここでは、Export-CliXmlコマンドレットを使用してオブジェクトをディスクに保存する例を確認できます。
PowerShellを使用したACLの作成
上記のセクションでは、Get-Aclを使用してACLをキャプチャしました。 レジストリを使用しているので、キャプチャされたこの特定のACLはレジストリでのみ機能します。 ACLを更新するには、レジストリ用のルール(ACE)をACLに追加する必要があります。
PowerShellを使用してWindowsレジストリのアクセス許可を定義する場合は、システムを作成する必要があります。セキュリティ。アクセスコントロール…RegistryAccessRuleオブジェクト。 このオブジェクトを使用すると、プリンシパル(ユーザー、グループなど)のような条件を定義できます。 このACEが適用されること、アクセスのレベル、およびそのアクセスを許可または拒否する場合。
権利の定義
最初のステップは、レジストリキーに適切な権利を割り当てることです。 から選択する14の異なる権利があります。 あなたが探している権利を発見するには、このMicrosoft docの表をチェックしてください。
::と入力してtabキーを押すと、すべての可能な権限を検出できます。 PowerShellは、使用可能なすべての権利を循環します。
RegistryAccessRuleオブジェクトの作成
正しい名前を取得したら、RegistryAccessRuleオブジェクトを作成する必要があります。 このオブジェクトには、渡す必要がある3つの引数があります:
- id(Windowsアカウント)
- 権利(これを作成するための複数の異なるオブジェクトがあります)
- その権利を許可または拒否
まず、システムを作成してidを作成します。セキュリティ。校長NTAccountオブジェクトは、以下に示すようにid参照を渡します。
$idRef = ("HOSTNAME\username")
次に、システムを作成します。セキュリティ。アクセスコントロール…RegistryRights上の表のいずれかの権限を使用してオブジェクトを作成します。
$regRights = ::FullControl
継承フラグと伝播フラグを定義します。 ここでは、None、ContainerInherit、またはObjectInheritのいずれかを選択できます。 これらのオプションの詳細については、こちらをご覧ください。
次のスニペットの継承設定はNoneに設定されているため、親レジストリキーからアクセス許可を継承しません。
$inhFlags = ::None
$prFlags = ::None
継承フラグと伝播フラグを設定したら、アクセス制御タイプenumを設定します。
$acType = ::Allow
最後に、収集したすべてのオブジェクトを使用してRegistryAccessRuleオブジェクトを作成します。
$rule = New-Object System.Security.AccessControl.RegistryAccessRule ($idRef, $regRights, $inhFlags, $prFlags, $acType)
Registr rule変数にRegistryAccessRuleが定義されました。 これは次のセクションで必要になります。
ACLの追加
次のステップは、前に取得したACLオブジェクトのAddAccessRule()メソッドを使用して、前のセクションで作成したRegistryAccessRuleを現在のACLに追加することです。
PS> $acl.AddAccessRule($rule)
既存のACLの上書き
または、SetAccessRule()メソッドを使用して既存のACLを完全に上書きすることもできます。
PS> $acl.SetAccessRule($rule)
ACLの割り当て
しかし、あなたはまだ完了していません! 実際には、新しいACLをレジストリキーにコミットしていません。 新しいACLをレジストリキーに適用するには、Set-Aclコマンドを使用します。 Set-Aclコマンドを使用するには、saved aclに保存されたACLを、適用したいキーを指しながらSet-Aclに直接渡します。•元のACLを収集したのと同じキーにACLを設定する必要があります。 そのキーパスをSet-AclのPathパラメータに渡して適用します。
$acl | Set-Acl -Path 'HKCU:\AppEvents\EventLabels\ActivatingDocument'
追加されたレジストリアクセスルールを持つACLが元のレジストリキーに適用されました。 Get-Aclを再度呼び出し、IdentityReference、RegistryRights、およびAccessControlTypeプロパティが期待どおりであることを確認することで、変更が行われたことを確認できるようになりました。
PS> (Get-Acl 'HKCU:\AppEvents\EventLabels\ActivatingDocument').Access
RegistryRights : FullControl
AccessControlType : Allow
IdentityReference : <hostname>\Administrator
IsInherited : False
InheritanceFlags : None
PropagationFlags : None
概要
このブログ記事では、aceをレジストリキー Aclにキャプチャ、変更、およびコミットする方法を学習しました。 既存のAclを検索するにはGet-Acl PowerShellコマンドレットを使用し、Aclを変更するにはSet-Aclコマンドレットを使用しました。 これら二つのコマンドレットを使用すると、PowerShellでレジストリのアクセス許可を操作するために必要な