NtDeleteObjectAuditAlarm
Emittiert den Security-Eventlog-Eintrag, der die Löschung eines auditierten Objekts protokolliert.
Prototyp
NTSTATUS NtDeleteObjectAuditAlarm( PUNICODE_STRING SubsystemName, PVOID HandleId, BOOLEAN GenerateOnClose );
Argumente
| Name | Type | Dir | Description |
|---|---|---|---|
| SubsystemName | PUNICODE_STRING | in | Subsystemname, passend zum Wert des ursprünglichen NtAccessCheck*AuditAlarm-Opens. |
| HandleId | PVOID | in | Opaker Handle-ID zur Korrelation mit den Open/Close-Audit-Events desselben Objekts. |
| GenerateOnClose | BOOLEAN | in | TRUE wenn der vorherige Audit-Alarm-Open einen Close/Delete-Eintrag anforderte; FALSE macht den Aufruf zum No-op. |
Syscall-IDs pro Windows-Version
| Windows-Version | Syscall-ID | Build |
|---|---|---|
| Win10 1507 | 0xC6 | win10-1507 |
| Win10 1607 | 0xC9 | win10-1607 |
| Win10 1703 | 0xCC | win10-1703 |
| Win10 1709 | 0xCD | win10-1709 |
| Win10 1803 | 0xCE | win10-1803 |
| Win10 1809 | 0xCF | win10-1809 |
| Win10 1903 | 0xD0 | win10-1903 |
| Win10 1909 | 0xD0 | win10-1909 |
| Win10 2004 | 0xD4 | win10-2004 |
| Win10 20H2 | 0xD4 | win10-20h2 |
| Win10 21H1 | 0xD4 | win10-21h1 |
| Win10 21H2 | 0xD5 | win10-21h2 |
| Win10 22H2 | 0xD5 | win10-22h2 |
| Win11 21H2 | 0xDA | win11-21h2 |
| Win11 22H2 | 0xDB | win11-22h2 |
| Win11 23H2 | 0xDB | win11-23h2 |
| Win11 24H2 | 0xDD | win11-24h2 |
| Server 2016 | 0xC9 | winserver-2016 |
| Server 2019 | 0xCF | winserver-2019 |
| Server 2022 | 0xD9 | winserver-2022 |
| Server 2025 | 0xDD | winserver-2025 |
Kernel-Modul
Verwandte APIs
Syscall-Stub
4C 8B D1 mov r10, rcx B8 DD 00 00 00 mov eax, 0xDD F6 04 25 08 03 FE 7F 01 test byte ptr [0x7FFE0308], 1 75 03 jne short +3 0F 05 syscall C3 ret CD 2E int 2Eh C3 ret
Undokumentierte Hinweise
Erzeugt das Security-Event 4660 ("Ein Objekt wurde gelöscht"). Das auditierte Subsystem ruft diesen Syscall nach erfolgreicher Lösch-Operation an einem SACL-überwachten Objekt auf, damit das Security-Log einen expliziten Lösch-Eintrag trägt (das Open/Close-Paar allein unterscheidet ein normales Schließen nicht von einer Löschung). 4660 ist das kanonische Event, das Incident-Responder mit 4663 (DELETE-Zugriff ausgeübt) und 4656 (Open mit DELETE) auf derselben HandleId korrelieren, um die zerstörerische Aktivität eines Angreifers vollständig zu rekonstruieren. SSN `0xDD` auf Win11 24H2 (und entsprechende Werte auf früheren Builds — einer der wenigen Audit-Alarm-Syscalls, dessen SSN driftet, weil er alphabetisch in die umnummerierte Gruppe einsortiert wird).
Häufige Malware-Nutzung
Keine in Commodity-Malware beobachtet. Zerstörerische Operationen von Ransomware/Wipern (Conti, Royal, AcidRain) rufen NtDeleteObjectAuditAlarm nie auf — sie rufen NtSetInformationFile mit FileDispositionInformation oder direkt NtDeleteFile auf und überlassen es dem Object Manager, die SACL anzuwenden oder nicht. Ob 4660 feuert, hängt vollständig von der Nutzung des *auditierten Subsystem-Pfads* ab; ein Umgehen des Win32-Wrappers heißt kein 4660. Genau deshalb sollten Verteidiger sich nicht ausschließlich auf 4660 für Ransomware-Detection verlassen — File-System-Mini-Filter-Telemetrie (FltMgr-ETW-Provider, EDR-File-Write-Hooks) ist zuverlässiger.
Erkennungsmöglichkeiten
Event 4660 muss mit einem 4663 (DELETE-Zugriff gewährt) und einem vorausgehenden 4656 mit derselben HandleId gepaart werden, um zu rekonstruieren, wer was löschte. Auf SACL-überwachten Shadow-Copy-Stores, den Registry-Hives unter HKLM\SECURITY und den Defender-Konfigurations-Keys sind 4660-Peaks direkte Ransomware-Indikatoren. Fehlende 4660 bei massiver Datei-Löschung (über Sysmon Event ID 23 beobachtbar) impliziert, dass der Lösch-Pfad das Audit-Alarm-Subsystem umging — für sich ein starkes Signal eines sophistizierten Akteurs (T1070.004).
Direkte Syscall-Beispiele
asmx64 direct stub (Win11 24H2)
; Direct syscall stub for NtDeleteObjectAuditAlarm (SSN 0xDD, Win11 24H2)
NtDeleteObjectAuditAlarm PROC
mov r10, rcx ; syscall convention
mov eax, 0DDh ; SSN
syscall
ret
NtDeleteObjectAuditAlarm ENDPcAudited delete from a SACL-aware service
// Service holding the handle has just performed a privileged delete via
// NtSetInformationFile(FileDispositionInformation). Now record the 4660.
UNICODE_STRING sub = RTL_CONSTANT_STRING(L"Security");
NTSTATUS s = NtDeleteObjectAuditAlarm(
&sub,
(PVOID)hHandleId, // same value used in the matching NtAccessCheck*AuditAlarm call
TRUE); // matches the GenerateOnClose flag returned earlier
// Resulting Security event 4660 carries object DN/path and the deleting subject.
NtClose(hFile);rustWin32 ObjectDeleteAuditAlarmW wrapper
use windows_sys::Win32::Security::Authorization::ObjectDeleteAuditAlarmW;
unsafe {
let ok = ObjectDeleteAuditAlarmW(
windows_sys::w!("Security"),
handle_id as *mut _,
gen_on_close as i32,
);
// ok != 0 -> 4660 emitted (subject to "Audit Object Access" policy).
}MITRE ATT&CK-Mappings
Last verified: 2026-05-20