Exchange AD Split Permissionsを後悔なく導入する

メールボックスをすべてクラウドへ移行済みの組織でも、オンプレミスのExchangeサーバーは動き続けていることが多く、それはActive Directoryにとって過小評価されたセキュリティリスクでもあります。「AD Split Permissions」モデルは、攻撃者がドメイン全体の侵害に悪用しうる広範なADの特権をExchangeから取り除きます。これまで導入が進まなかった主な理由は、管理者に強いるプロセス変更でした。本記事では、まさにそのハードルをスマートに乗り越える方法を紹介します。失われたADのアクセス許可を関連するOUにだけ選択的に再付与するスクリプトを使えば、慣れ親しんだ運用をそのままに、セキュリティ上の効果を余さず得られます。

Exchange AD Split Permissionsを後悔なく導入する

TLDR:欠点を取り除いたらどうなるか

Exchangeのユーザー、グループ、連絡先が置かれている場所で、ADとRBACのアクセス許可を直接再付与する方法を見つけました。管理者にもID管理システムにも変更は不要です。私の経験では、この摩擦こそが多くの企業にとって最大の障害でした。それでいて、ラテラルムーブメントとドメイン侵害に対するセキュリティ上の利点はそのまま残ります。

Active Directory

実現は3つのステップです。

  1. AD分割アクセス許可モデルを実装する
  2. 失われたADのアクセス許可を、関連するOUに限定してExchangeサーバーに付与する
  3. 使えなくなったPowerShellコマンドレットを再度有効にするため、Exchange RBACを付与する

いずれもMicrosoftのガイダンス、AD ACL、またはExchange RBACの割り当てによって行います。

発表者がノートパソコンの前に座り、glueckkanjaの「Step 1: Active Directory Permissions」と題されたスライドを解説しています。スライドではMicrosoft Exchange AD Split Permissionsの実装方法として、委任グループを作成するPowerShellコマンド(New-ADGroup、Add-ADGroupMember)と、スクリプトAdd-ExchangeADSplitPermissionOnOU.ps1によるアクセス許可の適用が示されています。
ウェビナー:Exchange AD Split Permissions without regrets. 手順を追った実装ガイド

なぜ今これが重要なのか

Exchange 2010 SP1で導入されて以来、この仕組みはほとんど見過ごされるか無視されてきました。しかし既定の共有アクセス許可モデルは、Active Directoryを乗っ取られる大きなセキュリティリスクです。ここ数年Exchangeがリモートからの攻撃で悪名高いことと合わせると、いま手を打つべき時期です。

問題の出発点は、ドメインのルートに付与され、ドメイン全体へ継承されていく特権にあります。

  • ユーザーとグループのアクセス許可の変更(実質的にフルアクセス)
  • グループメンバーの変更
  • ユーザーのパスワードリセット
  • ユーザーとグループの作成・削除

アクセス許可

AdminSDHolderプロセス(属性admincount=1)で保護されるのは一部の高特権Tier 0ユーザーとグループだけであり、多くの環境には保護されていないユーザーやグループが残ります。それらはドメインやフォレストの侵害につながるか、少なくとも深刻な影響を招く可能性があります。

代表的な例

  • Password Hash Syncを使用している場合のEntra Connect Syncアカウント
  • 既定のグループ
  • 保護されていないカスタムグループや管理・サービスアカウント
    • GPOへの書き込みアクセス許可(ドメインコントローラーに適用されるもの)
    • ADバックアップ、バックアップサーバー、PKIテンプレート、ハイパーバイザーなどへのアクセス管理

これら現在および将来の潜在的な経路をすべて後追いで封じ込めるのは非常に困難です。_ADMというカスタムOUであればACLの継承を無効化できますが、既定のオブジェクトの多くは既定のBuiltin OUやUsersコンテナーから移動できず、脆弱なまま残ります。

ルートから強力なアクセス許可を取り除くほうがはるかに良く、それはActive Directory分割アクセス許可モデルを実装することで実現できます。Configure Exchange Server for split permissions | Microsoft Learn

Microsoftも「…Active Directory分割アクセス許可の実装を推奨します」と述べています。Active Directory Hardening Series - Part 7 – Implementing Least Privilege | Microsoft Community Hub

しかし、なぜ誰もやらないのか

分割アクセス許可はExchange 2010 SP1まで利用できず、その頃には誰もが既定の状態を受け入れていました。登場後もセキュリティチームは導入を押し通せなかったように見えます。

