Azure Storage Anonymous Blob Access to Unusual Resource
Description
Identifies the first time an Azure Storage resource receives an anonymous data-plane read (GetBlob and related Get or List operations). Anonymous requests are used to probe public containers and to test stolen blob URLs before a SAS is appended. First-seen resource ID keeps volume down while still covering WireServer-related probes of status or extension blobs.
Query · kuery
data_stream.dataset: azure.platformlogs and
azure.platformlogs.identity.type: Anonymous and
event.action: (
GetBlob or GetBlobMetadata or GetBlobProperties or GetBlockList or
GetPageRanges or QueryBlobContents or ListBlobs or
GetContainerProperties or GetContainerMetadata or GetContainerAcl
)
Implementation guide
Enable StorageRead diagnostic logs on Azure Storage Accounts and stream them to the Event Hub used by the Azure
integration. Anonymous vs SAS is azure.platformlogs.identity.type.
Known false positives
- Intentionally public containers (static websites, public datasets) generate anonymous GetBlob and ListBlobs. Baseline those storage accounts and exclude `azure.resource.id` after review.
- Internet-wide scanners will produce first-seen anonymous access on newly created or newly logged accounts. Confirm whether the account is meant to be public.
Analyst notes
Investigating Azure Storage Anonymous Blob Access to Unusual Resource
StorageRead platform logs record AuthenticationType as Anonymous when no SAS, OAuth, or account key is presented.
A first-seen azure.resource.id (typically the blob service
/subscriptions/.../storageAccounts/<account>/blobServices/default) means this resource has not had anonymous Get or
List traffic in the history window.
WireServer SAS-replay chains often start with an anonymous GetBlob (HTTP 409/403) against the same object, then a SAS 200. This rule does not require guest-agent path strings; those lab container names are not production observables.
source.ip is often empty. Use source.address (ip:port).
Possible investigation steps
- Review
event.action,azure.platformlogs.statusCode, andazure.platformlogs.uri. - HTTP 200 with Anonymous means the container or blob is publicly readable. HTTP 409/403 is a probe.
- Identify the account from
azure.resource.id/azure.resource.nameand check whether public access is intended. - Search for SAS-authenticated GetBlob to the same account from the same source shortly after.
- If the URI contains
/$system/ormd-hdd-, correlate with WireServer access on VMs in the subscription.
False positive analysis
- Public blob websites and CDN origins. Exclude the
azure.resource.idfor approved public accounts. - New accounts that enable StorageRead for the first time will alert on the first scanner hit.
Response and remediation
- Disable anonymous public access on accounts that should be private.
- If a follow-on SAS read exists, revoke that SAS and review how the URL was obtained.
- Keep StorageRead diagnostic logs enabled on storage accounts of interest.