Wie Storm-2949 eine kompromittierte Identität in einen cloudweiten Verstoß verwandelte
Detection stack
- AIDR
- Alert
- ETL
- Query
Zusammenfassung
Storm-2949 nutzte Social Engineering und Missbrauch von Self-Service Password Reset, um Microsoft Entra ID-Konten zu kompromittieren. Nach Erlangen von privilegiertem Zugriff nutzte der Bedrohungsakteur Azure-Managementebenenaktionen, um App Services, Key Vaults, Storage Konten und SQL-Datenbanken zu erreichen. Daten wurden dann aus Microsoft 365, Azure Storage und anderen Cloud-Ressourcen exfiltriert. Der Einbruch weitete sich später auf die Bereitstellung des ScreenConnect-Remotezugriffstools auf virtuellen Maschinen aus, um weitere Erkundung und Anmeldediebstahl zu unterstützen.
Untersuchung
Microsoft-Analysten beobachteten, dass die Angreifer Benutzer und Anwendungen über die Microsoft Graph API mit maßgeschneidertem Python-Tooling auflisteten. Sie riefen Veröffentlichungskonfigurationen von Azure App Services ab, extrahierten Geheimnisse aus Key Vaults, änderten Firewall-Regeln und nutzten die VMAccess-Erweiterung, um lokale Administratorkonten auf virtuellen Maschinen zu erstellen. In einer späteren Phase installierte ein PowerShell-Skript ScreenConnect, löschte Protokolle und tarnte Dienste, um die Sichtbarkeit zu reduzieren. Die Untersuchung verknüpfte diese Aktivität mit drei von Angreifern kontrollierten IP-Adressen.
Minderung
Organisationen sollten MFA aktivieren und für privilegierte Konten eine phishingsichere Authentifizierung verlangen. Azure RBAC-Berechtigungen sollten streng eingeschränkt und überwacht werden, insbesondere der Owner-Zugriff auf Key Vaults und App Services. Unnötige Azure VM-Erweiterungen sollten deaktiviert und Protokollierung für Run Command und VMAccess-Aktivität durchgesetzt werden. Außerdem sollten Microsoft Defender for Cloud und Defender for Endpoint mit Manipulationsschutz und Blockmodus aktiviert sein.
Antwort
Verteidiger sollten die identifizierten bösartigen IP-Adressen sofort blockieren und kompromittierte Anmeldedaten widerrufen. Passwörter und MFA-Registrierungen für betroffene Konten sollten zurückgesetzt und alle in Key Vaults gespeicherten Geheimnisse gedreht werden. Sicherheitsteams sollten auch eine vollständige Überprüfung der Azure RBAC-Zuweisungen durchführen und übermäßige Berechtigungen entfernen. Erkennungsregeln sollten aktualisiert werden, um verdächtige Anfragen nach Veröffentlichungskonfigurationen, Zugriffe auf Key Vault-Geheimnisse und unerwartete VM-Erweiterungsaktivitäten zu identifizieren.
graph TB classDef action fill:#99ccff classDef tool fill:#ffcc99 classDef operator fill:#ff9900 action_phishing[„<b>Aktion</b> – <b>T1566 Phishing</b><br/><b>Beschreibung</b>: Der Angreifer nutzte gezielte Phishing-Nachrichten, die Self-Service-Password-Reset missbrauchten, um Benutzer zur MFA-Freigabe und Preisgabe gültiger Zugangsdaten zu bewegen.“] class action_phishing action action_valid_accounts[„<b>Aktion</b> – <b>T1078 Gültige Konten</b><br/><b>Beschreibung</b>: Kompromittierte Zugangsdaten wurden für Microsoft Entra ID und Azure-Abonnements verwendet.“] class action_valid_accounts action action_account_manipulation[„<b>Aktion</b> – <b>T1098 Kontomanipulation</b><br/><b>Beschreibung</b>: Der Angreifer setzte Passwörter zurück, entfernte MFA-Faktoren und registrierte einen bösartigen Authenticator zur Persistenz.“] class action_account_manipulation action action_cloud_role_add[„<b>Aktion</b> – <b>T1098.003 Zusätzliche Cloud-Rollen</b><br/><b>Beschreibung</b>: Privilegierte Azure-RBAC-Rollen wurden zu kompromittierten Konten hinzugefügt.“] class action_cloud_role_add action action_cloud_account_discovery[„<b>Aktion</b> – <b>T1087.004 Cloud-Kontoerkennung</b><br/><b>Beschreibung</b>: Microsoft Graph API wurde zur Enumeration von Benutzern, Anwendungen und Service Principals genutzt.“] class action_cloud_account_discovery action action_cloud_group_discovery[„<b>Aktion</b> – <b>T1069.003 Cloud-Gruppen-Erkennung</b><br/><b>Beschreibung</b>: Gruppen und Rollen wurden zur Analyse privilegierter Mitgliedschaften aufgelistet.“] class action_cloud_group_discovery action action_cloud_service_discovery[„<b>Aktion</b> – <b>T1526 Cloud-Service-Erkennung</b><br/><b>Beschreibung</b>: Azure-Dienste wie App Service, Key Vault, Storage und SQL wurden aufgelistet.“] class action_cloud_service_discovery action action_storage_object_discovery[„<b>Aktion</b> – <b>T1619 Cloud-Storage-Objekterkennung</b><br/><b>Beschreibung</b>: Blob-Container in Azure Storage wurden enumeriert.“] class action_storage_object_discovery action action_keyvault_secret_access[„<b>Aktion</b> – <b>T1555.006 Zugangsdaten aus Passwortspeichern</b><br/><b>Beschreibung</b>: Geheimnisse wurden aus Azure Key Vault extrahiert.“] class action_keyvault_secret_access action action_remote_services[„<b>Aktion</b> – <b>T1021.007 Remote-Dienste: Cloud-Dienste</b><br/><b>Beschreibung</b>: Gültige Anmeldedaten wurden für Azure-Ressourcen verwendet.“] class action_remote_services action tool_screenconnect[„<b>Tool</b> – <b>Name</b>: ScreenConnect (ConnectWise Control)<br/><b>Beschreibung</b>: Remote-Access-Software auf kompromittierten virtuellen Maschinen.“] class tool_screenconnect tool action_automated_collection[„<b>Aktion</b> – <b>T1119 Automatisierte Sammlung</b><br/><b>Beschreibung</b>: Python-Skripte luden große Datenmengen aus OneDrive, SharePoint und Azure Storage herunter.“] class action_automated_collection action action_scripting_interpreter[„<b>Aktion</b> – <b>T1059 Kommando- und Skriptinterpreter</b><br/><b>Beschreibung</b>: Skripte wurden über Azure VM-Erweiterungen ausgeführt.“] class action_scripting_interpreter action action_indicator_removal[„<b>Aktion</b> – <b>T1070 Entfernen von Indikatoren</b><br/><b>Beschreibung</b>: Windows-Ereignisprotokolle und temporäre Dateien wurden gelöscht.“] class action_indicator_removal action action_file_deletion[„<b>Aktion</b> – <b>T1070.004 Dateilöschung</b><br/><b>Beschreibung</b>: Artefakte auf VMs wurden entfernt.“] class action_file_deletion action action_obfuscation[„<b>Aktion</b> – <b>T1027.005 Verschleierte Dateien oder Informationen</b><br/><b>Beschreibung</b>: Sicherheitswerkzeuge wurden verändert oder verschleiert.“] class action_obfuscation action action_defeat_defenses[„<b>Aktion</b> – <b>T1562.008 Verteidigungsumgehung</b><br/><b>Beschreibung</b>: Microsoft Defender wurde deaktiviert und Cloud-Logs manipuliert.“] class action_defeat_defenses action action_phishing –>|führt_zu| action_valid_accounts action_valid_accounts –>|führt_zu| action_account_manipulation action_account_manipulation –>|führt_zu| action_cloud_role_add action_cloud_role_add –>|führt_zu| action_cloud_account_discovery action_cloud_account_discovery –>|führt_zu| action_cloud_group_discovery action_cloud_group_discovery –>|führt_zu| action_cloud_service_discovery action_cloud_service_discovery –>|führt_zu| action_storage_object_discovery action_storage_object_discovery –>|führt_zu| action_keyvault_secret_access action_keyvault_secret_access –>|führt_zu| action_remote_services action_remote_services –>|nutzt| tool_screenconnect tool_screenconnect –>|ermöglicht| action_automated_collection action_automated_collection –>|nutzt| action_scripting_interpreter action_scripting_interpreter –>|ermöglicht| action_indicator_removal action_indicator_removal –>|enthält| action_file_deletion action_file_deletion –>|enthält| action_obfuscation action_obfuscation –>|unterstützt| action_defeat_defenses class action_phishing,action_valid_accounts,action_account_manipulation,action_cloud_role_add,action_cloud_account_discovery,action_cloud_group_discovery,action_cloud_service_discovery,action_storage_object_discovery,action_keyvault_secret_access,action_remote_services,action_automated_collection,action_scripting_interpreter,action_indicator_removal,action_file_deletion,action_obfuscation,action_defeat_defenses action class tool_screenconnect tool
Angriffsfluss
Erkennungen
Verdächtige Nutzung von Invoke-RestMethod (über powershell)
Anzeigen
Möglicherweise wurde Azure Vault von einem ungewöhnlichen Prozess kontaktiert (über dns_query)
Anzeigen
IOCs (SourceIP) zur Erkennung: Wie Storm-2949 eine kompromittierte Identität in eine Cloud-weite Verletzung verwandelte
Anzeigen
IOCs (DestinationIP) zur Erkennung: Wie Storm-2949 eine kompromittierte Identität in eine Cloud-weite Verletzung verwandelte
Anzeigen
Erkennung von Azure-Managementebenenoperationen zur Datenexfiltration [Azure-Aktivitätsprotokolle]
Anzeigen
Simulation Ausführung
Voraussetzung: Die Telemetrie- & Basislinienvorprüfung muss bestanden sein.
-
Angriffserzählung & Befehle:
Ein Angreifer, der über ein gültiges Azure AD-Konto (oder standardmäßigen Dienstprinzipal) verfügt, möchte Quellcode von Anwendungen und Datenbankschnappschüsse exfiltrieren. Der Angreifer führt die folgenden Schritte vollständig über Azure CLI aus, wobei genau das
BetriebsnameEreignisse, die die Regel überwacht:- Veröffentlichung von Web App XML – extrahiert die Web App-Konfiguration (einschließlich Bereitstellungszugriffsdaten).
- Erstellen eines neuen Speicherkontos – bietet einen Container zum Zwischenspeichern exfiltrierter Daten.
- Hinzufügen einer Firewall-Regel zum SQL-Server – öffnet den Server für den IP-Bereich des Angreifers, um direkte Datenkopien zu ermöglichen.
Jeder Schritt erzeugt einen Eintrag im Aktivitätsprotokoll mit
Betriebsnameübereinstimmend mit der Whitelist der Regel, wodurch die Erkennung ausgelöst wird. -
Regressionstest-Skript:
#!/usr/bin/env bash # Voraussetzung: az CLI ist mit einem kompromittierten/gültigen Azure AD-Prinzipal angemeldet. set -euo pipefail # Variablen – bei Bedarf für den Testmandanten ändern RG="test-rg-$(date +%s)" WEBAPP="test-webapp-$RANDOM" STORAGE="teststorage$RANDOM" LOCATION="eastus" SQLSERVER="testsql$RANDOM" MY_IP=$(curl -s https://api.ipify.org) echo "=== Erstellen der Ressourcengruppe ===" az group create --name "$RG" --location "$LOCATION" echo "=== Bereitstellung einer Dummy-Web-App ===" az appservice plan create --name "${WEBAPP}Plan" --resource-group "$RG" --sku B1 --is-linux az webapp create --resource-group "$RG" --plan "${WEBAPP}Plan" --name "$WEBAPP" echo "=== Veröffentlichen der XML-Konfiguration (löst Erkennung aus) ===" az webapp config backup create --resource-group "$RG" --webapp-name "$WEBAPP" --backup-name "xmlbackup-$(date +%s)" --output none echo "=== Erstellen eines Speicherkontos (löst Erkennung aus) ===" az storage account create --name "$STORAGE" --resource-group "$RG" --location "$LOCATION" --sku Standard_LRS --kind StorageV2 --output none echo "=== Erstellen eines SQL-Servers (erforderlich für Firewall-Regel) ===" az sql server create --name "$SQLSERVER" --resource-group "$RG" --location "$LOCATION" --admin-user "sqladmin" --admin-password "P@ssw0rd1234!" --output none echo "=== Hinzufügen einer Firewall-Regel zum SQL-Server (löst Erkennung aus) ===" az sql server firewall-rule create --resource-group "$RG" --server "$SQLSERVER" --name "AllowMyIP" --start-ip-address "$MY_IP" --end-ip-address "$MY_IP" --output none echo "=== Simulation abgeschlossen. Überprüfen Sie Azure Sentinel auf Warnungen. ===" -
Bereinigungskommandos:
#!/usr/bin/env bash set -euo pipefail # Variablen müssen mit denen im Simulationsskript übereinstimmen RG="test-rg-..." # Wenn Sie die genauen Namen von der vorherigen Ausführung beibehalten haben, ersetzen Sie die Platzhalter entsprechend. echo "=== Löschen der Ressourcengruppe und aller enthaltenen Ressourcen ===" az group delete --name "$RG" --yes --no-wait echo "Bereinigung initiiert."