NtSetInformationJobObject
Setzt eine Policy oder ein Limit auf einem Job Object über eine der JOBOBJECTINFOCLASS-Informationsklassen.
Prototyp
NTSTATUS NtSetInformationJobObject( HANDLE JobHandle, JOBOBJECTINFOCLASS JobObjectInformationClass, PVOID JobObjectInformation, ULONG JobObjectInformationLength );
Argumente
| Name | Type | Dir | Description |
|---|---|---|---|
| JobHandle | HANDLE | in | Handle auf das Job Object (JOB_OBJECT_SET_ATTRIBUTES erforderlich). |
| JobObjectInformationClass | JOBOBJECTINFOCLASS | in | Wählt die Policy: JobObjectExtendedLimitInformation, JobObjectBasicUIRestrictions, JobObjectAssociateCompletionPortInformation, JobObjectCpuRateControlInformation usw. |
| JobObjectInformation | PVOID | in | Zeiger auf die klassenspezifische Struktur (z. B. JOBOBJECT_EXTENDED_LIMIT_INFORMATION). |
| JobObjectInformationLength | ULONG | in | Größe der Struktur unter JobObjectInformation in Bytes. Muss exakt zur Klasse passen. |
Syscall-IDs pro Windows-Version
| Windows-Version | Syscall-ID | Build |
|---|---|---|
| Win10 1507 | 0x17B | win10-1507 |
| Win10 1607 | 0x184 | win10-1607 |
| Win10 1703 | 0x18A | win10-1703 |
| Win10 1709 | 0x18D | win10-1709 |
| Win10 1803 | 0x18F | win10-1803 |
| Win10 1809 | 0x190 | win10-1809 |
| Win10 1903 | 0x191 | win10-1903 |
| Win10 1909 | 0x191 | win10-1909 |
| Win10 2004 | 0x197 | win10-2004 |
| Win10 20H2 | 0x197 | win10-20h2 |
| Win10 21H1 | 0x197 | win10-21h1 |
| Win10 21H2 | 0x199 | win10-21h2 |
| Win10 22H2 | 0x199 | win10-22h2 |
| Win11 21H2 | 0x1A2 | win11-21h2 |
| Win11 22H2 | 0x1A6 | win11-22h2 |
| Win11 23H2 | 0x1A6 | win11-23h2 |
| Win11 24H2 | 0x1A9 | win11-24h2 |
| Server 2016 | 0x184 | winserver-2016 |
| Server 2019 | 0x190 | winserver-2019 |
| Server 2022 | 0x19F | winserver-2022 |
| Server 2025 | 0x1A9 | winserver-2025 |
Kernel-Modul
Verwandte APIs
Syscall-Stub
4C 8B D1 mov r10, rcx B8 A9 01 00 00 mov eax, 0x1A9 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
NtSetInformationJobObject ist der Policy-Anwendungs-Syscall für Jobs. Die Enum JobObjectInformationClass wählt, was gesetzt wird: JobObjectExtendedLimitInformation (das Arbeitstier — Limits für Prozesszahl, Working-Set, JOB_OBJECT_LIMIT_KILL_ON_JOB_CLOSE, JOB_OBJECT_LIMIT_BREAKAWAY_OK, JOB_OBJECT_LIMIT_SILENT_BREAKAWAY_OK), JobObjectBasicUIRestrictions (Clipboard, USER-Handles, Systemparameter sperren — von jeder modernen Sandbox genutzt), JobObjectAssociateCompletionPortInformation (das Job in eine Event-Quelle für JOB_OBJECT_MSG_*-Benachrichtigungen auf einem IOCP verwandeln — „event-driven" Monitoring von Prozessbeendigungen und Limit-Verstößen), JobObjectCpuRateControlInformation und die Win10-Familie `JobObjectNetRateControlInformation`. Die SSN driftet fast bei jedem Feature-Update.
Häufige Malware-Nutzung
Überwiegend defensiv. Das offensive Interesse konzentriert sich auf zwei Ecken: (1) JOB_OBJECT_LIMIT_KILL_ON_JOB_CLOSE auf einem Job mit den Helfer-Prozessen eines Implants setzen, sodass das Schließen des Implant-Handles alle Artefakte beerdigt — eine Sauberer-Ausstieg-Primitive; (2) JOB_OBJECT_LIMIT_BREAKAWAY_OK oder JOB_OBJECT_LIMIT_SILENT_BREAKAWAY_OK auf einem kontrollierten Job kippen, damit Kindprozesse entkommen — genau das tun Sandbox-Escape-Exploits, sobald sie ausreichend Zugriff auf das Job haben. JobObjectAssociateCompletionPortInformation kann auch von Überwachungs-Malware missbraucht werden, um den Lebenszyklus von kontrollierten Prozessen zu beobachten.
Erkennungsmöglichkeiten
ETW Microsoft-Windows-Kernel-Process und Microsoft-Windows-Win32k legen einige Job-Policy-Änderungen offen, doch nicht alle Klassen sind gleich instrumentiert. Hochsignalziel ist JobObjectExtendedLimitInformation mit KILL_ON_JOB_CLOSE oder BREAKAWAY_OK, gesetzt durch einen Nicht-Sandbox-Prozess. EDRs, die ntdll!NtSetInformationJobObject hooken, sollten die Klasse dekodieren und (a) ungewöhnliche Setter von BREAKAWAY_OK (Sandbox-Escape-Vorbereitung) sowie (b) KILL_ON_JOB_CLOSE auf einem Job mit den eigenen Helfern des aufrufenden Prozesses (Sauberer-Ausstieg-Infrastruktur) flaggen. Mit NtAssignProcessToJobObject-Events paaren, um die vollständige Sandbox-Topologie zu rekonstruieren.
Direkte Syscall-Beispiele
asmx64 direct stub (Win11 24H2 SSN)
; Direct syscall stub for NtSetInformationJobObject (SSN 0x1A9 on Win11 24H2 / Server 2025)
NtSetInformationJobObject PROC
mov r10, rcx ; syscall convention
mov eax, 1A9h ; SSN for win11-24h2
syscall
ret
NtSetInformationJobObject ENDPcSandbox-spawn skeleton (step 3 — apply kill-on-close)
// Make sure every process in the job dies when the last handle to it closes.
JOBOBJECT_EXTENDED_LIMIT_INFORMATION limits = { 0 };
limits.BasicLimitInformation.LimitFlags = JOB_OBJECT_LIMIT_KILL_ON_JOB_CLOSE
| JOB_OBJECT_LIMIT_DIE_ON_UNHANDLED_EXCEPTION;
NTSTATUS s = NtSetInformationJobObject(hJob,
JobObjectExtendedLimitInformation,
&limits,
sizeof(limits));
// Optional: associate an IOCP for event-driven monitoring
JOBOBJECT_ASSOCIATE_COMPLETION_PORT cp = { (PVOID)0xCAFE, hIoCompletion };
NtSetInformationJobObject(hJob,
JobObjectAssociateCompletionPortInformation,
&cp, sizeof(cp));rustwindows-sys + naked syscall stub
// Cargo: windows-sys = "0.59" (Win32_System_JobObjects)
use std::arch::asm;
#[unsafe(naked)]
unsafe extern "system" fn nt_set_information_job_object_stub() {
asm!(
"mov r10, rcx",
"mov eax, 0x1A9", // Win11 24H2; resolve dynamically for other builds
"syscall",
"ret",
options(noreturn),
);
}MITRE ATT&CK-Mappings
Last verified: 2026-05-20