LLMNR turn it off, then keep it off

LLMNR and NBT-NS will hand your NTLMv2 hash to anyone who answers first - Responder's favourite party trick since 2014. Here's the actual fix, and how to stop it quietly turning itself back on.

Marko ZivanovicJul 20, 202611 min read

01 The Big PictureFor leadership · no jargon

Okay, so LLMNR the protocol equivalent of shouting your question across a crowded office and trusting whoever answers loudest. This guide walks through what it actually is, why it's still one of the first things to fall over on an internal pentest in 2026, and the fix that's been sitting in Group Policy since Windows Vista: switch it off, and this is the part most guides skip actually make it stay off.

Every Windows box since Vista (2007, for anyone who wants to feel old today) ships with a fallback habit: if normal DNS doesn't have an answer, the machine asks the whole local network instead. That's Link-Local Multicast Name Resolution (LLMNR) and its older sibling NBT-NS. Picture standing up in a busy office and yelling "does anyone know where \\FILESRV01 is?", and whichever stranger shouts back first gets treated as gospel. No ID check. No verification. Whoever answers fastest wins.

Here's the bit that turns "mildly annoying protocol" into "actual vulnerability": Windows doesn't just take the answer and move on, it tries to authenticate to whoever replied, handing over an NTLMv2 challenge/response in the process. So the person pretending to be \\FILESRV01 doesn't just get to have a laugh they get your hashed credentials for free, and if SMB or LDAP signing isn't enforced downstream, they can often relay that authentication straight into a privileged session without cracking a single hash. Yikes.

In business terms: any low-privilege device on the same network as your finance team a phished laptop, a rogue device on a "trusted" guest VLAN, a compromised contractor's box can sit there quietly harvesting NTLMv2 material all day, then trade it for a foothold that sometimes ends in full domain compromise. This isn't some obscure researcher-only finding either. Responder has been standard kit in every pentester's and red teamer's bag since roughly 2014, and "ran Responder, had hashes inside ten minutes" is close to a rite of passage on internal engagements, to throw in my 10 cents, it's the single most common finding I see on internal tests, full stop. The fix itself is genuinely small: one GPO setting kills LLMNR, no reboot required. NBT-NS just needs looping over every adapter. Minutes of work, no downtime. The actual headache, the reason this guide has an extra section most don't is that these settings have a nasty habit of quietly re-enabling themselves after a feature update, a new VPN adapter, or a driver reinstall. More on that in Remediation.

02 Technical BreakdownFor engineers

Right, nitty-gritty time. LLMNR is defined in RFC 4795, worth flagging upfront that the IETF never actually adopted it as a full standard, it's sat as "informational" this whole time, which feels weirdly fitting for a protocol whose entire security model is "shout and hope." It runs over UDP 5355 (TCP 5355 for unicast responses), multicasting to 224.0.0.252 on IPv4 and FF02::1:3 on IPv6, and it's been enabled by default since Windows Vista and Server 2008 straight through to what ships today. NBT-NS is the older cousin (NetBIOS Name Service), UDP 137, IPv4-only, with roots going back to 1984 and it's the second fallback if LLMNR also comes up dry. (mDNS, Apple Bonjour's multicast resolution on UDP 5353, is a separate protocol again, but Responder happily poisons that too, same trick, different address.)

