> Windows Syscalls
ntoskrnl.exeT1055T1055.012T1055.013

NtMapViewOfSection

Mappe une vue d'un objet section dans l'espace d'adressage virtuel d'un processus cible.

Prototype

NTSTATUS NtMapViewOfSection(
  HANDLE          SectionHandle,
  HANDLE          ProcessHandle,
  PVOID          *BaseAddress,
  ULONG_PTR       ZeroBits,
  SIZE_T          CommitSize,
  PLARGE_INTEGER  SectionOffset,
  PSIZE_T         ViewSize,
  SECTION_INHERIT InheritDisposition,
  ULONG           AllocationType,
  ULONG           Win32Protect
);

Arguments

NameTypeDirDescription
SectionHandleHANDLEinHandle vers l'objet section obtenu via NtCreateSection ou NtOpenSection.
ProcessHandleHANDLEinHandle vers le processus cible ; la vue de la section y sera mappée.
BaseAddressPVOID*in/outAdresse de base souhaitée (NULL laisse le noyau choisir). Mise à jour avec l'adresse mappée au retour.
ZeroBitsULONG_PTRinNombre de bits de poids fort à zéro dans BaseAddress. Typiquement 0.
CommitSizeSIZE_TinTaille initialement validée pour une section sur fichier d'échange. Ignorée pour les sections image.
SectionOffsetPLARGE_INTEGERin/outDécalage dans la section où débute la vue. Doit être aligné sur 64 Ko. NULL signifie 0.
ViewSizePSIZE_Tin/outPointeur vers la taille de vue demandée. 0 mappe depuis l'offset jusqu'à la fin de la section.
InheritDispositionSECTION_INHERITinViewShare (1) partage avec les enfants, ViewUnmap (2) non. ViewUnmap est le choix courant.
AllocationTypeULONGinDrapeaux d'allocation comme MEM_RESERVE, MEM_TOP_DOWN, MEM_LARGE_PAGES. Souvent 0.
Win32ProtectULONGinProtection de page à appliquer à la vue, ex. PAGE_READWRITE, PAGE_EXECUTE_READ.

IDs de syscalls par version de Windows

Version de WindowsID de syscallBuild
Win10 15070x28win10-1507
Win10 16070x28win10-1607
Win10 17030x28win10-1703
Win10 17090x28win10-1709
Win10 18030x28win10-1803
Win10 18090x28win10-1809
Win10 19030x28win10-1903
Win10 19090x28win10-1909
Win10 20040x28win10-2004
Win10 20H20x28win10-20h2
Win10 21H10x28win10-21h1
Win10 21H20x28win10-21h2
Win10 22H20x28win10-22h2
Win11 21H20x28win11-21h2
Win11 22H20x28win11-22h2
Win11 23H20x28win11-23h2
Win11 24H20x28win11-24h2
Server 20160x28winserver-2016
Server 20190x28winserver-2019
Server 20220x28winserver-2022
Server 20250x28winserver-2025

Module noyau

ntoskrnl.exeNtMapViewOfSection (dispatches to MiMapViewOfSection)

APIs liées

MapViewOfFileMapViewOfFileExNtCreateSectionNtOpenSectionNtUnmapViewOfSectionZwMapViewOfSection

Stub du syscall

4C 8B D1            mov r10, rcx
B8 28 00 00 00      mov eax, 0x28
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

`NtMapViewOfSection` est le point d'entrée userland de la famille `MiMapViewOfSection` du noyau. Le SSN `0x28` est stable sur tous les builds Win10/11 livrés. La mémoire adossée à une section est fondamentalement différente de `NtAllocateVirtualMemory` : les vues sont adossées à un objet `_SECTION` (fichier ou pagefile), partagent les pages physiques entre processus et apparaissent dans les VAD avec les flags `SubsectionBased`/`MappedFile` plutôt que `Private`. Cette double nature — mêmes octets visibles dans deux espaces d'adressage — est ce qui la rend irrésistible pour l'injection.

Usage courant par les malwares

Fondation de l'injection par section (injection style `MapViewOfSection`, Process Doppelgänging, Process Ghosting, Transacted Hollowing, variantes Atom Bombing). On crée une section adossée au pagefile via `NtCreateSection`, on la mappe en local en RW, on copie le shellcode, puis on remappe la même section dans le processus distant en RX. Les octets apparaissent exécutables dans la cible sans aucun `WriteProcessMemory` explicite. Utilisé par les loaders FIN7/Carbanak, BumbleBee, le Process Doppelgänging original d'enSilo et divers loaders RAT. C'est aussi la colonne vertébrale du side-loading via empoisonnement `KnownDlls`.

Opportunités de détection

L'injection par section évite délibérément la télémétrie `NtWriteVirtualMemory` et `NtAllocateVirtualMemory` sur laquelle se basent les EDR. Cependant, Sysmon Event ID 7 (`Image Load`) et Event ID 8 (`CreateRemoteThread`) se déclenchent toujours sur les conséquences. ETW Threat Intelligence émet `EtwTiLogMapExecVm` dès qu'une vue exécutable est mappée dans un processus distant — c'est le signal dédié. L'analyse VAD via PE-Sieve flagge les régions `MappedImage` dont le fichier d'origine a été supprimé (Process Ghosting) ou dont le nom de section ne correspond à aucune KnownDll légitime. `ObRegisterCallbacks` sur `*PsProcessType` permet aux pilotes de retirer des droits au handle de section avant son mapping inter-processus.

Exemples de syscalls directs

asmx64 direct stub

; Direct syscall stub for NtMapViewOfSection (SSN 0x28, stable across all Win10/11)
NtMapViewOfSection PROC
    mov  r10, rcx          ; syscall convention
    mov  eax, 28h          ; SSN
    syscall
    ret
NtMapViewOfSection ENDP

cPagefile-backed cross-process map

// Section injection: same physical pages mapped RW locally, RX in target.
HANDLE hSection = NULL;
LARGE_INTEGER max_size = { .QuadPart = 0x10000 };
NtCreateSection(&hSection, SECTION_ALL_ACCESS, NULL, &max_size,
                PAGE_EXECUTE_READWRITE, SEC_COMMIT, NULL);

PVOID  local_view = NULL;
SIZE_T view_size  = 0;
NtMapViewOfSection(hSection, NtCurrentProcess(), &local_view, 0, 0, NULL,
                   &view_size, ViewUnmap, 0, PAGE_READWRITE);
memcpy(local_view, payload, payload_len);

PVOID  remote_view = NULL;
view_size = 0;
NtMapViewOfSection(hSection, hRemote, &remote_view, 0, 0, NULL,
                   &view_size, ViewUnmap, 0, PAGE_EXECUTE_READ);

cHell's Gate dynamic lookup

// SSN 0x28 across every supported build, but still better to resolve dynamically.
DWORD ssn = GetSyscallNumber(GetProcAddress(GetModuleHandleA("ntdll.dll"),
                                            "NtMapViewOfSection"));
set_ssn(ssn);
indirect_syscall_invoke(/* hSection, hRemote, &remote_view, ... */);

Mappings MITRE ATT&CK

Last verified: 2026-05-20