1. 项目概述为什么NetBIOS漏洞至今仍是内网渗透的“黄金门票”在网络安全领域尤其是内网渗透测试和红蓝对抗中总有一些“老而弥坚”的漏洞它们可能不像零日漏洞那样引人注目却因为广泛存在、默认开启且易于利用成为攻击者最爱的突破口。NetBIOS相关的漏洞特别是NBNS/LLMNR欺骗攻击就是其中的典型代表。你可能觉得NetBIOS这种诞生于上世纪80年代的古老协议在今天的现代网络中早已过时。但现实是在大量企业内网、教育网络甚至一些云环境下的虚拟网络中为了兼容老旧系统或某些特定应用NetBIOS服务依然默认运行着这无异于为攻击者留下了一扇敞开的侧门。这个项目的核心就是深入剖析基于NetBIOS名称服务NBNS的欺骗攻击原理、手法与完整防御体系。它绝不仅仅是关闭一个服务那么简单。攻击者利用的是Windows系统在名称解析上的一个“信任链”缺陷当DNS解析失败时系统会降级使用LLMNR和NBNS进行广播查询。而关键在于任何收到广播请求的主机都可以进行响应系统默认会信任第一个“抢答”的响应。想象一下在一个会议室里主持人问“谁是张三”任何人都可以举手说“我是”而主持人没有核实身份就相信了——这就是NBNS/LLMNR欺骗攻击最形象的比喻。通过这个项目你将掌握从攻击者视角理解漏洞利用的全过程包括如何搭建欺骗环境、捕获NetBIOS广播请求、伪造响应将流量导向攻击机并最终窃取用户凭据或实施中间人攻击。更重要的是我们将从防御者角度构建一个从终端配置、网络策略到持续监控的多层防御方案。无论你是刚入门的安全爱好者、负责企业内网安全的运维人员还是正在备考CTF或安全认证的学习者理解并实践这个项目都能让你对内网安全有一个更深刻、更实战化的认知。很多安全事件溯源到最后往往就是这些“不起眼”的古老协议配置不当引发的蝴蝶效应。2. 漏洞原理深度解析从名称解析协议到信任崩塌要有效防御必须先透彻理解攻击是如何发生的。NetBIOS漏洞的核心根植于Windows网络名称解析的“后备机制”及其缺乏认证的设计缺陷。2.1 NetBIOS、NBNS与LLMNR理清容易混淆的三者关系很多人容易将NetBIOS、NBNS和LLMNR混为一谈其实它们是不同层次的概念。NetBIOS是一个网络基本输入输出系统API可以理解为一种早期的网络编程接口规范。它本身不涉及具体的网络传输。当我们需要在网络上通过“计算机名”访问共享文件夹或打印机时就需要一种机制将“计算机名”解析为IP地址。NBNS就是为NetBIOS服务而生的名称解析协议你可以把它看作NetBIOS世界的“DNS服务器”。在早期没有集中DNS服务器的Windows工作组网络中主机通过向整个网段广播“谁知道FILE-SERVER的IP地址”来查询这就是NBNS查询。问题在于这是一种基于UDP广播的、无任何身份验证机制的协议。任何主机都可以响应声称“FILE-SERVER的IP是192.168.1.100攻击者的IP”。LLMNR是微软在Windows Vista及之后系统引入的“链路本地多播名称解析”协议。它诞生的初衷是为了在IPv6环境下或者在没有DNS服务器的小型网络如临时会议网络中提供名称解析。其工作方式与NBNS类似也是基于多播的查询-响应模式且同样缺乏认证。在Windows的名称解析顺序中当DNS查询失败后系统会依次尝试LLMNR和NBNS。关键点现代Windows系统中LLMNR的优先级通常高于NBNS。这意味着在DNS解析失败后系统会先发送LLMNR查询如果没有得到响应才会降级使用更老的NBNS协议。攻击工具如Responder会同时监听并响应这两种协议的请求确保攻击成功率。2.2 攻击链全景图一次成功的NBNS/LLMNR欺骗如何发生一次完整的攻击通常不是孤立事件而是一个精心设计的链条。假设内网有一台用户主机USER-PC192.168.1.10和一台攻击者控制的机器ATTACKER192.168.1.99。触发查询用户在USER-PC上尝试访问一个不存在的网络路径例如误输入了\\fileshare\正确的可能是\\fileserver\或者某些应用程序自动尝试访问一个错误的主机名。此时USER-PC首先会向配置的DNS服务器查询fileshare的IP地址。DNS解析失败由于fileshare这个主机名不存在DNS服务器返回“域名不存在”的响应。降级广播根据Windows名称解析顺序USER-PC转而向本地子网发送LLMNR多播查询IPv4地址224.0.0.252IPv6地址FF02::1:3大喊“谁知道fileshare的IP”如果LLMNR没有回应它会继续发送NBNS广播查询UDP端口137。恶意抢答攻击者主机ATTACKER上的工具如Responder一直在监听网卡捕获到这些广播查询。它立刻伪造一个响应包声称“我就是fileshare我的IP是192.168.1.99。”信任与重定向USER-PC收到这个响应由于协议没有要求验证响应者身份它选择信任第一个收到的响应并将fileshare解析为攻击者的IP192.168.1.99。凭据窃取接下来当USER-PC尝试访问\\fileshare\时实际上是在向ATTACKER发起SMB、HTTP或FTP等协议的连接。ATTACKER可以伪装成一台服务器并请求身份验证。USER-PC会尝试用当前用户的NTLMv2哈希一种Windows密码的加密形式进行认证这个哈希值就会被ATTACKER捕获。后续利用攻击者获取到NTLMv2哈希后可以尝试在本地进行离线破解如果密码强度弱或者使用“Pass-the-Hash”技术直接利用这个哈希值在网络中进行横向移动访问其他资源而无需知道明文密码。这个攻击链的可怕之处在于它不需要攻击者事先获得任何权限只需要接入目标网络如有线网络插口、无线网络并有一台开启了监听工具的主机即可。在内网安全评估中这是获取初始立足点最高效的方法之一。2.3 为什么企业内网难以根除此类漏洞理解了原理你可能会问这么明显的漏洞为什么不直接关掉现实情况往往很复杂历史遗留与兼容性大量老旧业务系统、工业控制软件或特定硬件设备严重依赖NetBIOS协议进行网络发现和通信。盲目禁用可能导致关键业务中断。默认配置的惯性Windows系统在某些网络配置如“工作网络”下默认会启用NetBIOS over TCP/IP。除非有明确的组策略或脚本进行统一禁用否则新加入网络的机器会自动开启。管理盲区网络管理员可能更关注防火墙、入侵检测等边界安全对内网主机间这种基于广播的协议通信缺乏有效的监控和审计手段。攻击成本极低防御需要全面发动一次欺骗攻击只需要一个开源工具和一台普通电脑。而要全面防御则需要修改成百上千台终端的主机配置、调整网络设备策略并部署额外的安全监测成本和复杂度不在一个量级。3. 实战环境搭建与攻击模拟纸上得来终觉浅绝知此事要躬行。在受控的实验室环境中复现攻击是理解漏洞和验证防御措施最有效的方式。请务必仅在你自己搭建的虚拟化实验室中进行以下所有操作切勿在任何真实生产或他人网络中进行测试这不仅是非法的也可能造成严重后果。3.1 实验室环境准备我们需要一个简单的内网环境来模拟攻击。推荐使用VMware Workstation或VirtualBox。攻击机Kali Linux。这是渗透测试的标准发行版预装了Responder等我们需要的工具。网络配置NAT模式或桥接模式确保能与靶机在同一IP网段通信。设置静态IP例如192.168.1.99。靶机Windows 10 或 Windows 11。模拟内网普通用户主机。网络配置与攻击机在同一网络模式如都使用桥接到同一块物理网卡确保IP在同一网段例如自动获取IP或设为192.168.1.10。关闭Windows防火墙仅实验用或为相关端口添加入站规则。重要提示确保虚拟网络是隔离的不与你的真实办公或家庭网络混用。可以在虚拟化软件中创建一个“仅主机模式”的虚拟网络将两台虚拟机都接入这个网络。3.2 攻击工具Responder的配置与使用Responder是进行LLMNR/NBNS欺骗、SMB等服务模拟的瑞士军刀。Kali Linux通常已预装。查看网卡与基本使用 在Kali Linux终端中首先用ip a或ifconfig确认你的网卡名称通常是eth0或ens33。然后可以查看Responder的基本帮助responder -I eth0 --help-I参数指定监听网卡。首次运行与理解输出 一个基础的监听命令如下responder -I eth0 -wrf-w: 启动WPAD代理服务器用于捕获HTTP代理自动发现请求。-r: 启用响应LLMNR请求。-f: 启用响应NBNS请求。 运行后Responder会开始监听并打印日志。此时它处于被动等待状态等待网络中的广播查询。主动分析网络可选 在发动攻击前你可能想先分析一下网络中有哪些主机。可以使用nbtscan工具Kali也自带nbtscan 192.168.1.0/24这会扫描指定网段列出开启了NetBIOS服务的主机及其计算机名、工作组等信息。3.3 触发攻击与捕获凭据现在让我们在靶机上触发一次名称解析请求。在靶机Windows上操作打开“运行”WinR输入一个错误的UNC路径例如\\thiscomputernameDoesNotExist\share。或者在文件资源管理器的地址栏输入\\错误的名称。甚至某些应用程序、脚本或计划任务在尝试连接网络资源失败时也会触发这类查询。观察攻击机Kali的Responder输出 一旦靶机发送了LLMNR/NBNS查询Responder会立即捕获并响应。你会在终端看到类似下面的输出[LLMNR] Poisoned answer sent to 192.168.1.10 for name thiscomputernamedoesnotexist [NBT-NS] Poisoned answer sent to 192.168.1.10 for name THISCOMPUTERNAMEDOESNOTEXIST这表示欺骗响应已成功发送。捕获哈希 随后Windows靶机会尝试向攻击机它现在相信攻击机就是thiscomputernamedoesnotexist发起SMB连接并进行身份验证。Responder会模拟一个SMB服务器并请求NTLM认证。此时靶机会发送当前登录用户的NTLMv2哈希。Responder的日志会显示[SMB] NTLMv2-SSP Client : 192.168.1.10 [SMB] NTLMv2-SSP Username : DOMAIN\UserName 或 WORKGROUP\ComputerName$ [SMB] NTLMv2-SSP Hash : UserName::DOMAIN:1122334455667788:2F0B5A3C8D1E4F6A9B0C7D2E8F1A3B5C:0101000000000000...这一长串UserName::DOMAIN:...就是捕获到的NTLMv2哈希值。它被保存到了Kali上的/usr/share/responder/logs/目录下的某个文件中如SMBv2-NTLMv2-SSP-192.168.1.10.txt。哈希的后续处理 捕获到的哈希是加密的不能直接使用。攻击者通常会使用hashcat或johnJohn the Ripper这类工具进行离线破解。# 使用hashcat示例假设哈希文件为captured.hash使用rockyou字典破解 hashcat -m 5600 captured.hash /usr/share/wordlists/rockyou.txt-m 5600指定了NTLMv2的破解模式。破解成功与否完全取决于用户密码的复杂度。如果密码是弱密码如Company123!可能在几分钟甚至几秒内就被破解。如果密码足够强长且随机则几乎无法破解。实操心得在实际渗透测试中Responder常常与ntlmrelayx.pyImpacket套件的一部分结合使用进行“中继攻击”。即不破解哈希而是将捕获到的认证请求实时中继到网络中的其他机器如域控制器直接获取那台机器的访问权限。这比破解哈希更高效且不受密码强度影响但需要目标环境满足特定条件如目标SMB签名被禁用。4. 多层次防御体系构建从终端到网络的全面加固仅仅知道攻击原理是不够的作为防御者我们的目标是构建一个让攻击者无处下手的体系。防御NBNS/LLMNR欺骗需要多层次、纵深化的策略。4.1 终端主机加固关闭不必要的协议与服务这是最直接、最有效的一层防御。如果业务不需要就在所有Windows主机上禁用LLMNR和NetBIOS over TCP/IP。方法一通过图形界面配置适用于单机或少量主机禁用LLMNR打开“组策略编辑器”gpedit.msc。导航到计算机配置-管理模板-网络-DNS客户端。找到“关闭多播名称解析”将其设置为“已启用”。重启计算机或使用gpupdate /force命令更新组策略。禁用NetBIOS over TCP/IP打开“网络和共享中心” - “更改适配器设置”。右键点击活动网卡选择“属性”。双击“Internet协议版本 4 (TCP/IPv4)”。点击“高级” - 切换到“WINS”选项卡。在“NetBIOS设置”部分选择“禁用 TCP/IP 上的 NetBIOS”。对IPv6也进行类似操作如果启用。方法二通过组策略统一部署适用于域环境强烈推荐在域控制器上配置组策略对象GPO可以一次性管理成千上万台计算机。创建或编辑GPO打开“组策略管理控制台”GPMC.msc创建一个新的GPO或编辑现有的链接到需要管理的OU组织单元。禁用LLMNR路径计算机配置-策略-管理模板-网络-DNS客户端。策略“关闭多播名称解析” - 设置为“已启用”。禁用NetBIOS over TCP/IP路径计算机配置-策略-Windows 设置-安全设置-网络列表管理器策略。这里需要更精细的控制。更好的方法是通过首选项来修改注册表路径计算机配置-首选项-Windows 设置-注册表。新建一个注册表项操作更新Hive:HKEY_LOCAL_MACHINE密钥路径SYSTEM\CurrentControlSet\Services\NetBT\Parameters\Interfaces注意Interfaces下的子项是网卡的GUID直接在这里设置可能不通用。更可靠的方法是使用DHCP服务器选项或下文的方法。方法三通过DHCP服务器选项适用于非域环境或混合环境这是网络层面的集中控制方法。在DHCP服务器上可以为客户端分配一个特定的选项指示它们禁用NetBIOS。在Windows Server DHCP控制台中找到作用域选项。添加或编辑选项046类型为字节值为0x2。0x0: 使用客户端自己的设置默认。0x1: 启用NetBIOS over TCP/IP。0x2:禁用NetBIOS over TCP/IP。客户端在续租或获取新IP后会自动应用此设置。注意事项在实施禁用操作前务必进行充分的测试。在一个非关键的测试OU或几台测试机上应用策略验证所有关键业务应用特别是那些需要通过网络邻居访问的旧版软件、特定品牌的打印机、扫描仪等是否仍能正常工作。制定回滚计划。4.2 网络层防御隔离、监控与访问控制终端加固可能无法覆盖所有设备如IoT设备、打印机网络层的控制可以作为重要补充。网络分段与微隔离将网络划分为不同的安全区域VLAN例如用户区、服务器区、物联网设备区。在区域之间的防火墙上严格限制不必要的广播流量如UDP 137/138TCP 139/445跨区传播。LLMNRUDP 5355和NetBIOS广播通常只在同一广播域内有效分段本身就能极大限制攻击范围。实施“零信任”网络访问ZTNA原则默认拒绝所有流量只允许明确必要的通信。部署网络入侵检测/防御系统配置NIDS/NIPS如Suricata, Snort的规则检测网络中的LLMNR/NBNS欺骗行为。规则可以寻找那些源IP地址与已知主机名不匹配的LLMNR/NBNS响应包。示例Snort规则思路需根据实际环境调整alert udp any any - any 5355 (msg:Potential LLMNR Spoofing Response; content:|85 00|; depth:2; byte_test:2, , 0x0001, 2; sid:1000001; rev:1;)此规则仅为示意实际规则需更复杂以降低误报启用SMB签名NTLM中继攻击成功的一个关键前提是目标服务器的SMB签名被禁用。如果强制所有服务器的SMB通信必须签名中继攻击将无法成功。在域控制器上配置组策略路径计算机配置-策略-Windows 设置-安全设置-本地策略-安全选项。找到“Microsoft网络服务器: 对通信进行数字签名(始终)”设置为“已启用”。找到“Microsoft网络客户端: 对通信进行数字签名(始终)”也设置为“已启用”。注意启用SMB签名会带来轻微的性能开销但在现代硬件上基本可忽略。这是防御中继攻击极其有效的一招。4.3 高级防御与监测主动狩猎与凭据保护对于安全要求更高的环境可以采取更积极的措施。部署终端检测与响应在主机上安装EDR代理监控并告警可疑的进程行为。例如如果一个非系统进程如python.exe尝试在UDP 5355或137端口上进行监听这很可能就是Responder之类的工具在运行EDR应能产生高优先级告警。实施本地管理员密码解决方案微软的本地管理员密码解决方案或第三方特权账户管理PAM工具可以确保每台计算机的本地管理员密码都不同且定期随机更改。这样即使攻击者通过某种方式获取了一台机器的本地管理员哈希也无法利用它在其他机器上进行横向移动。启用Windows事件日志并集中分析在Windows主机上启用详细的审核策略记录安全事件。关注事件ID4768和4769Kerberos身份验证以及4624登录成功和4625登录失败。异常的、来自非受信主机的登录尝试尤其是使用NTLM协议而非Kerberos的登录可能是中继攻击或哈希传递攻击的迹象。使用SIEM系统如Splunk, Elastic Stack集中收集和分析这些日志建立关联规则及时发现威胁。用户教育与安全策略培训用户不要随意点击或访问不可信的网络路径。实施强密码策略和定期更换密码策略增加哈希破解的难度。推广使用更安全的身份验证协议如Kerberos并尽量减少NTLM的使用。在组策略中可以配置“网络安全限制NTLM”策略。5. 常见问题排查与防御策略验证在实际部署防御措施的过程中你可能会遇到各种问题。这里汇总了一些常见场景和排查思路。5.1 禁用NetBIOS后业务中断怎么办这是最常见的顾虑。排查步骤如下精准定位依赖应用在测试环境中禁用NetBIOS后是哪些具体功能或软件报错错误信息是什么常见依赖NetBIOS的服务包括某些老版本的财务软件、ERP客户端。特定品牌的网络打印机、扫描仪的发现和连接功能。使用“计算机名”进行通信的旧版工业控制软件。一些家庭组或早期版本的Windows文件共享发现。寻找替代方案使用DNS或Hosts文件如果应用依赖计算机名确保所有相关计算机名都能通过DNS正确解析或者在每台主机的C:\Windows\System32\drivers\etc\hosts文件中添加静态映射。这是最推荐的方案。使用IP地址直接访问对于文件共享或打印机尝试使用\\192.168.1.xxx的IP地址格式进行访问绕过名称解析。启用WINS服务器如果环境中有大量遗留系统必须使用NetBIOS名称解析可以考虑部署一台WINS服务器作为集中的NetBIOS名称注册和解析点并禁用所有客户端的广播查询NetBIOS节点类型设为0x4或0x8。但这只是将风险从广播欺骗转移到了WINS服务器本身的安全上需加强WINS服务器的防护。分阶段实施不要在全网一刀切。先对IT部门、新购设备等非关键区域实施积累经验再逐步推广到业务部门。5.2 如何验证防御措施是否生效部署了组策略或DHCP选项后你需要验证客户端是否真的应用了设置。检查LLMNR禁用在客户端计算机上以管理员身份打开命令提示符。运行命令nslookup -typellmnr _non_existent_hostname_如果LLMNR已禁用这个查询应该会立即失败或超时而不会等待广播响应。更直接的方法是检查注册表reg query HKLM\SOFTWARE\Policies\Microsoft\Windows NT\DNSClient /v EnableMulticast如果返回0x0(0)则表示已禁用。检查NetBIOS状态打开命令提示符输入ipconfig /all。找到你的活动网络适配器查看“NetBIOS over Tcpip”一行。如果显示“已禁用”则表示设置生效。或者使用nbtstat -n命令如果NetBIOS已禁用该命令可能显示“NetBIOS未运行”或类似信息。进行攻击模拟测试在已加固的客户端上重复之前触发错误UNC路径的操作。在攻击机Kali上运行Responder。此时你应该看不到来自该客户端的LLMNR/NBNS查询被毒化也捕获不到任何哈希。这是最直接的验证。5.3 组策略未生效的排查思路在域环境中组策略有时不会按预期应用。强制更新并查看结果在客户端运行gpupdate /force然后运行gpresult /h gp_report.html生成一个详细的HTML报告。在报告中搜索“关闭多播名称解析”等策略名称查看其“已应用”状态和来源GPO。检查策略继承与冲突在GPMC中使用“组策略建模”向导模拟目标用户和计算机在目标OU下的策略结果查看是否有更高层级的GPO覆盖了你的设置或者是否有冲突的设置。检查客户端网络位置确保客户端计算机识别网络为“域”网络而不是“公用”或“专用”网络。某些策略可能只应用于“域”配置文件。查看事件日志在客户端的“事件查看器”中查看“应用程序和服务日志” - “Microsoft” - “Windows” - “GroupPolicy” - “Operational”日志里面会有详细的组策略处理过程和错误信息。5.4 面对已捕获的哈希除了破解还能做什么作为防御演练的一部分假设你模拟攻击捕获到了一个哈希除了尝试破解更应该做的是分析哈希来源查看Responder日志明确这个哈希来自哪个用户、哪台计算机WORKGROUP\PCNAME$是计算机账户DOMAIN\username是用户账户。计算机账户的密码是长且随机的通常无法破解但其哈希可用于Kerberos“白银票据”攻击同样危险。评估风险等级域管理员账户哈希最高风险需立即进行全网的应急响应和密码重置。普通域用户哈希中等风险攻击者可利用此哈希在域内进行有限的横向移动访问该用户有权限的资源。本地管理员哈希高风险攻击者可完全控制该台主机并可能利用本地管理员密码复用进行横向移动。计算机账户哈希中高风险可用于针对特定服务的攻击。触发安全事件响应流程将此次模拟攻击作为一次真实事件进行演练。通知相关用户修改密码如果是可破解的弱密码检查该用户所属的权限组审查其登录和访问日志寻找是否已有异常活动。防御NetBIOS相关漏洞是一场持久战它考验的不仅是技术更是安全管理的细致程度。没有一劳永逸的银弹需要将终端配置、网络策略、安全监控和人员意识结合起来形成一个动态的、纵深的防御体系。从关闭一个不必要的协议开始逐步收紧内网的安全边界你会发现整个内网的安全水位都在随之提升。
内网渗透中的NetBIOS漏洞:NBNS/LLMNR欺骗攻击原理与防御实战
发布时间:2026/7/3 23:59:35
1. 项目概述为什么NetBIOS漏洞至今仍是内网渗透的“黄金门票”在网络安全领域尤其是内网渗透测试和红蓝对抗中总有一些“老而弥坚”的漏洞它们可能不像零日漏洞那样引人注目却因为广泛存在、默认开启且易于利用成为攻击者最爱的突破口。NetBIOS相关的漏洞特别是NBNS/LLMNR欺骗攻击就是其中的典型代表。你可能觉得NetBIOS这种诞生于上世纪80年代的古老协议在今天的现代网络中早已过时。但现实是在大量企业内网、教育网络甚至一些云环境下的虚拟网络中为了兼容老旧系统或某些特定应用NetBIOS服务依然默认运行着这无异于为攻击者留下了一扇敞开的侧门。这个项目的核心就是深入剖析基于NetBIOS名称服务NBNS的欺骗攻击原理、手法与完整防御体系。它绝不仅仅是关闭一个服务那么简单。攻击者利用的是Windows系统在名称解析上的一个“信任链”缺陷当DNS解析失败时系统会降级使用LLMNR和NBNS进行广播查询。而关键在于任何收到广播请求的主机都可以进行响应系统默认会信任第一个“抢答”的响应。想象一下在一个会议室里主持人问“谁是张三”任何人都可以举手说“我是”而主持人没有核实身份就相信了——这就是NBNS/LLMNR欺骗攻击最形象的比喻。通过这个项目你将掌握从攻击者视角理解漏洞利用的全过程包括如何搭建欺骗环境、捕获NetBIOS广播请求、伪造响应将流量导向攻击机并最终窃取用户凭据或实施中间人攻击。更重要的是我们将从防御者角度构建一个从终端配置、网络策略到持续监控的多层防御方案。无论你是刚入门的安全爱好者、负责企业内网安全的运维人员还是正在备考CTF或安全认证的学习者理解并实践这个项目都能让你对内网安全有一个更深刻、更实战化的认知。很多安全事件溯源到最后往往就是这些“不起眼”的古老协议配置不当引发的蝴蝶效应。2. 漏洞原理深度解析从名称解析协议到信任崩塌要有效防御必须先透彻理解攻击是如何发生的。NetBIOS漏洞的核心根植于Windows网络名称解析的“后备机制”及其缺乏认证的设计缺陷。2.1 NetBIOS、NBNS与LLMNR理清容易混淆的三者关系很多人容易将NetBIOS、NBNS和LLMNR混为一谈其实它们是不同层次的概念。NetBIOS是一个网络基本输入输出系统API可以理解为一种早期的网络编程接口规范。它本身不涉及具体的网络传输。当我们需要在网络上通过“计算机名”访问共享文件夹或打印机时就需要一种机制将“计算机名”解析为IP地址。NBNS就是为NetBIOS服务而生的名称解析协议你可以把它看作NetBIOS世界的“DNS服务器”。在早期没有集中DNS服务器的Windows工作组网络中主机通过向整个网段广播“谁知道FILE-SERVER的IP地址”来查询这就是NBNS查询。问题在于这是一种基于UDP广播的、无任何身份验证机制的协议。任何主机都可以响应声称“FILE-SERVER的IP是192.168.1.100攻击者的IP”。LLMNR是微软在Windows Vista及之后系统引入的“链路本地多播名称解析”协议。它诞生的初衷是为了在IPv6环境下或者在没有DNS服务器的小型网络如临时会议网络中提供名称解析。其工作方式与NBNS类似也是基于多播的查询-响应模式且同样缺乏认证。在Windows的名称解析顺序中当DNS查询失败后系统会依次尝试LLMNR和NBNS。关键点现代Windows系统中LLMNR的优先级通常高于NBNS。这意味着在DNS解析失败后系统会先发送LLMNR查询如果没有得到响应才会降级使用更老的NBNS协议。攻击工具如Responder会同时监听并响应这两种协议的请求确保攻击成功率。2.2 攻击链全景图一次成功的NBNS/LLMNR欺骗如何发生一次完整的攻击通常不是孤立事件而是一个精心设计的链条。假设内网有一台用户主机USER-PC192.168.1.10和一台攻击者控制的机器ATTACKER192.168.1.99。触发查询用户在USER-PC上尝试访问一个不存在的网络路径例如误输入了\\fileshare\正确的可能是\\fileserver\或者某些应用程序自动尝试访问一个错误的主机名。此时USER-PC首先会向配置的DNS服务器查询fileshare的IP地址。DNS解析失败由于fileshare这个主机名不存在DNS服务器返回“域名不存在”的响应。降级广播根据Windows名称解析顺序USER-PC转而向本地子网发送LLMNR多播查询IPv4地址224.0.0.252IPv6地址FF02::1:3大喊“谁知道fileshare的IP”如果LLMNR没有回应它会继续发送NBNS广播查询UDP端口137。恶意抢答攻击者主机ATTACKER上的工具如Responder一直在监听网卡捕获到这些广播查询。它立刻伪造一个响应包声称“我就是fileshare我的IP是192.168.1.99。”信任与重定向USER-PC收到这个响应由于协议没有要求验证响应者身份它选择信任第一个收到的响应并将fileshare解析为攻击者的IP192.168.1.99。凭据窃取接下来当USER-PC尝试访问\\fileshare\时实际上是在向ATTACKER发起SMB、HTTP或FTP等协议的连接。ATTACKER可以伪装成一台服务器并请求身份验证。USER-PC会尝试用当前用户的NTLMv2哈希一种Windows密码的加密形式进行认证这个哈希值就会被ATTACKER捕获。后续利用攻击者获取到NTLMv2哈希后可以尝试在本地进行离线破解如果密码强度弱或者使用“Pass-the-Hash”技术直接利用这个哈希值在网络中进行横向移动访问其他资源而无需知道明文密码。这个攻击链的可怕之处在于它不需要攻击者事先获得任何权限只需要接入目标网络如有线网络插口、无线网络并有一台开启了监听工具的主机即可。在内网安全评估中这是获取初始立足点最高效的方法之一。2.3 为什么企业内网难以根除此类漏洞理解了原理你可能会问这么明显的漏洞为什么不直接关掉现实情况往往很复杂历史遗留与兼容性大量老旧业务系统、工业控制软件或特定硬件设备严重依赖NetBIOS协议进行网络发现和通信。盲目禁用可能导致关键业务中断。默认配置的惯性Windows系统在某些网络配置如“工作网络”下默认会启用NetBIOS over TCP/IP。除非有明确的组策略或脚本进行统一禁用否则新加入网络的机器会自动开启。管理盲区网络管理员可能更关注防火墙、入侵检测等边界安全对内网主机间这种基于广播的协议通信缺乏有效的监控和审计手段。攻击成本极低防御需要全面发动一次欺骗攻击只需要一个开源工具和一台普通电脑。而要全面防御则需要修改成百上千台终端的主机配置、调整网络设备策略并部署额外的安全监测成本和复杂度不在一个量级。3. 实战环境搭建与攻击模拟纸上得来终觉浅绝知此事要躬行。在受控的实验室环境中复现攻击是理解漏洞和验证防御措施最有效的方式。请务必仅在你自己搭建的虚拟化实验室中进行以下所有操作切勿在任何真实生产或他人网络中进行测试这不仅是非法的也可能造成严重后果。3.1 实验室环境准备我们需要一个简单的内网环境来模拟攻击。推荐使用VMware Workstation或VirtualBox。攻击机Kali Linux。这是渗透测试的标准发行版预装了Responder等我们需要的工具。网络配置NAT模式或桥接模式确保能与靶机在同一IP网段通信。设置静态IP例如192.168.1.99。靶机Windows 10 或 Windows 11。模拟内网普通用户主机。网络配置与攻击机在同一网络模式如都使用桥接到同一块物理网卡确保IP在同一网段例如自动获取IP或设为192.168.1.10。关闭Windows防火墙仅实验用或为相关端口添加入站规则。重要提示确保虚拟网络是隔离的不与你的真实办公或家庭网络混用。可以在虚拟化软件中创建一个“仅主机模式”的虚拟网络将两台虚拟机都接入这个网络。3.2 攻击工具Responder的配置与使用Responder是进行LLMNR/NBNS欺骗、SMB等服务模拟的瑞士军刀。Kali Linux通常已预装。查看网卡与基本使用 在Kali Linux终端中首先用ip a或ifconfig确认你的网卡名称通常是eth0或ens33。然后可以查看Responder的基本帮助responder -I eth0 --help-I参数指定监听网卡。首次运行与理解输出 一个基础的监听命令如下responder -I eth0 -wrf-w: 启动WPAD代理服务器用于捕获HTTP代理自动发现请求。-r: 启用响应LLMNR请求。-f: 启用响应NBNS请求。 运行后Responder会开始监听并打印日志。此时它处于被动等待状态等待网络中的广播查询。主动分析网络可选 在发动攻击前你可能想先分析一下网络中有哪些主机。可以使用nbtscan工具Kali也自带nbtscan 192.168.1.0/24这会扫描指定网段列出开启了NetBIOS服务的主机及其计算机名、工作组等信息。3.3 触发攻击与捕获凭据现在让我们在靶机上触发一次名称解析请求。在靶机Windows上操作打开“运行”WinR输入一个错误的UNC路径例如\\thiscomputernameDoesNotExist\share。或者在文件资源管理器的地址栏输入\\错误的名称。甚至某些应用程序、脚本或计划任务在尝试连接网络资源失败时也会触发这类查询。观察攻击机Kali的Responder输出 一旦靶机发送了LLMNR/NBNS查询Responder会立即捕获并响应。你会在终端看到类似下面的输出[LLMNR] Poisoned answer sent to 192.168.1.10 for name thiscomputernamedoesnotexist [NBT-NS] Poisoned answer sent to 192.168.1.10 for name THISCOMPUTERNAMEDOESNOTEXIST这表示欺骗响应已成功发送。捕获哈希 随后Windows靶机会尝试向攻击机它现在相信攻击机就是thiscomputernamedoesnotexist发起SMB连接并进行身份验证。Responder会模拟一个SMB服务器并请求NTLM认证。此时靶机会发送当前登录用户的NTLMv2哈希。Responder的日志会显示[SMB] NTLMv2-SSP Client : 192.168.1.10 [SMB] NTLMv2-SSP Username : DOMAIN\UserName 或 WORKGROUP\ComputerName$ [SMB] NTLMv2-SSP Hash : UserName::DOMAIN:1122334455667788:2F0B5A3C8D1E4F6A9B0C7D2E8F1A3B5C:0101000000000000...这一长串UserName::DOMAIN:...就是捕获到的NTLMv2哈希值。它被保存到了Kali上的/usr/share/responder/logs/目录下的某个文件中如SMBv2-NTLMv2-SSP-192.168.1.10.txt。哈希的后续处理 捕获到的哈希是加密的不能直接使用。攻击者通常会使用hashcat或johnJohn the Ripper这类工具进行离线破解。# 使用hashcat示例假设哈希文件为captured.hash使用rockyou字典破解 hashcat -m 5600 captured.hash /usr/share/wordlists/rockyou.txt-m 5600指定了NTLMv2的破解模式。破解成功与否完全取决于用户密码的复杂度。如果密码是弱密码如Company123!可能在几分钟甚至几秒内就被破解。如果密码足够强长且随机则几乎无法破解。实操心得在实际渗透测试中Responder常常与ntlmrelayx.pyImpacket套件的一部分结合使用进行“中继攻击”。即不破解哈希而是将捕获到的认证请求实时中继到网络中的其他机器如域控制器直接获取那台机器的访问权限。这比破解哈希更高效且不受密码强度影响但需要目标环境满足特定条件如目标SMB签名被禁用。4. 多层次防御体系构建从终端到网络的全面加固仅仅知道攻击原理是不够的作为防御者我们的目标是构建一个让攻击者无处下手的体系。防御NBNS/LLMNR欺骗需要多层次、纵深化的策略。4.1 终端主机加固关闭不必要的协议与服务这是最直接、最有效的一层防御。如果业务不需要就在所有Windows主机上禁用LLMNR和NetBIOS over TCP/IP。方法一通过图形界面配置适用于单机或少量主机禁用LLMNR打开“组策略编辑器”gpedit.msc。导航到计算机配置-管理模板-网络-DNS客户端。找到“关闭多播名称解析”将其设置为“已启用”。重启计算机或使用gpupdate /force命令更新组策略。禁用NetBIOS over TCP/IP打开“网络和共享中心” - “更改适配器设置”。右键点击活动网卡选择“属性”。双击“Internet协议版本 4 (TCP/IPv4)”。点击“高级” - 切换到“WINS”选项卡。在“NetBIOS设置”部分选择“禁用 TCP/IP 上的 NetBIOS”。对IPv6也进行类似操作如果启用。方法二通过组策略统一部署适用于域环境强烈推荐在域控制器上配置组策略对象GPO可以一次性管理成千上万台计算机。创建或编辑GPO打开“组策略管理控制台”GPMC.msc创建一个新的GPO或编辑现有的链接到需要管理的OU组织单元。禁用LLMNR路径计算机配置-策略-管理模板-网络-DNS客户端。策略“关闭多播名称解析” - 设置为“已启用”。禁用NetBIOS over TCP/IP路径计算机配置-策略-Windows 设置-安全设置-网络列表管理器策略。这里需要更精细的控制。更好的方法是通过首选项来修改注册表路径计算机配置-首选项-Windows 设置-注册表。新建一个注册表项操作更新Hive:HKEY_LOCAL_MACHINE密钥路径SYSTEM\CurrentControlSet\Services\NetBT\Parameters\Interfaces注意Interfaces下的子项是网卡的GUID直接在这里设置可能不通用。更可靠的方法是使用DHCP服务器选项或下文的方法。方法三通过DHCP服务器选项适用于非域环境或混合环境这是网络层面的集中控制方法。在DHCP服务器上可以为客户端分配一个特定的选项指示它们禁用NetBIOS。在Windows Server DHCP控制台中找到作用域选项。添加或编辑选项046类型为字节值为0x2。0x0: 使用客户端自己的设置默认。0x1: 启用NetBIOS over TCP/IP。0x2:禁用NetBIOS over TCP/IP。客户端在续租或获取新IP后会自动应用此设置。注意事项在实施禁用操作前务必进行充分的测试。在一个非关键的测试OU或几台测试机上应用策略验证所有关键业务应用特别是那些需要通过网络邻居访问的旧版软件、特定品牌的打印机、扫描仪等是否仍能正常工作。制定回滚计划。4.2 网络层防御隔离、监控与访问控制终端加固可能无法覆盖所有设备如IoT设备、打印机网络层的控制可以作为重要补充。网络分段与微隔离将网络划分为不同的安全区域VLAN例如用户区、服务器区、物联网设备区。在区域之间的防火墙上严格限制不必要的广播流量如UDP 137/138TCP 139/445跨区传播。LLMNRUDP 5355和NetBIOS广播通常只在同一广播域内有效分段本身就能极大限制攻击范围。实施“零信任”网络访问ZTNA原则默认拒绝所有流量只允许明确必要的通信。部署网络入侵检测/防御系统配置NIDS/NIPS如Suricata, Snort的规则检测网络中的LLMNR/NBNS欺骗行为。规则可以寻找那些源IP地址与已知主机名不匹配的LLMNR/NBNS响应包。示例Snort规则思路需根据实际环境调整alert udp any any - any 5355 (msg:Potential LLMNR Spoofing Response; content:|85 00|; depth:2; byte_test:2, , 0x0001, 2; sid:1000001; rev:1;)此规则仅为示意实际规则需更复杂以降低误报启用SMB签名NTLM中继攻击成功的一个关键前提是目标服务器的SMB签名被禁用。如果强制所有服务器的SMB通信必须签名中继攻击将无法成功。在域控制器上配置组策略路径计算机配置-策略-Windows 设置-安全设置-本地策略-安全选项。找到“Microsoft网络服务器: 对通信进行数字签名(始终)”设置为“已启用”。找到“Microsoft网络客户端: 对通信进行数字签名(始终)”也设置为“已启用”。注意启用SMB签名会带来轻微的性能开销但在现代硬件上基本可忽略。这是防御中继攻击极其有效的一招。4.3 高级防御与监测主动狩猎与凭据保护对于安全要求更高的环境可以采取更积极的措施。部署终端检测与响应在主机上安装EDR代理监控并告警可疑的进程行为。例如如果一个非系统进程如python.exe尝试在UDP 5355或137端口上进行监听这很可能就是Responder之类的工具在运行EDR应能产生高优先级告警。实施本地管理员密码解决方案微软的本地管理员密码解决方案或第三方特权账户管理PAM工具可以确保每台计算机的本地管理员密码都不同且定期随机更改。这样即使攻击者通过某种方式获取了一台机器的本地管理员哈希也无法利用它在其他机器上进行横向移动。启用Windows事件日志并集中分析在Windows主机上启用详细的审核策略记录安全事件。关注事件ID4768和4769Kerberos身份验证以及4624登录成功和4625登录失败。异常的、来自非受信主机的登录尝试尤其是使用NTLM协议而非Kerberos的登录可能是中继攻击或哈希传递攻击的迹象。使用SIEM系统如Splunk, Elastic Stack集中收集和分析这些日志建立关联规则及时发现威胁。用户教育与安全策略培训用户不要随意点击或访问不可信的网络路径。实施强密码策略和定期更换密码策略增加哈希破解的难度。推广使用更安全的身份验证协议如Kerberos并尽量减少NTLM的使用。在组策略中可以配置“网络安全限制NTLM”策略。5. 常见问题排查与防御策略验证在实际部署防御措施的过程中你可能会遇到各种问题。这里汇总了一些常见场景和排查思路。5.1 禁用NetBIOS后业务中断怎么办这是最常见的顾虑。排查步骤如下精准定位依赖应用在测试环境中禁用NetBIOS后是哪些具体功能或软件报错错误信息是什么常见依赖NetBIOS的服务包括某些老版本的财务软件、ERP客户端。特定品牌的网络打印机、扫描仪的发现和连接功能。使用“计算机名”进行通信的旧版工业控制软件。一些家庭组或早期版本的Windows文件共享发现。寻找替代方案使用DNS或Hosts文件如果应用依赖计算机名确保所有相关计算机名都能通过DNS正确解析或者在每台主机的C:\Windows\System32\drivers\etc\hosts文件中添加静态映射。这是最推荐的方案。使用IP地址直接访问对于文件共享或打印机尝试使用\\192.168.1.xxx的IP地址格式进行访问绕过名称解析。启用WINS服务器如果环境中有大量遗留系统必须使用NetBIOS名称解析可以考虑部署一台WINS服务器作为集中的NetBIOS名称注册和解析点并禁用所有客户端的广播查询NetBIOS节点类型设为0x4或0x8。但这只是将风险从广播欺骗转移到了WINS服务器本身的安全上需加强WINS服务器的防护。分阶段实施不要在全网一刀切。先对IT部门、新购设备等非关键区域实施积累经验再逐步推广到业务部门。5.2 如何验证防御措施是否生效部署了组策略或DHCP选项后你需要验证客户端是否真的应用了设置。检查LLMNR禁用在客户端计算机上以管理员身份打开命令提示符。运行命令nslookup -typellmnr _non_existent_hostname_如果LLMNR已禁用这个查询应该会立即失败或超时而不会等待广播响应。更直接的方法是检查注册表reg query HKLM\SOFTWARE\Policies\Microsoft\Windows NT\DNSClient /v EnableMulticast如果返回0x0(0)则表示已禁用。检查NetBIOS状态打开命令提示符输入ipconfig /all。找到你的活动网络适配器查看“NetBIOS over Tcpip”一行。如果显示“已禁用”则表示设置生效。或者使用nbtstat -n命令如果NetBIOS已禁用该命令可能显示“NetBIOS未运行”或类似信息。进行攻击模拟测试在已加固的客户端上重复之前触发错误UNC路径的操作。在攻击机Kali上运行Responder。此时你应该看不到来自该客户端的LLMNR/NBNS查询被毒化也捕获不到任何哈希。这是最直接的验证。5.3 组策略未生效的排查思路在域环境中组策略有时不会按预期应用。强制更新并查看结果在客户端运行gpupdate /force然后运行gpresult /h gp_report.html生成一个详细的HTML报告。在报告中搜索“关闭多播名称解析”等策略名称查看其“已应用”状态和来源GPO。检查策略继承与冲突在GPMC中使用“组策略建模”向导模拟目标用户和计算机在目标OU下的策略结果查看是否有更高层级的GPO覆盖了你的设置或者是否有冲突的设置。检查客户端网络位置确保客户端计算机识别网络为“域”网络而不是“公用”或“专用”网络。某些策略可能只应用于“域”配置文件。查看事件日志在客户端的“事件查看器”中查看“应用程序和服务日志” - “Microsoft” - “Windows” - “GroupPolicy” - “Operational”日志里面会有详细的组策略处理过程和错误信息。5.4 面对已捕获的哈希除了破解还能做什么作为防御演练的一部分假设你模拟攻击捕获到了一个哈希除了尝试破解更应该做的是分析哈希来源查看Responder日志明确这个哈希来自哪个用户、哪台计算机WORKGROUP\PCNAME$是计算机账户DOMAIN\username是用户账户。计算机账户的密码是长且随机的通常无法破解但其哈希可用于Kerberos“白银票据”攻击同样危险。评估风险等级域管理员账户哈希最高风险需立即进行全网的应急响应和密码重置。普通域用户哈希中等风险攻击者可利用此哈希在域内进行有限的横向移动访问该用户有权限的资源。本地管理员哈希高风险攻击者可完全控制该台主机并可能利用本地管理员密码复用进行横向移动。计算机账户哈希中高风险可用于针对特定服务的攻击。触发安全事件响应流程将此次模拟攻击作为一次真实事件进行演练。通知相关用户修改密码如果是可破解的弱密码检查该用户所属的权限组审查其登录和访问日志寻找是否已有异常活动。防御NetBIOS相关漏洞是一场持久战它考验的不仅是技术更是安全管理的细致程度。没有一劳永逸的银弹需要将终端配置、网络策略、安全监控和人员意识结合起来形成一个动态的、纵深的防御体系。从关闭一个不必要的协议开始逐步收紧内网的安全边界你会发现整个内网的安全水位都在随之提升。