Skip to content

[New Rule] Azure WireServer Abuse Related Detections - #6668

Merged
terrancedejesus merged 14 commits into
mainfrom
azure-wireserver-detections
Sep 11, 2026
Merged

terrancedejesus merged 14 commits into
mainfrom
azure-wireserver-detections

Conversation

@terrancedejesus

@terrancedejesus terrancedejesus commented Aug 18, 2026 •

Copy link
Copy Markdown
Contributor

Summary - What I changed

Azure VMs expose WireServer at 168.63.129.16:80 and HostGAPlugin at :32526. Those endpoints return GoalState, transport certificates, and vmSettings / protectedSettings that embed SAS URLs for Microsoft fabric blobs. CyberCX and NetSPI documented decrypting the LinuxTransport / CRP cert and reading those settings without the IMDS metadata header. From a compromised guest or via SSRF, an attacker scrapes WireServer, decrypts the transport cert, and can walk anonymously accessible blobs.

  • Azure WireServer Unusual Process Connection - unusual guest processes reaching WireServer (:80) or HostGAPlugin (:32526)
  • Azure WireServer HTTP Request from Unexpected User Agent - GoalState / certificates / vmSettings requests whose user agent is not the Azure guest agent
  • Azure WireServer OpenSSL Certificate Decrypt or LinuxTransport Generation - openssl cms/smime -decrypt or LinuxTransport cert generation outside waagent paths
  • Azure Storage Anonymous Blob Access to Unusual Resource - first-seen anonymous data-plane reads of a storage resource

How To Test

Validated against TRADE emulation telemetry (wslin5b7592 / wswin5b7592): StorageRead platform logs, Elastic Defend network, and NPC HTTP on ports 80 and 32526.

Screenshot 2026-08-27 at 10 57 24 AM Screenshot 2026-08-27 at 10 55 48 AM Screenshot 2026-08-27 at 10 59 31 AM Screenshot 2026-08-27 at 11 01 12 AM

Checklist

  • Added a label for the type of pr: Rule: New
  • Secret and sensitive material has been managed correctly
  • Documentation and comments were added for features that require explanation

Detects the documented WireServer/HostGAPlugin scrape chain used to decrypt transport certs and replay guest-agent SAS against Azure Storage.

Co-authored-by: Cursor <cursoragent@cursor.com>
@elastic-vault-github-plugin-prod

elastic-vault-github-plugin-prod Bot commented Aug 18, 2026 •

Copy link
Copy Markdown

⛔️ Test failed

Results
  • ❌ Azure Storage SAS Retrieval of Guest Agent Blobs (kuery)
    • coverage_issue: no_rta
    • stack_validation_failed: no_rta
  • ❌ Azure WireServer Unusual Process Connection (kuery)
    • coverage_issue: no_rta
    • stack_validation_failed: no_rta
  • ❌ Azure WireServer HTTP Request from Unexpected User Agent (eql)
    • coverage_issue: no_rta
    • stack_validation_failed: no_rta
  • ❌ Azure WireServer OpenSSL Certificate Decrypt or LinuxTransport Generation (eql)
    • coverage_issue: no_rta
    • stack_validation_failed: no_rta
  • ❌ Azure Storage Anonymous Blob Access to Unusual Resource (kuery)
    • coverage_issue: no_rta
    • stack_validation_failed: no_rta

@terrancedejesus terrancedejesus changed the title [New Rule] Azure WireServer Credential Scraping Detections [New Rule] Azure WireServer Abuse Related Detections Aug 18, 2026
@terrancedejesus terrancedejesus self-assigned this Aug 18, 2026
Clarified the context of Azure Storage SAS retrieval detection and false positives.
@elastic-vault-github-plugin-prod

elastic-vault-github-plugin-prod Bot commented Aug 27, 2026 •

Copy link
Copy Markdown

⛔️ Test failed

Results
  • ❌ Azure Storage SAS Retrieval of Guest Agent Blobs (kuery)
    • coverage_issue: no_rta
    • stack_validation_failed: no_rta
  • ❌ Azure WireServer Unusual Process Connection (kuery)
    • coverage_issue: no_rta
    • stack_validation_failed: no_rta
  • ❌ Azure WireServer HTTP Request from Unexpected User Agent (eql)
    • coverage_issue: no_rta
    • stack_validation_failed: no_rta
  • ❌ Azure WireServer OpenSSL Certificate Decrypt or LinuxTransport Generation (eql)
    • coverage_issue: no_rta
    • stack_validation_failed: no_rta
  • ❌ Azure Storage Anonymous Blob Access to Unusual Resource (kuery)
    • coverage_issue: no_rta
    • stack_validation_failed: no_rta

