10/26 晚間:一次學一個核心概念
1. RPC 是什麼?
RPC(Remote Procedure Call,遠端程序呼叫)讓程式把參數送給另一個程序,請對方執行指定功能,再接收結果。
像打電話到機關辦事:你要辦的業務是「程序」,提供業務的單位是「服務」,查號臺則告訴你該找哪個分機。知道分機號碼,不等於有權辦理所有業務。
用戶端提出呼叫,伺服器端處理要求;角色取決於這次互動,不是電腦永遠固定的身分。RPC 是一類通訊方式,不能把所有 RPC 都當成同一套協定。RFC 5531
2. 列舉在查什麼?
某些服務端點會動態分配,因此需要映射服務協助查找。RPC 列舉就是整理「有哪些服務或介面、哪個版本、使用什麼傳輸、登記在哪個端點」。
在授權的資產盤點、資訊揭露檢查與連線排錯中,這些線索很有用。但查詢之前仍須確認目標、來源與允許範圍;唯讀也可能產生日誌或負載。
介面描述可提供哪些操作,端點則是連到服務的位置。端點可能是網路連接埠,也可能是其他形式,不能一律當成 TCP 埠號。
3. 111 與 135 不是同一套查號臺
ONC RPC:
- program number 識別服務。
- version 識別服務協定版本。
- procedure number 識別要呼叫的功能。
- 在 TCP/UDP 上,rpcbind/portmapper 使用 111 埠協助查找,實際服務可能在其他端點。
這裡的 version 不是軟體產品版本,不能直接拿來判定特定漏洞。RFC 1833
Microsoft RPC:
常見的 TCP 情境先向 135 埠的 Endpoint Mapper 查詢,再連到對應服務端點,後者可能是動態埠。也有經由 SMB 具名管道傳輸的方式。
因此,「看到 135」不等於已列出全部 RPC 功能,也不能說每一次 RPC 呼叫都會經過 135。ONC RPC 的 111 與 Microsoft RPC 的 135,不能混為一談。Microsoft 服務與連接埠說明
4. 一個純合成例子
假設授權實驗室回傳這筆映射:
主機 Lab-A
服務編號 536870912
服務協定版本 1
傳輸 TCP
端點 35001
它只表示:查得的登記資料把這個服務版本對應到 Lab-A 的 TCP 35001。
接下來仍是不同問題:
- 從目前網段能不能連到端點?
- 服務是否接受這個身分?
- 這個身分能不能執行特定功能?
- 該功能是否真的存在可利用的弱點?
防火牆可能擋住端點,服務也可能拒絕驗證或授權。知道地址不能替代這些證據。本例沒有連線查詢任何實際目標。
每一項分別驗證;前一項成立不會自動證明其他項。
- 查到登記
Lab-A / TCP 35001:映射資料。
- 端點可連線
目前來源到端點的連線證據。
- 身分驗證成功
服務接受本次使用的身分。
- 獲准執行功能
這個身分獲准執行特定操作。
5. 防護與證據判讀
把「查到登記」「端點可連線」「身分驗證成功」「獲准執行功能」分開記錄。保留時間、來源網段、查詢身分條件與必要原始回應,不保存秘密或不必要個資。
查不到映射,也不一定代表服務不存在,可能是過濾、權限或設定限制;查得到映射,也不能直接宣稱可存取資料、有漏洞或有管理權。
防守時移除不需要的服務,限制可信來源,並同時檢查映射服務與實際端點的暴露。不應為了關閉埠號,就直接停用 Windows 核心 RPC 服務。
小檢核:
你查到某服務登記於 TCP 35001,但從目前網段連線失敗。你能確定什麼?哪些關於權限或漏洞的結論,現在還不能下?
用一兩句回答即可。
概念 Q&A
待補:收到相關問題後,會整理為匿名教學版。