Post

Microsoft Remote Procedure Call(RPC)

Remote Procedure Call(RPC)란 원격 프로시저 호출로, 분산 시스템에서 프로그램 간 통신을 위한 프로토콜이나 매커니즘을 나타낸다. client<->server간 통신을 가능하게 하는 기술이다.

보안 고려사항

주요 고려 사항세부 내용
인증 및 권한 부여 문제RPC 시스템에서 클라이언트와 서버 간의 통신은 신뢰할 수 있는 방법으로 보호되어야 합니다. 악의적인 클라이언트가 원격 프로시저에 접근하려는 것을 방지하기 위해 강력한 인증 및 권한 부여 메커니즘을 구현해야 합니다.
데이터의 암호화원격 프로시저 호출 중에 전송되는 데이터는 중요할 수 있습니다. 이러한 데이터를 보호하기 위해 SSL/TLS와 같은 암호화 프로토콜을 사용하여 통신을 암호화해야 합니다.
보안 업데이트RPC 라이브러리 및 프로토콜은 지속적으로 업데이트되고 보완되어야 합니다. 시스템에서 사용하는 RPC 구현은 최신 보안 업데이트가 적용되어 있어야 하며, 잠재적인 취약점에 대한 패치가 시스템에 적용되어야 합니다.
DoS (서비스 거부) 공격 방어RPC 시스템은 DoS 공격에 노출될 수 있습니다. 이에 대비하기 위해 적절한 자원 제한 및 공격 탐지 메커니즘을 구현하여 시스템을 보호해야 합니다.

그렇다면 어떻게 위협이 되는지 테스트 해보자. 아래와 같이 135가 기본 port로 사용된다.

1
2
3
4
5
6
7
8
9
┌──(root㉿kali)-[/home/user]
└─# nmap -sC -sV 10.129.241.210
Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-02-15 21:04 EST
Nmap scan report for 10.129.241.210
Host is up (0.27s latency).
Not shown: 996 closed tcp ports (reset)
PORT     STATE SERVICE      VERSION
135/tcp  open  msrpc        Microsoft Windows RPC
139/tcp  open  netbios-ssn  Microsoft Windows netbios-ssn

impacket의 rpcdump를 사용할 경우 아래와 같이 endpoint가 열거된다.

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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
┌──(root㉿kali)-[/home/user]
└─# impacket-rpcdump -port 135 10.129.95.187
Impacket v0.11.0 - Copyright 2023 Fortra

[*] Retrieving endpoint list from 10.129.95.187
Protocol: [MS-RSP]: Remote Shutdown Protocol
Provider: wininit.exe
UUID    : D95AFE70-A6D5-4259-822E-2C84DA1DDB0D v1.0
Bindings:
          ncacn_ip_tcp:10.129.95.187[49664]
          ncalrpc:[WindowsShutdown]
          ncacn_np:\\ARCHETYPE[\PIPE\InitShutdown]
          ncalrpc:[WMsgKRpc083610]

Protocol: N/A
Provider: winlogon.exe
UUID    : 76F226C3-EC14-4325-8A99-6A46348418AF v1.0
Bindings:
          ncalrpc:[WindowsShutdown]
          ncacn_np:\\ARCHETYPE[\PIPE\InitShutdown]
          ncalrpc:[WMsgKRpc083610]
          ncalrpc:[WMsgKRpc084D11]

Protocol: [MS-SCMR]: Service Control Manager Remote Protocol
Provider: services.exe
UUID    : 367ABB81-9844-35F1-AD32-98F038001003 v2.0
Bindings:
          ncacn_ip_tcp:10.129.95.187[49667]

Protocol: [MS-FASP]: Firewall and Advanced Security Protocol
Provider: FwRemoteSvr.dll
UUID    : 6B5BDD1E-528C-422C-AF8C-A4079BE4FE48 v1.0 Remote Fw APIs
Bindings:
          ncacn_ip_tcp:10.129.95.187[49668]
          ncalrpc:[ipsec]

Protocol: [MS-CMPO]: MSDTC Connection Manager:
Provider: msdtcprx.dll
UUID    : 906B0CE0-C70B-1067-B317-00DD010662DA v1.0
Bindings:
          ncalrpc:[LRPC-5575e284d83e243c4a]
          ncalrpc:[OLE6330F0E7E7567E176E11548627E0]
          ncalrpc:[LRPC-e43fa1f5a21c9d351f]
          ncalrpc:[LRPC-e43fa1f5a21c9d351f]
          ncalrpc:[LRPC-e43fa1f5a21c9d351f]

[*] Received 266 endpoints.

rpcclient를 통해 접속한 경우 아래와 같이 출력된다. 익명으로 접속하니 권한이 없음을 알 수 있다.

1
2
3
4
┌──(root㉿kali)-[/home/user]
└─# rpcclient -N -U "" 10.129.95.187
rpcclient $> getusername
do_cmd: Could not initialise lsarpc. Error was NT_STATUS_ACCESS_DENIED

지정된 계정으로 접근 시 아래와 같다.

1
2
3
4
5
6
7
8
┌──(root㉿kali)-[/home/user]
└─# rpcclient -U sql_svc 10.129.95.187
Password for [WORKGROUP\sql_svc]:
rpcclient $> srvinfo
        10.129.95.187  Wk Sv Sql NT SNT PtB LMB
        platform_id     :       500
        os version      :       10.0
        server type     :       0x59007
This post is licensed under CC BY 4.0 by the author.