共用方式為


偵測並修復 Kerberos 中的 RC4 使用情況

Kerberos 在 Active Directory(AD)環境中的認證歷來依賴 RC4 加密演算法。 RC4 是一種串流密碼,因為它與舊系統相容,所以很有用。 然而,RC4 現在被視為不安全,正逐步淘汰。

本文說明如何偵測您網域中的 RC4 使用情況,稽核仍依賴 RC4 的裝置與使用者帳號,並採取措施以改善使用,轉而採用更強加密類型,或管理 RC4 相依性。 利用這些說明,為您的環境準備面對即將到來的 Kerberos 預設變更,並提升組織的安全態勢。

從高層次來看,IT 管理員應採取以下行動,以準備 RC4 對 Kerberos 支援的預設變更:

  1. 檢視目前 RC4 使用情況:使用本文所述的稽核工具與事件日誌,辨識仍在使用 RC4 的帳號、服務或裝置。

  2. 針對舊有裝置:遷移或更換不支援的裝置,尤其是運行 Windows Server 2003 或更早版本的裝置,因為這些裝置缺乏 AES-SHA1 支援。

  3. 關閉 RC4:盡可能明確關閉 RC4。

Windows 中的 RC4 使用及其風險

當帳號或裝置不支援較強加密類型(如 AES-SHA1)時,RC4 通常用於 Windows 環境。 RC4 的使用可能發生在舊有系統、AES-SHA1 支援尚未推出前建立的帳號,或加密設定未明確設定時。 RC4 是預設的加密類型,因此成為與舊有基礎設施相容的常見選擇。 然而,依賴 RC4 會讓環境面臨安全風險,且其使用正逐步被更安全的演算法取代。

為回應 CVE-2022-37966,2022 年 11 月 8 日或之後發布的 Windows 更新將 Kerberos 的預設加密類型改為使用 Advanced Encryption Standard (AES)-SHA1,取代 RC4,適用於未明確設定加密類型的帳號。 此變更大幅減少 RC4 使用量,但對於不支援 AES-SHA1 的帳號,RC4 預設仍被使用。 欲了解更多資訊,請參閱 KB5021131

此更新新增了設定登錄檔值以控制 Kerberos 預設支援加密類型的功能。 如果你沒有設定這個登錄檔值,預設支援的加密類型是 DES、RC4 和 AES 會話金鑰。

Kerberos RC4 預設加密類型可被濫用,進行一種稱為 Kerberoasting 的攻擊方法,該攻擊目標是 Microsoft Active Directory 中的服務工單。 在 Kerberoasting 中,攻擊者會截取這些工單並離線破解其加密,竊取使用者憑證,可能危及整個網路的安全。 將 Kerberos 的加密類型改為預設使用 AES-SHA1 而非 RC4,有助於保護客戶免受此攻擊。

這很重要

Microsoft 計劃在 2026 年第二季結束前,將 RC4 作為 Active Directory 網域控制器的預設加密類型停用。

先決條件

開始之前,您需要符合下列必要條件:

  • 你需要權限才能存取網域控制站的安全事件日誌,例如成為 網域管理員 群組或同等成員。

  • 如果你想執行本文中的 PowerShell 指令和腳本,你需要在執行指令的裝置上安裝 ActiveDirectory 模組

稽核 RC4 的使用

關於 RC4 使用情況的詳細資訊,儲存在 Windows Server 2019 及以後版本 Kerberos 金鑰分發中心 (KDCs)的安全事件日誌中。 事件日誌中的 RC4 使用功能也於 2025 年 1 月的累積更新中加入 Windows Server 2016。 以下事件識別碼標示 RC4 使用情況及只能使用 RC4 的帳號:

RC4 使用的事件日誌欄位

在每個事件 ID 4768 和 4769 的條目中,有多個欄位提供有關帳戶支持的加密類型和每張票據使用的加密類型的資訊。 這裡有一張截圖範例。 以下列表描述了這兩個事件中相關的欄位。

