IntermedioWindowsAPIanálisis estáticobehavioral analysisreferenciacheat sheet

Windows API Calls Más Usadas por Malware: Guía de Referencia para Analistas

Catálogo completo de las Windows APIs más usadas por malware, organizadas por comportamiento: inyección de código, persistencia, evasión, exfiltración, cifrado, keylogging y comunicación C2. Cada API con su DLL, descripción y nivel de sospecha.

MalwareIntel Research··10 min lectura
Serie: Malware en Windows — Parte 4

Las APIs como huella dactilar del malware

Cada acción que un programa realiza en Windows pasa por una API: abrir un archivo, crear un proceso, escribir en el registro, conectarse a Internet, cifrar datos. El malware no es diferente. Las APIs que utiliza son un mapa de sus capacidades.

Este artículo es una referencia organizada por comportamiento: qué APIs indican inyección de código, cuáles indican persistencia, cuáles indican evasión. Para cada API, la DLL que la exporta, una descripción de su uso legítimo vs malicioso, y el nivel de sospecha cuando aparece en un análisis.

Inyección de código y manipulación de procesos

APIs críticas de inyección

APIDLLUso maliciosoSospecha
OpenProcesskernel32Obtener handle de otro proceso para inyecciónMedia (legítimo en debuggers, task managers)
VirtualAllocExkernel32Reservar memoria en otro procesoAlta (casi exclusivo de inyección)
WriteProcessMemorykernel32Escribir código/datos en otro procesoMuy alta
CreateRemoteThreadkernel32Crear hilo de ejecución en otro procesoMuy alta
NtUnmapViewOfSectionntdllVaciar la imagen de un proceso (hollowing)Muy alta
SetThreadContextkernel32Modificar registros de un hilo (cambiar entry point)Alta
ResumeThreadkernel32Reanudar hilo suspendido tras inyecciónMedia (combinado con CreateProcess SUSPENDED = alta)
QueueUserAPCkernel32Encolar APC en otro hilo (APC injection)Alta cuando es cross-process
NtQueueApcThreadntdllVersión nativa de QueueUserAPCAlta
RtlCreateUserThreadntdllAlternativa a CreateRemoteThreadAlta

Patrón clásico de inyección

La secuencia OpenProcess + VirtualAllocEx + WriteProcessMemory + CreateRemoteThread es el patrón más reconocible de DLL injection / shellcode injection. Si estas cuatro APIs aparecen en las imports de un PE, la probabilidad de que sea malicioso es muy alta.

Persistencia

APIDLLMecanismoATT&CK
RegSetValueExA/Wadvapi32Escritura en claves de registro (Run keys, Services)T1547.001
RegCreateKeyExA/Wadvapi32Creación de claves de registroT1547.001
CreateServiceA/Wadvapi32Crear un servicio WindowsT1543.003
ChangeServiceConfigA/Wadvapi32Modificar servicio existenteT1543.003
SchRpcRegisterTasktaskschd (COM)Crear scheduled task programáticamenteT1053.005
CopyFileA/Wkernel32Copiar malware a ubicación de persistenciaVariable
MoveFileExA/W (MOVEFILE_DELAY_UNTIL_REBOOT)kernel32Mover archivo al reiniciar (evasión)T1547
SetWindowsHookExA/Wuser32Hooking global (keylogger, inyección vía mensaje)T1056.001
SHGetFolderPathA/Wshell32Obtener rutas como Startup folderT1547.001

Claves de registro usadas para persistencia

HKCU\Software\Microsoft\Windows\CurrentVersion\Run
HKLM\Software\Microsoft\Windows\CurrentVersion\Run
HKCU\Software\Microsoft\Windows\CurrentVersion\RunOnce
HKLM\SYSTEM\CurrentControlSet\Services\[nombre_servicio]
HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders
HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\Shell

Evasión de defensas

APIDLLUso maliciosoATT&CK
IsDebuggerPresentkernel32Detectar si se ejecuta en debuggerT1622
CheckRemoteDebuggerPresentkernel32Detectar debugger remotoT1622
NtQueryInformationProcessntdllQuery ProcessDebugPort, ProcessDebugFlagsT1622
GetTickCount / QueryPerformanceCounterkernel32Timing checks anti-sandboxT1497.003
Sleep / NtDelayExecutionkernel32/ntdllRetrasar ejecución para evadir sandbox (time-based)T1497.003
VirtualProtectkernel32Cambiar permisos de memoria (RW a RWX para execute)T1055
GetSystemInfokernel32Detectar número de CPUs (sandbox suele tener 1-2)T1497.001
GlobalMemoryStatusExkernel32Detectar RAM baja (sandbox)T1497.001
EnumProcessespsapiListar procesos (buscar herramientas de análisis)T1057
GetModuleHandleA("sbiedll.dll")kernel32Detectar SandboxieT1497.001
CreateToolhelp32Snapshotkernel32Enumerar procesos/módulos (buscar AV/análisis)T1057

Anti-debugging: patrón común

# Patron anti-debug tipico (pseudocodigo)
if IsDebuggerPresent():
    exit()

# Check mas avanzado via NtQueryInformationProcess
debug_port = NtQueryInformationProcess(
    GetCurrentProcess(), ProcessDebugPort, ...)
if debug_port != 0:
    exit()

# Timing check
t1 = GetTickCount()
# ... codigo normal ...
t2 = GetTickCount()
if (t2 - t1) > threshold:  # Ejecucion demasiado lenta = stepping en debugger
    exit()

Acceso a archivos y sistema de archivos

APIDLLUso maliciosoSospecha
CreateFileA/Wkernel32Abrir/crear archivos (payload, configuración)Baja (muy común)
ReadFile / WriteFilekernel32Leer/escribir archivosBaja
FindFirstFileA/Wkernel32Enumerar archivos (ransomware)Media (alta si combina con cifrado)
FindNextFileA/Wkernel32Continuar enumeraciónMedia
DeleteFileA/Wkernel32Eliminar archivo original (ransomware, cleanup)Media
GetLogicalDriveStringsAkernel32Enumerar drives (ransomware busca todos los discos)Alta
GetDriveTypeAkernel32Identificar tipo de drive (local, red, removible)Media
MoveFileA/Wkernel32Renombrar archivos (cambiar extensión)Media (alta en contexto ransomware)

Patrón de ransomware

GetLogicalDriveStrings → FindFirstFile → FindNextFile (recursivo)
  → CreateFile → ReadFile → CryptEncrypt → WriteFile → CloseHandle
  → MoveFile (renombrar con nueva extension)
  → DeleteFile (eliminar original)

Criptografía

APIDLLUso maliciosoContexto
CryptAcquireContextadvapi32Inicializar proveedor criptográficoRansomware, comunicación cifrada
CryptGenKeyadvapi32Generar clave criptográficaRansomware
CryptEncryptadvapi32Cifrar datosRansomware
CryptDecryptadvapi32Descifrar datosDescifrar configuración, payload
CryptImportKeyadvapi32Importar clave (clave pública RSA del atacante)Ransomware
CryptGenRandomadvapi32Generar bytes aleatorios (para claves)Ransomware
BCryptEncryptbcryptCNG: cifrar (API moderna)Ransomware moderno
BCryptGenerateSymmetricKeybcryptCNG: generar clave simétricaRansomware moderno
BCryptGenRandombcryptCNG: CSPRNGGeneración de claves

Comunicación de red

APIDLLUso maliciosoProtocolo
InternetOpenAwininetInicializar sesión de InternetHTTP/HTTPS
InternetConnectAwininetConectar a servidor C2HTTP/HTTPS
HttpOpenRequestAwininetCrear request HTTPHTTP/HTTPS
HttpSendRequestAwininetEnviar request (beacon, exfiltración)HTTP/HTTPS
InternetReadFilewininetLeer respuesta (comandos del C2)HTTP/HTTPS
URLDownloadToFileAurlmonDescargar archivo directamente a discoHTTP/HTTPS
WSAStartupws2_32Inicializar WinsockTCP/UDP raw
socket / connect / send / recvws2_32Comunicación TCP/UDP directaTCP/UDP
DnsQuery_AdnsapiQuery DNS (DNS tunneling, DGA)DNS
WinHttpOpenwinhttpAlternativa a WinINet para HTTPHTTP/HTTPS

Patrón de C2 beacon

InternetOpen → InternetConnect → HttpOpenRequest → HttpSendRequest
  → InternetReadFile (leer comando)
  → [ejecutar comando]
  → HttpSendRequest (enviar resultado)
  → Sleep(intervalo)
  → [repetir]

Credential Access