terrancedejesus and others added 3 commits August 27, 2026 10:51
Customer StorageRead cannot see Microsoft fabric $system blobs, so that rule is removed. OpenSSL now matches cms and smime decrypt and excludes waagent LinuxTransport generation.

Co-authored-by: Cursor <cursoragent@cursor.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
@elastic-vault-github-plugin-prod

elastic-vault-github-plugin-prod Bot commented Aug 27, 2026 •

Copy link
Copy Markdown

⛔️ Test failed

Results
  • ❌ Azure WireServer Unusual Process Connection (kuery)
    • coverage_issue: no_rta
    • stack_validation_failed: no_rta
  • ❌ Azure WireServer HTTP Request from Unexpected User Agent (eql)
    • coverage_issue: no_rta
    • stack_validation_failed: no_rta
  • ❌ Azure WireServer OpenSSL Certificate Decrypt or LinuxTransport Generation (eql)
    • coverage_issue: no_rta
    • stack_validation_failed: no_rta
  • ❌ Azure Storage Anonymous Blob Access to Unusual Resource (kuery)
    • coverage_issue: no_rta
    • stack_validation_failed: no_rta

@terrancedejesus
terrancedejesus marked this pull request as ready for review August 27, 2026 15:02
Copilot AI lite review requested due to automatic review settings August 27, 2026 15:02

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR introduces a set of new detection rules aimed at identifying Azure WireServer/HostGAPlugin abuse (GoalState/certificate/vmSettings scraping and follow-on anonymous blob access) and adds schema support for a new Azure field used by the rules.

Changes:

  • Add a Network Packet Capture rule to detect WireServer/HostGAPlugin HTTP requests with unexpected user agents.
  • Add Elastic Defend rules to detect unusual guest process connections to WireServer/HostGAPlugin and suspicious OpenSSL CMS decrypt / LinuxTransport certificate generation on Linux.
  • Add an Azure Platform Logs new-terms rule for first-seen anonymous Azure Storage blob read activity, plus schema support for azure.resource.id.

Reviewed changes

Copilot reviewed 5 out of 5 changed files in this pull request and generated 4 comments.

Show a summary per file
File Description
rules/network/credential_access_azure_wireserver_http_request_unexpected_user_agent.toml New EQL rule for detecting WireServer/HostGAPlugin HTTP requests with non-guest-agent user agents.
rules/linux/credential_access_azure_wireserver_openssl_cms_decrypt.toml New Linux EQL rule for OpenSSL decrypt / LinuxTransport cert generation behaviors associated with WireServer abuse.
rules/integrations/azure/discovery_azure_storage_anonymous_blob_access_unusual_resource.toml New Azure Platform Logs new-terms rule for first-seen anonymous blob read activity on a resource.
rules/cross-platform/credential_access_azure_wireserver_unusual_process_connection.toml New cross-platform new-terms rule for unusual process-to-WireServer/HostGAPlugin connections in endpoint network telemetry.
detection_rules/etc/non-ecs-schema.json Adds azure.resource.id mapping needed by the new Azure new-terms rule.
Suppressed comments (1)

rules/cross-platform/credential_access_azure_wireserver_unusual_process_connection.toml:15

  • The rule description says “system python used by waagent” is excluded, but the query actually excludes /usr/bin/python3* broadly (and doesn’t otherwise match Linux python/python3 by name). Consider rewording the description so it reflects the actual exclusion behavior.
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.

💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.

Comment thread rules/linux/credential_access_azure_wireserver_openssl_cms_decrypt.toml Outdated
@botelastic botelastic Bot added the OS: Linux label Aug 27, 2026
terrancedejesus and others added 3 commits August 27, 2026 14:34
Updated the 'updated_date' field to match the creation date.
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
@elastic-vault-github-plugin-prod

elastic-vault-github-plugin-prod Bot commented Aug 27, 2026 •

Copy link
Copy Markdown

⛔️ Test failed

Results
  • ❌ Azure WireServer Unusual Process Connection (kuery)
    • coverage_issue: no_rta
    • stack_validation_failed: no_rta
  • ❌ Azure WireServer HTTP Request from Unexpected User Agent (eql)
    • coverage_issue: no_rta
    • stack_validation_failed: no_rta
  • ❌ Azure WireServer OpenSSL Certificate Decrypt or LinuxTransport Generation (eql)
    • coverage_issue: no_rta
    • stack_validation_failed: no_rta
  • ❌ Azure Storage Anonymous Blob Access to Unusual Resource (kuery)
    • coverage_issue: no_rta
    • stack_validation_failed: no_rta

Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
@elastic-vault-github-plugin-prod

elastic-vault-github-plugin-prod Bot commented Aug 27, 2026 •