事件檢視器的截圖顯示 Kerberos 事件 ID 4768 的詳細資訊,包括加密類型和帳號資訊。

  • 帳戶資訊服務資訊 章節:

    • MSDS-SupportedEncryptionTypes: 是 Active Directory 屬性,表示帳號所支援的加密類型。 如果 msDS-SupportedEncryptionTypes 帳號未定義,KDC 會套用 DefaultSupportedEncryptionTypes 的值。 此域有時稱為 msds-SET

      此值為已處理的值,這意味著某些帳號在 AD 資料庫設定的 msDS-SupportedEncryptionTypes 值之外有指定的額外條件。 例如,在 Windows Server 2022 及更早版本中,無論設定如何, msDS-SupportedEncryptionTypes 都會顯示資料加密標準(DES)和 RC4,以確保與較舊網域控制器相容。 從 Windows Server 2025 開始,僅顯示 AES-SHA1 且更強的演算法。 如果這些安全主體的處理值和 Active Directory 屬性裡的值不完全一致,這是正常的。

      此欄位僅在帳號查詢時才會被填入。 帳號查詢會在 ID 4768 事件中填入此欄位,顯示帳號資訊與服務資訊,並在 ID 4769 事件中列出服務資訊。 欲了解更多資訊,請參閱 支援的加密類型位元標誌

    • 可用金鑰:AD 帳戶可用的金鑰。 密碼會被使用顯示的演算法進行雜湊。 此領域的人口受到與msDS-SupportedEncryptionTypes相同的限制。 RC4 無論使用情況都會顯示。

  • 網域控制資訊 區。 本節同樣使用處理後的數值,並遵循前述指引

    • MSDS-SupportedEncryptionTypes:包含網域控制器的加密類型msDS-SupportedEncryptionTypes

    • 帳號金鑰:包含網域控制器的帳號金鑰。

  • 網路資訊 版:

    • 已公告的加密類型:列舉客戶端機器宣告支援當前操作的加密類型。
  • 附加資訊 部分:

    • 會話加密類型:用於工單會話金鑰的加密類型。

你可以用 msDS-SupportedEncryptionTypes 或 欄位 Advertized Etypes 來判斷客戶端或目標機器是否不支援 AES-SHA1,或只支援 RC4。

展開本節可查看一張將加密類型映射到所用演算法的表格。
十進位值 十六進位值 支援的加密類型
0 0x0 未定義——預設為RC4_HMAC_MD5
1 0x1 DES_CBC_CRC
2 0x2 DES_CBC_MD5
3 0x3 DES_CBC_CRC,DES_CBC_MD5
4 0x4 RC4
5 0x5 DES_CBC_CRC,RC4
6 0x6 DES_CBC_MD5,RC4
7 0x7 DES_CBC_CRC、DES_CBC_MD5、RC4
8 0x8 AES 128 號
9 0x9 DES_CBC_CRC,AES 128
10 0xA DES_CBC_MD5,AES 128
11 0xB DES_CBC_CRC,DES_CBC_MD5,AES 128
12 0xC RC4,AES 128
13 0xD DES_CBC_CRC、RC4、AES 128
14 0xE DES_CBC_MD5、RC4、AES 128
15 0xF DES_CBC_CRC、DES_CBC_MD5、RC4、AES 128
16 0x10 AES 256 號
17 0x11 DES_CBC_CRC,AES 256
18 0x12 DES_CBC_MD5,AES 256
19 0x13 DES_CBC_CRC,DES_CBC_MD5,AES 256
20 0x14 RC4,AES 256
21 0x15 DES_CBC_CRC,RC4,AES 256
22 0x16 DES_CBC_MD5,RC4,AES 256
23 0x17 DES_CBC_CRC、DES_CBC_MD5、RC4、AES 256
24 0x18 AES 128、AES 256
25 0x19 DES_CBC_CRC,AES 128、AES 256
26 0x1A DES_CBC_MD5、AES 128、AES 256
二十七 0x1B DES_CBC_CRC、DES_CBC_MD5、AES 128、AES 256
28 0x1C RC4、AES 128、AES 256
二十九 0x1D DES_CBC_CRC、RC4、AES 128、AES 256
30 0x1E DES_CBC_MD5、RC4、AES 128、AES 256
31 0x1F DES_CBC_CRC、DES_CBC_MD5,RC4-HMAC,AES128-CTS-HMAC-SHA1-96,AES256-CTS-HMAC-SHA1-96

