NtPrivilegeObjectAuditAlarm
Emite una entrada del log de Seguridad reportando el uso de uno o más privilegios sobre un objeto específico.
Prototipo
NTSTATUS NtPrivilegeObjectAuditAlarm( PUNICODE_STRING SubsystemName, PVOID HandleId, HANDLE ClientToken, ACCESS_MASK DesiredAccess, PPRIVILEGE_SET Privileges, BOOLEAN AccessGranted );
Argumentos
| Name | Type | Dir | Description |
|---|---|---|---|
| SubsystemName | PUNICODE_STRING | in | Nombre de subsistema mostrado en el evento resultante, p. ej. L"Security". |
| HandleId | PVOID | in | Identificador opaco por handle para correlación con los eventos de apertura/cierre asociados. |
| ClientToken | HANDLE | in | Token de impersonación del cliente cuyo uso de privilegio se registra. |
| DesiredAccess | ACCESS_MASK | in | Máscara de acceso que el cliente intentaba ejercer cuando se comprobó el privilegio. |
| Privileges | PPRIVILEGE_SET | in | Conjunto de privilegios comprobados, p. ej. {SE_SECURITY_PRIVILEGE} para acceso SACL. |
| AccessGranted | BOOLEAN | in | TRUE si la operación tuvo éxito (registrada como éxito 4673/4674), FALSE si falló. |
IDs de syscalls por versión de Windows
| Versión de Windows | ID de syscall | Build |
|---|---|---|
| Win10 1507 | 0x123 | win10-1507 |
| Win10 1607 | 0x129 | win10-1607 |
| Win10 1703 | 0x12D | win10-1703 |
| Win10 1709 | 0x12F | win10-1709 |
| Win10 1803 | 0x131 | win10-1803 |
| Win10 1809 | 0x132 | win10-1809 |
| Win10 1903 | 0x133 | win10-1903 |
| Win10 1909 | 0x133 | win10-1909 |
| Win10 2004 | 0x138 | win10-2004 |
| Win10 20H2 | 0x138 | win10-20h2 |
| Win10 21H1 | 0x138 | win10-21h1 |
| Win10 21H2 | 0x139 | win10-21h2 |
| Win10 22H2 | 0x139 | win10-22h2 |
| Win11 21H2 | 0x13F | win11-21h2 |
| Win11 22H2 | 0x141 | win11-22h2 |
| Win11 23H2 | 0x141 | win11-23h2 |
| Win11 24H2 | 0x143 | win11-24h2 |
| Server 2016 | 0x129 | winserver-2016 |
| Server 2019 | 0x132 | winserver-2019 |
| Server 2022 | 0x13E | winserver-2022 |
| Server 2025 | 0x143 | winserver-2025 |
Módulo del kernel
APIs relacionadas
Stub del syscall
4C 8B D1 mov r10, rcx B8 43 01 00 00 mov eax, 0x143 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
Notas no documentadas
Genera el evento de Seguridad 4674 ("Se intentó una operación sobre un objeto privilegiado") siempre que se comprueba una operación privilegiada contra un *objeto* (no una acción de servicio — para eso ver NtPrivilegedServiceAuditAlarm). El ejemplo clásico es invocar APIs de backup que ejercen SeBackupPrivilege fichero a fichero: cada apertura privilegiada emite un 4674. El llamante es responsable de invocar el syscall — el uso de privilegios no se audita automáticamente por el Object Manager, así que un subsistema privilegiado que quiera fidelidad de log debe llamarlo explícitamente. Sysmon Event ID 4673/4674 (con reglas correspondientes) reproduce los mismos datos con contexto de proceso adicional.
Uso común por malware
Casi nulo. El malware que usa privilegios típicamente lo hace en silencio — llamar a NtPrivilegeObjectAuditAlarm generaría justamente la entrada que intenta evitar. Los únicos llamantes legítimos son subsistemas MS que *quieren* fidelidad de auditoría (LSASS, ntdsa.dll, el servicio Backup, sensores de Defender for Identity). Cualquier llamante fuera de ese pequeño conjunto es sospechoso ante todo por ser inusual.
Oportunidades de detección
El volumen en una estación normal es casi nulo salvo durante jobs de backup. La ausencia repentina de eventos 4674 esperados durante una operación privilegiada conocida (p. ej. shadow copy programado) es señal más fuerte que la presencia — indica deterioro del subsistema de Eventos (T1562.002). Para detección positiva, focalizar en 4674 con privilegio == SeDebugPrivilege, SeTcbPrivilege o SeLoadDriverPrivilege emitidos por una imagen no firmada o por una imagen inusual con esos privilegios.
Ejemplos de syscalls directos
asmx64 direct stub (Win11 24H2)
; Direct syscall stub for NtPrivilegeObjectAuditAlarm (SSN 0x143, Win11 24H2)
NtPrivilegeObjectAuditAlarm PROC
mov r10, rcx ; syscall convention
mov eax, 143h ; SSN
syscall
ret
NtPrivilegeObjectAuditAlarm ENDPcBackup service emitting a 4674 per protected file
// A backup service holding SeBackupPrivilege walks the volume and, for each
// file it opens via FILE_FLAG_BACKUP_SEMANTICS, explicitly emits a 4674
// so the Security log records *which* files were touched with the privilege.
LUID seBackupLuid;
LookupPrivilegeValueW(NULL, SE_BACKUP_NAME, &seBackupLuid);
struct {
PRIVILEGE_SET ps;
LUID_AND_ATTRIBUTES extra; // tail for >1 privilege
} pset = {
.ps = { .PrivilegeCount = 1, .Control = PRIVILEGE_SET_ALL_NECESSARY,
.Privilege = {{ .Luid = seBackupLuid, .Attributes = SE_PRIVILEGE_USED_FOR_ACCESS }} }
};
UNICODE_STRING sub = RTL_CONSTANT_STRING(L"Security");
NtPrivilegeObjectAuditAlarm(
&sub,
(PVOID)hFile, // handle id
hClientToken,
FILE_GENERIC_READ,
&pset.ps,
TRUE); // access grantedrustWin32 PrivilegeCheck + ObjectPrivilegeAuditAlarmW
// The Win32 wrappers are PrivilegeCheck (decision) +
// ObjectPrivilegeAuditAlarmW (audit emission).
use windows_sys::Win32::Security::Authorization::ObjectPrivilegeAuditAlarmW;
use windows_sys::Win32::Security::*;
unsafe {
let ok = ObjectPrivilegeAuditAlarmW(
windows_sys::w!("Security"),
handle_id as *mut _,
client_token,
desired_access,
&priv_set as *const _ as *mut _,
1, // access_granted
);
// ok != 0 -> the 4674 was emitted (assuming "Audit Privilege Use"
// policy is enabled).
}Mapeos MITRE ATT&CK
Last verified: 2026-05-20