Skip to content

Dieses Tool ist weder mit der Microsoft Corporation verbunden noch von ihr unterstützt oder gesponsert. Azure, Microsoft Azure und Microsoft Defender for Cloud sind Marken der Microsoft-Unternehmensgruppe. Andere Namen sind Marken ihrer jeweiligen Inhaber.

Datenexfiltration aus Azure Storage: SAS-Token und Blob-Logs

Datenexfiltration aus Azure Storage untersuchen: listAccountSas und listKeys im Activity Log, GetBlob-Salven in Blob-Logs, SAS-Hashes und was zu rotieren ist.

Veröffentlicht am 5 Min. Lesezeit

Kurz gesagt. Exfiltration aus Speicherkonten hinterlässt zwei Arten von Spuren. Im Activity Log: listKeys/action, listAccountSas/action, listServiceSas/action sowie Konfigurationsänderungen, die das Konto öffnen (allowBlobPublicAccess: true, Firewall mit defaultAction: Allow). In den Storage-Ressourcenlogs (StorageRead / StorageBlobLogs, nur wenn aktiviert): GetBlob-Anfragen mit IP des Aufrufers, Authentifizierungstyp, einem Hash der SAS bzw. des Tokens, dem Objektschlüssel und den zurückgegebenen Bytes. Eine clientseitig mit einem Kontoschlüssel signierte SAS wird bei der Erstellung nie protokolliert; Sie sehen sie erst, wenn sie verwendet wird. Das Rotieren beider Kontoschlüssel widerruft Konto- und Dienst-SAS.

Im Speicherkonto liegen die Daten. Nach einer Cloud-Kompromittierung lautet die Frage fast immer: „Was haben sie mitgenommen?“ Für Blob Storage lässt sie sich beantworten – vorausgesetzt, die richtige Diagnoseeinstellung existierte.

Wie Angreifer an die Daten kommen

WegSpur auf der Steuerungsebene (Activity Log)Spur auf der Datenebene (Storage-Log)
Kontoschlüssel lesen und offline eigene SAS signierenMicrosoft.Storage/storageAccounts/listKeys/actionGetBlob mit Authentifizierung SAS oder AccountKey
Azure Resource Manager eine Konto- oder Dienst-SAS erzeugen lassenlistAccountSas/action / listServiceSas/actionGetBlob mit SAS-Authentifizierung, statusText SASSuccess
Eine Entra-Identität mit Datenrolle nutzen (Storage Blob Data Reader …)Eventuell vorher ein roleAssignments/writeGetBlob mit OAuth, Objekt-ID des Anfragenden
Einen Container öffentlich machenstorageAccounts/write oder containers/write mit öffentlichem ZugriffGetBlob mit Anonymous
Die Speicher-Firewall öffnenstorageAccounts/write mit defaultAction: Allow oder aktiviertem öffentlichem NetzwerkzugriffAnfragen von IPs, die vorher blockiert waren

MITRE ATT&CK führt die Sammlung als T1530 Data from Cloud Storage. Storm-0501 nutzte laut Microsoft Threat Intelligence listkeys/action und exfiltrierte mit AzCopy, bevor massenhaft Speicherkonten gelöscht wurden.

Das SAS-Problem: Die Erstellung ist unsichtbar

Eine Shared Access Signature (SAS) ist eine signierte URL. Microsofts Dokumentation ist unmissverständlich: Die Generierung von SAS-Token lässt sich nicht überwachen, und Azure Storage verfolgt SAS-Token in keiner Weise (SAS-Übersicht). Eine lokal mit einem Kontoschlüssel signierte SAS erzeugt überhaupt kein Ereignis. Sichtbar ist:

  • listKeys/action – jemand hat die Schlüssel abgerufen (und konnte offline beliebig viele SAS signieren).
  • listAccountSas/action / listServiceSas/action – jemand hat ARM eine SAS signieren lassen. Der Anforderungstext zeigt angeforderte Dienste, Berechtigungen, Start und Ablauf.
  • Jede Verwendung einer SAS in den Storage-Ressourcenlogs, sofern aktiviert.

Microsofts Empfehlung, die Autorisierung mit gemeinsam verwendetem Schlüssel (Shared Key) auf Konten zu unterbinden, die sie nicht brauchen, beseitigt die ganze Kategorie: Ohne Shared Key funktionieren Konto- und Dienst-SAS nicht mehr.

StorageBlobLogs lesen

Die Referenz zur Überwachung von Blob Storage dokumentiert die Felder. Für Exfiltration zählen:

Feld (Speicherexport)BeispielWarum
operationNameGetBlob, ListBlobs, PutBlob, DeleteBlobWas passiert ist
callerIpAddress203.0.113.66:51234Von wo (achten Sie auf den Port als Suffix)
identity.typeSAS, AccountKey, OAuth, AnonymousWie die Anfrage autorisiert wurde
identity.tokenHashkey1(…),SasSignature(…)Welcher Schlüssel die SAS signiert hat, plus SHA-256 der SAS selbst
identity.requester.objectIdGUIDDie Entra-Identität bei OAuth
properties.objectKey/account/container/blobWelcher Blob
properties.responseBodySizeBytesWie viel abgeflossen ist
properties.userAgentHeaderAzCopy/10.x …Welches Werkzeug
statusCode / statusText200 / SASSuccessErfolg oder Fehlschlag