展開此區可查看一個表格,將事件中的數值映射到已發行票據的加密類型。
類型值 加密類型
0x1 DES_CBC_CRC
0x3 DES_CBC_MD5
0x11 AES128-CTS-HMAC-SHA1-96
0x12 AES256-CTS-HMAC-SHA1-96
0x17 RC4-HMAC
0x18 RC4-HMAC-EXP

欲深入了解 msDS-SupportedEncryptionTypes 加密類型,請參閱我們的部落格文章《 解密支援的 Kerberos 加密類型選擇》。

使用 PowerShell 來稽核 RC4 的使用情況

手動查看事件日誌以辨識 RC4 的使用情況是一項繁瑣的工作。 為了更有效率的稽核,你可以下載兩個 PowerShell 腳本來協助:

  • List-AccountKeys.ps1 查詢事件日誌以列舉帳戶可用的加密金鑰。
  • Get-KerbEncryptionUsage.ps1 以識別正在使用的 Kerberos 加密類型,並提供針對特定演算法如 RC4 的過濾選項。

Microsoft將這些腳本開源發佈,並可在 Microsoft Kerberos-Crypto GitHub 倉庫中取得。 另外,你也可以使用安全資訊與事件管理(SIEM)解決方案(如 Microsoft Sentinel)或內建的 Windows 轉發功能,如我們部落格文章中所述,來識別 RC4 的使用情況。那麼,你覺得你準備好為 Kerberos 強制執行 AES 了嗎?

  1. Microsoft Kerberos-Crypto GitHub 倉庫下載列出的兩個 PowerShell 腳本。

  2. 以管理員身份在網域控制站開啟 PowerShell 會話,或用你用來管理網域控制所的裝置上的 Enter-PSSession 指令碼遠端連線。

  3. 用以下指令執行腳本 List-AccountKeys.ps1 。 此腳本會查詢安全事件日誌,並列舉所找到帳號可用的金鑰。

    .\List-AccountKeys.ps1
    

    在這個範例輸出中,你可以看到事件發生的時間、帳號名稱、帳號類型以及帳號的金鑰。 在這種情況下,你可以看到 AES-SHA1 金鑰可用,且它們支援使用 AES-SHA1。

    Time                  Name         Type  Keys
    ----                  ----         ----  ----
    1/21/2025 2:00:10 PM  VM01$      Machine {RC4, AES128-SHA96, AES256-SHA96, AES128-SHA256...}
    1/21/2025 2:00:10 PM  AdminUser     User {RC4, AES128-SHA96, AES256-SHA96, AES128-SHA256...}
    1/21/2025 6:50:34 PM  VM01$      Machine {RC4, AES128-SHA96, AES256-SHA96, AES128-SHA256...}
    1/21/2025 6:50:34 PM  AdminUser     User {RC4, AES128-SHA96, AES256-SHA96, AES128-SHA256...}
    1/21/2025 6:50:34 PM  VM01$      Machine {RC4, AES128-SHA96, AES256-SHA96, AES128-SHA256...}
    
  4. 用以下指令執行腳本 Get-KerbEncryptionUsage.ps1 。 此腳本會查詢相同事件,以查看環境中發現的 Kerberos 使用情況。

    .\Get-KerbEncryptionUsage.ps1
    
    Time       : 1/21/2025 2:00:10 PM
    Requestor  : ::1
    Source     : AdminUser@CONTOSO.COM
    Target     : VM01$
    Type       : TGS
    Ticket     : AES256-SHA96
    SessionKey : AES256-SHA96
    
    Time       : 1/21/2025 2:00:10 PM
    Requestor  : 192.168.1.1
    Source     : AdminUser
    Target     : krbtgt
    Type       : AS
    Ticket     : AES256-SHA96
    SessionKey : AES256-SHA96
    

    此腳本包含特定演算法的篩選選項,並可依據 RC4 使用進行篩選,如下範例所示:

    .\Get-KerbEncryptionUsage.ps1 -Encryption RC4
    

處理 RC4 使用的選項

如果你發現自己還在用 RC4,根據為什麼要用 RC4,有幾件事可以做。

有個使用者帳號使用 RC4,因為它沒有 AES-SHA1 金鑰

如果使用者帳號是在 Windows Kerberos 支援 AES-SHA1 金鑰之前建立,且在新增支援後密碼從未被重設,該帳號就會缺少 AES-SHA1 金鑰。 Windows Server 2003 新增了 Windows Kerberos 的 AES-SHA1 支援。 更改帳號密碼會產生這些金鑰。

對於沒有服務主體名稱(SPN)的使用者帳號,你不需要設定值 msDS-SupportedEncryptionTypes 。 裝置的設定決定了服務單請求和會話金鑰的加密類型。

處理中的 msDS-SupportedEncryptionTypes 值不包含 AES-SHA1 位元

如果處理後 msDS-SupportedEncryptionTypes 的數值沒有包含 AES-SHA1,可能是幾個條件造成的。

  1. 案例: 來源和/或目標機器所支援的加密類型不包含 AES-SHA1。 此時,確認政策設定並更新,使其包含 AES-SHA1。 你可以在 Active Directory 使用者與電腦主控台的帳號屬性中查看已設定 msDS-SupportedEncryptionTypes 的設定,或使用 PowerShell。

    • 對於 Active Directory 使用者與電腦,請確保「進階功能」檢視已啟用,然後開啟電腦帳號的屬性,並進入屬性編輯器標籤。注意屬性:msDS-SupportedEncryptionTypes

      Active Directory 使用者與電腦中屬性編輯器分頁的截圖,顯示 msDS-SupportedEncryptionTypes 屬性。

    • 對於 PowerShell,執行以下指令來取得屬性 msDS-SupportedEncryptionTypes 。 請務必將 <computer account name> 替換成您想要查詢的帳戶實際名稱。

      $accountName = "<computer account name>"
      $parameters = @{
           Filter     = "Name -eq '$($accountName)' -and (ObjectClass -eq 'Computer' -or ObjectClass -eq 'User')"
           Properties = "msDS-SupportedEncryptionTypes"
      }
      
      Get-ADObject @parameters | FL "DistinguishedName","msDS-SupportedEncryptionTypes","Name","ObjectClass"
      

      這裡有一個輸出的例子。 的 msDS-SupportedEncryptionTypes 值是小數,而非十六進位,你可以用 RC4 使用事件日誌欄位的表格轉換。

      DistinguishedName             : CN=vm01,CN=Computers,DC=contoso,DC=com
      msDS-SupportedEncryptionTypes : 28
      Name                          : vm01
      ObjectClass                   : computer
      

    如果在 AD 中的來源和/或目標機器的 msDS-SupportedEncryptionTypes 值未定義,KDC 會回到第二種情況中描述的 DefaultDomainSupportedEncTypes 值。

    為了判斷哪些值最適合你的環境,我們建議閱讀 《Active Directory 強化系列 - 第四部分 – 為 Kerberos 強制執行 AES |Microsoft 社群中心。 找到適合你環境的組合後,重新啟動機器,它會更新 msDS-SupportedEncryptionTypes AD 資料庫中的屬性。

  2. 案例:在 AD 中,來源機器的msDS-SupportedEncryptionTypes值未定義,KDC 改用DefaultDomainSupportedEncTypes。 這個案件比較複雜,需要對環境有整體性的理解才能解決。 該 DefaultDomainSupportedEncTypes 值用來定義被視為支援的加密類型,適用於沒有msDS-SupportedEncryptionTypes 值的裝置。 解決此情況有兩種方法:

    • 在帳戶屬性中定義具體 msDS-SupportedEncryptionTypes 值,確保不會回溯到該 DefaultDomainSupportedEncTypes 值。

    • 或者,也可以設定 DefaultDomainSupportedEncTypes 值包含 AES-SHA1。

    正確的方法取決於你個人的風險承受度,因為更新 DefaultDomainSupportedEncTypes 價值會改變 所有 沒有價值的帳戶行為。

裝置不支援 AES-SHA1

對於 Windows 裝置來說,最後一個不支援 AES-SHA1 的 Windows 版本是 Windows Server 2003,該版本已 不再支援。 你應該遷移到 Windows 版本支援 AES-SHA1。 對於 AES-SHA1 支援前建立的帳號,請重設密碼以產生現代加密金鑰,例如 AES-SHA1。 對於不支援 SHA-1 的帳號,請手動設定支援的加密類型,包含 RC4。

小提示

如果你有不支援 AES-SHA1 的第三方裝置,請聯絡 stillneedrc4@microsoft.com,提供關於該裝置和使用情境的相關資訊。

限制或停用 RC4 的使用

預設 Kerberos 加密類型的變更導致 RC4 的使用大幅減少。 不過,如果你想進一步降低 RC4 的使用,可以透過群組政策限制 RC4 的使用範圍,或在你的網域中完全停用 RC4。

謹慎

從 Windows Server 2025 開始,網域控制器不再發出 RC4 票證授權票證。 雖然你可以對舊裝置用 RC4 認證,但舊裝置無法用 Kerberos 認證。 你需要使用較早期版本的 Windows Server 來管理網域控制器。

要限制或停用 RC4 的使用:

  1. 使用群組政策管理主控台建立一個群組政策物件(GPO)。 欲了解更多資訊,請參閱 群組政策管理

  2. 編輯 GPO,然後切換到 電腦設定>政策、>Windows 設定>、安全性設定>、本地政策>、安全性選項

  3. 找到網路安全政策設定 :設定 Kerberos 允許的加密類型。 雙擊該政策即可開啟其屬性。

  4. 請指定你想允許的加密類型。 以下是一些範例:

    • 若要只允許 AES-SHA1,請勾選 AES128_HMAC_SHA1AES256_HMAC_SHA1

    • 要允許 AES-SHA1 和RC4,請勾選 AES128_HMAC_SHA1AES256_HMAC_SHA1RC4_HMAC_MD5

      網路安全截圖:在 Windows 中選擇並標示 RC4 時,Kerberos 政策設定中允許的加密類型。

  5. 將 GPO 範圍設定為包含你想套用該政策的裝置的相應組織單位(OU)或群組。 確保它能傳到目標裝置,然後重新啟動裝置以套用新的設定。

  6. 政策套用後,監控認證事件,確保不會發生意外的驗證失敗。 你可以使用「使用 PowerShell」章節中提到的 PowerShell 腳本 來審核 RC4 的使用 情況,以確認 RC4 是否已不再被使用。

或者,你也可以透過設定以下登錄檔值來停用網域控制器上的 RC4,該值只允許 AES128_HMAC_SHA1AES256_HMAC_SHA1

  • 鍵:HKEY_LOCAL_MACHINE\System\CurrentControlSet\services\KDC
  • 值名稱:DefaultDomainSupportedEncTypes
  • 類型: REG_DWORD
  • 數值資料: 0x38

停用 RC4 後識別認證失敗

