使用 DsAddSidHistory

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 的呼叫端必須是目的地網域中網域 管理員 istrators 群組的成員。 執行此成員資格的硬式編碼檢查。 此外,SrcDomainCreds 參數中提供的帳戶必須是來源網域中 管理員 istrators 或 Domain 管理員 istrators 群組的成員。 如果在 SrcDomainCreds傳遞 NULL,API 的呼叫端必須是來源網域中 管理員 istrators 或 Domain 管理員 istrators 群組的成員。

網域和信任需求

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,SrcDomainCreds NULL
使用呼叫端認證支援來源網域作業所需的模擬,取決於此信任。 模擬也需要目的地域控制器預設在域控制器上啟用「信任委派」。

不過,如果來源網域是 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。 此作業目標的每個來源使用者和全域群組都會新增至 ,然後從此群組的成員資格中移除。 這會在來源網域中產生 [新增成員] 和 [刪除成員] 稽核事件,其可藉由搜尋參考組名的事件來加以監視。

注意

無法在 Windows NT 4.0 或 Windows 2000 混合模式來源網域的本機群組上執行 DsAddSidHistory 作業,因為本地組無法成為另一個本地組的成員,因此無法新增至特殊的 “<SrcDomainName>$$$” 本地組。 缺少稽核並不會對來源網域造成安全性問題,因為來源網域資源存取不受此作業影響。 將來源本地組的 SID 新增至目的地本地組並不會將受該本地組保護的來源資源存取權授與給任何其他使用者。 將成員新增至目的地本地組並不會授與他們來源資源的存取權。 新增的成員只會授與從來源網域移轉之目的地網域中的伺服器存取權,這些伺服器可能會受到來源本地組 SID 保護的資源。

數據傳輸安全性

DsAddSidHistory 會強制執行下列安全性措施:

  • 從 Windows 2000 工作站呼叫,呼叫端的認證可用來驗證和保護目的地域控制器的 RPC 呼叫。 如果 SrcDomainCreds 不是 NULL,則工作站和目的地 DC 都必須支援 128 位加密,以保護認證。 如果 128 位加密無法使用,且 提供 SrcDomainCreds ,則必須在目的地 DC 上進行呼叫。
  • 目的地域控制器會使用 SrcDomainCreds 或呼叫端的認證與來源域控制器通訊,以相互驗證和完整性保護來源帳戶 SID 的讀取(使用 SAM 查閱)和 sIDHistory (使用 LDAP 讀取)。

威脅模型

下表列出與 DsAddSidHistory 呼叫相關聯的潛在威脅,並解決與特定威脅相關的安全性措施。

潛在威脅 安全性量值
中間人攻擊
未經授權的使用者攔截來源對象傳回呼叫的查閱 SID,以任意 SID 取代來源物件 SID 以插入目標物件 SIDhistory。
來源物件的查閱 SID 是已驗證的 RPC,使用呼叫端的系統管理員認證搭配封包完整性訊息保護。 這可確保傳回呼叫無法在未偵測的情況下修改。 目的地域控制器會建立唯一的「新增 SID 歷程記錄」稽核事件,以反映新增至目的地帳戶 sIDHistory 的 SID。
特洛伊木馬來源網域
未經授權的使用者會在具有相同網域 SID 的專用網上建立「特洛伊木馬」來源網域,以及與合法來源網域相同的部分帳戶 SID。 未經授權的使用者接著會嘗試在目的地網域中執行 DsAddSidHistory ,以取得來源帳戶的 SID。 這不需要實際來源網域 管理員 istrator 認證,而且不需要在真實來源網域中留下稽核線索。 未經授權的使用者建立特洛伊木馬來源網域的方法可能是下列其中一項:
  • 取得來源網域 SAM 的複本(BDC 備份)。
  • 建立新的網域,改變磁碟上的網域 SID 以符合合法的來源網域 SID,然後建立足夠的使用者,以具現化具有所需 SID 的帳戶。
  • 建立 BDC 複本。 這需要來源網域 管理員 istrator 認證。 然後未經授權的使用者將復本帶到專用網以實作攻擊。

