SMB Signing
1. 枚举
┌──(root㉿kali)-[~/Desktop/htb/Pirate] └─# nxc smb 10.129.124.28 -u pentest -p 'p3nt3st2025!&' SMB 10.129.124.28 445 DC01 [*] Windows 10 / Server 2019 Build 17763 x64 (name:DC01) (domain:pirate.htb) (signing:True) (SMBv1:None) (Null Auth:True)
2. 介绍
服务器消息块签名(SMB Signing)是一项安全功能,用于验证 SMB 数据包的来源和真实性。启用后,每个 SMB 消息都会包含通过会话密钥生成的签名。在 SMB 通信过程中,客户端会将整个消息的哈希值置于 SMB 头部签名字段中。该功能最初在 Windows 2000、Windows NT 4.0 和 Windows 98 中引入,其使用的算法随时间推移已演变得更加强大。
默认情况下,大多数 Windows 工作站和服务器版本均禁用此功能,但在域控制器主机上默认强制启用。
但自 24H2 版本起,Windows 11 已默认强制启用该功能。
SMB 签名通过验证消息哈希来防止篡改和确保真实性,从而保护通信安全。如果消息在传输过程中被修改(例如通过中继攻击),哈希值将不匹配,消息将被拒绝。SMB 头部的签名字段还能确认发送方和接收方的身份
3. 修复
#检测
PS C:\Users\Administrator> Get-SmbServerConfiguration | FL RequireSecuritySignature ; Get-SmbClientConfiguration | FL RequireSecuritySignature
RequireSecuritySignature : False
RequireSecuritySignature : False
与 Get-ADComputer 和 Invoke-Command 配合使用进行批量检测
$computers = Get-ADComputer -Filter * | Select-Object -ExpandProperty Name
Invoke-Command -ComputerName $computers -ScriptBlock {
Get-SmbServerConfiguration | Select-Object EnableSecuritySignature, RequireSecuritySignature
}
需要都开启为true 即:Signing is required +Signing is enabled (if needed)
手动注册表修复
# SMB Server
Set-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters" `
-Name "RequireSecuritySignature" -Value 1
Set-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters" `
-Name "EnableSecuritySignature" -Value 1
# SMB Client
Set-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Services\LanmanWorkstation\Parameters" `
-Name "EnableSecuritySignature" -Value 1
Set-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Services\LanmanWorkstation\Parameters" `
-Name "RequireSecuritySignature" -Value 1
在组策略中修复
Computer Configuration --> Windows Settings --> Security Settings --> Local Policies --> Security Options
对应4个注册表
- HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\LanManWorkstation\Parameters Microsoft 网络客户端:始终对通信进行数字签名
- HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\LanManWorkstation\Parameters Microsoft 网络客户端:数字签名通信(如果服务器同意)
- HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\LanManServer\Parameters Microsoft 网络服务器:始终对通信进行数字签名
- HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\LanManServer\Parameters Microsoft 网络服务器:数字签名通信