當 RC4 被停用時,某些系統可能會無法驗證。 本節涵蓋常見情境與指標,以識別停用 RC4 可能引發的問題。 以下是兩種常見的認證失敗情境:

  • 伺服器訊息區塊(SMB):當你嘗試使用 SMB 存取共享資料夾,且 RC4 是唯一的值時 msDS-SupportedEncryptionTypes,認證失敗會產生網路錯誤,如下圖所示:

    Windows 存取 SMB 共享時網路錯誤對話框的截圖,顯示因不支援的加密類型而導致認證失敗。

  • Windows 管理儀器(WMI):當你嘗試使用 New-PSSession 指令檔(使用 WMI,且 唯一的值 msDS-SupportedEncryptionTypes為 RC4)建立遠端 PowerShell 會話時,認證失敗會產生錯誤訊息,如下範例所示:

    New-PSSession : [vm01.contoso.com] Connecting to remote server vm01.contoso.com failed with the following
    error message : WinRM cannot process the request. The following error with errorcode 0x80090342 occurred
    while using Kerberos authentication: An unknown security error occurred.
    
    Possible causes are:
       -The user name or password specified are invalid.
       -Kerberos is used when no authentication method and no user name are specified.
       -Kerberos accepts domain user names, but not local user names.
       -The Service Principal Name (SPN) for the remote computer name and port does not exist.
       -The client and remote computers are in different domains and there is no trust between the two domains.
    After checking for the above issues, try the following:
       -Check the Event Viewer for events related to authentication.
       -Change the authentication method; add the destination computer to the WinRM TrustedHosts configuration
    setting or use HTTPS transport.
    Note that computers in the TrustedHosts list might not be authenticated.
    -For more information about WinRM configuration, run the following command: winrm help config. For more
    information, see the about_Remote_Troubleshooting Help topic.
    At line:1 char:6
    + $s = New-PSSession vm01.contoso.com
    +      ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
         + CategoryInfo          : OpenError: (System.Manageme....RemoteRunspace:RemoteRunspace) [New-PSSession],
         PSRemotingTransportException
         + FullyQualifiedErrorId : err ,PSSessionOpenFailed
    

要處理上述任一情況,請遵循以下步驟:

  1. 嘗試使用 Windows 指令 klist 直接向此端點發送服務單請求,該指令會提供更詳細的失敗錯誤。 以下範例顯示向 HOST 服務在 vm01.contoso.com 上請求服務單。

    開啟一個 PowerShell 會話,並從嘗試驗證目標裝置的裝置執行以下指令:

    klist get HOST/vm01.contoso.com
    

    以下是輸出範例,顯示 KDC 不支援所要求的加密類型:

    Current LogonId is 0:0xd6ed18
    Error calling API LsaCallAuthenticationPackage (GetTicket substatus): 0x80090342
    
    klist failed with 0xc00002fd/-1073741059: The encryption type requested is not supported by the KDC.
    
  2. 在 KDC 上開啟事件 ID 4769 以回應同一請求,你可以看到錯誤代碼 0xE,該代碼對應到錯誤名稱 KDC_ERR_ETYPE_NOTSUPP。 此錯誤表示 KDC 不支援加密類型。 你可以在 附錄C:Kerberos與LDAP錯誤訊息中關聯更多錯誤。

    A Kerberos service ticket was requested.
    
    Account Information:
        Account Name:       adele@CONTOSO.COM
        Account Domain:     CONTOSO.COM
        Logon GUID:     {00000000-0000-0000-0000-000000000000}
        MSDS-SupportedEncryptionTypes:  -
        Available Keys: -
    
    Service Information:
        Service Name:       HOST/vm01.contoso.com
        Service ID:     NULL SID
        MSDS-SupportedEncryptionTypes:  -
        Available Keys: -
    
    Domain Controller Information:
        MSDS-SupportedEncryptionTypes:  -
        Available Keys: -
    
    Network Information:
        Client Address:     ::ffff:192.168.1.112
        Client Port:        60090
        Advertized Etypes:  -
    
    Additional Information:
        Ticket Options:     0x40810000
        Ticket Encryption Type: 0xFFFFFFFF
        Session Encryption Type:    0x2D
        Failure Code:       0xE
        Transited Services: -
    
  3. 請依照該節的步驟 操作。處理中的 msDS-SupportedEncryptionTypes 值不包含 AES-SHA1 位 元,以判斷目標裝置支援的加密類型。 在此範例中, msDS-SupportedEncryptionTypesvm01.contoso.com 值為 0x4,表示該帳戶僅設定了 RC4。