共用方式為


什麼是伺服器訊息區塊簽署?

本文說明 Windows 和 Windows Server 中的伺服器訊息區塊 (SMB) 2.x and 3.x 簽署。 本文也說明 SMB 簽署安全注意事項和原則設定。

SMB 簽署表示每個 SMB 訊息都包含使用工作階段金鑰和 AES 產生的簽章。 SMB 簽署在 SMB 標頭中新增包含整個訊息之雜湊值的簽章。 如果有人在訊息傳輸中篡改了訊息,則被篡改訊息中的數據與驗證中的標記不匹配。 標記還包括原始發送方和預期接收方的身份資訊。 簽證不匹配會警告使用者可能存在不正當行為,幫助他們保護設置免受中繼和欺騙攻擊。

簽署運作方式

SMB 簽署是一項安全功能,它使用工作階段金鑰和加密套件為誇連接的訊息新增簽章。 SMB2 訊息完整性體現在簽署的工作階段上,其中簽署的封包會從用戶端流向伺服器。 在簽署的工作階段上,每個簽署的封包都包含收件者可以驗證的簽章。 與使用 MD5 [RFC1321] 雜湊演算法的 SMB1 簽署不同,SMB2 使用更好的雜湊進行簽署。 MS-SMB2 中的安全性模型要求先驗證用戶端使用者身分,再存取伺服器上的共用。 使用者通過身分驗證後,伺服器可以強制訊息簽署或加密。 伺服器也會根據使用者、群組或宣告被授權具有不同層級的存取權,來控制共用的存取權。

簽署演算法經過一段時間的演進,SMB 2.02 簽署透過 HMAC-SHA-256 來改進,取代了 SMB1 中舊的 MD5 方法。 此外,SMB 3.0 引進了 AES-CMAC。 Windows Server 2022 和 Windows 11 引進了 AES-128-GMAC 簽署加速。 若要深入了解 AES-128-GMAC 簽署,請參閱 AES-128-GMAC 簽署加速

在所有版本的 Windows 中都啟用 SMB 簽署。 SMB 驗證要求可能涉及外部驗證,涵蓋來自 SMB 客戶端的流量,以及內部驗證,涵蓋流向伺服器的流量。 Windows 和 Windows Server 可以僅要求外部驗證、僅要求內部驗證、同時要求兩者,或者兩者都不要求。 如果您的環境使用非 Microsoft 檔案伺服器,您的系統設定可能會阻止預設設定和連線生效。 在此情況下,您可能需要停用 SMB 簽署的需求。 如需如何停用 SMB 簽署的指引,請參閱控制 SMB 簽署行為

SMB2 和 SMB3 安全性考量

SMB 2.x 和 3.x 簽署中使用的所有加密金鑰均衍生自工作階段金鑰。 SMB 2/3 簽署和加密的安全性依賴工作階段金鑰。 如果有人在傳輸過程中變更訊息,則雜湊值不相符,SMB 就知道有人篡改資料。 簽章也會確認寄件者和收件者的身分,並防止中繼攻擊。

使用 SMB 簽署時,請考慮:

  • 由於工作階段金鑰本身衍生自您的密碼,因此使用長、複雜、非字典的密碼可增強 SMB 簽署和加密。
  • 建議使用 Kerberos 而非 NTLMv2,讓您的工作階段金鑰啟動強式。
  • 不要使用 IP 位址或 CNAME 記錄來連線到共用,否則會使用 NTLM 而不是 Kerberos。 我們建議使用 Kerberos。 若要深入了解使用 CNAME 記錄的替代方案,請參閱 使用電腦名稱別名取代 DNS CNAME 記錄

根據預設,網域控制器要求連接到它們的任何人進行 SMB 簽署,通常是為了 SYSVOL 和 NETLOGON 取得群組原則和登入指令碼。 用戶端的 UNC 強化還需要在與這兩個共用進行通訊時進行簽署,並進一步要求 Kerberos。 SMB 簽署也會自動作為預先驗證完整性的一部分,以防止降級攻擊。 如需詳細資訊,請參閱 Windows 10 中的 SMB 3.1.1 預先驗證完整性

SMB 簽署的原則位置

SMB 簽署原則位於電腦設定>Windows 設定>安全性設定>本機原則>安全性選項

  • Microsoft 網路用戶端: 數位簽章通訊 (一律)
    登錄機碼:HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\LanManWorkstation\Parameters
    登錄值:RequireSecuritySignature
    資料類型:REG_DWORD
    資料:0 (停用)、1 (啟用)

  • Microsoft 網路伺服器: 數位簽章通訊 (一律)
    登錄機碼:HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\LanManServer\Parameters
    登錄值:RequireSecuritySignature
    資料類型:資料:REG_DWORD 0 (停用)、1 (啟用)

注意

在這些原則中,一律表示需要 SMB 簽署。

了解 "RequireSecuritySignature" 和 "EnableSecuritySignature"

SMB2 及更高版本的用戶端和伺服器的 EnableSecuritySignature 登錄設定將被忽略。 因此,除非您使用 SMB1,否則此設定不會執行任何動作。 SMB 2.02 及更高版本的簽署僅由是否需要來控制。 當伺服器或用戶端需要 SMB 簽署時,會使用此設定。 只有在伺服器和用戶端都已將簽署設為 0 時,才會進行簽署。

總之,在以下情況 SMB 會簽署:

  • SMB 用戶端和伺服器將 RequireSecuritySignature 設定為 1
  • SMB 用戶端將 RequireSecuritySignature 設定為 1,而伺服器將 RequireSecuritySignature 設定為 0
  • SMB 伺服器將 RequireSecuritySignature 設定為 1,而用戶端將 RequireSecuritySignature 設定為 0

在以下情況不會使用簽署:

  • SMB 用戶端和伺服器都已將 RequireSecuritySignature 設定為 0

SMB 簽署和加密稽核

從 Windows 11 版本 24H2 開始,系統管理員可以啟用 SMB 用戶端的稽核,以偵測不支援 SMB 加密或簽署的第三方用戶端或伺服器。 如果協力廠商裝置或軟體宣告支援 SMB 3.1.1,但不支援 SMB 簽署時,即違反 SMB 3.1.1 預先驗證完整性通訊協定需求。

可以在「群組原則」或透過 PowerShell 來調整 SMB 簽署和修改加密稽核設定。 「群組原則」的這些設定會儲存在以下路徑:

  • Computer Configuration\Administrative Templates\Network\Lanman Server\Audit client does not support encryption

  • Computer Configuration\Administrative Templates\Network\Lanman Server\Audit client does not support signing

  • Computer Configuration\Administrative Templates\Network\Lanman Workstation\Audit server does not support encryption

  • Computer Configuration\Administrative Templates\Network\Lanman Workstation\Audit server does not support signing

針對 PowerShell,執行下列命令可稽核相同的設定:

Set-SmbServerConfiguration -AuditClientDoesNotSupportEncryption $true
Set-SmbServerConfiguration -AuditClientDoesNotSupportSigning $true

Set-SmbClientConfiguration -AuditServerDoesNotSupportEncryption $true
Set-SmbClientConfiguration -AuditServerDoesNotSupportSigning $true

「事件檢視器」會擷取下列路徑下的這些事件及其各自的事件識別碼:

路徑 事件識別碼
應用程式及服務記錄檔\Microsoft\Windows\SMBClient\Audit 31998
31999
應用程式及服務記錄檔\Microsoft\Windows\SMBServer\Audit 3021
3022

下列文章提供 SMB 的其他相關資訊: