T1090

Proxy

Adversaries may use a connection proxy to direct network traffic between systems or act as an intermediary for network communications to a command and control server. This avoids direct connections to adversary infrastructure, provides resiliency, and may allow C2 traffic to blend with legitimate communications. Proxies may be implemented using standalone tools (HTRAN, FRP, Earthworm, Chisel), built into implants (SombRAT SOCKS proxy, ZxShell), or leveraged through cloud CDN infrastructure.

Microsoft Sentinel / Defender
kusto
let KnownProxyTools = dynamic([
  "htran", "ew.exe", "earthworm", "frpc", "frps", "frp",
  "chisel", "revsocks", "ligolo", "proxychains",
  "3proxy", "socks5", "ngrok", "iox", "gost",
  "npc.exe", "nps.exe", "invoke-ngrok"
]);
let ProxyCommandPatterns = dynamic([
  "-socks", "-socks5", "-socks4",
  "lcx", "htran", "portmap",
  "-L ", "-R ", "-D ",
  "proxytunnel", "proxychains",
  "connect-proxy", "corkscrew"
]);
let SuspiciousListenerPatterns = dynamic([
  "0.0.0.0", "*:4444", "*:1080", "*:8080", "*:9050", "*:10080"
]);
let ProxyResults = DeviceProcessEvents
| where Timestamp > ago(24h)
| where FileName has_any (KnownProxyTools)
   or ProcessCommandLine has_any (ProxyCommandPatterns)
   or (FileName =~ "plink.exe" and ProcessCommandLine has_any ("-R", "-L", "-D"))
   or (FileName =~ "ssh.exe" and ProcessCommandLine has_any ("-R", "-L", "-D") and ProcessCommandLine !has "scp")
   or (FileName =~ "netsh.exe" and ProcessCommandLine has "portproxy")
   or (ProcessCommandLine has "frpc" and ProcessCommandLine has "ini")
| extend ToolType = case(
    FileName has_any ("htran", "ew.exe", "earthworm"), "Known Proxy Tool",
    FileName has_any ("frpc", "frps", "frp"), "Fast Reverse Proxy (FRP)",
    FileName has_any ("chisel", "revsocks", "ligolo"), "Tunneling Tool",
    FileName has_any ("ngrok", "invoke-ngrok"), "Ngrok Tunnel",
    FileName =~ "netsh.exe" and ProcessCommandLine has "portproxy", "Netsh Port Proxy",
    FileName has_any ("plink.exe", "ssh.exe"), "SSH Tunnel",
    "Generic Proxy Pattern"
  )
| project Timestamp, DeviceName, AccountName, FileName, ProcessCommandLine,
         InitiatingProcessFileName, InitiatingProcessCommandLine,
         InitiatingProcessAccountName, FolderPath, ToolType;
let NetshPortProxy = DeviceProcessEvents
| where Timestamp > ago(24h)
| where FileName =~ "netsh.exe"
| where ProcessCommandLine has_all ("portproxy", "add")
| extend ToolType = "Netsh Port Proxy"
| project Timestamp, DeviceName, AccountName, FileName, ProcessCommandLine,
         InitiatingProcessFileName, InitiatingProcessCommandLine,
         InitiatingProcessAccountName, FolderPath, ToolType;
union ProxyResults, NetshPortProxy
| sort by Timestamp desc
high severity medium confidence

Data Sources

Process: Process Creation Command: Command Execution Microsoft Defender for Endpoint

Required Tables

DeviceProcessEvents

False Positives

  • SSH tunneling by developers and sysadmins for legitimate port forwarding (database access, jump hosts, VS Code Remote)
  • Ngrok or similar tools used by developers to expose local web services during testing or demos
  • Corporate proxy clients (Zscaler, Netskope agents) that implement local SOCKS listeners
  • Netsh portproxy rules created by network administrators for legitimate service redirection
  • Penetration testing tools and authorized red team activity using proxychains or Chisel

Unlock Pro Content

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

Response PlaybookInvestigation GuideHunting QueriesAtomic Red Team TestsTuning Guidance

Related Detections