在企业安全合规检查(等保、漏扫整改、CISA KEV 核验)中,经常需要用 Nmap 对 Windows 主机的 SMB 与 RDP 服务进行核验,确认漏洞是否已真正修复。本文整理三类高频漏洞的扫描命令、判定标准与判定逻辑,便于直接套用提交整改报告。

说明:为避免泄露内部资产信息,文中所有扫描示例均使用占位符 <目标IP>,输出样例为脱敏后的通用格式,不含真实主机指纹。

一、SMB 消息签名漏洞

漏洞背景

SMB 协议默认不强制对通信包进行签名,攻击者可借助 SMB 中继攻击(SMB Relay,配合 LLMNR/NBT-NS 投毒、PrinterBug 等)冒充用户身份横向移动,对应 MS16-075 等利用链。

CISA / Rapid7 等漏洞库给出的缓解措施是:

启用 Windows 策略 "Microsoft network server: Digitally sign communications (always)"
(Samba 上对应:server signing = mandatory

扫描命令

nmap -sS -sV -Pn -p 445 --script="smb-security-mode" <目标IP>

判定标准

message_signing 字段值 对应 Windows 策略 是否合规
required Digitally sign communications (always) = Enabled ✅ 已修复
enabled 仅 "if client agrees" 启用 ⚠️ 不达标
disabled 两项均未启用 ❌ 漏洞存在

已修复的输出特征

关键字段出现以下行即视为已修复:

| smb-security-mode:
|   ...
|_  message_signing: required

判定逻辑:输出 message_signing: required,对应注册表 requiresecuritysignature = 1,强制签名已启用 → 漏洞已修复


二、RDP 弱加密套件漏洞(TLS 1.0 / 1.1)

漏洞背景

早期 RDP 服务默认启用 TLS 1.0 / 1.1,存在 BEAST、POODLE、CRIME 等降级攻击风险,且与 BlueKeep(CVE-2019-0708)等漏洞组合时危害加剧。现代安全基线要求仅保留 TLS 1.2 及以上,并禁用 RC4、3DES、NULL 等弱算法。

扫描命令

nmap -p 3389 --script ssl-enum-ciphers <目标IP>

判定标准

  • 已修复:仅出现 TLSv1.2(及更高),且密码套件评级不低于 B
  • 漏洞存在:出现 SSLv3 / TLSv1.0 / TLSv1.1,或出现 RC4 / 3DES / NULL / 弱 DH(<1024)

已修复的输出特征

  • 协议版本中只出现 TLSv1.2(无 SSLv3 / TLSv1.0 / TLSv1.1)
  • 所有密码套件评级为 A(使用 ECDHE / DHE 完美前向保密)
  • 无 RC4、无 3DES、无 NULL 套件
  • 末尾出现 least strength: A

判定逻辑:满足以上条件即说明弱协议与弱算法已全部禁用 → 漏洞已修复


三、RDP 安全层未启用 NLA 漏洞

漏洞背景

RDP 支持三种安全层:

安全层 说明 安全性
Internal RDP security RDP 自带加密(Standard RDP Security) ❌ 最弱,存在漏洞且易被中间人攻击
TLS security layer 仅 TLS 加密通道 ⚠️ 中等,缺少身份预验证
CredSSP (NLA) 网络级身份验证,连接前完成认证 ✅ 最强,可阻断绝大多数 RDP 漏洞利用

未启用 NLA 时,BlueKeep(CVE-2019-0708)、BlueKeep-like 漏洞、DoS 等可被未认证触发。安全基线要求强制启用 NLA(CredSSP)

扫描命令

nmap -p 3389 --script rdp-enum-encryption <目标IP>

判定标准

  • 已修复CredSSP security layer (NLA): SUCCESS(推荐同时关闭 Internal RDP 与纯 TLS 层,仅保留 NLA)
  • 漏洞存在Internal RDP security: SUCCESS 或仅 TLS security layer: SUCCESS

已修复的输出特征

| rdp-enum-encryption:
|   Security layer
|     Internal RDP security: FAILED
|     TLS security layer: FAILED
|_    CredSSP security layer (NLA): SUCCESS

判定逻辑

  • Internal RDP security: FAILED —— 弱安全层已禁用(符合预期)
  • TLS security layer: FAILED —— 纯 TLS 层已禁用(符合预期)
  • CredSSP security layer (NLA): SUCCESS —— NLA 强制启用

说明:Nmap 脚本对 FAILED 的含义是"该安全层协商失败/不可用",在此场景下正是我们主动禁用弱安全层的结果,而非缺陷。仅保留 CredSSP 即满足最严基线要求 → 漏洞已修复


一键批量扫描脚本

可把三条命令整合,便于对多台主机批量核验:

#!/bin/bash
# 用法: ./rdp-smb-check.sh <IP>
TARGET=$1
[ -z "$TARGET" ] && { echo "Usage: $0 <IP>"; exit 1; }

echo "===== [1/3] SMB 消息签名 ====="
nmap -sS -sV -Pn -p 445 --script="smb-security-mode" "$TARGET"

echo -e "\n===== [2/3] RDP TLS 加密套件 ====="
nmap -p 3389 --script ssl-enum-ciphers "$TARGET"

echo -e "\n===== [3/3] RDP 安全层 / NLA ====="
nmap -p 3389 --script rdp-enum-encryption "$TARGET"

⚠️ 安全提示:扫描输出包含主机版本、加密配置等敏感信息,请勿将真实扫描结果直接发布到公网或截图分享,建议仅在内部整改报告中使用。


整改报告摘录(可直接提交)

序号 漏洞项 扫描命令关键字 判定证据 结论
1 SMB 未强制消息签名 --script smb-security-mode message_signing: required 已修复
2 RDP 启用 TLS 1.0/1.1 弱加密 --script ssl-enum-ciphers TLSv1.2,全部 A 级 已修复
3 RDP 未启用 NLA --script rdp-enum-encryption CredSSP (NLA): SUCCESS,弱层 FAILED 已修复

扩展核验命令(可选)

若需进一步确认操作系统真实版本与 SMBv1 状态,可补充执行(结果仅用于内部核验,勿外传):

# 获取更准确的系统信息
nmap -p 445 --script smb-os-discovery,smb2-security-mode <IP>

# 检查 EternalBlue (MS17-010) 痕迹
nmap -p 445 --script smb-vuln-ms17-010 <IP>

# 确认 SMBv1 是否已禁用(应只出现 SMB 2.x / 3.x)
nmap -p 445 --script smb-protocols <IP>
文章作者: emporer
版权声明: 本站所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Emporer-Linux
喜欢就支持一下吧