雖然有多種方式可讓未經授權的使用者擷取或建立所需的來源物件 SID,但未經授權的用戶無法使用它來更新帳戶的 sIDHistory,而不需要是目的地 Domain 管理員 istrators 群組的成員。 由於檢查目的地域控制器上的網域 管理員 istrator 成員資格是硬式編碼的,因此在目標 DC 上,沒有方法可以進行磁碟修改來變更保護此函式的訪問控制數據。 嘗試複製特洛伊木馬來源帳戶會在目的地網域中稽核。 只有高度信任的個人,保留 Domain 管理員 istrators 群組中的成員資格,即可減輕此攻擊。
SID 歷程記錄的磁碟上修改
具有網域 管理員 istrator 認證以及目的地網域中 DC 實體存取的複雜未經授權的使用者,可能會修改磁碟上的帳戶 sIDHistory 值。
未使用 DsAddSidHistory 來啟用此嘗試。 除了高度信任的系統管理員之外,防止域控制器的實體存取,藉此減輕此攻擊。
用來移除保護的 Rogue 程式代碼
具有目錄服務程式代碼實體存取權的未經授權的使用者或流氓系統管理員,可以建立惡意代碼:
  1. 拿掉程式代碼中 Domain 管理員 istrators 群組中成員資格的檢查。
  2. 變更來源域控制器上的呼叫,將 SID 指向未稽核的 LookupSidFromName。
  3. 拿掉稽核記錄呼叫。

實際存取 DS 程式代碼且知識足以建立流氓程式代碼的人員具有任意修改 帳戶 sIDHistory 屬性的功能。 DsAddSidHistory API 不會增加此安全性風險。
易受遭竊 SID 的資源
如果未經授權的使用者已成功使用此處所述的其中一種方法來修改帳戶 sIDHistory,且感興趣的資源網域信任未經授權的使用者帳戶網域,則未經授權的使用者可以取得遭竊 SID 資源的未經授權存取權,可能不會在遭竊 SID 遭竊的帳戶網域中留下稽核線索。
資源網域系統管理員只要從安全性觀點設定有意義的信任關係,即可保護其資源。 DsAddSidHistory 的使用限制在受信任的目標網域中,限制為已在其職責範圍內具有廣泛許可權的 Domain 管理員 istrators 群組成員。
Rogue 目標網域
未經授權的使用者會建立 Windows 2000 網域,其 sIDHistory 包含已從來源網域竊取的 SID。 未經授權的使用者使用此帳戶來未經授權存取資源。
未經授權的使用者需要來源網域的 管理員 istrator 認證,才能使用 DsAddSidHistory,並在來源域控制器上留下稽核記錄。 Rogue 目標網域只會在其他信任流氓網域的網域中取得未經授權的存取權,這需要這些資源網域中的 管理員 istrator 許可權。

操作條件約束

本節描述使用 DsAddSidHistory 函式的操作條件約束。

SrcPrincipal 的 SID 不得已存在於目的地樹系中,可以是主要帳戶 SID 或帳戶的 sIDHistory 例外狀況是 DsAddSidHistory 嘗試將 SID 新增至包含相同 SID 的 sIDHistory 時不會產生錯誤。 此行為可讓 DsAddSidHistory 以相同的輸入多次執行,進而產生成功和一致的結束狀態,以方便工具開發人員使用。

注意

全域編錄複寫延遲可能會提供一個視窗,其中可能會建立重複的 SID。 不過,系統管理員可以輕鬆地刪除重複的 SID。

SrcPrincipalDstPrincipal 必須是下列其中一種類型:

  • User

  • 已啟用安全性的群組,包括:

    本地組全域群組 網域本地組 (僅限 Windows 2000 原生模式) 通用群組 (僅限 Windows 2000 原生模式)

SrcPrincipal 和 DstPrincipal 的物件類型必須相符。

  • 如果 SrcPrincipal 是使用者, DstPrincipal 必須是使用者。
  • 如果 SrcPrincipal 是本機或網域本地組, 則 DstPrincipal 必須是網域本地組。
  • 如果 SrcPrincipal 是全域或通用群組, 則 DstPrincipal 必須是全域或通用群組。

