Translated ['src/network-services-pentesting/135-pentesting-msrpc.md'] t

This commit is contained in:
Translator 2025-07-17 22:10:06 +00:00
parent c684fb0629
commit ed645fa5c1

View File

@ -26,7 +26,7 @@ Annotation: Messenger Service
UUID: 00000000-0000-0000-0000-000000000000 UUID: 00000000-0000-0000-0000-000000000000
Binding: ncadg_ip_udp:<IP>[1028] Binding: ncadg_ip_udp:<IP>[1028]
``` ```
RPC 로케이터 서비스에 대한 접근은 특정 프로토콜을 통해 활성화됩니다: ncacn_ip_tcp 및 ncadg_ip_udp는 포트 135를 통해 접근할 때 사용되며, ncacn_np는 SMB 연결을 위해, ncacn_http는 웹 기반 RPC 통신을 위해 사용됩니다. 다음 명령어는 주로 포트 135에 초점을 맞춰 MSRPC 서비스를 감사하고 상호작용하는 Metasploit 모듈의 활용을 예시합니다: RPC 로케이터 서비스에 대한 접근은 특정 프로토콜을 통해 활성화됩니다: ncacn_ip_tcp 및 ncadg_ip_udp는 포트 135를 통해 접근하기 위해, ncacn_np는 SMB 연결을 위해, ncacn_http는 웹 기반 RPC 통신을 위해 사용됩니다. 다음 명령어는 주로 포트 135에 초점을 맞추어 MSRPC 서비스에 대한 감사 및 상호작용을 위해 Metasploit 모듈을 활용하는 예를 보여줍니다:
```bash ```bash
use auxiliary/scanner/dcerpc/endpoint_mapper use auxiliary/scanner/dcerpc/endpoint_mapper
use auxiliary/scanner/dcerpc/hidden use auxiliary/scanner/dcerpc/hidden
@ -83,9 +83,65 @@ rpcdump.py <IP> -p 135
[rpctools](https://resources.oreilly.com/examples/9780596510305/tree/master/tools/rpctools)의 **rpcdump.exe**는 이 포트와 상호작용할 수 있습니다. [rpctools](https://resources.oreilly.com/examples/9780596510305/tree/master/tools/rpctools)의 **rpcdump.exe**는 이 포트와 상호작용할 수 있습니다.
## MSRPC 인터페이스의 자동 퍼징
MS-RPC 인터페이스는 크고 종종 문서화되지 않은 공격 표면을 노출합니다. 오픈 소스 [MS-RPC-Fuzzer](https://github.com/warpnet/MS-RPC-Fuzzer) PowerShell 모듈은 James Forshaw의 `NtObjectManager`를 기반으로 하여 *동적으로* Windows 바이너리에 이미 존재하는 인터페이스 메타데이터에서 RPC 클라이언트 스텁을 생성합니다. 스텁이 존재하면 모듈은 변형된 입력으로 각 프로시저를 폭격하고 결과를 기록하여 **IDL을 한 줄도 작성하지 않고 RPC 엔드포인트의 재현 가능한 대규모 퍼징을 가능하게 합니다.**
### 1. 인터페이스 목록 작성
```powershell
# Import the module (download / git clone first)
Import-Module .\MS-RPC-Fuzzer.psm1
# Parse a single binary
Get-RpcServerData -Target "C:\Windows\System32\efssvc.dll" -OutPath .\output
# Or crawl the whole %SystemRoot%\System32 directory
Get-RpcServerData -OutPath .\output
```
`Get-RpcServerData`는 UUID, 버전, 바인딩 문자열(명명된 파이프 / TCP / HTTP) 및 **모든 인터페이스에 대한 전체 프로시저 프로토타입**을 추출하여 `rpcServerData.json`에 저장합니다.
### 2. 퍼저 실행
```powershell
'.\output\rpcServerData.json' |
Invoke-RpcFuzzer -OutPath .\output `
-MinStrLen 100 -MaxStrLen 1000 `
-MinIntSize 9999 -MaxIntSize 99999
```
관련 옵션:
* `-MinStrLen` / `-MaxStrLen` 생성된 문자열의 크기 범위
* `-MinIntSize` / `-MaxIntSize` 변형된 정수의 값 범위 (오버플로우 테스트에 유용)
* `-Sorted` **매개변수 의존성**을 존중하는 순서로 절차를 실행하여 한 호출의 출력이 다음 호출의 입력으로 사용될 수 있도록 함 (도달 가능한 경로를 극적으로 증가시킴)
퍼저는 2가지 전략을 구현합니다:
1. **기본 퍼저** 무작위 원시 값 + 복합 유형에 대한 기본 인스턴스
2. **정렬된 퍼저** 의존성 인식 정렬 (참조: `docs/Procedure dependency design.md`)
모든 호출은 `log.txt`에 원자적으로 기록됩니다; 충돌 후 **마지막 줄은 즉시 문제를 일으킨 절차를 알려줍니다**. 각 호출의 결과는 세 개의 JSON 파일로 분류됩니다:
* `allowed.json` 호출이 성공하고 데이터를 반환함
* `denied.json` 서버가 *Access Denied*로 응답함
* `error.json` 기타 오류 / 충돌
### 3. Neo4j로 시각화하기
```powershell
'.\output\allowed.json' |
Import-DataToNeo4j -Neo4jHost 192.168.56.10:7474 -Neo4jUsername neo4j
```
`Import-DataToNeo4j`는 JSON 아티팩트를 그래프 구조로 변환합니다:
* RPC 서버, 인터페이스 및 프로시저는 **노드**입니다.
* 상호작용(`ALLOWED`, `DENIED`, `ERROR`)은 **관계**입니다.
Cypher 쿼리를 사용하여 위험한 프로시저를 빠르게 찾아내거나 충돌 이전의 정확한 호출 체인을 재생할 수 있습니다.
⚠️ 퍼저는 *파괴적*입니다: 서비스 충돌 및 BSOD를 예상하십시오 항상 격리된 VM 스냅샷에서 실행하십시오.
### 자동화된 인터페이스 열거 및 동적 클라이언트 생성 (NtObjectManager) ### 자동화된 인터페이스 열거 및 동적 클라이언트 생성 (NtObjectManager)
PowerShell 전문가 **James Forshaw**는 오픈 소스 *NtObjectManager* 모듈 내에서 대부분의 Windows RPC 내부를 노출했습니다. 이를 사용하면 IDL, MIDL 또는 수동 언마샬링 없이 몇 초 만에 모든 RPC 서버 DLL / EXE를 **완전한 기능의 클라이언트 스텁**으로 변환할 수 있습니다. PowerShell 전문가 **James Forshaw**는 오픈 소스 *NtObjectManager* 모듈 내에서 대부분의 Windows RPC 내부를 공개했습니다. 이를 사용하면 IDL, MIDL 또는 수동 언마샬링 없이 몇 초 만에 모든 RPC 서버 DLL / EXE를 **완전한 기능을 갖춘 클라이언트 스텁**으로 변환할 수 있습니다.
```powershell ```powershell
# Install the module once # Install the module once
Install-Module NtObjectManager -Force Install-Module NtObjectManager -Force
@ -110,7 +166,7 @@ public int EfsRpcOpenFileRaw(out Marshal.NdrContextHandle ctx, string FileName,
// marshals parameters & calls opnum 0 // marshals parameters & calls opnum 0
} }
``` ```
PowerShell 도우미 `Get-RpcClient`는 **대화형 클라이언트 객체**를 생성하여 절차를 즉시 호출할 수 있습니다: PowerShell 도우미 `Get-RpcClient`는 **대화형 클라이언트 객체**를 생성할 수 있어 즉시 프로시저를 호출할 수 있습니다:
```powershell ```powershell
$client = Get-RpcClient $rpcinterfaces[0] $client = Get-RpcClient $rpcinterfaces[0]
Connect-RpcClient $client -stringbinding 'ncacn_np:127.0.0.1[\\pipe\\efsrpc]' ` Connect-RpcClient $client -stringbinding 'ncacn_np:127.0.0.1[\\pipe\\efsrpc]' `
@ -123,20 +179,18 @@ $client.EfsRpcOpenFileRaw([ref]$ctx, "\\\127.0.0.1\test", 0)
``` ```
인증(Kerberos / NTLM) 및 암호화 수준(`PacketIntegrity`, `PacketPrivacy`, …)은 `Connect-RpcClient` cmdlet을 통해 직접 제공될 수 있습니다 이는 고급 권한 명명된 파이프를 보호하는 **보안 설명자**를 우회하는 데 이상적입니다. 인증(Kerberos / NTLM) 및 암호화 수준(`PacketIntegrity`, `PacketPrivacy`, …)은 `Connect-RpcClient` cmdlet을 통해 직접 제공될 수 있습니다 이는 고급 권한 명명된 파이프를 보호하는 **보안 설명자**를 우회하는 데 이상적입니다.
---
### 컨텍스트 인식 RPC 퍼징 (MS-RPC-Fuzzer) ### 컨텍스트 인식 RPC 퍼징 (MS-RPC-Fuzzer)
정적 인터페이스 지식은 훌륭하지만, 진정으로 원하는 것은 *컨텍스트 핸들*과 복잡한 매개변수 체인을 이해하는 **커버리지 기반 퍼징**입니다. 오픈 소스 **MS-RPC-Fuzzer** 프로젝트는 바로 그 워크플로우를 자동화합니다: 정적 인터페이스 지식은 훌륭하지만, 실제로 원하는 것은 *컨텍스트 핸들*과 복잡한 매개변수 체인을 이해하는 **커버리지 기반 퍼징**입니다. 오픈 소스 **MS-RPC-Fuzzer** 프로젝트는 바로 그 워크플로우를 자동화합니다:
1. 대상 바이너리(`Get-RpcServer`)에 의해 내보내진 모든 인터페이스/절차를 열거합니다. 1. 대상 바이너리에서 내보낸 모든 인터페이스/프로시저를 열거합니다(`Get-RpcServer`).
2. 각 인터페이스에 대한 동적 클라이언트를 생성합니다(`Format-RpcClient`). 2. 각 인터페이스에 대한 동적 클라이언트를 생성합니다(`Format-RpcClient`).
3. 원래 **NDR 유형**을 존중하면서 입력 매개변수(넓은 문자열 길이, 정수 범위, 열거형)를 무작위화합니다. 3. 원래 **NDR 유형**을 존중하면서 입력 매개변수(와이드 문자열 길이, 정수 범위, 열거형)를 무작위화합니다.
4. 한 호출에 의해 반환된 *컨텍스트 핸들*을 추적하여 후속 절차에 자동으로 공급합니다. 4. 한 호출에서 반환된 *컨텍스트 핸들*을 추적하여 후속 프로시저에 자동으로 공급합니다.
5. 선택한 전송(ALPC, TCP, HTTP 또는 명명된 파이프)에 대해 대량 호출을 실행합니다. 5. 선택한 전송(ALPC, TCP, HTTP 또는 명명된 파이프)에 대해 대량 호출을 실행합니다.
6. 종료 상태/결함/타임아웃을 기록하고 *인터페이스 → 절차 → 매개변수* 관계 및 충돌 클러스터를 시각화하기 위해 **Neo4j** 가져오기 파일을 내보냅니다. 6. 종료 상태/오류/타임아웃을 기록하고 *인터페이스 → 프로시저 → 매개변수* 관계 및 충돌 클러스터를 시각화하기 위해 **Neo4j** 가져오기 파일을 내보냅니다.
실행(명명된 파이프 대상): 실행(명명된 파이프 대상):
```powershell ```powershell
Invoke-MSRPCFuzzer -Pipe "\\.\pipe\efsrpc" -Auth NTLM ` Invoke-MSRPCFuzzer -Pipe "\\.\pipe\efsrpc" -Auth NTLM `
-MinLen 1 -MaxLen 0x400 ` -MinLen 1 -MaxLen 0x400 `
@ -147,16 +201,15 @@ Invoke-MSRPCFuzzer -Pipe "\\.\pipe\efsrpc" -Auth NTLM `
> ⚠️ 많은 RPC 서비스는 **NT AUTHORITY\SYSTEM**으로 실행되는 프로세스에서 실행됩니다. 여기서 메모리 안전성 문제는 일반적으로 로컬 권한 상승 또는 (SMB/135를 통해 노출될 경우) *원격 코드 실행*으로 이어집니다. > ⚠️ 많은 RPC 서비스는 **NT AUTHORITY\SYSTEM**으로 실행되는 프로세스에서 실행됩니다. 여기서 메모리 안전성 문제는 일반적으로 로컬 권한 상승 또는 (SMB/135를 통해 노출될 경우) *원격 코드 실행*으로 이어집니다.
---
## References ## References
- [Automating MS-RPC vulnerability research (2025, Incendium.rocks)](https://www.incendium.rocks/posts/Automating-MS-RPC-Vulnerability-Research/) - [Automating MS-RPC vulnerability research (2025, Incendium.rocks)](https://www.incendium.rocks/posts/Automating-MS-RPC-Vulnerability-Research/)
- [MS-RPC-Fuzzer context-aware RPC fuzzer](https://github.com/warpnet/MS-RPC-Fuzzer) - [MS-RPC-Fuzzer context-aware RPC fuzzer](https://github.com/warpnet/MS-RPC-Fuzzer)
- [NtObjectManager PowerShell module](https://github.com/googleprojectzero/sandbox-attacksurface-analysis-tools/tree/master/NtObjectManager) - [NtObjectManager PowerShell module](https://github.com/googleprojectzero/sandbox-attacksurface-analysis-tools/tree/master/NtObjectManager)
- [https://www.cyber.airbus.com/the-oxid-resolver-part-1-remote-enumeration-of-network-interfaces-without-any-authentication/](https://www.cyber.airbus.com/the-oxid-resolver-part-1-remote-enumeration-of-network-interfaces-without-any-authentication/) - [https://www.cyber.airbus.com/the-oxid-resolver-part-1-remote-enumeration-of-network-interfaces-without-any-authentication/](https://www.cyber.airbus.com/the-oxid-resolver-part-1-remote-enumeration-of-network-interfaces-without-any-authentication/)
- [https://www.cyber.airbus.com/the-oxid-resolver-part-2-accessing-a-remote-object-inside-dcom/](https://www.cyber.airbus.com/the-oxid-resolver-part-2-accessing-a-remote-object-inside-dcom/) - [https://www.cyber.airbus.com/the-oxid-resolver-part-2-accessing-a-remote-object-inside-dcom/](https://www.cyber.airbus.com/the-oxid-resolver-part-2-accessing-a-remote-object-inside-dcom/)
- [https://0xffsec.com/handbook/services/msrpc/](https://0xffsec.com/handbook/services/msrpc/) - [https://0xffsec.com/handbook/services/msrpc/](https://0xffsec.com/handbook/services/msrpc/)
- [MS-RPC-Fuzzer (GitHub)](https://github.com/warpnet/MS-RPC-Fuzzer)
{{#include ../banners/hacktricks-training.md}} {{#include ../banners/hacktricks-training.md}}