Azure WireServer Unusual Process Connection
Identifies shells, LOLBins, GTFOBins, and scripting runtimes connecting to the Azure WireServer / HostGAPlugin address 168.63.129.16 on ports 80 or 32526. The guest agent uses this fabric endpoint for GoalState, certificates, and vmSettings. Adversaries with code execution on an Azure VM (including via Run Command) use curl, PowerShell, openssl, bun, or similar tools to enumerate versions, pull transport certificates, and read HostGAPlugin /vmSettings. Azure guest-agent binaries and system python used by waagent are excluded. Descendants of the guest agent are not excluded: Run Command payloads execute in that tree.
Rule type: new_terms
Rule indices:
- logs-endpoint.events.network-*
Rule Severity: medium
Risk Score: 47
Runs every:
Searches indices from: now-9m
Maximum alerts per execution: 100
References:
- https://www.netspi.com/blog/technical-blog/cloud-pentesting/decrypting-vm-extension-settings-with-azure-wireserver/
- https://cybercx.com.au/blog/azure-ssrf-metadata/
- https://cloud.google.com/blog/topics/threat-intelligence/escalating-privileges-azure-kubernetes-services
- https://learn.microsoft.com/en-us/azure/virtual-network/what-is-ip-address-168-63-129-16
Tags:
- Domain: Endpoint
- Domain: Cloud
- OS: Linux
- OS: Windows
- Platform: Azure
- Platform: Windows
- Use Case: Threat Detection
- Tactic: Credential Access
- Tactic: Discovery
- Data Source: Elastic Defend
- Resources: Investigation Guide
Version: 1
Rule authors:
- Elastic
Rule license: Elastic License v2
168.63.129.16 is the Azure host-only WireServer (TCP 80) and HostGAPlugin (TCP 32526) address. Elastic Defend
network events record the destination IP, port, and initiating process. They do not include the HTTP path; pair this
alert with Network Packet Capture HTTP events when available (comp=certificates, /vmSettings, /versions).
Do not treat "child of waagent / WindowsAzureGuestAgent" as benign. Azure Run Command and Custom Script Extension launch attacker scripts as descendants of those agents. Exclude only the agent binaries themselves, which this query already omits by matching curl, PowerShell, and similar tools.
process.Ext.ancestry is often empty on these network events, so EQL descendant of is not reliable here.
- Review
process.name,process.executable, andprocess.command_lineon nearby process start events. Look forcomp=certificates,32526,vmSettings,LinuxTransport, oropenssl cms -decrypt. - Note
destination.port: 32526 from curl or PowerShell is uncommon for legitimate guest-agent traffic (agents useWaAppAgent.exe,WindowsAzureGuestAgent.exe,CollectGuestLogs.exe, or/usr/bin/python3.10/ waagent). - Correlate with
169.254.169.254IMDS access from the same process, especially/metadata/v1/instanceinfo(no Metadata header) or/metadata/identity/oauth2/token. - Check Azure Activity Logs for
runCommand/actionor extensions/write against this VM. - Search StorageRead platform logs for subsequent SAS GetBlob of vmsettings or cse objects.
- In-house monitoring that wraps curl to WireServer. Exclude by
process.executableor a signed parent after validating the script contents. - Do not exclude all children of the guest agent; that hides Run Command abuse.
- Isolate the VM, rotate its managed identity and any SAS recovered from vmSettings, and review extension protectedSettings for injected configuration.
- Remove unauthorized Run Command resources and Custom Script extensions.
- Consider Azure Metadata Security Protocol (audit/enforce) to restrict which processes may call WireServer.
event.category: network and host.os.type: (linux or windows) and
destination.ip: "168.63.129.16" and destination.port: (80 or 32526) and
(
process.name: (
bash or dash or sh or tcsh or csh or zsh or ksh or fish or mksh or busybox or
bun or bun.exe or node or node.exe or nodejs or deno or deno.exe or
java or java.exe or javaw or javaw.exe or
curl or curl.exe or wget or wget.exe or
powershell.exe or pwsh.exe or pwsh or cmd.exe or
certutil.exe or bitsadmin.exe or mshta.exe or rundll32.exe or
wscript.exe or cscript.exe or regsvr32.exe or
openssl or openssl.exe or nc or ncat or netcat or socat or
python.exe or pythonw.exe or perl or perl.exe or ruby or ruby.exe or
php or php.exe or lua or lua.exe
) or
process.executable: (
./* or /tmp/* or /var/tmp/* or /dev/shm/* or /run/* or /var/run/* or
/home/*/* or /root/* or *\:\\Users\\* or *\:\\ProgramData\\*
)
) and
not process.executable: (
/usr/sbin/waagent or /usr/bin/waagent or /usr/bin/python3* or
/usr/lib/systemd/systemd-resolved or /lib/systemd/systemd-resolved or
*\:\\WindowsAzure\\Packages\\* or *\:\\WindowsAzure\\GuestAgent*\\* or
*\:\\WindowsAzure\\SecAgent\\*
)
Framework: MITRE ATT&CK
Tactic:
- Name: Credential Access
- Id: TA0006
- Reference URL: https://attack.mitre.org/tactics/TA0006/
Technique:
- Name: Unsecured Credentials
- Id: T1552
- Reference URL: https://attack.mitre.org/techniques/T1552/
Sub Technique:
- Name: Cloud Instance Metadata API
- Id: T1552.005
- Reference URL: https://attack.mitre.org/techniques/T1552/005/
Framework: MITRE ATT&CK
Tactic:
- Name: Discovery
- Id: TA0007
- Reference URL: https://attack.mitre.org/tactics/TA0007/
Technique:
- Name: System Information Discovery
- Id: T1082
- Reference URL: https://attack.mitre.org/techniques/T1082/
Technique:
- Name: Cloud Infrastructure Discovery
- Id: T1580
- Reference URL: https://attack.mitre.org/techniques/T1580/