さらに、ADで先にユーザーや配布リストを作成し、その後でExchangeから「メール有効化」するなど、管理プロセスとIDMプロセスの変更を強いるものでもありました。

Info: 次のコマンドレットは利用できなくなるか、動作しなくなります。Add-DistributionGroupMember, New-DistributionGroup, New-Mailbox, New-MailContact, New-MailUser, New-RemoteMailbox, Remove-DistributionGroup, Remove-DistributionGroupMember, Remove-Mailbox, Remove-MailContact, Remove-MailUser, Remove-RemoteMailbox, Update-DistributionGroupMember, Add-ADPermission, Remove-ADPermission

運用変更の例

  • New-Mailbox(ExchangeがADに書き込む)は次のようになります
    • New-ADUser(adm.jdoeがADに書き込む)
    • Enable-Mailbox
  • SendAs権限のためのAdd-ADPermissionは、Active Directoryユーザーとコンピューターのセキュリティタブから行う必要があり、標準の管理者には追加のADアクセス許可が必要になることも多くなります。

後悔しない方法を紹介します

免責事項:以下のリンクと記事を最後まで読んで理解し、まずテスト環境で実施し、ADのバックアップが最新であることと復旧手順が確立されていることを必ず確認してください。

現在の利用状況を監査する

まず、対象のコマンドレットのどれがどのOUで使われているかを確認してください。

$CsvPath = "C:\temp\SplitPermissionAdminAuditLog.csv"
$Cmdlets = "Add-ADPermission","Remove-ADPermission","New-DistributionGroup","Remove-DistributionGroup","Add-DistributionGroupMember","Update-DistributionGroupMember","Remove-DistributionGroupMember","New-Mailbox","Remove-Mailbox","New-RemoteMailbox","Remove-RemoteMailbox","New-MailUser","Remove-MailUser","New-MailContact","Remove-MailContact"
Search-AdminAuditLog -ResultSize 99000 -Cmdlets $Cmdlets | Select-Object RunDate,Caller,ObjectModified,CmdletName,@{Name='CmdletParameters';Expression={[string]::join(",", ($\_.CmdletParameters))}},succeeded,error | Export-Csv -Path $CsvPath -Delimiter ";" -Encoding Unicode -NoTypeInformation

呼び出し元とコマンドレットの簡易分析

$CSVs = Import-Csv -Path $CsvPath -Delimiter ";"
$CSVs | Group-Object Caller
$CSVs | Group-Object CmdletName

CSVを分析し、ADのアクセス許可がどこで必要になるかを把握してください。Exchange関連のグループを専用のOUにまとめておくと、さらに最適化できる場合があります。

分割アクセス許可モデルを有効にする

Configure Exchange Server for split permissions | Microsoft Learn に記載されたMicrosoftの手順**「Switch to Active Directory split permissions」**に従ってください。 (RBAC分割アクセス許可ではありません)

実質的には、**「Exchange Windows Permissions」**グループの危険なアクセス許可が削除され、あわせてExchangeがそのグループのメンバーから外されます。

Setup.exe /IAcceptExchangeServerLicenseTerms_DiagnosticDataOFF /PrepareAD /ActiveDirectorySplitPermissions:true
Info: 元に戻すには /ActiveDirectorySplitPermissions:false を使うだけです

ADのアクセス許可を付与する

カスタムADグループを作成し、Exchangeサーバーをそのメンバーにします。

# adjust OU Path first!
New-ADGroup -Name "AD_Custom Exchange Split permissions replacement" -GroupCategory Security -GroupScope DomainLocal -Path "OU=Rights,OU=Groups,OU=T1,OU=_ADM,$((Get-ADDomain).DistinguishedName)" -Description "replaces the permissions lost by split permissions on relevant OUs"
Add-ADGroupMember "AD_Custom Exchange Split permissions replacement" -Members "Exchange Trusted Subsystem" # reboot Exchange servers for permissions via group to work

ユースケースごとにADアクセス許可を簡単に委任できるスクリプトを作成しました。

これらのアクセス許可がないと、ExchangeサーバーはADから“INSUFF_ACCESS_RIGHTS”というエラーを受け取ります。

glueckkanjaのGitHubからAdd-ExchangeADSplitPermissionOnOU.ps1をダウンロードしてください

付与できるPermissionTypeは次のとおりです。