Der Hash SasSignature(…) ist Ihr Pivot: Alle Anfragen mit demselben Hash nutzten dasselbe SAS-Token, egal wer es besaß. Der Analyzer verwendet ihn als Prinzipal für SAS-Zugriffe (angezeigt als sas:<Hash-Präfix>), sodass eine abgeflossene SAS als eine einzige Entität mit ihren IPs und der Bytesumme erscheint.

Storage-Logs sind umfangreich. Der Analyzer hält Routine-Lesezugriffe aus der Ereignistabelle heraus, zählt und bewertet aber jeden einzelnen.

Was der Analyzer meldet

RegelErkenntStufe
AZ-ST-001Konto- oder Dienst-SAS über ARM erzeugt (listAccountSas, listServiceSas)Hoch
AZ-ST-002Kontoschlüssel aufgelistet oder neu generiertNiedrig
AZ-ST-003Anonymer Blob-Zugriff auf dem Konto oder einem Container aktiviertHoch
AZ-ST-004Speicher-Firewall für alle Netzwerke geöffnetMittel
AZ-ST-005Massendownload: mindestens 50 verschiedene Blobs, von derselben Identität und IP innerhalb von 60 Minuten gelesen, mit BytesummeHoch
AZ-ST-006Anonyme Blob-LesezugriffeMittel
AZ-VM-005Datenträger oder Snapshot per SAS-URL exportiertHoch

AZ-ST-002 ist absichtlich niedrig: Der Speicherbrowser im Portal, Function Apps und Backup-Werkzeuge listen ständig Schlüssel auf. Interessant wird es neben anderen Befunden.

Das Ausmaß bestimmen

Die Meldung einer Datenschutzverletzung braucht Fakten, nicht „der Angreifer hatte Zugriff auf das Konto“. Bauen Sie sie aus den Logs auf:

  1. Listen Sie die gelesenen Blobs des verdächtigen Prinzipals / SAS-Hashes / der IP auf: Objektschlüssel, Größen, Zeitstempel. Der Azure Forensics Analyzer gruppiert sie nach Identität, IP und Konto, mit Bytesumme.
  2. Trennen Sie Lesen und Auflisten. ListBlobs verrät Namen, GetBlob Inhalte.
  3. Prüfen Sie Teilzugriffe. Ein Feld downloadRange bedeutet, dass nur ein Teil des Blobs übertragen wurde.
  4. Prüfen Sie Schreib- und Löschvorgänge (StorageWrite, StorageDelete): Ransomware-Akteure löschen nach dem Kopieren.
  5. Prüfen Sie die anderen Dienste. Blob-Logs decken weder Files noch Queues noch Tables ab; jeder Dienst hat eigene Logkategorien.

Im fiktiven Beispiel der Website liest etwa eine SAS von einer IP aus 330 verschiedene Backup-Blobs in 18 Minuten, insgesamt rund 48,6 GB. Genau diese Zahl, pro Container, brauchen Rechtsabteilungen.

Behebung

  • Rotieren Sie beide Speicherkontoschlüssel. Microsoft dokumentiert, dass Konto- und Dienst-SAS mit dem Kontoschlüssel signiert werden; eine Neugenerierung macht sie also ungültig. SAS für die Benutzerdelegierung widerrufen Sie, indem Sie die Benutzerdelegierungsschlüssel widerrufen.
  • Deaktivieren Sie anonymen Zugriff und stellen Sie die Firewall wieder her (Standardaktion Deny, private Endpunkte).
  • Erwägen Sie, die Shared Key-Autorisierung zu unterbinden.
  • Aktivieren Sie jetzt StorageRead / StorageWrite / StorageDelete auf dem Blob-Dienst sensibler Konten.
  • Ermitteln Sie, welche Daten gelesen wurden, für Meldepflichten (etwa die 72-Stunden-Meldung an die Aufsichtsbehörde nach DSGVO, Artikel 33).

Verwandte Artikel

Verwandte Artikel

NSG- und VNet-Flow-Logs in der Incident Response analysieren: Tupelformate, Bytes und Flow-Zustände, Exfiltration, Mining, Angreifer-IPs und blinde Flecken.
Wie Angreifer Azure-Dienstprinzipale und verwaltete Identitäten missbrauchen: abgeflossene Geheimnisse, IMDS-Tokendiebstahl, Verbundanmeldeinformationen.
Gelöschte Diagnoseeinstellungen, entfernter Activity-Log-Export, Defender-Pläne im Free-Tarif, Sperren und NSG-Regeln: Defense Evasion in Azure erkennen.

Dieses Tool ist weder mit der Microsoft Corporation verbunden noch von ihr unterstützt oder gesponsert. Azure, Microsoft Azure und Microsoft Defender for Cloud sind Marken der Microsoft-Unternehmensgruppe. Andere Namen sind Marken ihrer jeweiligen Inhaber.