> Windows Syscalls
ntoskrnl.exeT1055T1055.012T1055.013

NtMapViewOfSection

Mapea una vista de un objeto sección en el espacio de direcciones virtuales de un proceso objetivo.

Prototipo

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
);

Argumentos

NameTypeDirDescription
SectionHandleHANDLEinHandle al objeto sección obtenido vía NtCreateSection o NtOpenSection.
ProcessHandleHANDLEinHandle al proceso objetivo; la vista de la sección se mapeará en su espacio VA.
BaseAddressPVOID*in/outDirección base deseada (NULL deja que el kernel elija). Actualizada con la dirección mapeada al retornar.
ZeroBitsULONG_PTRinNúmero de bits altos en cero en BaseAddress. Típicamente 0.
CommitSizeSIZE_TinTamaño inicialmente confirmado para sección respaldada por pagefile. Ignorado en secciones imagen.
SectionOffsetPLARGE_INTEGERin/outDesplazamiento en la sección donde inicia la vista. Debe alinearse a 64 KB. NULL equivale a 0.
ViewSizePSIZE_Tin/outPuntero al tamaño de vista solicitado. 0 mapea desde el offset hasta el final de la sección.
InheritDispositionSECTION_INHERITinViewShare (1) se comparte con los hijos, ViewUnmap (2) no. ViewUnmap es la elección común.
AllocationTypeULONGinBanderas de asignación como MEM_RESERVE, MEM_TOP_DOWN, MEM_LARGE_PAGES. A menudo 0.
Win32ProtectULONGinProtección de página a aplicar a la vista, p. ej. PAGE_READWRITE, PAGE_EXECUTE_READ.

IDs de syscalls por versión de Windows

Versión 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

Módulo del kernel

ntoskrnl.exeNtMapViewOfSection (dispatches to MiMapViewOfSection)

APIs relacionadas

MapViewOfFileMapViewOfFileExNtCreateSectionNtOpenSectionNtUnmapViewOfSectionZwMapViewOfSection

Stub del 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

Notas no documentadas

`NtMapViewOfSection` es el punto de entrada userland de la familia `MiMapViewOfSection` del kernel. La SSN `0x28` ha sido estable en todos los builds Win10/11 lanzados. La memoria respaldada por sección es fundamentalmente distinta de `NtAllocateVirtualMemory`: las vistas se respaldan en un objeto `_SECTION` (archivo o pagefile), comparten páginas físicas entre procesos y aparecen en las VAD con los flags `SubsectionBased`/`MappedFile` en vez de `Private`. Esta naturaleza dual — mismos bytes visibles en dos espacios — es lo que la hace irresistible para inyección.

Uso común por malware

Fundamento de la inyección basada en secciones (inyección estilo `MapViewOfSection`, Process Doppelgänging, Process Ghosting, Transacted Hollowing, variantes Atom Bombing). Se crea una sección respaldada por pagefile vía `NtCreateSection`, se mapea localmente en RW, se copia el shellcode, y se vuelve a mapear la misma sección en el proceso remoto en RX. Los bytes aparecen ejecutables en el objetivo sin ningún `WriteProcessMemory` explícito. Usado por loaders de FIN7/Carbanak, BumbleBee, el Process Doppelgänging original de enSilo y varios loaders RAT. También es la columna vertebral del side-loading vía envenenamiento de `KnownDlls`.

Oportunidades de detección

La inyección por sección elude deliberadamente la telemetría de `NtWriteVirtualMemory` y `NtAllocateVirtualMemory` que vigilan los EDR. Sin embargo, Sysmon Event ID 7 (`Image Load`) y Event ID 8 (`CreateRemoteThread`) siguen disparándose sobre las consecuencias. ETW Threat Intelligence emite `EtwTiLogMapExecVm` siempre que se mapea una vista ejecutable en un proceso remoto — esa es la señal dedicada. El análisis VAD vía PE-Sieve marca regiones `MappedImage` cuyo archivo de respaldo ha sido eliminado (Process Ghosting) o cuyo nombre de sección no coincide con una KnownDll legítima. `ObRegisterCallbacks` sobre `*PsProcessType` permite a los drivers quitar derechos del handle de sección antes de poder mapearlo entre procesos.

Ejemplos de syscalls directos

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, ... */);

Mapeos MITRE ATT&CK

Last verified: 2026-05-20