NtOpenPartition
Öffnet ein bestehendes Memory-Partition-Objekt anhand des Namens und liefert ein Handle für Verwaltung oder Prozess-Anbindung.
Prototyp
NTSTATUS NtOpenPartition( PHANDLE PartitionHandle, ACCESS_MASK DesiredAccess, POBJECT_ATTRIBUTES ObjectAttributes );
Argumente
| Name | Type | Dir | Description |
|---|---|---|---|
| PartitionHandle | PHANDLE | out | Empfängt das Handle auf das geöffnete Partitionsobjekt. |
| DesiredAccess | ACCESS_MASK | in | Angeforderte Zugriffsmaske; z. B. MEMORY_PARTITION_QUERY_ACCESS (0x0001) oder MEMORY_PARTITION_MODIFY_ACCESS (0x0002). |
| ObjectAttributes | POBJECT_ATTRIBUTES | in | Object-Manager-Pfad der Partition, z. B. \KernelObjects\Sandbox1. |
Syscall-IDs pro Windows-Version
| Windows-Version | Syscall-ID | Build |
|---|---|---|
| Win10 1507 | 0x112 | win10-1507 |
| Win10 1607 | 0x117 | win10-1607 |
| Win10 1703 | 0x11B | win10-1703 |
| Win10 1709 | 0x11D | win10-1709 |
| Win10 1803 | 0x11F | win10-1803 |
| Win10 1809 | 0x120 | win10-1809 |
| Win10 1903 | 0x121 | win10-1903 |
| Win10 1909 | 0x121 | win10-1909 |
| Win10 2004 | 0x126 | win10-2004 |
| Win10 20H2 | 0x126 | win10-20h2 |
| Win10 21H1 | 0x126 | win10-21h1 |
| Win10 21H2 | 0x127 | win10-21h2 |
| Win10 22H2 | 0x127 | win10-22h2 |
| Win11 21H2 | 0x12D | win11-21h2 |
| Win11 22H2 | 0x12F | win11-22h2 |
| Win11 23H2 | 0x12F | win11-23h2 |
| Win11 24H2 | 0x131 | win11-24h2 |
| Server 2016 | 0x117 | winserver-2016 |
| Server 2019 | 0x120 | winserver-2019 |
| Server 2022 | 0x12C | winserver-2022 |
| Server 2025 | 0x131 | winserver-2025 |
Kernel-Modul
Verwandte APIs
Syscall-Stub
4C 8B D1 mov r10, rcx B8 31 01 00 00 mov eax, 0x131 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
`Open`-Gegenstück zu `NtCreatePartition`. Die Auflösung läuft rein über den Object-Manager: die Partition muss bereits unter ihrem Namespace-Pfad existieren (üblicherweise `\KernelObjects\…`), und der aufrufende Token muss den Security-Descriptor der Partition für die angeforderten Rechte erfüllen. Anders als `NtCreatePartition` verlangt das Öffnen zur Abfrage/Inspektion kein `SeLockMemoryPrivilege` — nur Modify-/Attach-Pfade tun das. Die dynamische Syscall-Auflösung via Hell's Gate ist unkompliziert, weil die SSN vorhersehbar driftet.
Häufige Malware-Nutzung
Praktisch null direkter Missbrauch in Commodity-Malware. Ein Verteidiger oder Forscher könnte den Aufruf nutzen, um Hyper-V-Container-Partitionen auf einem Host zu introspektieren, und ein anspruchsvolles Implant könnte *theoretisch* eine bereits existierende User-Partition nutzen, um seine Allokationen unterzubringen und die vom Host-EDR gesehenen Working-Set-Zähler zu verfälschen — der Gewinn gegenüber simplem `NtAllocateVirtualMemory` ist im Verhältnis zum Privileg-Kostenaufwand vernachlässigbar.
Erkennungsmöglichkeiten
Mit dem `NtCreatePartition`-Signal koppeln: das Öffnen einer benannten Partition, die der Operator nicht selbst erzeugt hat, ist außerhalb von vmcompute/vmwp/SystemSettings anomal. Das ETW-Event 9 (`PartitionOpened`) des Providers `Microsoft-Windows-Kernel-Memory` trägt das aufrufende Image und den Partitionsobjekt-Namen. In den meisten Produktionsumgebungen ist die Allowlist hier leer.
Direkte Syscall-Beispiele
cOpen an existing partition for query
#include <windows.h>
#include <winternl.h>
#define MEMORY_PARTITION_QUERY_ACCESS 0x0001
typedef NTSTATUS (NTAPI* pNtOpenPartition)(
PHANDLE, ACCESS_MASK, POBJECT_ATTRIBUTES);
HANDLE open_partition(LPCWSTR name) {
UNICODE_STRING us;
RtlInitUnicodeString(&us, name);
OBJECT_ATTRIBUTES oa;
InitializeObjectAttributes(&oa, &us, OBJ_CASE_INSENSITIVE, NULL, NULL);
pNtOpenPartition f = (pNtOpenPartition)GetProcAddress(
GetModuleHandleA("ntdll.dll"), "NtOpenPartition");
HANDLE h = NULL;
f(&h, MEMORY_PARTITION_QUERY_ACCESS, &oa);
return h;
}asmx64 direct stub (Win11 24H2, SSN 0x131)
NtOpenPartition PROC
mov r10, rcx
mov eax, 131h
syscall
ret
NtOpenPartition ENDPMITRE ATT&CK-Mappings
Last verified: 2026-05-20