Defender for Identity で gMSA を使ってディレクトリ サービスアカウント (DSA) を設定してみた

## はじめに
Microsoft Defender for Identity (MDI) は Active Directory の侵害検出・応答ソリューションです。
MDI を使用するには Active Directory に存在するユーザー アカウントや gMSA を使用して、以下 2 つの管理アカウントを構成する必要があります。
- Directory Service Account (DSA)
- Action Account

**Directory Service Account (DSA)** は主に以下の役割を担います。
- MDI センサーが LDAP を使用してドメイン コントローラーに接続するための資格情報となる
- ドメイン コントローラへのネットワーク トラフィック、監視対象イベント、監視対象の ETW アクティビティに表示されるエンティティに関する情報等の照会
- ドメイン内のエンティティ（ユーザー やグループ、コンピューター等）に対する変更の追跡
- MDI センサーによるLDAP クエリを介した他ドメインのエンティティからのアクティビティ情報の取得
- ローカル管理者グループのメンバーの一覧の取得 ※[SAM-R の設定](URL:https://docs.microsoft.com/ja-jp/defender-for-identity/remote-calls-sam)が別途必要
参考：https://docs.microsoft.com/ja-jp/defender-for-identity/directory-service-accounts#introduction

**Action Account** は主に以下の役割を担います。
- ユーザーの無効化
- ユーザーのパスワードリセット
参考：https://docs.microsoft.com/ja-jp/defender-for-identity/remediation-actions

上記の管理アカウントは gMSA を使用して構成をすることがベストプラクティスとなっています。
そのため、本記事では gMSA の作成方法と DSA の設定について紹介します。

gMSA の公開資料及び詳細は以下をご確認ください。
https://docs.microsoft.com/ja-jp/windows-server/security/group-managed-service-accounts/group-managed-service-accounts-overview


## gMSA を作成する
### 1. KDS ルート キーを確認する
gMSA のパスワードを作成するには [KDS ルート キー](URL:https://docs.microsoft.com/ja-jp/windows-server/security/group-managed-service-accounts/create-the-key-distribution-services-kds-root-key)が必要です。
そのため、まずは KDS ルート キーがドメインに存在するかを確認します。

(1) DC にサインインします。
(2) [Active Directory サイトとサービス] を開きます。
(3) ツールバーで [表示(V)] を選択し、[サービス ノードの表示(S)] にチェックします。
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/668292/64f0b31c-3e75-bdf3-ed44-88e50deb77a6.png)
(4) [Services] を展開し、[Group Key Distribution Service] - [Master Root Keys] の順にクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/668292/40ed016d-9169-cba5-aeff-3c873d9e4406.png)
上記のように [Master Root Keys] が空白の場合、KDS ルート キーを作成する必要があります。

### 2. KDS ルート キーを作成する
(1) ドメイン管理者の権限でドメイン コントローラーにサインインします。
(2) PowerShell を管理者権限で開きます。
(3)以下コマンドを実行します。
```powershell:
add-kdsrootkey -effectivetime ((get-date).addhours(-10))
```
実行結果は以下の通りです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/668292/a1e71846-7f78-d93a-d8e6-f68d2b696d87.png)
また、[Active Directory サイトとサービス] に戻ると KDS ルート キーが増えていることが分かります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/668292/5ac972bc-68b1-a09a-fd98-4bcdbec41ec1.png)