CreateUserAndContact
ユーザーと連絡先に対するCreate/delete、ResetPassword、WriteAllProperties
Exchangeコマンドレット: `New-Mailbox`, `New-RemoteMailbox`, `New-MailUser`, `New-MailContact` と対応する `Remove-*`

GroupManage
グループの作成・削除、メンバーの変更
Exchangeコマンドレット: `New-DistributionGroup`, `Remove-DistributionGroup`, `Add-DistributionGroupMember`, `Update-DistributionGroupMember`, `Remove-DistributionGroupMember`
その他: ユーザーが自分の所有するDistributionGroupをEAC経由で管理する

UserSendAs
ユーザーのADアクセス許可の変更
Exchangeコマンドレット: `Add-ADPermission`

GroupSendAs
グループのADアクセス許可の変更
Exchangeコマンドレット: `Add-ADPermission`

スクリプトの使い方

Add-ExchangeADSplitPermissionOnOU.ps1 -TargetOU <OU> -PermissionType <GroupManage|UserSendAs|GroupSendAs|CreateUserAndContact> -Trustee "AD_Custom Exchange Split permissions replacement" # For example
Add-ExchangeADSplitPermissionOnOU.ps1 -TargetOU "OU=ExchangeGroups,OU=HQ,OU=Alderaan,$((Get-ADDomain).DistinguishedName)" -PermissionType GroupManage -Trustee "AD_Custom Exchange Split permissions replacement" Add-ExchangeADSplitPermissionOnOU.ps1 -TargetOU "OU=ExchangeGroups,OU=HQ,OU=Alderaan,$((Get-ADDomain).DistinguishedName)" -PermissionType GroupSendAs -Trustee "AD_Custom Exchange Split permissions replacement" Add-ExchangeADSplitPermissionOnOU.ps1 -TargetOU "OU=Users,OU=HQ,OU=Alderaan,$((Get-ADDomain).DistinguishedName)" -PermissionType UserSendAs -Trustee "AD_Custom Exchange Split permissions replacement" Add-ExchangeADSplitPermissionOnOU.ps1 -TargetOU "OU=Users,OU=HQ,OU=Alderaan,$((Get-ADDomain).DistinguishedName)" -PermissionType CreateUserAndContact -Trustee "AD_Custom Exchange Split permissions replacement"

Exchange RBACを付与する

Add-DistributionGroupMemberとRemove-DistributionGroupMemberの各コマンドレットで-BypassSecurityGroupManagerCheckパラメーターを再度有効にします

New-RoleGroup -Name "SplitPermission Security Group Creation and Membership" -Roles "Security Group Creation and Membership" -Members "Organization Management","Recipient Management" -Description "Brings back -BypassSecurityGroupManagerCheck to Add-DistributionGroupMember, but also needs AD ACL for Exchange Server on target DLs"

Info: これを行わないと "-BypassSecurityGroupManagerCheck parameter is not available" または "You don't have sufficient permissions. This operation can only be performed by a manager of the group" というエラーになります。


New-Mailbox、New-RemoteMailbox、New-MailContact、Remove-... の各コマンドレットを必要なパラメーター付きで再度有効にします

New-RoleGroup -Name "SplitPermission Mail Recipient Creation" -Roles "Mail Recipient Creation" -Members "Organization Management","Recipient Management" -Description "Brings back New-Mailbox, New-RemoteMailbox, New-MailUser, New-MailContact and matching Remove-... cmdlets, but additionally Exchange needs AD ACL for Exchange Server on target OUs"

まとめ

このガイドが、Exchange経由のActive Directory侵害を防ぐという重要な一歩を、より多くの組織が踏み出す助けになれば幸いです。複数のお客様でExchange AD Split Permissionsモデルを実装してきましたが、これまで問題に遭遇したことはなく、導入もスムーズに進んでいます。

現在のオールオアナッシングの方式ではなく、OU単位でこの粒度を実現できるネイティブの仕組みをMicrosoftが提供してくれれば、広く採用されるようになるはずです。

ADのTier分離について一言。Exchangeサーバーへドメイン管理者やその他のTier 0アカウントでログオンしないでください。ExchangeサーバーはTier 1として扱い、できるだけ早くADのTier分離を実装してください。最初の一歩としては、PingCastleやPurple KnightでADのセキュリティ状況を評価し、コントロールパスの露出を洗い出すことをおすすめします。

関連記事