Windows XP Service Pack 2 和 Windows Server 2003 Service Pack 1 中的 DCOM 安全性增強功能
Windows Server XP Service Pack 2 (SP2) 和 Windows Server 2003 Service Pack 1 (SP1) 引進分散式元件物件模型 (DCOM) 的增強預設安全性設定。 具體而言,他們會引進更細微的許可權,讓系統管理員能夠獨立控制本機和遠端許可權,以啟動、啟用和存取 COM 伺服器。
DCOM 有何用途?
Microsoft 元件物件模型 (COM) 是平台無關、分散式、面向對象的系統,可用來建立可互動的二進位軟體元件。 分散式元件物件模型 (DCOM) 可讓應用程式分散到您和應用程式最有意義的位置。 DCOM 有線通訊協定會透明地支援 COM 元件之間的可靠、安全且有效率的通訊。
這項功能 神秘 適用嗎?
如果您只將 COM 用於處理中的 COM 元件,這項功能並不適用於您。
如果您有符合下列其中一個準則的 COM 伺服器應用程式,則此功能適用於您:
- 應用程式的訪問許可權比執行應用程式所需的啟動許可權更嚴格。
- 應用程式通常是由遠端 COM 用戶端啟動,而不需使用系統管理帳戶。
- 應用程式僅供本機使用。 這表示您可以限制 COM 伺服器應用程式,使其無法遠端存取。
Windows XP Service Pack 2 和 Windows Server 2003 Service Pack 1 中新增了哪些新功能?
全計算機限制
COM 中已進行變更,以提供全計算機訪問控制,以控管計算機上所有呼叫、啟用或啟動要求的存取權。 思考這些訪問控制的最簡單方式,是針對計算機上的每部呼叫、啟用或啟動任何 COM 伺服器的全計算機訪問控制清單 (ACL) 進行的額外 AccessCheck 呼叫。 如果 AccessCheck 失敗,則會拒絕呼叫、啟用或啟動要求。 這是除了針對伺服器特定 ACL 執行的任何 AccessCheck 之外。 實際上,它提供必須傳遞的最小授權標準,才能存取計算機上的任何 COM 伺服器。 有一個全計算機的 ACL 可用來涵蓋啟動和啟動許可權,以及全計算機的 ACL,以涵蓋通話許可權。 這些可以透過元件服務 Microsoft Management Console (MMC) 進行設定。
這些全計算機的 ACL 可讓您透過 CoInitializeSecurity 或應用程式特定的安全性設定,覆寫特定應用程式所指定的弱式安全性設定。 這提供必須傳遞的最低安全性標準,不論特定伺服器的設定為何。
當存取 RPCSS 公開的介面時,會檢查這些 ACL。 這提供方法來控制此系統服務的存取。
這些 ACL 提供集中式位置,讓系統管理員可以設定套用至計算機上所有 COM 伺服器的一般授權原則。
注意
變更全計算機的安全性設定會影響所有 COM 伺服器應用程式,並可能會防止它們正常運作。 如果 COM 伺服器應用程式具有比全電腦限制更嚴格的限制,減少全電腦限制可能會將這些應用程式公開至不必要的存取。 相反地,如果您增加全計算機限制,某些 COM 伺服器應用程式可能無法再透過呼叫應用程式來存取。
根據預設,Windows XP SP2 電腦限制設定如下:
權限 | 系統管理員 | 每個人 | 匿名 |
---|---|---|---|
啟動 |
本機啟動 本機啟用 遠端啟動 遠端啟用 |
本機啟動 本機啟用 |
|
存取 |
本機存取 遠端存取 |
本機存取 |
根據預設,Windows Server 2003 SP 1 計算機限制設定如下所示。
權限 | 系統管理員 | 分散式 COM 使用者 (內建群組) | 每個人 | 匿名 |
---|---|---|---|---|
啟動 |
本機啟動 本機啟用 遠端啟動 遠端啟用 |
本機啟動 本機啟用 遠端啟動 遠端啟用 |
本機啟動 本機啟用 |
N/A |
存取 |
N/A |
本機存取 遠端存取 |
本機存取 遠端存取 |
本機存取 遠端存取 |
注意
分散式 COM 使用者是 Windows Server 2003 SP1 隨附的新內建群組,可加速將使用者新增至 DCOM 計算機限制設定的程式。 此群組是MachineAccessRestriction和MachineLaunchRestriction設定所使用的 ACL 的一部分,因此從此群組中移除用戶會影響這些設定。
為什麼這項變更很重要? 其可協助減輕哪些威脅?
許多 COM 應用程式都包含一些安全性特定程式代碼(例如,呼叫 CoInitializeSecurity),但使用弱式設定,通常允許未經驗證的處理程式存取。 系統管理員目前無法覆寫這些設定,以強制在舊版 Windows 中增強安全性。
COM 基礎結構包含 RPCSS,這是在系統啟動期間執行的系統服務,一律會在之後執行。 它會管理 COM 物件的啟用和執行中對象數據表,並提供協助程式服務給 DCOM 遠端處理。 它會公開可以從遠端呼叫的 RPC 介面。 由於某些 COM 伺服器允許未經驗證的遠端訪問,因此任何人都可以呼叫這些介面,包括未經驗證的使用者。 因此,遠端未經驗證電腦上的惡意使用者可能會攻擊 RPCSS。
在舊版的 Windows 中,系統管理員無法了解電腦上 COM 伺服器的曝光層級。 系統管理員有系統地檢查計算機上所有已註冊 COM 應用程式的已設定安全性設定,但鑒於預設安裝 Windows 中約有 150 部 COM 伺服器,該工作令人望而卻步。 沒有辦法檢視將安全性納入軟體的伺服器設定,而不需要檢閱該軟體的原始程式碼。
DCOM 全計算機限制可減輕這三個問題。 它也讓系統管理員能夠停用傳入的DCOM啟用、啟動和呼叫。
運作方式有哪些不同?
根據預設,[所有人] 群組會獲授與本機啟動、本機啟用和本機存取呼叫許可權。 這可讓所有本機案例在不修改軟體或操作系統的情況下運作。
根據預設,在 Windows XP SP2 中,[所有人] 群組會獲得遠端訪問呼叫許可權。 在 Windows Server 2003 SP1 中,會授與所有人和匿名群組的遠端訪問許可權。 這可啟用大部分的 COM 用戶端案例,包括 COM 用戶端將本機參考傳遞至遠端伺服器的常見案例,實際上會將客戶端轉換成伺服器。 在 Windows XP SP2 中,這可能會停用需要未經驗證遠端訪問呼叫的案例。
此外,預設只會將 管理員 istrators 群組的成員授與遠端啟用和啟動許可權。 這會停用非系統管理員對已安裝的 COM 伺服器進行遠端啟用。
如何? 解決這些問題?
如果您實作 COM 伺服器,並預期支援非系統管理 COM 用戶端的遠端啟用,則您應該考慮啟用此程式的風險是否可接受,或是否應該修改您的實作,以不需要非系統管理 COM 用戶端或遠端未經驗證的呼叫進行遠端啟用。
如果風險是可接受的,而且您想要啟用非系統管理 COM 用戶端或遠端未驗證呼叫的遠端啟用,您必須變更此功能的預設組態。
注意
變更全計算機的安全性設定會影響所有 COM 伺服器應用程式,並可能會防止它們正常運作。 如果 COM 伺服器應用程式具有比全電腦限制更嚴格的限制,減少全電腦限制可能會將這些應用程式公開給不必要的存取。 相反地,如果您增加全計算機限制,某些 COM 伺服器應用程式可能無法再透過呼叫應用程式來存取。
您可以使用元件服務 Microsoft Management Console (MMC) 或 Windows 登錄來變更組態設定。
如果您使用元件服務 MMC 嵌入式管理單元,則可以在所管理計算機的 [屬性] 對話框的 [COM 安全性] 索引標籤上設定這些設定。 已 修改 [存取權限] 區域,讓您除了 COM 伺服器的標準預設設定之外,還能夠設定全電腦限制。 此外,您可以在限制和預設值下,為本機和遠端訪問提供個別的 ACL 設定。
在 [ 啟動和啟用許可權] 區域中,您可以控制本機和遠程許可權,以及全計算機的限制和預設值。 您可以獨立指定本機和遠端啟用和啟動許可權。
或者,您可以使用登錄來設定這些 ACL 設定。
這些 ACL 會儲存在登入的下列位置:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Ole\MachineAccessRestriction=ACL
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Ole\MachineLaunchRestriction=ACL
這些是類型為 REG_BINARY 的具名值,其中包含可存取計算機上任何 COM 類別或 COM 物件之主體 ACL 的數據。 ACL 中的存取權限如下:
COM_RIGHTS_EXECUTE 1
COM_RIGHTS_EXECUTE_LOCAL 2
COM_RIGHTS_EXECUTE_REMOTE 4
COM_RIGHTS_ACTIVATE_LOCAL 8
COM_RIGHTS_ACTIVATE_REMOTE 16
您可以使用一般安全性功能來建立這些 ACL。
注意
為了提供回溯相容性,ACL 可以存在於 Windows XP SP2 和 Windows Server 2003 SP1 之前所使用的格式,它只使用存取權COM_RIGHTS_EXECUTE,或者它可以存在於 Windows XP SP2 和 Windows Server 2003 SP1 中使用的新格式,該格式會使用COM_RIGHTS_EXECUTE搭配COM_RIGHTS_EXECUTE_LOCAL的組合, COM_RIGHTS_EXECUTE_REMOTE、COM_RIGHTS_ACTIVATE_LOCAL和COM_RIGHTS_ACTIVATE_REMOTE。 請注意,COM_RIGHTS_EXECUTE> 必須一律存在;缺少此許可權會產生無效的安全性描述元。 另請注意,您不得在單一 ACL 中混合舊格式和新格式;所有訪問控制專案(ACE)都必須只授與COM_RIGHTS_EXECUTE訪問許可權,或者它們都必須將COM_RIGHTS_EXECUTE與COM_RIGHTS_EXECUTE_LOCAL、COM_RIGHTS_EXECUTE_REMOTE、COM_RIGHTS_ACTIVATE_LOCAL和COM_RIGHTS_ACTIVATE_REMOTE的組合一起授與。
注意
只有具有 管理員 istrator 許可權的使用者才能修改這些設定。
Windows XP Service Pack 2 和 Windows Server 2003 Service Pack 1 中的哪些現有功能正在變更?
RPCSS 以網路服務的形式執行
RPCSS 是 RPC 端點對應程式和 DCOM 基礎結構的重要服務。 此服務在舊版 Windows 中以本機系統的形式執行。 為了減少 Windows 的攻擊面並提供深度防禦,RPCSS 服務功能已分成兩個服務。 RPCSS 服務具有所有不需要本機系統許可權的原始功能,現在會在網路服務帳戶下執行。 新的 DCOMLaunch 服務,其中包含需要在本機系統帳戶下執行本機系統許可權的功能。
為什麼這項變更很重要?
這項變更可減少受攻擊面,並提供 RPCSS 服務的深度防禦,因為 RPCSS 服務中的特權提升現在僅限於網路服務許可權。
運作方式有哪些不同?
這項變更對使用者而言應該是透明的,因為 RPCSS 和 DCOMLaunch 服務的組合相當於舊版 Windows 中提供的舊版 RPCSS 服務。
更具體的 COM 許可權
COM 伺服器應用程式有兩種類型的許可權:啟動許可權和訪問許可權。 如果伺服器尚未執行,啟動許可權控制在 COM 啟用期間啟動 COM 伺服器的授權。 這些許可權會定義為登錄設定中指定的安全性描述元。 訪問控制授權以呼叫執行中的 COM 伺服器。 這些許可權會定義為透過 CoInitializeSecurity API 或使用登錄設定提供給 COM 基礎結構的安全性描述元。 啟動和訪問許可權都允許或拒絕以主體為基礎的存取,而且不會區分呼叫者是伺服器或遠端的本機。
第一個變更會根據距離來區分 COM 訪問許可權。 定義的兩個距離是Local和Remote。 本機 COM 訊息會透過本機遠端過程調用 (LRPC) 通訊協定來抵達,而遠端 COM 訊息則透過遠端過程調用 (RPC) 主機通訊協定抵達,例如傳輸控制通訊協定 (TCP)。
COM 啟用是藉由呼叫 CoCreateInstance 或其其中一個變體,在用戶端上取得 COM 介面 Proxy 的動作。 此啟用程式的副作用是,有時必須啟動 COM 伺服器才能滿足用戶端的要求。 啟動許可權 ACL 判斷提示允許啟動 COM 伺服器的人員。 ACL 存取權限判斷提示,只要 COM 伺服器已經執行,即允許啟動 COM物件或呼叫該物件。
第二個變更是呼叫和啟用許可權會分開,以反映兩個不同的作業,並將啟用許可權從訪問許可權 ACL 移至啟動許可權 ACL。 因為啟用和啟動都與取得介面指標有關,因此啟用和啟動訪問許可權在邏輯上都屬於一個 ACL。 而且,由於您一律透過組態指定啟動許可權(相較於通常以程式設計方式指定的訪問許可權),因此將啟用許可權放在啟動許可權 ACL 中,可讓系統管理員控制啟用。
啟動權限存取控制專案 (ACE) 分成四個存取權限:
- 當地發射(LL)
- 遠端發射 (RL)
- 本機啟動 (LA)
- 遠端啟動 (RA)
存取權限安全性描述元分成兩個存取權限:
- 本機存取通話 (LC)
- 遠端存取通話 (RC)
這可讓系統管理員套用非常特定的安全性設定。 例如,您可以設定 COM 伺服器,使其接受所有人的本機存取呼叫,同時只接受來自 管理員 istrators 的遠端訪問呼叫。 您可以透過 COM 許可權安全性描述元的變更來指定這些區別。
為什麼這項變更很重要? 其可協助減輕哪些威脅?
舊版 COM 伺服器應用程式無法限制應用程式,因此只能在本機使用,而不需要透過 DCOM 在網路上公開應用程式。 當使用者能夠存取 COM 伺服器應用程式時,他們同時具有本機和遠端用途的存取權。
COM 伺服器應用程式可能會向未經驗證的用戶公開自己,以實作 COM 回呼案例。 在此案例中,應用程式也必須將其啟用公開給未經驗證的使用者,這可能無法取用。
精確的 COM 許可權可讓系統管理員彈性控制電腦的 COM 許可權原則。 這些許可權可啟用所描述案例的安全性。
運作方式有哪些不同? 是否有任何相依性?
為了提供回溯相容性,現有的 COM 安全性描述元會解譯為同時允許或拒絕本機和遠端訪問。 也就是說,訪問控制專案 (ACE) 同時允許本機和遠端,或拒絕本機和遠端。
呼叫或啟動許可權沒有回溯相容性問題。 不過,有啟用許可權相容性問題。 如果在 COM 伺服器的現有安全性描述元中,所設定的啟動許可權比訪問許可權更嚴格,而且比用戶端啟用案例的最低需求更嚴格,則必須修改啟動許可權 ACL,以授與授權客戶端適當的啟用許可權。
對於使用預設安全性設定的 COM 應用程式,沒有相容性問題。 對於使用 COM 啟用動態啟動的應用程式,大部分都沒有任何相容性問題,因為啟動許可權必須已經包含任何能夠啟動對象的人員。 否則,即使套用 Windows XP SP2 或 Windows Server 2003 SP1 之前,這類應用程式仍會產生啟動失敗,而呼叫者若沒有啟動許可權,就會嘗試啟動物件,而且 COM 伺服器尚未執行。
相容性問題最關心的應用程式是已經由一些其他機制啟動的 COM 應用程式,例如 Windows 檔案總管或服務控制管理員。 您也可以透過先前的 COM 啟用來啟動這些應用程式,這會覆寫預設存取權和啟動許可權,並指定比呼叫許可權更嚴格的啟動許可權。 如需解決此相容性問題的詳細資訊,請參閱下一節中的<如何? 解決這些問題>。
如果將升級至 Windows XP SP2 或 Windows Server 2003 SP1 的系統回復為先前的狀態,則任何已編輯為允許本機存取、遠端訪問或兩者的 ACE 都會解譯為允許本機和遠端訪問。 編輯為拒絕本機存取、遠端訪問或兩者的任何 ACE 都會解譯為拒絕本機和遠端訪問。 每當卸載 Service Pack 時,您應該確定沒有新設定的 ACE 導致應用程式停止運作。
如何? 解決這些問題?
如果您實作 COM 伺服器並覆寫預設安全性設定,請確認應用程式特定的啟動許可權 ACL 會將啟用許可權授與適當的使用者。 如果沒有,您必須變更應用程式特定的啟動許可權 ACL,以提供適當的使用者啟用許可權,讓使用 DCOM 的應用程式和 Windows 元件不會失敗。 這些應用程式特定的啟動許可權會儲存在登錄中。
COM ACL 可以使用一般安全性功能來建立或修改。
Windows XP Service Pack 2 中新增或變更了哪些設定?
警告
不當使用這些設定可能會導致使用DCOM的應用程式和 Windows 元件失敗。
在下表中,會使用這些縮寫:
LL - 本機啟動
LA - 本機啟用
RL - 遠端啟動
RA - 遠端啟用
LC - 本機存取呼叫
RC - 遠端訪問呼叫
ACL - 存取控制 清單
設定名稱 | Location | 先前的預設值 | 預設值 | 可能值 |
---|---|---|---|---|
MachineLaunchRestriction |
HKEY_LOCAL_MACHINE\SOFTWARE\ Microsoft\Ole |
所有人 - LL、LA、RL、RA 匿名- LL、LA、RL、RA (這是新的登錄機碼。根據現有的行為,這些是有效值。 |
管理員 istrator:LL、LA、RL、RA |
ACL |
MachineAccessRestriction |
HKEY_LOCAL_MACHINE\SOFTWARE\ Microsoft\Ole |
所有人 - LC、RC 匿名 - LC、RC (這是新的登錄機碼。根據現有的行為,這些是有效值。 |
所有人:LC、RC 匿名:LC |
ACL |
CallFailureLoggingLevel |
HKEY_LOCAL_MACHINE\SOFTWARE\ Microsoft\Ole |
不適用。 |
此登錄機碼不存在;不過,遺漏的索引鍵或值會解譯為 2。 預設不會記錄此事件。 如果您將此值變更為1以開始記錄這項資訊,以協助您針對問題進行疑難解答,請務必監視事件記錄檔的大小,因為這是可產生大量專案的事件。 |
1 - 在 COM 伺服器進程呼叫期間一律記錄事件記錄檔失敗。 2 - 在呼叫伺服器進程中的呼叫期間,永不記錄事件記錄檔失敗。 |
InvalidSecurityDescriptorLoggingLevel |
HKEY_LOCAL_MACHINE\SOFTWARE\ Microsoft\Ole |
不適用。 |
此登錄機碼不存在;不過,遺漏的索引鍵或值會解譯為 1。 默認會記錄此事件。 它應該很少發生。 |
1 - 當 COM 基礎結構找到無效的安全性描述元時,一律記錄事件記錄檔失敗。 2 - 當 COM 基礎結構找到無效的安全性描述元時,永不記錄事件記錄檔失敗。 |
DCOM:計算機啟動限制的安全性描述元定義語言 (SDDL) 語法 |
(組策略物件)計算機設定 \Windows 設定\本機原則 \安全性選項 |
不適用。 |
未定義 |
SDDL 格式的訪問控制清單。 此原則的存在會覆寫先前 MachineLaunchRestriction 中的值。 |
DCOM:安全性描述元定義語言中的計算機存取限制 (SDDL) 語法 |
(組策略物件)計算機設定 \Windows 設定 \本機原則 \安全性選項 |
不適用。 |
未定義 |
SDDL 格式的訪問控制清單。 此原則的存在會覆寫先前在MachineAccessRestriction中的值。 |
Windows Server 2003 Service Pack 1 中新增或變更哪些設定?
注意
不當使用這些設定可能會導致使用DCOM的應用程式和 Windows 元件失敗。
在下表中,會使用這些縮寫:
LL - 本機啟動
LA - 本機啟用
RL - 遠端啟動
RA - 遠端啟用
LC - 本機存取呼叫
RC - 遠端訪問呼叫
ACL - 存取控制 清單
設定名稱 | Location | 先前的預設值 | 預設值 | 可能值 |
---|---|---|---|---|
MachineLaunchRestriction |
HKEY_LOCAL_MACHINE\SOFTWARE\ Microsoft\Ole |
所有人:LL、LA、RL、RA 匿名:LL、LA、RL、RA (這是新的登錄機碼。根據現有的行為,這些會是有效值。 |
管理員 istrator:LL、LA、RL、RA 所有人:LL、LA 分散式 COM 使用者:LL、LA、RL、RA |
ACL |
MachineAccessRestriction |
HKEY_LOCAL_MACHINE\SOFTWARE\ Microsoft\Ole |
所有人:LC、RC 匿名:LC、RC (這是新的登錄機碼。根據現有的行為,這些會是有效值。 |
所有人:LC、RC 匿名:LC、RC |
ACL |
CallFailureLoggingLevel |
HKEY_LOCAL_MACHINE\SOFTWARE\ Microsoft\Ole |
不適用。 |
此登錄機碼不存在;不過,遺漏的索引鍵或值會解譯為 2。 預設不會記錄此事件。 如果您將此值變更為1以開始記錄這項資訊,以協助您針對問題進行疑難解答,請務必監視事件記錄檔的大小,因為這是可產生大量專案的事件。 |
1 - 當 COM 基礎結構找到無效的安全性描述元時,一律記錄事件記錄檔失敗。 2 - 當 COM 基礎結構找到無效的安全性描述元時,永不記錄事件記錄檔失敗。 |
InvalidSecurityDescriptorLoggingLevel |
HKEY_LOCAL_MACHINE\SOFTWARE\ Microsoft\Ole |
不適用。 |
此登錄機碼不存在;不過,遺漏的索引鍵或值會解譯為 1。 默認會記錄此事件。 它應該很少發生。 |
1 - 當 COM 基礎結構找到無效的安全性描述元時,一律記錄事件記錄檔失敗。 2 - 當 COM 基礎結構找到無效的安全性描述元時,永不記錄事件記錄檔失敗。 |
DCOM:計算機啟動限制的安全性描述元定義語言 (SDDL) 語法 |
(組策略物件)計算機設定 \Windows 設定 \本機原則 \安全性選項 |
不適用。 |
未定義。 |
SDDL 格式的訪問控制清單。 此原則的存在會覆寫先前 MachineLaunchRestriction 中的值。 |
DCOM:安全性描述元定義語言中的計算機存取限制 (SDDL) 語法 |
(組策略物件)計算機設定 \Windows 設定 \本機原則 \安全性選項 |
不適用。 |
未定義。 |
SDDL 格式的訪問控制清單。 此原則的存在會覆寫先前在MachineAccessRestriction中的值。 |