> Windows Syscalls
ntoskrnl.exeT1106T1564T1070

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

NameTypeDirDescription
JobHandleHANDLEinHandle auf das Job Object (JOB_OBJECT_SET_ATTRIBUTES erforderlich).
JobObjectInformationClassJOBOBJECTINFOCLASSinWählt die Policy: JobObjectExtendedLimitInformation, JobObjectBasicUIRestrictions, JobObjectAssociateCompletionPortInformation, JobObjectCpuRateControlInformation usw.
JobObjectInformationPVOIDinZeiger auf die klassenspezifische Struktur (z. B. JOBOBJECT_EXTENDED_LIMIT_INFORMATION).
JobObjectInformationLengthULONGinGröße der Struktur unter JobObjectInformation in Bytes. Muss exakt zur Klasse passen.

Syscall-IDs pro Windows-Version

Windows-VersionSyscall-IDBuild
Win10 15070x17Bwin10-1507
Win10 16070x184win10-1607
Win10 17030x18Awin10-1703
Win10 17090x18Dwin10-1709
Win10 18030x18Fwin10-1803
Win10 18090x190win10-1809
Win10 19030x191win10-1903
Win10 19090x191win10-1909
Win10 20040x197win10-2004
Win10 20H20x197win10-20h2
Win10 21H10x197win10-21h1
Win10 21H20x199win10-21h2
Win10 22H20x199win10-22h2
Win11 21H20x1A2win11-21h2
Win11 22H20x1A6win11-22h2
Win11 23H20x1A6win11-23h2
Win11 24H20x1A9win11-24h2
Server 20160x184winserver-2016
Server 20190x190winserver-2019
Server 20220x19Fwinserver-2022
Server 20250x1A9winserver-2025

Kernel-Modul

ntoskrnl.exeNtSetInformationJobObject

Verwandte APIs

SetInformationJobObjectQueryInformationJobObjectCreateJobObjectWAssignProcessToJobObjectNtCreateJobObjectNtAssignProcessToJobObjectNtQueryInformationJobObject

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.

Erkennungs­mö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 ENDP

cSandbox-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