Neither protocol authenticates the responder. That's not a bug, it's the design: any host on the local link can answer a query it was never asked, and the requesting client has no way to check whether the reply genuinely came from \\FILESRV01. Tools like Responder (lgandx/Responder) and Inveigh (Kevin-Robertson's cross-platform tool) sit on the wire, answer every LLMNR/NBT-NS/mDNS query they see, and stand up rogue SMB/HTTP/LDAP/MSSQL/FTP servers to catch whatever authentication follows. Inveigh specifically sniffs raw packets rather than binding the ports directly, so it doesn't collide with services already running on the box, a nice touch if you're running this from a regular workstation rather than a dedicated kit.

The queries that trigger this are mundane: a typo'd UNC path, a share that's been renamed, a WPAD lookup failing because nobody's actually running a proxy. All of it falls through DNS, hits LLMNR/NBT-NS, and gets answered by whoever's listening. The victim authenticates NTLMv1, NTLMv2, or basic HTTP auth depending on what's being impersonated and that gets captured for offline cracking or, more interestingly, relayed live via something like ntlmrelayx into SMB or LDAP/LDAPS on an entirely different host. If that relay target skips SMB signing (or, for LDAP, signing plus channel binding), congratulations, the attacker just authenticated as your victim somewhere they were never meant to log in. MITRE tracks the whole chain as T1557.001 (Adversary-in-the-Middle: Name Resolution Poisoning and SMB Relay), under Credential Access and Collection and Microsoft's own listed mitigation (M1042) is basically "turn it off."

Microsoft has actually said the quiet part out loud on this one. An April 2022 Tech Community post, "Aligning on mDNS: ramping down NetBIOS name resolution and LLMNR", states plainly that NetBIOS and LLMNR are "rarely used today" and that leaving them on "needlessly expands the attack surface." As far as I'm aware, though the actual default-on behaviour on shipping Windows hasn't changed so even the vendor agrees this should die, they just haven't pulled the plug on the default yet.

03 Affected

Every supported Windows version has LLMNR and NBT-NS enabled by default, out of the box, no extra component required Vista/Server 2008 through the Windows 11 and Server 2025 builds shipping today. There's no patch for this, because nothing's broken; it's default behaviour doing exactly what it was built to do. Anyone on the same broadcast segment or VLAN as a Windows client is a viable attacker no elevated privilege needed, just the ability to listen and answer.

Domain controllers aren't the special case here the way they were for PrintNightmare the risk is every workstation and server on every segment, since any one of them can be the victim whose hash gets captured. Which is a long way of saying: if you haven't gone and explicitly disabled this, assume it's on, everywhere, right now.

04 Detection

Before touching anything, let's see where you actually stand.

Get-ItemProperty 'HKLM:\SOFTWARE\Policies\Microsoft\Windows NT\DNSClient' -Name EnableMulticast -ErrorAction SilentlyContinue

If this key doesn't exist at all, LLMNR is enabled, no policy has been applied. 0 means it's off.

Get-WmiObject Win32_NetworkAdapterConfiguration -Filter "IPEnabled='true'" | Select-Object Description, TcpipNetbiosOptions

0 = "ask DHCP" (functionally enabled most of the time), 1 = enabled, 2 = disabled. Check every adapter, this is per-interface, not global, which is exactly the trap covered in Remediation below.

Honest caveat before I give you wire-level signatures: Windows doesn't log this well natively. There's no single "LLMNR poisoning detected" Event ID sat waiting in the System log, the closest native option is the DNS Client Events operational log, and that's not even enabled by default. So the real detection surface here is network, not host.

# Zeek dns.log heuristic: same source IP answering LLMNR/NBT-NS queries
# for many unrelated hostnames in a short window

A legitimate host essentially never does this. Responder answers everything it sees, and that pattern is exactly what gives it away.

LLMNR response byte pattern:  |80 00 00 01 00 01|
NBT-NS response byte pattern: |85 00 00 00 00 00 00 00 00 01|
mDNS response byte pattern:   |84 00 00 00 00 00 00 00 00 01|

Lifted from practitioner writeups rather than an official ruleset, I haven't personally byte-checked these against a fresh Responder pcap, so treat as a solid starting point for a Suricata rule, not gospel. Validate in your own lab before shipping to production.

05 Remediation

01 Turn off LLMNR (one switch, no reboot)

GPO path: Computer Configuration > Administrative Templates > Network > DNS Client > "Turn off multicast name resolution" = Enabled. This writes straight to the policy-backed key below, there's no dedicated "LLMNR service" to restart, since it lives inside the DNS Client (Dnscache) svchost, so gpupdate /force or a normal reboot is all it takes.

reg add "HKLM\Software\Policies\Microsoft\Windows NT\DNSClient" /v "EnableMulticast" /t REG_DWORD /d "0" /f

Local-machine equivalent for a standalone box or a quick lab test. On a domain, do this via GPO, not per-host reg edits, you'll see why in a moment.

02 Turn off NBT-NS (there's no single switch for this one)

Annoyingly, there's no equivalent GPO that covers NetBIOS on every adapter in one shot it's a per-interface registry value, so you loop over them.

$regkey = "HKLM:SYSTEM\CurrentControlSet\services\NetBT\Parameters\Interfaces"
Get-ChildItem $regkey | ForEach-Object {
    Set-ItemProperty -Path "$regkey\$($_.pschildname)" -Name NetbiosOptions -Value 2 -Verbose
}

NetbiosOptions: 0 = follow DHCP (usually ends up enabled), 1 = enabled, 2 = disabled. This is the same value the classic WMI method sets: Get-WmiObject Win32_NetworkAdapterConfiguration -Filter "IPEnabled='true'" | ForEach-Object { $_.SetTcpipNetbios(2) }.

For DHCP-addressed hosts, you can push this centrally via DHCP Option 001 ("Microsoft Disable NetBIOS Option") set to 0x2 on the scope statically addressed hosts won't pick this up, though. There's also a host-wide alternative: setting HKLM\SYSTEM\CurrentControlSet\Services\NetBT\Parameters\NodeType (DWORD) to 2 (P-node) stops the client broadcasting NBT-NS queries at all, in favour of WINS/DNS only deployable via Group Policy Preferences or a startup script, again because there's no native GPO for it.

03 Shore up what's left

If something legacy still needs LLMNR or NBT-NS alive, the compensating controls that actually matter are SMB signing (see Microsoft's SMB security hardening guide — Windows 11 24H2/Server 2025 require it by default in more scenarios now), LDAP signing plus channel binding (SMB signing alone doesn't stop a relay to LDAP), and Extended Protection for Authentication, which ties NTLM auth to the TLS channel and target SPN so it can't be replayed cross-service even if signing's missing somewhere else. Disabling WPAD is worth doing too, but flag this before you do it: fully killing WinHttpAutoProxySvc can quietly break KDC-proxy-dependent clients (RDP Gateway, DirectAccess), which then silently fall back to NTLM, the opposite of what you wanted. New articles comming in the future.

04 Make it stick (why it keeps coming back)

If you've disabled this before and found it mysteriously back a few months later, you're not imagining it, and it's not usually one single cause.

In-place upgrades reset adjacent network state. Microsoft's own KB4013822 confirms in-place Windows upgrades wipe HKLM\SYSTEM\CurrentControlSet\Control\NetworkProvider and related network-adjacent registry entries. That KB is about network providers specifically, not NetBIOS by name, but it's the clearest official evidence that feature upgrades do mutate registry state in this exact neighbourhood treat "a feature update might undo this" as a real risk, not paranoia.

New adapters get a clean slate. NetbiosOptions lives per-interface, keyed by GUID, under ...\NetBT\Parameters\Interfaces\Tcpip_{GUID}. Every time a *new* adapter shows up, a VPN client's virtual NIC, a USB or Thunderbolt dock, a fresh driver install that creates a new interface instance, it gets its own fresh key, defaulting back to enabled. The disable-netbios project from hvs-consulting puts it bluntly: *"There is no GPO that disables NetBIOS completely, the settings of every network interface need to be changed. Even if this is done during installation, new network interfaces like USB Ethernet adapters or USB/Thunderbolt docks again have NetBIOS enabled."* There's a documented real-world example of this too Palo Alto's GlobalProtect virtual adapter has been reported (in their own community forum) re-enabling NetBIOS on every reboot regardless of what you'd set previously.

Local GPO doesn't self-heal; domain-linked GPO does. This next bit is my own read rather than something I found spelled out anywhere specifically for this exact setting, so take it as informed opinion, not documented fact: a domain-linked GPO survives drift because background policy refresh reasserts it every 90–120 minutes (that interval itself is Microsoft-documented, confirmed here) so even if a new adapter or update quietly resets the registry value, the next refresh cycle stamps it back. A *local* gpedit.msc change has no such re-sync mechanism; there's genuinely no supported way for Windows to notice the registry drifted and re-apply a local policy on its own. If you're only setting this via local policy on standalone boxes, that's the gap.

So, the actual fix that sticks:

# Run on a schedule (daily is fine) so it catches adapters that didn't exist last time
Get-ChildItem "HKLM:\SYSTEM\CurrentControlSet\services\NetBT\Parameters\Interfaces" |
    ForEach-Object { Set-ItemProperty -Path $_.PSPath -Name NetbiosOptions -Value 2 }

Wrap this in a Scheduled Task, a login script, or an SCCM/Intune baseline that reapplies on a cadence the wildcard-over-all-adapters approach is exactly what euctechnology's writeup on Intune/SCCM/GPO deployment recommends, precisely because no native policy covers adapters that don't exist yet. If you'd rather not roll your own, the community NetworkingDsc PowerShell DSC module ships a NetBios resource that accepts InterfaceAlias = '*' and re-enforces on every consistency check — worth a look, though check issue #434 on that repo before leaning on it in production.

For LLMNR specifically, there's an actual Intune CSP ADMX_DnsClient/Turn_Off_Multicast, available from Windows 10 2004+ / Windows 11 21H2+ — so non-domain, MDM-managed devices aren't stuck. NBT-NS has no equivalent CSP as far as I could establish, so on Intune-only fleets it still needs a Win32 app or a scheduled PowerShell script, same as above.

One genuine exception worth flagging, not a drift bug but a deliberate reason NetBIOS sometimes comes back on purpose: Microsoft Defender for Identity's older (v2.x) sensors depend on UDP 137 being open inbound for their own name-resolution mechanism (documented here). If you disable NetBIOS org-wide with v2.x sensors still deployed, expect MDI health alerts about name-resolution failures and don't be surprised if someone on the team quietly re-opens it to make the alert stop. Sensor v3.x drops this dependency, so that's your actual fix if you hit it, not leaving NetBIOS open. Last thing: CIS Benchmarks (Windows 10/11/Server, Level 1) mandate "Turn off multicast name resolution = Enabled" as a compliance control, so if you've got compliance scanning running anyway, that's a second, independent check catching drift regardless of whether GPO refresh did its job.

06 Verification

Get-ItemProperty 'HKLM:\SOFTWARE\Policies\Microsoft\Windows NT\DNSClient' -Name EnableMulticast
Get-WmiObject Win32_NetworkAdapterConfiguration -Filter "IPEnabled='true'" | Select-Object Description, TcpipNetbiosOptions

Expect EnableMulticast = 0 and TcpipNetbiosOptions = 2 on every adapter, including any that weren't there the last time you checked.

gpupdate /force
gpresult /h report.html

Run gpupdate /force before you verify the policy only lands on the next refresh, and "it's still on" is often just "the refresh hasn't happened yet," not a real failure. Then confirm the DNS Client GPO shows up under Applied Group Policy Objects in the RSoP report.

# On another box on the same segment, capture while triggering a lookup for a name that doesn't exist
tcpdump -i any udp port 5355 or udp port 137
ping some-name-that-does-not-exist

If LLMNR and NBT-NS are genuinely off, the target should emit nothing — DNS just fails, silently, with no multicast fallback. That silence, captured before and after, is the cleanest evidence you can put in a report.

07 Rollback

Realistic rollback here isn't "undo the security fix" there's no reasonable case for wanting LLMNR back. It's re-enabling NetBIOS specifically where something genuinely needs it: an older line-of-business app that still resolves names the old way, or a Defender for Identity v2.x sensor that's alerting because UDP 137 got closed.

Set-ItemProperty -Path "HKLM:SYSTEM\CurrentControlSet\services\NetBT\Parameters\Interfaces\<adapter-GUID>" -Name NetbiosOptions -Value 1

Re-enable per adapter, not fleet-wide, and only where there's a confirmed dependency not as a blanket "just in case."

reg add "HKLM\Software\Policies\Microsoft\Windows NT\DNSClient" /v "EnableMulticast" /t REG_DWORD /d "1" /f

Re-enabling LLMNR itself should be rare enough that if you're running this command, it's worth asking why first.

08 References

If your environment's found a new way for this to sneak back on, or I've got a detail wrong here, let me know corrections and edge cases are always welcome :)

// Patched, or stuck?

Ship the fix. Prove it’s closed.

If this runbook doesn’t fit your stack, send the CVE — an operator writes a verified path, usually within a business day. Or contribute your own and get co-authored credit.

// Dispatch

New guides, straight to your inbox.