NtAlpcDeleteSecurityContext
Libère un contexte SECURITY_QOS ALPC précédemment créé avec NtAlpcCreateSecurityContext.
Prototype
NTSTATUS NtAlpcDeleteSecurityContext( HANDLE PortHandle, ULONG Flags, ALPC_HANDLE ContextHandle );
Arguments
| Name | Type | Dir | Description |
|---|---|---|---|
| PortHandle | HANDLE | in | Handle vers le port ALPC qui détient le contexte de sécurité. |
| Flags | ULONG | in | Réservé. Doit valoir 0. |
| ContextHandle | ALPC_HANDLE | in | ALPC_HANDLE opaque renvoyé par NtAlpcCreateSecurityContext ; identifie le contexte QoS à libérer. |
IDs de syscalls par version de Windows
| Version de Windows | ID de syscall | Build |
|---|---|---|
| Win10 1507 | 0x7F | win10-1507 |
| Win10 1607 | 0x7F | win10-1607 |
| Win10 1703 | 0x80 | win10-1703 |
| Win10 1709 | 0x80 | win10-1709 |
| Win10 1803 | 0x81 | win10-1803 |
| Win10 1809 | 0x81 | win10-1809 |
| Win10 1903 | 0x81 | win10-1903 |
| Win10 1909 | 0x81 | win10-1909 |
| Win10 2004 | 0x83 | win10-2004 |
| Win10 20H2 | 0x83 | win10-20h2 |
| Win10 21H1 | 0x83 | win10-21h1 |
| Win10 21H2 | 0x83 | win10-21h2 |
| Win10 22H2 | 0x83 | win10-22h2 |
| Win11 21H2 | 0x83 | win11-21h2 |
| Win11 22H2 | 0x83 | win11-22h2 |
| Win11 23H2 | 0x83 | win11-23h2 |
| Win11 24H2 | 0x85 | win11-24h2 |
| Server 2016 | 0x7F | winserver-2016 |
| Server 2019 | 0x81 | winserver-2019 |
| Server 2022 | 0x83 | winserver-2022 |
| Server 2025 | 0x85 | winserver-2025 |
Module noyau
APIs liées
Stub du syscall
4C 8B D1 mov r10, rcx B8 85 00 00 00 mov eax, 0x85 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
Notes non documentées
ALPC supporte un modèle `SECURITY_QUALITY_OF_SERVICE` *en cache* : un client (ou serveur) appelle `NtAlpcCreateSecurityContext` une fois pour matérialiser un contexte QoS avec un token client figé, puis référence ce contexte par `ALPC_HANDLE` dans les `NtAlpcImpersonateClientOfPort` ultérieurs plutôt que de re-snapshoter le token à chaque fois. `NtAlpcDeleteSecurityContext` libère le contexte de façon permanente — le token snapshot est déréférencé, le slot de la table de contextes par-port est libéré, et toute impersonation en vol référençant le contexte commence à recevoir `STATUS_INVALID_HANDLE`. À coupler avec `NtAlpcRevokeSecurityContext`, qui garde l'entrée mais l'invalide ; la suppression est le destructeur.
Usage courant par les malwares
Primitive de ménage défensif — intérêt offensif limité. Le seul abus réaliste est un **use-after-free de race** où un attaquant force un serveur à supprimer un contexte de sécurité pendant qu'un autre thread sur le même port est en pleine impersonation. Le noyau ref-compte l'objet QoS sous-jacent, donc un UAF propre est dur à construire, mais quelques bugs historiques de port ALPC (`AlpcpCleanupPort`, env. 2017-2019) impliquaient un ordonnancement incorrect entre `NtAlpcDeleteSecurityContext` et send/receive concurrents — corrigés dans les cumulatives. Offensivement, l'appel peut aussi servir aux fuzzers ALPC pour vérifier que l'état par-contexte d'un serveur est bien démonté (détecteur de fuite).
Opportunités de détection
Pas un signal de détection utile pris isolément — tout serveur ALPC longue durée (RPCSS, LSASS, spoolsv, sihost) l'appelle de routine au gré des connexions. Le seul signal valable est un *ordre anormal* : suppression peu avant un crash serveur, ou suppression précédée d'une rafale inhabituelle de `NtAlpcImpersonateClientOfPort` contre le même handle de contexte — les deux suggèrent qu'on tâte un TOCTOU. Se concentrer sur la corrélation de cycle de vie en ETW plutôt que sur ce syscall directement.
Exemples de syscalls directs
cCached-QoS cleanup
// Server tears down a cached impersonation context once a client disconnects.
#include <windows.h>
#include <winternl.h>
typedef PVOID ALPC_HANDLE;
NTSTATUS NTAPI NtAlpcDeleteSecurityContext(HANDLE, ULONG, ALPC_HANDLE);
void ReleaseClientQos(HANDLE serverPort, ALPC_HANDLE ctx) {
if (ctx) {
NtAlpcDeleteSecurityContext(serverPort, 0, ctx);
}
}asmx64 direct stub (Win11 24H2)
; Direct syscall stub for NtAlpcDeleteSecurityContext (SSN 0x85 on Win11 24H2 / Server 2025)
NtAlpcDeleteSecurityContext PROC
mov r10, rcx ; PortHandle
mov eax, 85h ; SSN
syscall
ret
NtAlpcDeleteSecurityContext ENDPMappings MITRE ATT&CK
Last verified: 2026-05-20