후회 없는 Exchange AD Split Permissions
클라우드로 사서함을 완전히 마이그레이션한 조직조차도 여전히 온프레미스 Exchange 서버를 운영하는 경우가 많으며, 이는 Active Directory에 대한 과소평가된 보안 위험을 함께 가져옵니다. “AD Split Permissions” 모델은 공격자가 전체 도메인 장악에 악용할 수 있는 Exchange의 광범위한 AD 권한을 제거합니다. 지금까지 이 모델의 도입은 관리자에게 강제되는 프로세스 변경 때문에 대부분 실패해 왔습니다. 이 글에서는 바로 그 장벽을 우아하게 넘는 방법을 소개합니다. 관련 OU에만 선택적으로 잃어버린 AD 권한을 다시 부여하는 스크립트를 통해, 익숙한 관리자 워크플로를 유지하면서도 완전한 보안 이점을 달성하는 방법입니다.
TLDR: 단점을 없앤다면?
저는 Exchange 사용자, 그룹, 연락처가 위치한 바로 그 지점에 AD 및 RBAC 권한을 직접 다시 부여하는 방법을 찾았습니다. 이 방법은 관리자나 ID 관리 시스템에 아무런 변경도 요구하지 않습니다. 제 경험상 바로 이 마찰이 대부분의 기업에서 도입을 가로막는 주요 원인이었습니다. 그러면서도 측면 이동(lateral movement)과 도메인 장악에 대한 보안 이점은 그대로 유지됩니다.

세 단계로 이루어집니다:
- AD split permission 모델 구현
- Exchange 서버에 잃어버린 AD 권한을 부여하되, 관련 OU에만 부여
- 누락된 PowerShell cmdlet을 다시 활성화하기 위해 Exchange RBAC 부여
모두 Microsoft의 가이드, AD ACL 또는 Exchange RBAC 할당을 통해 이루어집니다.
왜 지금 중요한가?
이 모델은 Exchange 2010 SP1에서 도입된 이후 대부분 간과되거나 무시되어 왔습니다. 하지만 기본값인 공유 권한(shared permissions) 모델은 Active Directory 장악이라는 큰 보안 위험을 내포합니다. 지난 몇 년간 Exchange가 원격 익스플로잇으로 악명 높았던 점까지 고려하면, 이제 행동에 나설 때입니다!
문제는 도메인 루트에 부여된 권한이 도메인 전체로 상속된다는 점에서 비롯됩니다.
- 사용자 및 그룹에 대한 권한 수정 (사실상 전체 액세스)
- 그룹 구성원 수정
- 사용자 암호 재설정
- 사용자 및 그룹 생성/삭제

