Key Vault-Audit-Logs: Wer hat welches Secret gelesen?
Mit den Azure Key Vault-Audit-Logs (AuditEvent) herausfinden, wer welches Secret gelesen hat: SecretGet, SecretList, Zugriffsrichtlinien, neue Prinzipale.
Kurz gesagt. Lesezugriffe auf Secrets sind nur im Key Vault-Log AuditEvent sichtbar – und nur, wenn eine Diagnoseeinstellung es vor dem Vorfall irgendwohin gesendet hat. Suchen Sie nach SecretGet / SecretList durch einen Prinzipal, der den Tresor nie zuvor berührt hat, nach vielen verschiedenen Secrets, die ein Prinzipal innerhalb einer Stunde liest, und nach einem VaultAccessPolicyChangedEventGridNotification oder Microsoft.KeyVault/vaults/accessPolicies/write kurz davor. Im Modell der Zugriffsrichtlinien kann sich jeder mit Contributor auf dem Tresor selbst Datenzugriff gewähren. Gibt es keine Logs, rotieren Sie jedes Secret, das die Identität erreichen konnte.
In den Key Vault gehen Angreifer, sobald sie mit echten Rechten Fuß gefasst haben, denn dort liegen das Datenbankpasswort, der API-Schlüssel des Zahlungsdienstleisters und die Passphrase der Backup-Verschlüsselung. Die gute Nachricht: Ist die Protokollierung aktiv, gehört das Key Vault-Audit-Log zu den präzisesten Quellen in Azure. Jede Anfrage wird mit Objekt-URI, Identität des Aufrufers und IP erfasst.
Was das AuditEvent-Log erfasst
Die Referenz zur Key Vault-Protokollierung dokumentiert das Schema. Die Felder, die Sie in einer Untersuchung nutzen:
| Feld | Inhalt | Nutzen in der Untersuchung |
|---|---|---|
time | UTC-Zeitstempel | Zeitleiste |
operationName | SecretGet, SecretList, KeyDecrypt, VaultGet … | Was getan wurde |
identity.claim | Objekt-ID (…/objectidentifier), appid, UPN bei Benutzern, xms_mirid bei verwalteten Identitäten | Wer |
callerIpAddress | Client-IP | Von wo |
properties.id | Vollständiger Objekt-URI, z. B. https://<vault>.vault.azure.net/secrets/<name>/<version> | Welches Secret, welche Version |
properties.clientInfo | User Agent (SDK-Name und -Version, curl, python …) | Wie |
resultSignature / httpStatusCode | HTTP-Status | Erfolg oder Ablehnung |
Dieselben Daten landen in der Tabelle AzureDiagnostics (mit abgeflachten identity_claim_*-Spalten) oder in der ressourcenspezifischen Tabelle AZKVAuditLogs in Log Analytics. In einem Speicherkonto werden sie in den Container insights-logs-auditevent geschrieben. Laut Microsoft sind die Einträge spätestens zehn Minuten nach dem Vorgang verfügbar.
Die entscheidenden Operationsnamen
Operationsnamen folgen dem Muster ObjektVerb. Relevant für Diebstahl von Anmeldeinformationen:
| Operation | Bedeutung | Forensisches Gewicht |
|---|---|---|
SecretGet | Wert eines Secrets lesen | Der zentrale Beleg für Zugriff auf Anmeldeinformationen |
SecretList, SecretListVersions | Namen auflisten, keine Werte | Aufklärung vor Massenzugriffen |
SecretBackup, KeyBackup | Verschlüsseltes Backup exportieren | Exfiltration des gesamten Objekts |
KeyDecrypt, KeyUnwrap | Einen Schlüssel nutzen, ohne ihn zu extrahieren | Entschlüsselung über Umwege |
CertificateGet | Eigenschaften und öffentlichen Teil eines Zertifikats lesen; ein exportierbarer privater Schlüssel wird über das zugehörige Secret gelesen und erscheint daher als SecretGet | Zugriff auf Anmeldeinformationen |
SecretPurge, KeyPurge, CertificatePurge | Endgültiges Löschen | Schaden / Anti-Forensik |
VaultAccessPolicyChangedEventGridNotification | Zugriffsrichtlinie geändert | Wird auch ohne Event Grid-Abonnement protokolliert |
Authentication | Authentifizierung über den Entra-Endpunkt | Kontext |
Auf der Steuerungsebene erfasst das Activity Log Microsoft.KeyVault/vaults/accessPolicies/write (Änderung der Zugriffsrichtlinie), Microsoft.KeyVault/vaults/write (Tresoreigenschaften, darunter vorläufiges Löschen und Löschschutz) und Microsoft.KeyVault/locations/deletedVaults/purge/action.
Rechteausweitung über die Zugriffsrichtlinie
Key Vault kennt zwei Berechtigungsmodelle. Mit Azure RBAC erfordert die Vergabe von Datenzugriff Owner oder User Access Administrator. Beim älteren Modell der Zugriffsrichtlinien warnt Microsoft, dass Benutzer mit Contributor, Key Vault Contributor oder einer Rolle mit Microsoft.KeyVault/vaults/write sich über eine Zugriffsrichtlinie selbst Zugriff auf die Datenebene gewähren können (Azure RBAC oder Zugriffsrichtlinien).
In der Praxis sieht die Kette so aus, innerhalb weniger Minuten:
- Activity Log:
accessPolicies/writedurch Prinzipal X auf Tresor V. - Key Vault-Log:
VaultAccessPolicyChangedEventGridNotificationauf V. - Key Vault-Log:
SecretListdurch X von derselben IP. - Key Vault-Log: eine Salve von
SecretGetdurch X, eines pro Secret.
MITRE ATT&CK führt das Auslesen von Cloud-Secret-Speichern als T1555.006 Cloud Secrets Management Stores.
Was der Analyzer meldet
| Regel | Erkennt | Stufe |
|---|---|---|
AZ-KV-001 | Ein Prinzipal liest Secrets, Schlüssel oder Zertifikate aus einem Tresor, auf den er im 72-stündigen Lernzeitraum nie zugegriffen hat | Hoch |
AZ-KV-002 | Ein Prinzipal liest mindestens 8 verschiedene Secrets / Schlüssel / Zertifikate aus einem Tresor innerhalb von 60 Minuten | Hoch |
AZ-KV-003 | Zugriffsrichtlinie geändert (Activity Log oder Key Vault-Log) | Mittel |
AZ-KV-004 | Vorläufiges Löschen oder Löschschutz deaktiviert oder Tresore / Objekte endgültig gelöscht | Hoch |
AZ-ID-002 | Verwaltete Identität von einer nie genutzten IP verwendet – oft ein von einer VM gestohlenes und gegen Key Vault wiederverwendetes Token | Hoch |
AZ-KV-002 zählt unterschiedliche Objekte, nicht Anfragen: Eine Anwendung, die stündlich dieselbe Verbindungszeichenfolge liest, löst sie nie aus; ein Skript, das den Tresor durchläuft, schon. Konfigurationslader, die beim Start alle Secrets lesen, sind das bekannte False Positive.
Fragen zur Triage
- War die Protokollierung aktiv? Prüfen Sie den Abdeckungsblock des Analyzers oder den Verlauf der Diagnoseeinstellungen des Tresors im Activity Log (
microsoft.insights/diagnosticSettings/writeund/delete). Eine gelöschte Diagnoseeinstellung ist selbst ein Befund (Defense Evasion). - Ist der Leser neu? Vergleichen Sie mit der Referenz: Welche Prinzipale haben diesen Tresor letzte Woche gelesen, von welchen IPs, mit welchem Client?
- Wie viele verschiedene Secrets? Ein Secret, das ein neuer Prinzipal liest, kann ein Onboarding sein. Zwölf in einer Minute aus einem Python-SDK von der IP eines Privatanschlusses sind es nicht.
- Welcher Client?
clientInfounterscheidet ein Anwendungs-SDK voncurloder einem Ad-hoc-Skript. Es lässt sich fälschen, eine Änderung ist trotzdem aufschlussreich. - Abgelehnte Anfragen? Eine Reihe von 403-Antworten vor dem Erfolg ist typisch für einen Angreifer, der herausfindet, was die Identität darf.
- Was schließen die Secrets auf? Jedes gelesene Secret erweitert den Umfang des Vorfalls: die Datenbank, den Zahlungsdienstleister, den SFTP-Partner.
Behebung
- Rotieren Sie jedes Secret, jeden Schlüssel und jedes Zertifikat, das der verdächtige Prinzipal gelesen hat – und aktualisieren Sie die Systeme, die sie verwenden. Rotation ohne Aktualisierung der Verbraucher verursacht einen Ausfall; stimmen Sie sich ab.
- Entfernen Sie unerwartete Einträge aus den Zugriffsrichtlinien; planen Sie den Wechsel zum Berechtigungsmodell Azure RBAC.
- Stellen Sie sicher, dass vorläufiges Löschen und Löschschutz aktiviert sind.
- Aktivieren Sie die Diagnoseeinstellung
AuditEventjetzt, falls sie fehlte, und schützen Sie sie mit Azure Policy.
FAQ
Zeigt das Activity Log Lesezugriffe auf Key Vault-Secrets?
Nein. Das Lesen eines Secrets ist ein Vorgang der Datenebene. Er erscheint nur im Key Vault-Ressourcenlog AuditEvent – und nur, wenn eine Diagnoseeinstellung dieses Log vor dem Zugriff irgendwohin gesendet hat.
Kann ich Key Vault-Zugriffslogs wiederherstellen, wenn die Protokollierung nicht aktiviert war?
Nein. Eine jetzt aktivierte Diagnoseeinstellung erfasst nur künftige Vorgänge. Gehen Sie davon aus, dass jedes Secret, das die kompromittierte Identität lesen konnte, gelesen wurde, und rotieren Sie alle.
Wie schnell erscheinen Key Vault-Logs?
Laut Microsoft stehen die Protokollinformationen spätestens 10 Minuten nach dem Key Vault-Vorgang zur Verfügung, meist früher.