Copy link
Copy Markdown

⛔️ Test failed

Results
  • ❌ Azure WireServer Unusual Process Connection (kuery)
    • coverage_issue: no_rta
    • stack_validation_failed: no_rta
  • ❌ Azure WireServer HTTP Request from Unexpected User Agent (eql)
    • coverage_issue: no_rta
    • stack_validation_failed: no_rta
  • ❌ Azure WireServer OpenSSL Certificate Decrypt or LinuxTransport Generation (eql)
    • coverage_issue: no_rta
    • stack_validation_failed: no_rta
  • ❌ Azure Storage Anonymous Blob Access to Unusual Resource (kuery)
    • coverage_issue: no_rta
    • stack_validation_failed: no_rta

@elastic-vault-github-plugin-prod

elastic-vault-github-plugin-prod Bot commented Aug 27, 2026 •

Copy link
Copy Markdown

⛔️ Test failed

Results
  • ❌ Azure WireServer Unusual Process Connection (kuery)
    • coverage_issue: no_rta
    • stack_validation_failed: no_rta
  • ❌ Azure WireServer HTTP Request from Unexpected User Agent (eql)
    • coverage_issue: no_rta
    • stack_validation_failed: no_rta
  • ❌ Azure WireServer OpenSSL Certificate Decrypt or LinuxTransport Generation (eql)
    • coverage_issue: no_rta
    • stack_validation_failed: no_rta
  • ❌ Azure Storage Anonymous Blob Access to Unusual Resource (kuery)
    • coverage_issue: no_rta
    • stack_validation_failed: no_rta

@elastic-vault-github-plugin-prod

elastic-vault-github-plugin-prod Bot commented Aug 27, 2026 •

Copy link
Copy Markdown

⛔️ Test failed

Results
  • ❌ Azure WireServer Unusual Process Connection (kuery)
    • coverage_issue: no_rta
    • stack_validation_failed: no_rta
  • ❌ Azure WireServer HTTP Request from Unexpected User Agent (eql)
    • coverage_issue: no_rta
    • stack_validation_failed: no_rta
  • ❌ Azure WireServer OpenSSL Certificate Decrypt or LinuxTransport Generation (eql)
    • coverage_issue: no_rta
    • stack_validation_failed: no_rta
  • ❌ Azure Storage Anonymous Blob Access to Unusual Resource (kuery)
    • coverage_issue: no_rta
    • stack_validation_failed: no_rta

@elastic-vault-github-plugin-prod

elastic-vault-github-plugin-prod Bot commented Aug 31, 2026 •

Copy link
Copy Markdown

⛔️ Test failed

Results
  • ❌ Azure WireServer Unusual Process Connection (kuery)
    • coverage_issue: no_rta
    • stack_validation_failed: no_rta
  • ❌ Azure WireServer HTTP Request from Unexpected User Agent (eql)
    • coverage_issue: no_rta
    • stack_validation_failed: no_rta
  • ❌ Azure WireServer OpenSSL Certificate Decrypt or LinuxTransport Generation (eql)
    • coverage_issue: no_rta
    • stack_validation_failed: no_rta
  • ❌ Azure Storage Anonymous Blob Access to Unusual Resource (kuery)
    • coverage_issue: no_rta
    • stack_validation_failed: no_rta

@bryans3c bryans3c left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Some nits, LGTM! Only to review if the User Agents exclusions are truly needed