AdminSDHolder 프로세스(admincount=1 특성)로 보호되는 것은 일부 고권한 Tier 0 사용자와 그룹뿐이며, 많은 환경에서는 도메인 또는 포리스트(forest) 장악을 허용하거나 최소한 심각한 영향을 초래할 수 있는 보호되지 않은 사용자나 그룹이 존재합니다.
대표적인 예시:
- Password Hash Sync를 사용할 때의 Entra Connect Sync 계정
- 기본 그룹
- Entra Connect 계정과 결합된 Allowed RODC Password Replication Group(실제 Windows RODC가 존재하는 경우)
- 더 많은 경로를 보여주는 Untrustworthy Trust Builders: Account Operators Replicating Trust Attack (AORTA) - SpecterOps도 참고하세요(Account Operators 그룹도 유사한 위협입니다)
- 보호를 제거해 공격 벡터를 만들기 위한 Protected Users 비우기
- 보호되지 않은 사용자 지정 그룹 또는 관리자/서비스 계정
- GPO에 대한 쓰기 권한(도메인 컨트롤러에 적용됨)
- AD 백업, 백업 서버, PKI 템플릿, 하이퍼바이저 등에 대한 액세스 관리
이러한 현재와 미래의 모든 잠재적 경로를 사후에 억제하기란 매우 어렵습니다. _ADM 사용자 지정 OU의 경우 ACL 상속을 비활성화할 수 있지만, 대부분의 기본 개체는 기본 Builtin OU나 Users 컨테이너에서 이동할 수 없어 취약한 상태로 남습니다.
루트에서 강력한 권한을 제거하는 편이 훨씬 낫고, 이는 Active Directory split permissions 모델을 구현함으로써 이루어집니다. Configure Exchange Server for split permissions | Microsoft Learn
그리고 Microsoft도 이에 동의합니다: “…encouraged to implement Active Directory split permissions” Active Directory Hardening Series - Part 7 – Implementing Least Privilege | Microsoft Community Hub
그런데 왜 아무도 하지 않을까?
split permissions는 Exchange 2010 SP1이 나오기 전까지는 사용할 수 없었기 때문에, 그때쯤이면 이미 모두가 기존 방식을 받아들인 상태였고, 이 기능이 생긴 뒤에도 보안 팀이 이를 성공적으로 밀어붙이지 못한 것으로 보입니다.
게다가 이 모델은 관리자 및 IDM 프로세스의 변경을 강제했을 것입니다. 예를 들어 사용자나 배포 목록을 먼저 AD에서 만든 다음에야 Exchange를 사용해 “mail enable”하는 식입니다.
Info: 다음 cmdlet은 더 이상 사용할 수 없거나 작동하지 않습니다: 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 백업이 최신 상태이며 복구 절차가 마련되어 있는지 확인하세요!
현재 사용 현황 감사
먼저 영향을 받는 cmdlet 중 어떤 것이 어떤 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호출자(caller)와 cmdlet에 대한 빠른 분석:
$CSVs = Import-Csv -Path $CsvPath -Delimiter ";"
$CSVs | Group-Object Caller
$CSVs | Group-Object CmdletNameAD 권한이 어디에 필요할지 파악하기 위해 CSV를 분석하세요. 필요하다면 Exchange 관련 그룹을 모두 전용 OU로 옮겨 최적화할 수 있습니다.
Split Permissions 모델 활성화
다음 문서에서 Microsoft의 지침 **"Switch to Active Directory split permissions"**를 따르세요: Configure Exchange Server for split permissions | Microsoft Learn(RBAC split permissions가 아닙니다)
요컨대 이 작업은 "Exchange Windows Permissions" 그룹의 위험한 권한을 제거하고, Exchange를 그룹 구성원에서도 제외합니다.
Setup.exe /IAcceptExchangeServerLicenseTerms_DiagnosticDataOFF /PrepareAD /ActiveDirectorySplitPermissions:true/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
사용자 및 연락처에 대한 생성/삭제, ResetPassword, WriteAllProperties
Exchange cmdlet: `New-Mailbox`, `New-RemoteMailbox`, `New-MailUser`, `New-MailContact` 및 이에 대응하는 `Remove-*`
GroupManage
그룹 생성/삭제, 구성원 수정
Exchange cmdlet: `New-DistributionGroup`, `Remove-DistributionGroup`, `Add-DistributionGroupMember`, `Update-DistributionGroupMember`, `Remove-DistributionGroupMember`
또한: 사용자가 EAC를 통해 자신이 소유한 DistributionGroup을 관리
UserSendAs
사용자에 대한 AD 권한 수정
Exchange cmdlet: `Add-ADPermission`
GroupSendAs
그룹에 대한 AD 권한 수정
Exchange cmdlet: `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 cmdlet에서 -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-... cmdlet 다시 활성화:
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 모델을 구현한 제 경험상 아무런 문제도 겪지 않았고, 도입 과정도 순조로웠습니다.
또한 Microsoft가 현재의 전부 아니면 전무(all-or-nothing) 방식 대신 이 정도의 세분화를 달성할 수 있는 네이티브 OU 기반 접근 방식을 도입하기를 바랍니다. 그렇게 되면 폭넓은 도입이 훨씬 쉬워질 것입니다.
AD Tiering에 관한 참고: Exchange 서버에 Domain Admin이나 그 밖의 Tier 0 계정으로 로그온하지 마세요. Exchange 서버는 Tier 1으로 취급하고, 가능한 한 빨리 AD Tiering을 구현하세요. 첫 단계로 AD 보안 상태를 평가하고 컨트롤 경로 노출을 식별하기 위해 PingCastle 또는 Purple Knight를 사용할 것을 권장합니다.