(4) 地理的に分散したドメイン コントローラーがあり、レプリケートに時間がかかる場合は下記のコマンドを実行してください。
※ 下記コマンドを実行することでドメイン コントローラへのレプリケートが完了されているようにするため KDS ルート キーは既定で 10 時間使用できないセーフガードがかかります。
```powershell:
add-kdsrootkey -effectiveimmediately
```
### 3. gMSA を作成する
(1) Active Directory Powershell モジュールを搭載したコンピューターにて、PowerShell を起動します。
(2) 以下のコマンドを実行し、Active Directory の Powershell モジュールをインストールします。
```powershell:
Import-Module -Name ActiveDirectory
```
以下のコマンドを実行することで、事前にシステムにインストールされているモジュールの確認も可能です。
```powershell:
Get-Module -Name ActiveDirectory -ListAvailable
```
(3) 以下のコマンドを実行します。青文字の部分をご自身の環境に合うように修正してください。
```powershell:
# Set the variables
$gMSA_AccountName = 'mdiSvc01'
$gMSA_HostsGroupName = 'mdiSvc01Group'
$gMSA_HostNames = 'DC1', 'DC2', 'DC3', 'DC4', 'DC5', 'DC6', 'ADFS1', 'ADFS2'

# Create the group and add the members
# "Set the variables"で宣言した $gMSA_HostsGroupName のセキュリティグループに $gMSA_HostNames のホストを追加しています
$gMSA_HostsGroup = New-ADGroup -Name $gMSA_HostsGroupName -GroupScope Global -PassThru
$gMSA_HostNames | ForEach-Object { Get-ADComputer -Identity $_ } |
    ForEach-Object { Add-ADGroupMember -Identity $gMSA_HostsGroupName -Members $_ }

# Create the gMSA
# 末尾の PrincipalsAllowedToRetrieveManagedPassword 属性で、gMSA アカウントのパスワードを読み取る権限をセキュリティ グループ $gMSA_HostsGroupName 及びそれに含まれるホストに付与しています
New-ADServiceAccount -Name $gMSA_AccountName -DNSHostName "$gMSA_AccountName.$env:USERDNSDOMAIN" -PrincipalsAllowedToRetrieveManagedPassword $gMSA_HostsGroupName
```
(4) ドメイン コントローラーにて管理者権限でPowershell を立ちあげ以下コマンドを実行します。
これにより既存の Kerberos チケットを消去し、ドメイン コントローラーが新しい Kerberos チケットを要求するよう強制します。
```powershell:
klist purge -li 0x3e7
```

(5) 各サーバーにてローカル管理者権限で Powershell を立ち上げ、以下コマンドを実行します。
これにより gMSA アカウントをインストールします。
```powershell:
# Install the required PowerShell module:
Import-Module -Name ActiveDirectory

# Install the gMSA account
Install-ADServiceAccount -Identity 'mdiSvc01'
```
(6) 今後 DC や ADFS の役割を持つコンピューターが増えた場合は $gMSA_HostsGroupName で名称を定義したセキュリティ グループにホストを追加するオペレーションを確立してください。

## gMSA の権限を編集する

MDI センサー サービスは DSA および gMSA アカウントの権限を偽装して LocalService として実行されます。
[サービスとしてのログオン] ポリシーにて gMSA アカウントにアクセス許可が付与されていない場合、権限の偽装は失敗し「ディレクトリ サービスのユーザー資格情報が正しくありません」という正常性アラートが表示されます。
上記を回避するためにgMSA へ **[1. [サービスとしてのログオン] 権限の付与](URL:https://docs.microsoft.com/ja-jp/defender-for-identity/directory-service-accounts#verify-that-the-gmsa-account-has-the-required-rights-if-needed)** を行います。
これは MDI センサーを導入したホストを対象に設定します。

また、横移動のアラートを検出するために **[2. SAM-R に必要なアクセス許可の構成](URL:https://docs.microsoft.com/ja-jp/defender-for-identity/remote-calls-sam)** と **[3. ネットワーク経由でのアクセス許可の構成](URL:https://docs.microsoft.com/ja-jp/defender-for-identity/remote-calls-sam#access-this-computer-from-the-network-setting)** を行います。 
この設定により、DSA は特定のマシンのローカル管理者を識別できるようになります。
これはドメイン コントローラーを除くすべてのドメイン参加端末を対象に設定します。

最後に、**[4. 削除済みオブジェクトへのアクセス許可の構成](URL:https://docs.microsoft.com/ja-jp/previous-versions/windows/it-pro/windows-server-2008-R2-and-2008/cc816824(v=ws.10)#to-modify-permissions-on-a-deleted-object-container)** を行います。
これにより、削除されたオブジェクトの監視が可能になります。

### 1. [サービスとしてのログオン] 権限の付与
(1) まず各ドメイン コントローラーにて「サービスとしてログオン」可能なサービスに関する設定内容を使用しているポリシーに応じて確認します。
- ローカル ポリシーを使って設定している場合
[ファイル名を指定して実行(R)] をクリックし、「secpol.msc」と入力して実行します。
[セキュリティの設定] - [ローカル ポリシー] - [ユーザー権利の割り当て] - [サービスとしてのログオン] の順に遷移し、設定内容を確認します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/668292/f432a4e7-8ad6-61c9-59ca-c45ea2481801.png)


- グループ ポリシーを使って設定している場合
[ファイル名を指定して実行(R)] をクリックし、「rsop.msc」と入力して実行します。
[コンピューターの構成] - [Windows の設定] - [セキュリティの設定] - [ローカル ポリシー] - [ユーザー権利の割り当て] - [サービスとしてのログオン] の順に遷移し、設定内容を確認します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/668292/50622e48-d7c5-9b4a-ef57-b6a1e5a4f413.png)

(7) **Default Domain Controllers Policy** を開きます。[コンピューターの構成] - [ポリシー] - [Windows の設定] - [セキュリティの設定] - [ローカル ポリシー] - [ユーザー権利の割り当て] - [サービスとしてのログオン] の順に遷移し、(6) にて確認したサービス アカウントと作成した gMSA アカウント(今回は'mdiSvc01')を追加します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/668292/38a02923-eea7-6df9-9bd4-dd683e89841c.png)

### 2. SAM-R に必要なアクセス許可の構成
ドメイン コントローラー以外のすべての端末にて SAM-R のアクセス許可を構成している GPO が存在する場合は (4) から始めてください。

(1) ドメインコント ローラー以外の Windows 10, Windows Server 2016 以降のコンピューターからなる OU を準備します。
ない場合は以下手順で新規作成します。
1. [Active Directory ユーザーとコンピューター] を開きます。
1. ドメイン名を右クリックし、[新規作成] - [組織単位 (OU)] の順にクリックします
1. 任意の名称の OU を作成します。（例: mdisamr）
1. ドメインコント ローラー以外の Windows 10, Windows Server 2016 以降のコンピューターを OU に追加します。

(2) [グループ ポリシーの管理] を開きます。
(3) [グループ ポリシー オブジェクト] を右クリックし、[新規] を選択します。任意の GPO 名を付けます。
(4) (3) で作成した GPO を右クリックし、[編集] を選択します。
(5) [コンピューターの構成] - [ポリシー] - [Windows の設定] - [セキュリティの設定] - [ローカル ポリシー] - [セキュリティ オプション] - [ネットワーク アクセス - SAM をリモート呼び出しできるクライアントを制限する] をクリックします。
[セキュリティの編集] をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/668292/eca2de65-3ac1-affd-db46-cb1f7dc537e7.png)
(6) 既存の設定がある場合はそれに DSA (今回は'mdiSvc01')を追加し、新規に作成した GPO の場合はNTAUTHORITY/SYSTEM と BUILTIN\Administrators、DSA を追加し保存します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/668292/855b57bc-02f0-5e0a-59ff-b8307b4d51f0.png)

### 3. ネットワーク経由でのアクセス許可の構成
(1) Default Domain Policy やそのほかのポリシーにて、[コンピューターの構成] - [ポリシー] - [Windows の設定] - [セキュリティの設定] - [ローカル ポリシー] - [ユーザー権利の割り当て] - [ネットワーク経由でのアクセス] が定義されていないかを確認します。
**定義されていない場合は、設定をせず終了となります。**
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/668292/a657eae1-7a67-f48c-3c79-26a31822ea00.png)
(2) 定義されている場合は、DSA を承認済みアカウントに追加します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/668292/85fe4450-ce43-fb94-eadf-9ccd05d8e6d4.png)

今回、「Windows 10, Windows Server 2016 以降」を対象に GPO を作成・適用したのは[Windows 10, Windows Server 2016 以降のコンピューターで NTAUTHORITY/SYSTEM と BUILTIN\Administrators にのみ SAM-R 権限を付与するポリシーがハードコードされている](URL:https://docs.microsoft.com/ja-jp/windows/security/threat-protection/security-policy-settings/network-access-restrict-clients-allowed-to-make-remote-sam-calls#%E3%83%9D%E3%83%AA%E3%82%B7%E3%83%BC%E5%90%8D%E3%81%A8%E3%83%AC%E3%82%B8%E3%82%B9%E3%83%88%E3%83%AA%E5%90%8D)からです。

### 4. 削除済みオブジェクトへのアクセス許可の構成
(1) コマンドプロンプトを管理者権限で立ち上げます。
(2) 以下のコマンドを実行して、削除されたオブジェクトコンテナーへの所有権を確認します。
```cmd:
dsacls "CN=Deleted Objects,DC=Contoso,DC=com" /takeownership
```
(3) 以下のコマンドを実行して、gMSA に削除されたオブジェクトコンテナーへのアクセス権を付与します。
```cmd:
dsacls "CN=Deleted Objects,DC=Contoso,DC=com" /G CONTOSO\mdiSvc01$:LCRP
```
(4) 完了すると以下のような画面が得られます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/668292/aae241d7-ea19-6d01-8129-51825c22fb44.png)