SrcPrincipalDstPrincipal 不能是下列其中一種類型:(DsAddSidHistory 失敗,在這些情況下發生錯誤)

  • 電腦(工作站或域控制器)

  • 網域間信任

  • 暫時重複帳戶(幾乎未使用的功能,LANman 的舊版)

  • 具有已知 SID 的帳戶。 每個網域中的已知 SID 都相同;因此,將它們新增至 sIDHistory 會違反 Windows 2000 樹系的 SID 唯一性需求。 具有已知 SID 的帳戶包含下列本地群組:

    帳戶操作員 管理員 備份操作員來賓列印操作員複寫器伺服器操作員使用者

如果 SrcPrincipal 具有已知的相對標識符 (RID) 和網域特定前置詞,也就是 Domain 管理員 istrators、Domain Users 和 Domain Computers,則 DstPrincipal 必須擁有相同的已知 RID,才能讓 DsAddSidHistory 成功。 具有已知 RID 的帳戶包括下列使用者和全域群組:

  • 管理員
  • 來賓
  • 網域系統管理員
  • 網域來賓
  • 網域使用者

設定登錄值

下列程式示範如何設定 TcpipClientSupport 登錄值。

設定 TcpipClientSupport 登錄值

  1. 在來源域控制器上建立下列登錄值作為REG_DWORD值,並將其值設定為 1。

    HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa\TcpipClientSupport

  2. 然後,重新啟動來源域控制器。 此登錄值會導致 SAM 接聽 TCP/IP。 如果未在來源域控制器上設定此值,DsAddSidHistory 將會失敗。

啟用使用者/群組管理事件的稽核

下列程式示範如何在 Windows 2000 或 Windows Server 2003 來源或目的地網域中啟用使用者/群組管理事件的稽核。

若要在 Windows 2000 或 Windows Server 2003 來源或目的地網域中啟用使用者/群組管理事件的稽核

  1. 在 Active Directory 使用者和電腦 MMC 嵌入式管理單元中,選取目的地域控制器容器。
  2. 以滑鼠右鍵按兩下 [域控制器 ],然後選擇 [ 屬性]。
  3. 按兩下 [ 組策略] 索引 標籤。
  4. 選取 [ 預設域控制器原則 ],然後按兩下 [ 編輯]。
  5. [計算機設定\Windows 設定\安全性 設定\本機原則\稽核策略] 底下,按兩下 [稽核帳戶管理]。
  6. 在 [稽核帳戶管理] 視窗中,選取 [成功] 和 [失敗稽核]。 原則更新會在重新啟動或重新整理發生之後生效。
  7. 在組策略 MMC 嵌入式管理單元中檢視有效的稽核原則,確認已啟用稽核。

下列程式示範如何在 Windows NT 4.0 網域中啟用使用者/群組管理事件的稽核。

若要在 Windows NT 4.0 網域中啟用使用者/群組管理事件的稽核

  1. [網域的使用者管理員] 中,單擊 [ 原則 ] 功能表,然後選取 [ 稽核]。
  2. 選取 [ 稽核這些事件]。
  3. 針對 [ 使用者和群組管理],檢查 [成功] 和 [失敗]。

下列程式示範如何在 Windows NT 4.0、Windows 2000 或 Windows Server 2003 來源網域中啟用使用者/群組管理事件的稽核。

若要在 Windows NT 4.0、Windows 2000 或 Windows Server 2003 來源網域中啟用使用者/群組管理事件的稽核

  1. [網域的使用者管理員] 中,單擊 [ 使用者 ] 功能表,然後選取 [ 新增本地組]。
  2. 輸入由來源網域 NetBIOS 名稱所組成的組名,附加三個貨幣符號 ($),例如 FABRIKAM$$$$ 。 描述欄位應該指出此群組是用來稽核 DsAddSidHistory 或複製作業的使用方式。 請確定群組中沒有任何成員。 按一下 [確定]

如果來源和目的地稽核未啟用,DsAddSidHistory 作業會失敗,如這裡所述。

視需要設定信任

如果下列其中一項成立,則必須從來源網域建立信任至目的地網域(這必須發生在不同的樹系中):

  • 來源網域是 Windows Server 2003。
  • 來源網域是 Windows NT 4.0,SrcDomainCreds NULL