DsAddSidHistory 函式會從某個網域 (來源網域) 取得安全性主體的主要帳戶安全性標識碼 (SID),並將其新增至不同樹系中另一個 (目的地) 網域中安全性主體的 sIDHistory 屬性。 當來源網域處於 Windows 2000 原生模式時,此函式也會擷取來源主體的 sIDHistory 值,並將其新增至目的地主體的 sIDHistory。
將 SID 新增至安全性主體的 sIDHistory 是一項安全性敏感的操作,能有效授予目的地主體存取來源主體可存取之所有資源的權限,前提是適用的資源網域存在對目的地網域的信任。
在原生模式 Windows 2000 網域中,使用者登入會建立包含使用者主要帳戶 SID 和群組 SID 的存取令牌,以及使用者 sIDHistory,以及使用者所屬群組的 sIDHistory。 在使用者的權杖中擁有這些先前的 SID(sIDHistory 值),會授予使用者存取權,讓其能夠存取由包含先前 SID 的存取控制清單(ACL)所保護的資源。
這項作業有助於特定 Windows 2000 部署案例。 特別是,它支持針對已存在於 Windows NT 4.0 生產環境中的使用者和群組建立新 Windows 2000 樹系中的帳戶的案例。 藉由將 Windows NT 4.0 帳戶 SID 放在 Windows 2000 帳戶中,sIDHistory,就會保留網路資源的存取權,讓使用者登入新的 Windows 2000 帳戶。
DsAddSidHistory 也支援將 Windows NT 4.0 備份域控制器 (BDC) 和資源伺服器(或原生模式 Windows 2000 網域中的 DC 和成員伺服器)移轉至 Windows 2000 網域作為成員伺服器。 此移轉需要於目的地的 Windows 2000 網域中建立網域本機群組,這些群組在其 sIDHistory中必須包含來源網域上的 BDC 定義的本地群組的主要 SID(或 Windows 2000 伺服器上 ACL 中所參考的域本機群組)。 藉由建立包含 sIDHistory 和來源本地組所有成員的目的地本地組,則會針對所有成員維護受參考來源本地組的 ACL 保護的已移轉伺服器資源存取權。
注意
使用 DsAddSidHistory 時,必須了解其在這些和其他情況下更廣泛的系統管理和安全性影響。 如需詳細資訊,請參閱白皮書《規劃從 Windows NT 遷移至 Microsoft Windows 2000》,在 Windows 2000 支援工具中以 Dommig.doc 形式提供。 您也可以在 \support\tools 下的產品CD上找到此檔。
授權需求
DsAddSidHistory 需要來源和目的地網域中的系統管理員許可權。 具體而言,此 API 的呼叫端必須是目的地網域中網域系統管理員群組的成員。 執行此成員資格的硬式編碼檢查。 此外,SrcDomainCreds 參數中提供的帳戶必須是來源網域中 Administrators 或 Domain Administrators 群組的成員。 如果 NULL 傳入 SrcDomainCreds,則 API 的呼叫者必須是來源網域中 Administrators 或 Domain Administrators 群組的成員。
網域和信任需求
DsAddSidHistory 需要目的地網域處於 Windows 2000 原生模式或更新版本,因為只有此網域類型支援 sIDHistory 屬性。 來源網域可以是 Windows NT 4.0 或 Windows 2000、混合或原生模式。 來源和目的地網域不得位於相同的樹系中。 Windows NT 4.0 網域按定義無法存在於樹系中。 此樹系間條件約束可確保不會在同一個樹系中建立重複的 SID,無論是顯示為主要 SID 還是 sIDHistory 值。
DsAddSidHistory 在下表列出的情況中需要從來源域到目標域的外部信任。
| 案例 | 描述 |
|---|---|
| 來源網域為 Windows 2000。 |
來源 sIDHistory 屬性,僅適用於 Windows 2000 來源網域,只能使用 LDAP 讀取,這需要此信任才能進行完整性保護。 |
| 來源網域為 Windows NT 4.0,SrcDomainCredsNULL。 |
使用來電者憑證支援來源域操作所需的身份模擬依賴於這種信任。 模擬也需要目的地域控制器預設在域控制器上啟用「信任委派」。 |
不過,如果來源網域為 Windows NT 4.0,且 SrcDomainCreds 不是 NULL,则來源網域和目的地網域之間不需要信任。
來源域控制器需求
DsAddSidHistory 要求選取域控制器作為來源網域中作業的目標,必須是 Windows NT 4.0 網域中的 PDC 或 Windows 2000 網域中的 PDC 模擬器。 來源網域的稽核是藉由寫入操作生成,因此在 Windows NT 4.0 的來源網域中需要 PDC,而 PDC 的限制確保 DsAddSidHistory 稽核記錄只在單一計算機上產生。 這可減少檢閱所有 DC 審核日誌以監控此操作的使用情況的需求。
注意
在 Windows NT 4.0 來源網域中,PDC(來源網域中的作業目標)必須執行 Service Pack 4(SP4)和更新版本,以確保適當的稽核支援。
下列登錄值必須建立為REG_DWORD值,並在 Windows NT 4.0 和 Windows 2000 來源 DC 的來源域控制器上設定為 1。
HKEY_LOCAL_MACHINE
System
CurrentControlSet
Control
Lsa
TcpipClientSupport
設定此值可透過 TCP 傳輸啟用 RPC 呼叫。 此舉是必需的,因為根據預設,SAMRPC 介面只能經由命名管道進行遠端處理。 使用命名管道會導致認證管理系統適合以互動方式登入的使用者進行網路通話,但對於使用使用者提供的認證進行網路呼叫的系統程序來說,並不具彈性。 RPC over TCP 更適合用於該用途。 設定此值並不會降低系統安全性。 如果建立或變更此值,則必須重新啟動來源域控制器,此設定才會生效。
在來源網域中必須建立一個新的本地群組「<SrcDomainName>$$$」以進行稽核。
審計
DsAddSidHistory 作業都會稽核,以確保來源和目的地網域系統管理員都能夠偵測到此函式何時執行。 來源和目的地網域中必須進行稽核。 DsAddSidHistory 會確認稽核模式位於每個網域中,且成功/失敗事件的帳戶管理稽核已開啟。 在目的網域中,會為每個成功或失敗的 DsAddSidHistory 作業產生唯一的「新增 Sid 歷程記錄」審計事件。
Windows NT 4.0 系統上無法使用特定的「新增 Sid 歷程記錄」稽核事件。 若要產生明確反映對來源網域使用 DsAddSidHistory 的稽核事件,它會對名稱為稽核記錄中唯一標識碼的特殊群組執行作業。 本地組 「<SrcDomainName>$$$“,其名稱是由附加三個美元符號 ($) 的來源網域 NetBIOS 名稱所組成(ASCII 代碼 = 0x24,且 Unicode = U+0024),必須先在來源域控制器上建立,才能呼叫 DsAddSidHistory。 此作業目標的每個來源使用者和全域群組都會新增至 ,然後從此群組的成員資格中移除。 這會在來源網域中產生 [新增成員] 和 [刪除成員] 稽核事件,其可藉由搜尋參考組名的事件來加以監視。
注意
DsAddSidHistory Windows NT 4.0 或 Windows 2000 混合模式來源網域的本機群組作業無法稽核,因為本機群組無法成為另一個本機群組的成員,因此無法新增至特殊的 “<SrcDomainName>$$$” 本機群組。 缺少稽核並不會對來源網域造成安全性問題,因為來源網域資源存取不受此作業影響。 將來源本地組的 SID 新增至目的地本地組並不會將受該本地組保護的來源資源存取權授與給任何其他使用者。 將成員新增至目的地本地組並不會授與他們來源資源的存取權。 新增的成員僅被授權存取從來源網域移轉到目的地網域的伺服器,而這些伺服器中可能有一些資源是受到來源本地組 SID 保護的。
數據傳輸安全性
DsAddSidHistory 會強制執行下列安全性措施:
- 從 Windows 2000 工作站進行呼叫時,呼叫者的憑證會用來驗證和隱私保護到目的域控制器的 RPC 呼叫。 如果 SrcDomainCreds 不是 NULL,則工作站和目的地 DC 都必須支援 128 位加密,以保護認證。 如果 128 位加密無法使用,且 提供 SrcDomainCreds,則必須在目的地 DC 上進行呼叫。
- 目的網域控制器會使用 SrcDomainCreds 或呼叫端的憑證來與來源網域控制器通訊,以進行互相驗證並保護來源帳戶 SID(透過 SAM 查閱來讀取)和 sIDHistory(透過 LDAP 讀取)的完整性。
威脅模型
下表列出與 DsAddSidHistory 呼叫相關聯的潛在威脅,並解決與特定威脅相關的安全性措施。
| 潛在威脅 | 安全措施 |
|---|---|
| 中間人攻擊 未經授權的用戶會攔截來源物件的 查詢 SID 返回調用,將來源物件的 SID 替換為任意 SID,以插入到目標物件的 SID 歷史記錄中。 |
來源物件 查閱 SID 是使用呼叫端系統管理員認證的已驗證 RPC,具有封包完整性訊息保護。 這可確保傳回呼叫無法在未偵測的情況下修改。 目的地域控制器會建立唯一的「新增 SID 歷程記錄」稽核事件,以反映新增至目的地帳戶的 SID sIDHistory。 |
| 特洛伊木馬來源網域 未經授權的使用者會在具有相同網域 SID 的專用網上建立「特洛伊木馬」來源網域,以及與合法來源網域相同的部分帳戶 SID。 未經授權的使用者接著會嘗試在目的地網域中執行 DsAddSidHistory,以取得來源帳戶的 SID。 這不需要真正的來源網域系統管理員認證,而且不需要在實際來源網域中留下稽核線索即可完成。 未經授權的使用者建立特洛伊木馬來源網域的方法可能是下列其中一項:
|
雖然有許多方式可讓未經授權的使用者擷取或建立所需的來源物件 SID,但未經授權的用戶無法使用它來更新帳戶的 sIDHistory,而不需要成為目的地 Domain Administrators 群組的成員。 因為在目的域控制器上對域系統管理員成員資格的檢查是硬式編碼的,所以在目標DC上,沒有方法可以通過磁碟修改來變更保護此功能的訪問控制數據。 在目標網域中對於複製木馬程式來源帳戶的嘗試進行稽核。 透過僅為高度信任的個人保留網域管理員群組中的成員資格,可以減輕此攻擊。 |
| 磁碟上對 SID 歷史紀錄的修改 具有網域管理員憑證的高技巧未經授權使用者,若擁有目的地網域中之網域控制器 (DC) 的實體存取權,則可以修改磁碟上的帳戶 sIDHistory 值。 |
未使用 DsAddSidHistory來啟用此嘗試。 除了高度信任的系統管理員之外,防止域控制器的實體存取,藉此減輕此攻擊。 |
| 用來移除保護措施的不良程式代碼 具有目錄服務程式代碼實體存取權的未經授權的使用者或流氓系統管理員,可以建立惡意代碼:
|
實際存取 DS 程式代碼且知識足以建立流氓程式代碼的人員,能夠任意修改帳戶的 sIDHistory 屬性。
DsAddSidHistory API 不會增加此安全性風險。 |
| 易受被竊 SID 攻擊的資源 如果未經授權的使用者已成功使用此處所述的其中一種方法來修改帳戶 sIDHistory,且感興趣的資源網域信任未經授權的使用者帳戶網域,則未經授權的使用者可以取得未經授權存取遭竊 SID 資源,可能不會在 SID 遭竊的帳戶網域中留下稽核線索。 |
資源網域系統管理員只要從安全性觀點設定有意義的信任關係,即可保護其資源。
DsAddSidHistory 的使用限制在受信任的目標網域中,限制為已在其職責範圍內具有廣泛許可權的網域系統管理員群組成員。 |
| 不受控制的目標網域 未經授權的使用者會建立具有帳戶的 Windows 2000 網域,其 sIDHistory 包含已從來源網域竊取的 SID。 未經授權的使用者使用此帳戶來未經授權存取資源。 |
未經授權的使用者需要來源網域的系統管理員認證,才能使用 DsAddSidHistory,並在來源域控制器上留下稽核記錄。 流氓目標網域只會在信任流氓網域的其他網域中取得未經授權存取權,這需要這些資源網域的管理員許可權。 |
作業限制條件
本節說明使用 DsAddSidHistory 函式的操作限制條件。
SrcPrincipal 的 SID 不得已經存在於目的樹系中,不論是作為主要帳戶 SID 還是作為帳戶 sIDHistory 的一部分。 例外狀況是,DsAddSidHistory 嘗試將 SID 新增至包含相同 SID 的 sIDHistory 時,不會產生錯誤。 此行為可讓 DsAddSidHistory 以相同的輸入多次執行,進而成功且一致的結束狀態,以方便工具開發人員使用。
注意
全域編錄複寫延遲可能會提供一個視窗,其中可能會建立重複的 SID。 不過,系統管理員可以輕鬆地刪除重複的 SID。
SrcPrincipal 和 DstPrincipal 必須是下列其中一種類型:
使用者
已啟用安全性的群組,包括:
- 本地組全域群組 網域本地組 (僅限 Windows 2000 原生模式) 通用群組 (僅限 Windows 2000 原生模式)
SrcPrincipal 和 DstPrincipal 的物件類型必須相符。
- 如果 SrcPrincipal 是使用者,DstPrincipal 必須是使用者。
- 如果 SrcPrincipal 是本機或網域本地組,DstPrincipal 必須是網域本地組。
- 如果 SrcPrincipal 是全域或通用群組,DstPrincipal 必須是全域或通用群組。
SrcPrincipal 和 DstPrincipal 不能是下列其中一種型別:(當出現以下情況時,DsAddSidHistory 會因錯誤而失敗)
電腦(工作站或域控制器)
網域間信任
暫時重複帳戶(幾乎未使用的功能,LANman 的舊版)
具有已知 SID 的帳戶。 每個網域中的已知 SID 都相同;因此,將它們新增至 sIDHistory 會違反 Windows 2000 樹系的 SID 唯一性需求。 具有已知 SID 的帳戶包含下列本地群組:
- 帳戶操作員 管理員 備份操作員 訪客 列印操作員 復寫器操作員 伺服器操作員 使用者
如果 SrcPrincipal 具有已知的相對標識符 (RID) 和網域特定前置詞,也就是網域系統管理員、網域使用者和網域計算機,則 DstPrincipal 必須擁有相同的已知 RID,才能讓 DsAddSidHistory 成功。 具有已知 RID 的帳戶包括下列使用者和全域群組:
- 管理員
- 客人
- 網域系統管理員
- 網域來賓
- 網域使用者
設定登錄值
下列程式示範如何設定 TcpipClientSupport 登錄值。
設定 TcpipClientSupport 登錄值
在來源域控制器上建立下列登錄值作為REG_DWORD值,並將其值設定為 1。
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa\TcpipClientSupport
然後,重新啟動來源域控制器。 此登錄值會導致 SAM 接聽 TCP/IP。 如果來源域控制器上未設定此值,DsAddSidHistory 將會失敗。
啟用使用者/群組管理事件的稽核
下列程式示範如何在 Windows 2000 或 Windows Server 2003 來源或目的地網域中啟用使用者/群組管理事件的稽核。
若要在 Windows 2000 或 Windows Server 2003 來源或目的地網域中啟用使用者/群組管理事件的稽核
- 在 [Active Directory 使用者和計算機] MMC 嵌入式管理單元中,選取目的地域控制器容器。
- 以滑鼠右鍵按下 域控制器,然後選擇 [屬性]。
- 按一下 [組策略] 索引標籤。
- 選取 [預設域控制器原則],然後按下 [編輯]。
- 在 [計算機設定\Windows 設定\安全性設定\本機原則\稽核策略下,按兩下 [稽核帳戶管理]。
- 在 稽核帳戶管理 視窗中,選擇審核類型中的 成功 和 失敗。 原則更新會在重新啟動或重新整理發生之後生效。
- 在組策略 MMC 嵌入式管理單元中檢視有效的稽核策略,以確認已啟用稽核。
下列程式示範如何在 Windows NT 4.0 網域中啟用使用者/群組管理事件的稽核。
在 Windows NT 4.0 網域中啟用使用者/群組管理事件的稽核
- 在 [網域 使用者管理員] 中,單擊 [原則] 功能表,然後選取 [稽核]。
- 選擇 稽核這些事件。
- 如需進行 使用者和群組管理,請檢查 成功與失敗。
下列程式示範如何在 Windows NT 4.0、Windows 2000 或 Windows Server 2003 來源網域中啟用使用者/群組管理事件的稽核。
若要在 Windows NT 4.0、Windows 2000 或 Windows Server 2003 來源網域中啟用使用者/群組管理事件的稽核
- 在 [網域 使用者管理員] 中,按一下 [使用者] 功能表,然後選取 [新增本地群組]。
- 輸入由來源網域 NetBIOS 名稱所組成的組名,附加三個貨幣符號 ($),例如 FABRIKAM$$$$ 。 描述欄位應該指出此群組是用來稽核使用 DsAddSidHistory 或複製作業。 請確定群組中沒有任何成員。 按下 [確定]。
如果來源和目的地稽核未啟用,DsAddSidHistory 作業會失敗,如這裡所述。
視需要設定信任
如果下列其中一項成立,則必須從來源網域建立信任至目的地網域(這必須發生在不同的樹系中):
- 來源網域是 Windows Server 2003。
- 來源網域為 Windows NT 4.0,SrcDomainCredsNULL。