APIDLLUso maliciosoATT&CK
OpenProcessTokenadvapi32Abrir token de proceso para manipulaciónT1134
AdjustTokenPrivilegesadvapi32Habilitar privilegios (SeDebugPrivilege)T1134.001
LookupPrivilegeValueAadvapi32Buscar valor de privilegio por nombreT1134
LsaRetrievePrivateDataadvapi32Acceder a secretos de LSAT1003.004
CredEnumerateAadvapi32Enumerar credenciales almacenadasT1555.004
SamConnect / SamEnumerateUsersInDomainsamlibAcceso directo a SAM databaseT1003.002
MiniDumpWriteDumpdbghelpDump de proceso (LSASS)T1003.001

Mimikatz pattern

Mimikatz accede a LSASS (Local Security Authority Subsystem Service) para extraer credenciales. El patrón de APIs:

OpenProcess(PROCESS_VM_READ | PROCESS_QUERY_INFORMATION, lsass_pid)
  → MiniDumpWriteDump()     # Volcar memoria de LSASS a archivo
  # O alternativamente:
  → ReadProcessMemory()      # Leer directamente de la memoria de LSASS
  → [parsear estructuras de credenciales en el dump]

Captura de input (keylogging, screenshots)

APIDLLUso maliciosoATT&CK
SetWindowsHookExA(WH_KEYBOARD_LL)user32Hook global de teclado (keylogger)T1056.001
GetAsyncKeyStateuser32Polling de estado de teclas (keylogger alternativo)T1056.001
GetClipboardDatauser32Leer contenido del portapapelesT1115
BitBltgdi32Captura de pantalla (screenshot)T1113
GetDC / CreateCompatibleDCuser32/gdi32Preparar contexto para screenshotT1113
GetForegroundWindowuser32Identificar ventana activa (logging contextual)T1010
GetWindowTextAuser32Obtener título de ventana (registrar app activa)T1010

Nivel nativo: ntdll y syscalls directas

Por qué el malware usa ntdll directamente

Las APIs de kernel32 son wrappers que internamente llaman a ntdll. Los EDRs hookean las funciones de kernel32 y ntdll para monitorizar comportamiento. El malware avanzado bypasea estos hooks:

Nivel 1: Llamar a ntdll directamente (en vez de kernel32)

// En vez de: CreateRemoteThread (kernel32)
// Usar: NtCreateThreadEx (ntdll) - bypasea hook en kernel32

Nivel 2: Syscall directo (en vez de ntdll)

; En vez de llamar a NtAllocateVirtualMemory en ntdll (donde el EDR tiene hook)
; Ejecutar la syscall directamente:
mov r10, rcx
mov eax, 0x18        ; Syscall number de NtAllocateVirtualMemory
syscall              ; Invocar directamente al kernel

Nivel 3: Indirect syscall

; Saltar al stub de syscall DENTRO de ntdll pero DESPUES del hook del EDR
; El EDR hookea los primeros bytes de la funcion en ntdll
; Si saltas al 'syscall' instruction dentro de ntdll, bypaseas el hook

Herramientas que automatizan syscalls directas

HerramientaDescripción
SysWhispersGenera stubs de syscall para compilar directamente en el malware
SysWhispers2/3Versiones mejoradas con indirect syscalls
HellsGateResuelve syscall numbers en runtime leyendo ntdll en memoria
Halo's GateVariante que recupera syscall numbers incluso si ntdll está hookeada
RecycledGateCombina técnicas para máxima evasión

Tabla resumen: APIs por nivel de sospecha

Sospecha CRITICA (casi seguro malicioso si aparecen juntas)

VirtualAllocEx + WriteProcessMemory + CreateRemoteThread
NtUnmapViewOfSection + SetThreadContext + ResumeThread
MiniDumpWriteDump (con target = lsass.exe)
CryptEncrypt + FindFirstFile + GetLogicalDriveStrings

Sospecha ALTA

CreateRemoteThread (cross-process)
QueueUserAPC (cross-process)
SetWindowsHookEx(WH_KEYBOARD_LL)
AdjustTokenPrivileges (SeDebugPrivilege)
URLDownloadToFile

Sospecha MEDIA (depende del contexto)

RegSetValueEx (Run keys)
CreateService
InternetOpen + HttpSendRequest
FindFirstFile + FindNextFile (masivo)
GetTickCount + Sleep (timing checks)

Fuentes y referencias

Preguntas frecuentes

Artículos relacionados

Este contenido tiene fines exclusivamente educativos y de investigación en ciberseguridad defensiva. No se proporcionan binarios maliciosos ni payloads ejecutables. El uso indebido de esta información es responsabilidad exclusiva del usuario. Leer disclaimer completo.