T1557.001

LLMNR/NBT-NS Poisoning and SMB Relay

Adversaries may spoof an authoritative source for name resolution to force communication with an adversary-controlled system, collecting or relaying authentication materials. By responding to LLMNR (UDP 5355) and NBT-NS (UDP 137) queries, attackers poison name resolution so that victims authenticate to the adversary system, capturing NTLMv1/v2 hashes for offline cracking or relay attacks. Captured hashes may be relayed directly to SMB, LDAP, MSSQL, or HTTP services to authenticate as the victim without ever cracking the hash. Tools such as Responder, Inveigh, Impacket ntlmrelayx, and NBNSpoof are commonly used. Threat actors including Lazarus Group and Wizard Spider have used this technique for credential collection and lateral movement.

Microsoft Sentinel / Defender
kusto
let PoisoningTools = dynamic(["responder.exe", "inveigh.exe", "ntlmrelayx.exe", "smbrelayx.exe", "multirelay.exe", "nbnspoof.exe", "conveigh.exe"]);
let PoisoningKeywords = dynamic(["Responder", "Inveigh", "Invoke-Inveigh", "ntlmrelayx", "smbrelayx", "MultiRelay", "NBNSpoof", "llmnr_response", "-rPv", "Inveigh-Unprivileged"]);
let PythonInterpreters = dynamic(["python.exe", "python3.exe", "python3"]);
// Branch 1: Process-based detection — known poisoning tool names or command line keywords
let ProcessAlerts = DeviceProcessEvents
| where Timestamp > ago(24h)
| where FileName in~ (PoisoningTools)
    or ProcessCommandLine has_any (PoisoningKeywords)
    or (FileName in~ (PythonInterpreters) and ProcessCommandLine has_any (PoisoningKeywords))
| extend HasResponder = (FileName =~ "responder.exe" or ProcessCommandLine has "Responder")
| extend HasInveigh = ProcessCommandLine has_any ("Inveigh", "Invoke-Inveigh", "Inveigh-Unprivileged")
| extend HasRelay = ProcessCommandLine has_any ("ntlmrelayx", "smbrelayx", "MultiRelay")
| extend IsPythonBased = FileName in~ (PythonInterpreters)
| project Timestamp, DeviceName, AccountName, FileName, ProcessCommandLine,
         InitiatingProcessFileName, InitiatingProcessCommandLine, FolderPath,
         HasResponder, HasInveigh, HasRelay, IsPythonBased;
// Branch 2: Network-based detection — unexpected processes communicating on LLMNR/NBT-NS ports
let NetworkAlerts = DeviceNetworkEvents
| where Timestamp > ago(24h)
| where RemotePort in (5355, 137) or LocalPort in (5355, 137)
| where not (InitiatingProcessFileName in~ ("svchost.exe", "lsass.exe", "dns.exe", "mDNSResponder.exe", "System"))
| project Timestamp, DeviceName,
         AccountName = InitiatingProcessAccountName,
         FileName = InitiatingProcessFileName,
         ProcessCommandLine = InitiatingProcessCommandLine,
         InitiatingProcessFileName = "",
         InitiatingProcessCommandLine = "",
         FolderPath = InitiatingProcessFolderPath,
         HasResponder = false, HasInveigh = false, HasRelay = false, IsPythonBased = false;
ProcessAlerts
| union NetworkAlerts
| sort by Timestamp desc
high severity high confidence

Data Sources

Process: Process Creation Network Traffic: Network Traffic Flow Command: Command Execution Microsoft Defender for Endpoint

Required Tables

DeviceProcessEvents DeviceNetworkEvents

False Positives

  • Authorized penetration testing or red team exercises where Responder or Inveigh is explicitly sanctioned via change ticket
  • Network diagnostic tools or Wireshark-based capture scripts that bind to UDP 5355/137 during authorized network analysis
  • Internal network assessment platforms that bundle Inveigh for authorized discovery scans
  • Python development or training environments running LLMNR/NBT-NS scripts in isolated lab networks
  • Security awareness training platforms that simulate poisoning attacks in controlled lab environments

Unlock Pro Content

Get the full detection package for T1557.001 including response playbook, investigation guide, and atomic red team tests.

Response PlaybookInvestigation GuideHunting QueriesAtomic Red Team TestsTuning Guidance

Related Detections