id = "T1140"
name = "Deobfuscate/Decode Files or Information"
reference = "https://attack.mitre.org/techniques/T1140/"

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This Defense Evasion mapping has no matching Tactic: Defense Evasion tag, so it fails the rule taxonomy convention. Adding that tag alongside Tactic: Credential Access could keep the metadata consistent with the ATT&CK entries.

) or
process.executable: (
./* or /tmp/* or /var/tmp/* or /dev/shm/* or /run/* or /var/run/* or
/home/*/* or /root/* or "C:\\Users\\*" or "?:\\ProgramData\\*"

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

These windows process executable paths in KQL will not work because of the quotes.

) and
not process.executable: (
/usr/sbin/waagent or /usr/bin/waagent or /usr/bin/python3* or
"?:\\WindowsAzure\\Packages\\*" or "?:\\WindowsAzure\\SecAgent\\*"

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Same for these exclusions

Comment thread rules/linux/credential_access_azure_wireserver_openssl_cms_decrypt.toml Outdated
@@ -0,0 +1,154 @@
[metadata]
creation_date = "2026/08/17"
integration = ["network_traffic"]

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Could we extend coverage here? Cc @eric-forte-elastic

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Taking a look, if the goal is to see the HTTP traffic coming from the host through the virtual IP path from the host back to the Azure WireServer service, we would probably only be able to see it from that host. So for other integrations we would need there to be a network sensor on the given host which is generally not done for zeek, Corelight, etc. so we may end up just using network_traffic.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Co-authored-by: Bryan Porras <bryan.porras@elastic.co>
Co-authored-by: Terrance DeJesus <99630311+terrancedejesus@users.noreply.github.com>
@elastic-vault-github-plugin-prod

elastic-vault-github-plugin-prod Bot commented Sep 10, 2026 •

Copy link
Copy Markdown

⛔️ Test failed

Results
  • ❌ Azure WireServer Unusual Process Connection (kuery)
    • coverage_issue: no_rta
    • stack_validation_failed: no_rta
  • ❌ Azure WireServer HTTP Request from Unexpected User Agent (eql)
    • coverage_issue: no_rta
    • stack_validation_failed: no_rta
  • ❌ Azure WireServer OpenSSL Certificate Decrypt or LinuxTransport Generation (eql)
    • coverage_issue: no_rta
    • stack_validation_failed: no_rta
  • ❌ Azure Storage Anonymous Blob Access to Unusual Resource (kuery)
    • coverage_issue: no_rta
    • stack_validation_failed: no_rta

Name-based exclusions did not match lab telemetry; agent binaries run from WindowsAzure Packages/GuestAgent/SecAgent and /usr/sbin/waagent. OpenSSL keeps the waagent argument-path filter and does not exclude Python, which is also the TP parent.
@elastic-vault-github-plugin-prod

elastic-vault-github-plugin-prod Bot commented Sep 10, 2026 •

Copy link
Copy Markdown

⛔️ Test failed

Results
  • ❌ Azure WireServer Unusual Process Connection (kuery)
    • coverage_issue: no_rta
    • stack_validation_failed: no_rta
  • ❌ Azure WireServer HTTP Request from Unexpected User Agent (eql)
    • coverage_issue: no_rta
    • stack_validation_failed: no_rta
  • ❌ Azure WireServer OpenSSL Certificate Decrypt or LinuxTransport Generation (eql)
    • coverage_issue: no_rta
    • stack_validation_failed: no_rta
  • ❌ Azure Storage Anonymous Blob Access to Unusual Resource (kuery)
    • coverage_issue: no_rta
    • stack_validation_failed: no_rta

@elastic-vault-github-plugin-prod

elastic-vault-github-plugin-prod Bot commented Sep 10, 2026 •

Copy link
Copy Markdown

⛔️ Test failed

Results
  • ❌ Azure WireServer Unusual Process Connection (kuery)
    • coverage_issue: no_rta
    • stack_validation_failed: no_rta
  • ❌ Azure WireServer HTTP Request from Unexpected User Agent (eql)
    • coverage_issue: no_rta
    • stack_validation_failed: no_rta
  • ❌ Azure WireServer OpenSSL Certificate Decrypt or LinuxTransport Generation (eql)
    • coverage_issue: no_rta
    • stack_validation_failed: no_rta
  • ❌ Azure Storage Anonymous Blob Access to Unusual Resource (kuery)
    • coverage_issue: no_rta
    • stack_validation_failed: no_rta

setup = """## Setup

Deploy the [Network Packet Capture](https://www.elastic.co/docs/reference/integrations/network_traffic) integration
via Fleet on Azure virtual machines. Default HTTP port lists do not include HostGAPlugin.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Windows also needs Npcap installed too right?

@terrancedejesus terrancedejesus Sep 11, 2026 •

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Screenshot 2026-09-11 at 9 22 12 AM

@elastic-vault-github-plugin-prod

elastic-vault-github-plugin-prod Bot commented Sep 11, 2026 •

Copy link
Copy Markdown

⛔️ Test failed

Results
  • ❌ Azure WireServer Unusual Process Connection (kuery)
    • coverage_issue: no_rta
    • stack_validation_failed: no_rta
  • ❌ Azure WireServer HTTP Request from Unexpected User Agent (eql)
    • coverage_issue: no_rta
    • stack_validation_failed: no_rta
  • ❌ Azure WireServer OpenSSL Certificate Decrypt or LinuxTransport Generation (eql)
    • coverage_issue: no_rta
    • stack_validation_failed: no_rta
  • ❌ Azure Storage Anonymous Blob Access to Unusual Resource (kuery)
    • coverage_issue: no_rta
    • stack_validation_failed: no_rta

@terrancedejesus
terrancedejesus merged commit b5b2a41 into main Sep 11, 2026
13 checks passed
@terrancedejesus
terrancedejesus deleted the azure-wireserver-detections branch September 11, 2026 13:24
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants