遠端程序呼叫 (RPC) 服務預設會保護 RPC 介面,以減少攻擊。
RestrictRemoteClients
登錄機碼可讓您修改系統上所有 RPC 介面的行為,並可用來排除系統上 RPC 介面的遠端匿名存取,但有一些例外狀況。 您可以使用本文所涵蓋 EnableAuthEpResolution
登錄機碼來套用其他介面控制項。 RPC 應用程式開發人員和系統管理員都可以設定 RPC 介面限制。
必要條件
在伺服器上使用 RestrictRemoteClients
時:
連絡伺服器應用程式時,您的 RPC 用戶端必須使用 RPC 安全性,這是降低安全性威脅的最佳方法。
藉由在註冊期間設定 RPC_IF_ALLOW_CALLBACKS_WITH_NO_AUTH 旗標,免除 RPC 設定要求驗證。 這樣做會設定 RPC 以允許匿名連線到您的應用程式。
RestrictRemoteClients 威脅緩和措施
啟用 RestrictRemoteClients
對於依賴可惡意探索緩衝區溢位的蠕蟲進行風險降低,可透過匿名連線從遠端叫用。 使用此功能時,預期從遠端匿名 RPC 用戶端接收呼叫的 RPC 應用程式可能無法正確執行。 因此,如果設定此值,使用 DCOM 的應用程式 (分散式元件物件模型) 可能無法正常運作。
如果啟用此金鑰,則使用無連線通訊協定的 RPC 呼叫會失敗。 透過無連線通訊協定保護 RPC 呼叫,例如 UDP (使用者數據報通訊協定) 和 IPX (Internetwork Packet Exchange),相較於連線導向通訊協定,使用較低的安全性層級。 具體來說, ncadg_ip_udp
和 ncadg_ipx
會被視為較不安全。 針對此原則的目的,這些呼叫一律被視為不安全。
若要允許使用無連線通訊協定的 RPC 用戶端呼叫,請將 RestrictRemoteClients
值設定為停用。
RPC 用戶端的限制
當使用 RpcServerRegisterIf
註冊介面時,RPC 可讓伺服器應用程式透過安全性回呼限制對介面的存取。
RestrictRemoteClients
登錄機碼會強制 RPC 對所有介面執行額外的安全性檢查,即使介面沒有已註冊的安全性回呼也一樣。
使用具名管道通訊協定序列 (ncacn_np
) 的 RPC 用戶端不受本節所討論的所有限制。 由於嚴重的回溯相容性問題,無法限制具名管道通訊協定序列。
RestrictRemoteClients
也可以在 rpcdce.h API (應用程式開發介面) 標頭中以程式設計方式控制。
設定 RestrictRemoteClients
若要使用 GPO (群組原則物件) 編輯器來編輯這些原則:
選擇 開始>,輸入 gpedit.msc>,按下 Enter 以開啟 本機群組策略編輯器。
若要啟用等效的
RestrictRemoteClients
設定,請瀏覽至 [電腦設定\系統\系統\遠端程序呼叫\未經身分驗證的 RPC 用戶端的限制],然後選取下列其中一項:- 停用:此設定是伺服器 SKU 的預設值。 對應至 rpcdce.h 中的值 RPC_RESTRICT_REMOTE_CLIENT_NONE ,而伺服器應用程式有責任施加適當的 RPC 限制。
- 已驗證 - 對應至 rpcdce.h 中 RPC_RESTRICT_REMOTE_CLIENT_DEFAULT 的值。 只允許已驗證的 RPC 用戶端連線到套用原則設定之電腦上執行的 RPC 伺服器。 RPC 執行階段拒絕匿名呼叫。 如果介面註冊安全性回呼並提供 RPC_IF_ALLOW_CALLBACKS_WITH_NO_AUTH 旗標,則此限制不適用於該介面。
- 無例外的驗證1 - 對應至 rpcdce.h 中的值為 RPC_RESTRICT_REMOTE_CLIENT_HIGH。 只允許已驗證的 RPC 用戶端連線到套用原則設定之電腦上執行的 RPC 伺服器。 當此值設定為系統無法使用 RPC 接收遠端匿名呼叫時,不允許例外狀況。
這些設定的任何一項變更都需要系統重新開機才會生效。
警告
¹請勿在沒有重大測試的情況下使用此值。 如需詳細資訊,請參閱未驗證 RPC 用戶端的限制。
啟用授權端點解析
金鑰 EnableAuthEpResolution
可讓 RPC 用戶端執行時間在啟用時使用 NTLM (NT LAN Manager) 向端點對應程式進行驗證。 只有在實際的 RPC 用戶端呼叫使用 RPC 驗證時,才會進行此驗證查詢。
RPC 用戶端會呼叫一個 RPC 伺服器,該伺服器已註冊了動態端點並啟用了 RPC 端點對應客戶端的驗證功能。 這些呼叫會代表使用NTLM驗證的已驗證呼叫進行查詢。
嘗試使用動態端點進行呼叫的 RPC 用戶端會查詢伺服器上的 RPC 端點對應程式,以判斷它應該連接的端點。 即使 RPC 用戶端呼叫本身是使用 RPC 安全性執行,此查詢仍會以匿名方式執行。 如果啟用了 RestrictRemoteClients
設定,則無法匿名存取 RPC 端點對應程式介面。
設定 EnableAuthEpResolution
若要使用 GPO (群組原則物件) 編輯器來編輯這些原則:
選擇 開始>,輸入 gpedit.msc>,按下 Enter 以開啟 本機群組策略編輯器。
若要啟用等效的
EnableAuthEpResolution
設定,請瀏覽至 [電腦設定\系統\系統\遠端程序呼叫\啟用 RPC 端點對應程式用戶端驗證],然後選取兩個可用的設定之一:- 停用 - 此為預設設定。 RPC 用戶端不會向端點對應程式服務進行驗證,但能夠與 Windows NT4 Server 上的端點對應程式服務通訊。
- 已啟用 - 電腦用戶端會透過端點對應程式服務進行驗證,以取得包含驗證資訊的呼叫。 進行這類呼叫的客戶端無法與 Windows NT4 伺服器端點對應程式服務通訊。
這些設定的任何一項變更都需要系統重新開機才會生效。
重要
計算機 設定\Windows 設定\安全性設定\本機原則\安全性選項 中的下列組策略設定無法搭配 EnableAuthEpResolution
使用:
- 網路安全性:限制 NTLM:傳入 NTLM 流量 – 「拒絕所有帳戶」
- 網路安全性:限制 NTLM:送往遠端伺服器的傳出 NTLM 流量 - 「全部拒絕」
建議您從 NTLM 移開,以更妥善地保護您的環境。 如果面對限制 NTLM 和使用 EnableAuthEpResolution
之間的選擇,建議您在環境中限制 NTLM。
其他 RPC 介面註冊旗標
系統會建立這些介面註冊旗標,讓應用程式開發人員更輕鬆地保護 RPC 介面:
RPC_IF_ALLOW_CALLBACKS_WITH_NO_AUTH
註冊此旗標時,RPC 執行時間會針對所有呼叫叫用已註冊的安全性回呼,而不論呼叫安全性設定為何。 如果沒有此旗標,RPC 會先拒絕所有未經驗證的呼叫,再到達安全性回呼。 此旗標僅適用於註冊安全性回呼時。RPC_IF_SEC_NO_CACHE
已為介面註冊安全性回呼,以限制存取。 一般而言,安全性回呼會模擬用戶端,以確認用戶端是否有足夠的許可權可呼叫 介面。 一旦特定用戶端身分識別通過安全性回呼,通常會在後續嘗試時傳遞相同的安全性回呼。RPC 執行架構會藉由記住個別用戶端身分識別通過安全性回呼來利用此模式。 然後,它會略過該用戶端對相同介面的後續呼叫的安全性回呼。 這項功能稱為安全性回呼快取,自 Microsoft Windows 2000 系列作業系統起即存在。 您可以使用 RPC_IF_SEC_NO_CACHE 旗標來停用指定介面的安全性回呼快取。 如果安全性檢查可能會變更,可能會拒絕先前允許的用戶端身分識別,這會很有用。
RPC_IF_LOCAL_ONLY
使用這個旗標註冊介面時,RPC 會拒絕遠端 RPC 用戶端所進行的呼叫。 此外,所有ncadg_
* 通訊協定序列和所有ncacn_
* 通訊協定序列的本機呼叫也會遭到拒絕 (使用ncacn_np
具名管道除外)。 如果在ncacn_np
上進行呼叫,RPC 只有在不是來自 SRV (服務位置通訊協定) 時才允許呼叫,這會篩選掉所有遠端呼叫。 一律允許Ncalrpc
呼叫。
這些旗標的使用是應用程式開發人員的判斷權。 RPC 應用程式開發人員會提供額外的安全性工具,以協助保護其 RPC 介面,因為這些旗標不會變更任何現有的應用程式,或導致它們執行不正確。