AD Dynamic Objects (dynamicObject) 안티 포렌식
Tip
AWS 해킹 배우기 및 연습하기:
HackTricks Training AWS Red Team Expert (ARTE)
GCP 해킹 배우기 및 연습하기:HackTricks Training GCP Red Team Expert (GRTE)
Azure 해킹 배우기 및 연습하기:
HackTricks Training Azure Red Team Expert (AzRTE)
HackTricks 지원하기
- 구독 계획 확인하기!
- **💬 디스코드 그룹 또는 텔레그램 그룹에 참여하거나 트위터 🐦 @hacktricks_live를 팔로우하세요.
- HackTricks 및 HackTricks Cloud 깃허브 리포지토리에 PR을 제출하여 해킹 트릭을 공유하세요.
메커니즘 및 탐지 기본
- 보조 클래스 **
dynamicObject**로 생성된 모든 객체는entryTTL(초 단위 카운트다운)과msDS-Entry-Time-To-Die(절대 만료)를 갖습니다.entryTTL이 0이 되면 Garbage Collector가 tombstone/recycle-bin 없이 이를 삭제하여 생성자/타임스탬프를 지우고 복구를 차단합니다. - TTL은
entryTTL을 업데이트하여 갱신할 수 있습니다; 최소/기본값은 **Configuration\Services\NTDS Settings →msDS-Other-Settings→DynamicObjectMinTTL/DynamicObjectDefaultTTL**에서 강제됩니다(지원 범위 1s–1y, 일반적으로 기본값은 86,400s/24h). Dynamic objects는 Configuration/Schema partitions에서 지원되지 않습니다. - 가동 시간이 짧은 DC(<24h)에서는 삭제가 몇 분 지연될 수 있어 속성 쿼리/백업을 위한 좁은 대응 창이 남습니다.
entryTTL/msDS-Entry-Time-To-Die를 가진 새 객체에 대해 경고를 발생시키고 고아 SID/깨진 링크와 상관관계 분석하여 탐지하세요.
MAQ 회피(자체 삭제하는 컴퓨터)
- 기본값
ms-DS-MachineAccountQuota= 10은 인증된 사용자라면 누구나 컴퓨터를 생성할 수 있게 합니다. 생성 시dynamicObject를 추가하면 컴퓨터가 자체 삭제되어 증거를 지우면서 quota 슬롯을 해제합니다. - Powermad tweak inside
New-MachineAccount(objectClass list):
$request.Attributes.Add((New-Object "System.DirectoryServices.Protocols.DirectoryAttribute" -ArgumentList "objectClass", "dynamicObject", "Computer")) > $null
- 짧은 TTL(예: 60s)은 일반 사용자에게는 종종 실패합니다; AD는 **
DynamicObjectDefaultTTL**으로 대체됩니다(예: 86,400s). ADUC는entryTTL을 숨길 수 있지만 LDP/LDAP 쿼리는 이를 드러냅니다.
Stealth Primary Group Membership
- dynamic security group을 생성한 뒤 사용자 **
primaryGroupID**를 해당 그룹의 RID로 설정하면memberOf에는 표시되지 않지만 Kerberos/액세스 토큰에서는 인식되는 실질적 멤버십을 얻게 됩니다. - TTL 만료 시 primary-group 삭제 보호에도 불구하고 그룹이 삭제되어 사용자는 존재하지 않는 RID를 가리키는 손상된
primaryGroupID를 갖게 되고 조사할 수 있는 tombstone이 남지 않습니다.
AdminSDHolder 고아-SID 오염
- 단명하는 dynamic user/group에 대한 ACE를 **
CN=AdminSDHolder,CN=System,...**에 추가하세요. TTL 만료 후 템플릿 ACL에서 SID는 **해결 불가(“Unknown SID”)**가 되고, **SDProp (~60 min)**가 그 고아 SID를 모든 보호된 Tier-0 객체로 전파합니다. - 주체가 사라져 포렌식이 속성 추적을 못합니다(삭제된 객체 DN 없음). 새로운 dynamic principals + AdminSDHolder/특권 ACL에서의 갑작스러운 고아 SID를 모니터링하세요.
자체 소멸 증거를 가진 Dynamic GPO 실행
- 악성
gPCFileSysPath(예: SMB share à la GPODDITY)를 가진 dynamicgroupPolicyContainer객체를 생성하고 대상 OU에gPLink로 연결하세요. - 클라이언트는 정책을 처리하고 공격자 SMB에서 콘텐츠를 가져옵니다. TTL이 만료되면 GPO 객체(및
gPCFileSysPath)는 사라지고 깨진gPLinkGUID만 남아 실행된 페이로드의 LDAP 증거가 제거됩니다.
일시적 AD-통합 DNS 리디렉션
- AD DNS 레코드는 DomainDnsZones/ForestDnsZones의
dnsNode객체입니다. 이를 dynamic objects로 생성하면 일시적인 호스트 리디렉션(credential capture/MITM)이 가능합니다. 클라이언트는 악성 A/AAAA 응답을 캐시하고, 해당 레코드는 이후 자체 삭제되어 존이 깨끗해 보입니다(DNS Manager는 보기 갱신을 위해 존을 다시 로드해야 할 수 있습니다). - 탐지: 복제/이벤트 로그를 통해
dynamicObject/entryTTL를 가진 DNS 레코드에 경고를 설정하세요; 일시적 레코드는 표준 DNS 로그에 거의 나타나지 않습니다.
Hybrid Entra ID Delta-Sync Gap (Note)
- Entra Connect delta sync는 삭제를 감지하기 위해 tombstones에 의존합니다. dynamic on-prem user가 Entra ID로 동기화된 후 만료되어 tombstone 없이 삭제되면 delta sync는 클라우드 계정을 제거하지 못해 수동으로 full sync를 강제할 때까지 고아화된 활성 Entra 사용자가 남게 됩니다.
References
Tip
AWS 해킹 배우기 및 연습하기:
HackTricks Training AWS Red Team Expert (ARTE)
GCP 해킹 배우기 및 연습하기:HackTricks Training GCP Red Team Expert (GRTE)
Azure 해킹 배우기 및 연습하기:
HackTricks Training Azure Red Team Expert (AzRTE)
HackTricks 지원하기
- 구독 계획 확인하기!
- **💬 디스코드 그룹 또는 텔레그램 그룹에 참여하거나 트위터 🐦 @hacktricks_live를 팔로우하세요.
- HackTricks 및 HackTricks Cloud 깃허브 리포지토리에 PR을 제출하여 해킹 트릭을 공유하세요.