## MDI センサーを DC にインストールする

(1) グローバル管理者の権限で https://portal.atp.azure.com/ にアクセスします。
(2) [構成] - [システム | センサー] の順に遷移します。[ダウンロード] をクリックし、「Azure ATP Sensor Setup.zip」をダウンロードします。5 ~ 10 ほどかかるので待ちます。
このときアクセスキーをコピーしてエディタに貼り付けておきます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/668292/e9ba6ed9-935b-6c62-b1d1-81dc08399cc9.png)
(3) フォルダを解凍し、DC に配置します。フォルダ内には以下ファイルが入っていることが分かります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/668292/74dfff50-dfff-ee83-002e-0f62f5480a27.png)
(4) [コントロール パネル] - [プログラム] - [プログラムと機能] - [プログラムのアンインストールまたは変更] の順に遷移します。過去に Azure ATP 等を使用している場合は、winpcap が動いている可能性があり後継の npcap がうまく稼働しない可能性があるため確認します。
winpcap がある場合はアンインストールします。
(5) 「npcap-1.00-oem」を実行します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/668292/7603fd0e-99fc-4a22-b82a-665964b2284c.png)
(6) [Install] をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/668292/be858d7c-40ea-9ff0-4042-561e10232b18.png)
(7) npcap のインストールが完了しました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/668292/d5b16ef9-b559-896d-8626-ac6bcc130894.png)
先ほど立ち上げたコントロールパネルを見ると、npcap が増えていることが分かります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/668292/758285a5-6392-08e3-ddfd-e2e79235f3fb.png)
(8) 続けて、「Azure ATP Sensor Setup」を実行します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/668292/b24b785f-28a2-8305-5e6b-cc90ddc215cc.png)
(9) [言語を選択:] にて「日本語」を選択し、[次へ] をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/668292/7ed60283-b242-7603-8d28-f82dc26dbd86.png)
(10) 自動判定されたセンサーのタイプを確認し、[次へ]をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/668292/eddb05d9-4050-d6bd-c9b7-8eb2611e97c4.png)
(11) (2) でコピーしたアクセスキーを貼り付け、[インストール] をクリックします。
インストールパス C:\Program Files\Azure Advanced Threat Protection Sensor を確認します。
※ 
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/668292/fb1a17b7-e7f6-6501-aad9-5cd4b746c061.png)
(13) インストールが完了しました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/668292/fe1a5422-99e7-d45f-a212-3a2a8b742b40.png)
(14) 以下 2 つのサービスが MDI によって胃実行されていることがタスク マネージャーよりわかります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/668292/1030799b-d4d7-5820-d292-8a316aed9b1d.png)

## DSA を MDI 管理ポータルにて設定する
(1) グローバル管理者の権限で https://security.microsoft.com/ にアクセスします。
※https://portal.atp.azure.com/ でも可能ですが、こちらのポータルサイトでの設定方法を以下に紹介します。
(2) [設定] - [ID] - [全般 | ディレクトリ サービス アカウント] の順に遷移します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/668292/387db4fb-cbec-b970-cf3b-c4e458aae8c3.png)
(3) [+ 資格情報の追加] をクリックして、「アカウント名」「ドメイン」を入力します。このとき「アカウント名」の末尾に必ず「$」をつけてください。
「グループ管理サービスアカウント」のチェックボックスにを入れ、[保存] をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/668292/014a3e24-0b19-8cfd-e946-ed59c9710668.png)
(4) [設定] - [ID] - [全般 | ディレクトリ サービス アカウント] に戻り、センサーが問題なく実行されていることを確認します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/668292/0e3e303e-8766-d604-efc7-364b8f3dab3e.png)

(5) センサーに異常があった場合、[設定] - [ID] - [全般 | 正常性の問題] にて確認できます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/668292/7d71ff73-84d3-2c6f-7848-a2b537ebb0b9.png)

## さいごに
以上で gMSA を使ったディレクトリ サービスアカウント (DSA)の設定は完了となります。
次回は gMSA を使ったアクション アカウントの設定、デモをできればと思います。

本記事は以下の Blog を参考に検証・作成しました。
- https://windowsmanagementexperts.com/microsoft-defender-for-identity-group-managed-service-account-setup/microsoft-defender-for-identity-group-managed-service-account-setup.htm
- https://www.varonis.com/blog/powershell-active-directory-module
- https://docs.microsoft.com/ja-jp/defender-for-identity/directory-service-accounts