NtAlpcRevokeSecurityContext
Invalida un contexto SECURITY_QOS ALPC cacheado sin liberar su slot de handle.
Prototipo
NTSTATUS NtAlpcRevokeSecurityContext( HANDLE PortHandle, ULONG Flags, ALPC_HANDLE ContextHandle );
Argumentos
| Name | Type | Dir | Description |
|---|---|---|---|
| PortHandle | HANDLE | in | Handle al puerto ALPC que posee el contexto de seguridad. |
| Flags | ULONG | in | Reservado. Debe ser 0. |
| ContextHandle | ALPC_HANDLE | in | ALPC_HANDLE opaco devuelto por NtAlpcCreateSecurityContext; el contexto a marcar revocado. |
IDs de syscalls por versión de Windows
| Versión de Windows | ID de syscall | Build |
|---|---|---|
| Win10 1507 | 0x87 | win10-1507 |
| Win10 1607 | 0x87 | win10-1607 |
| Win10 1703 | 0x88 | win10-1703 |
| Win10 1709 | 0x88 | win10-1709 |
| Win10 1803 | 0x89 | win10-1803 |
| Win10 1809 | 0x89 | win10-1809 |
| Win10 1903 | 0x89 | win10-1903 |
| Win10 1909 | 0x89 | win10-1909 |
| Win10 2004 | 0x8B | win10-2004 |
| Win10 20H2 | 0x8B | win10-20h2 |
| Win10 21H1 | 0x8B | win10-21h1 |
| Win10 21H2 | 0x8B | win10-21h2 |
| Win10 22H2 | 0x8B | win10-22h2 |
| Win11 21H2 | 0x8B | win11-21h2 |
| Win11 22H2 | 0x8B | win11-22h2 |
| Win11 23H2 | 0x8B | win11-23h2 |
| Win11 24H2 | 0x8D | win11-24h2 |
| Server 2016 | 0x87 | winserver-2016 |
| Server 2019 | 0x89 | winserver-2019 |
| Server 2022 | 0x8B | winserver-2022 |
| Server 2025 | 0x8D | winserver-2025 |
Módulo del kernel
APIs relacionadas
Stub del syscall
4C 8B D1 mov r10, rcx B8 8D 00 00 00 mov eax, 0x8D 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
`NtAlpcRevokeSecurityContext` es el **deshabilitado suave** frente al **destructor** `NtAlpcDeleteSecurityContext`. Cambia una bandera en la entrada de contexto para que cualquier `NtAlpcImpersonateClientOfPort` posterior que la referencie falle con `STATUS_ALPC_HANDLE_REVOKED`, pero la entrada permanece válida hasta la eliminación natural. Dos motivos para que un servidor prefiera revocar a eliminar: (1) el mismo handle aún está referenciado por `PORT_MESSAGE`s en vuelo y una eliminación provocaría una carrera; (2) el servidor desea registrar qué mensajes intentaron usar el token ahora inválido. El kernel pone `AlpcSecurityContext->Revoked` y deja que el ref-count baje a cero naturalmente; ese momento libera la referencia subyacente al token.
Uso común por malware
Casi sin interés ofensivo — es *menos* potente que `NtAlpcDeleteSecurityContext` (sin riesgo UAF, sin liberación inmediata). Un operador red-team que ha comprometido un servidor ALPC privilegiado podría revocar un contexto existente para **negar el servicio** a un cliente concreto (un agente EDR ruidoso, por ejemplo) sin tirar toda la conexión — degradación quirúrgica en lugar de tear-down. Por lo demás, el syscall sólo se invoca como parte del cleanup normal del servidor RPC.
Oportunidades de detección
Funcionalmente invisible para los defensores — la revocación no tiene efecto externo observable salvo que una impersonación posterior fallará con `STATUS_ALPC_HANDLE_REVOKED`, lo cual es normal en shutdown. Tratar anomalías igual que para `NtAlpcDeleteSecurityContext`: mirar el **patrón** (ciclos frecuentes revoke-luego-create sobre el mismo puerto sugieren un fuzzer o un probador TOCTOU), no el syscall en sí. El proveedor ETW Microsoft-Windows-Kernel-ALPC registra la llamada cuando está activo.
Ejemplos de syscalls directos
cSoft-disable a cached client QoS
// Mark a cached client context as revoked without disturbing in-flight messages.
// Later, NtAlpcDeleteSecurityContext finishes the job when the ref-count is zero.
#include <windows.h>
#include <winternl.h>
typedef PVOID ALPC_HANDLE;
NTSTATUS NTAPI NtAlpcRevokeSecurityContext(HANDLE, ULONG, ALPC_HANDLE);
void SoftRevoke(HANDLE serverPort, ALPC_HANDLE ctx) {
// After this call, NtAlpcImpersonateClientOfPort referencing ctx returns
// STATUS_ALPC_HANDLE_REVOKED instead of impersonating.
NtAlpcRevokeSecurityContext(serverPort, 0, ctx);
}asmx64 direct stub (Win11 24H2)
; Direct syscall stub for NtAlpcRevokeSecurityContext (SSN 0x8D on Win11 24H2 / Server 2025)
NtAlpcRevokeSecurityContext PROC
mov r10, rcx ; PortHandle
mov eax, 8Dh ; SSN
syscall
ret
NtAlpcRevokeSecurityContext ENDPMapeos MITRE ATT&CK
Last verified: 2026-05-20