Active Directory のセキュリティ権限はActive Directory 扱いが難しいトピックになり得ます。Microsoft はデフォルトで ユーザーとコンピューター 上からそれらを隠しているだけでなく、AD へ権限がどのように適用されているか全体像を把握するための組み込みツールもありません。
この記事では、権限の委任と削除の基本から、内蔵の–ツールを使って委任されている権限を見つける方法、そして最後に AD をスキャンするカスタム PowerShell スクリプトまで順に解説します。
なぜ委任するのですか?
たとえば、あなたが財務、HR、営業、上級管理職といった複数の部門を持つ大企業のトップだとします。すべてのユーザーがパスワードを忘れたたびにITヘルプデスクへ電話しなければならないとしたら、電話対応で手一杯になってしまいます。
その代わりに、各部門の責任者へ権限を委任すれば、その責任者が自分のチームのパスワードをリセットできます。
委任のもう一つの代表的なユースケースは、スタッフが互いになりすましてメールを送れるようにすることです。たとえば共有メールボックスを使う場合や、PA(秘書)が上司の代理としてメールを送る場合などです。
全員に Domain Admin を付与しますか?
「じゃあ、各部門の責任者に Domain Admin 権限を付与しておけば、必要になったときにパスワードをリセットできるでしょ」――そう考えたかもしれません。
これは技術的には事実かもしれませんが、そうなると彼らはあなたができることなら何でもできてしまいます。ユーザーデータへのアクセスも含まれます。 データ漏えい もうすぐ起きます!
AD で権限を委任する方法
もちろん、これを実現する正しい方法は 委任(Delegation) です。これにより、渡したい権限を個別に選択できます。
1. Active Directory を開き Users and Computers そしてお気に入りのテストドメインに接続します。
2. パスワードのリセット権限を付与したい部門の Organisational Unit を右クリックします。
3. 「Delegate Control」オプションを見つけます(これは一覧の最初のオプションのはずです)。それをクリックしてから Next を押します。
4. 次に、委任したいコントロール(操作権限)を誰に委ねるかを、ユーザーまたはグループから選択するよう求められます。これは、そのタスクを実行できるようにしたい相手です。
委任する権限のセットごとにセキュリティグループを作成することを強く推奨します(つまり、「Sales – Password Reset Ability」と「HR – Password Reset Ability」それぞれに対して1つずつ)。こうすることで、将来的に権限を直接いじるのではなく、これらのグループへユーザーを簡単に追加/削除できるようになります。
5. グループを追加します。(下の図では、私たちのシニアマネジメントチームを追加しています。)
6. Next を押し、その後「Reset user passwords and force password change at next logon」を選択します。
7. 「次へ」を押してから「完了」をクリックします。これで完了です!
AD で委任された権限を削除する
これでウィザードが完了したので、「実際に権限を委任できているかの確認方法」と「同じ権限をもう一度削除する方法」について疑問に思うかもしれません。
1. Users and Computers を開き、「表示」メニューをクリックして、「詳細機能(Advanced Features)」がチェックされていることを確認します。
2. このチェックボックスをオンにすると、Active Directory 内のオブジェクトで「プロパティ(Properties)」を選択したときに「セキュリティ」タブが表示されます。
先ほど権限を委任したのと同じ OU を右クリックし、「プロパティ(Properties)」を選択してから「セキュリティ」タブを開きます。
3. 「Advanced」を選択し、先ほど権限を付与したグループが見つかるまで上下にスクロールします。「Access」の下に「Reset Password」の権限が表示されているはずです。
4. この権限を削除したい場合は、それを選択して「Remove」を押すこともできますが、ひとまずそのままにして「Cancel」を押してください。
ご覧のとおり、委任された権限を見つけるのはかなり難しいです。OU だけでなく、セキュリティ グループ、さらにはユーザー オブジェクト自身にも委任できることを考えると、なおさらです。
AD 権限分析をシンプルに
Netwrix Access Analyzer が Active Directory 環境に潜むリスクをどのように明らかにするかをご覧ください
権限ハンティング(DSACLS の使用)
考えておくとよい最悪のシナリオとして、誰かが上司のパスワードをリセットし、実際にそれを行う権限を持っていたのが誰だったのかを突き止める必要がある、というケースがあります。(Netwrix Auditorをインストールしていれば、そこを確認できるかもしれませんが、ここではひとまずインストールされていない前提で進めます。)
1. Users and Computers を開き、権限を確認したいユーザー オブジェクトへ移動します。
2. 右クリックして「Choose Properties」を選択し、続いて「Attribute Editor」
3. スクロールして「distinguishedName」をダブルクリックします。この文字列を後で使うためにコピーしてください。
4. コマンド プロンプトを開き、「dsacls」を入力した後、先ほどコピーした文字列を引用符で囲って貼り付けます:
5. Enter を押します。
6. この時点で、画面に権限が多すぎることにおそらく気づくはずです。選択肢は2つあります:
a. コマンドの末尾に |more を付けて、1画面ずつ完全に表示します。
b. 出力をテキストファイルにパイプで送って、その代わりに > filename.txt.
7. 私は2番目のオプションにして、ファイルをメモ帳で開いたところ、最終的に、上級管理職グループに上司のパスワードをリセットする権限があることが分かりました!
権限の探索(PowerShell を使用)
委任を見つけた今、「過去の従業員、あるいは悪意のある管理者によって、まだ自分の知らない委任が残っているのでは?」と気になっているかもしれません。
各「委任可能」なオブジェクトの種類を検索し、よくある 2 つの権限委任(パスワードのリセットと「send-as」(Exchange から))を一覧表示する短い PowerShell スクリプトを用意しました。
ドメインでの実行例は以下のとおりです:
自分のドメインでこのスクリプトを使うには:
1. Active Directory Users and Computers を開き、調査するドメイン(または組織単位)へ移動します。
2. それを右クリックして、「プロパティ(Properties)」を選択します。
3. 「属性エディター(‘Attribute Editor’)」タブで、「distinguishedName」プロパティを探します。
4. それを選択して「表示(View)」を押し、次に LDAP Path をコピーします。後で必要になります。
5. GitHub からスクリプトのコピーをダウンロードします:
https://raw.githubusercontent.com/thephoton/activedirectory-delegation-searcher/master/search.ps1
6. 右クリックして、PowerShell ISE を使ってスクリプトを編集します。
7. 6 行目($bSearch = …), の DOMAINCONTROLLER を、ドメイン内の DC の 1 つの名前に置き換えます。
8. 6 行目を編集し、LDAP を手順 4 でコピーしたパスに置き換えます。
9. スクリプトを保存して、実行を押します。
10. スクリプトに Active Directory を検索させます。進捗状況はコンソールで報告され、完了すると、権限が委任されているオブジェクトを詳述するポップアップが表示されます。きっと驚くかもしれません!
Active Directory で誰が権限を変更したのかを検出する方法について、さらに情報が必要な場合は、当社の how-to をご確認ください。さらに free tool from Netwrix では、Active Directory とファイル共有において誰が何の権限を持っているのかを、実用的な形で把握できます。
初心者向け Windows PowerShell スクリプト入門チュートリアル
詳しくはこちら共有する
もっと詳しく
著者について
Matt Hopton
コンサルタント
ICT ネットワークマネージャー、IT コンサルタント、そして起業家。Sir Thomas Rich's School でネットワークマネージャーとして働くほか、Matt は地元企業向けの Web サイトを開発・ホスティングし、ソフトウェアを開発し、ハードウェアの推奨も行っています。