Common API used in Malware
Last updated
Last updated
Aprende y practica Hacking en AWS:HackTricks Training AWS Red Team Expert (ARTE) Aprende y practica Hacking en GCP: HackTricks Training GCP Red Team Expert (GRTE)
socket()
WSAStratup()
bind()
bind()
listen()
listen()
accept()
accept()
connect()
connect()
read()/recv()
recv()
write()
send()
shutdown()
WSACleanup()
RegCreateKeyEx()
GetTempPath()
OpenSCManager
RegOpenKeyEx()
CopyFile()
CreateService()
RegSetValueEx()
CreateFile()
StartServiceCtrlDispatcher()
RegDeleteKeyEx()
WriteFile()
RegGetValue()
ReadFile()
WinCrypt
CryptAcquireContext()
CryptGenKey()
CryptDeriveKey()
CryptDecrypt()
CryptReleaseContext()
IsDebuggerPresent()
CPUID()
GetSystemInfo()
IN()
GlobalMemoryStatusEx()
GetVersion()
CreateToolhelp32Snapshot [Verificar si un proceso está en ejecución]
CreateFileW/A [Verificar si un archivo existe]
VirtualAlloc
Asignar memoria (empaquetadores)
VirtualProtect
Cambiar permisos de memoria (empaquetador otorgando permiso de ejecución a una sección)
ReadProcessMemory
Inyección en procesos externos
WriteProcessMemoryA/W
Inyección en procesos externos
NtWriteVirtualMemory
CreateRemoteThread
Inyección de DLL/proceso...
NtUnmapViewOfSection
QueueUserAPC
CreateProcessInternalA/W
CreateProcessA/W
ShellExecute
WinExec
ResumeThread
NtResumeThread
GetAsyncKeyState() -- Registro de teclas
SetWindowsHookEx -- Registro de teclas
GetForeGroundWindow -- Obtener el nombre de la ventana en ejecución (o el sitio web de un navegador)
LoadLibrary() -- Importar biblioteca
GetProcAddress() -- Importar biblioteca
CreateToolhelp32Snapshot() -- Listar procesos en ejecución
GetDC() -- Captura de pantalla
BitBlt() -- Captura de pantalla
InternetOpen(), InternetOpenUrl(), InternetReadFile(), InternetWriteFile() -- Acceso a Internet
FindResource(), LoadResource(), LockResource() -- Acceso a recursos del ejecutable
Ejecutar una DLL arbitraria dentro de otro proceso
Localizar el proceso para inyectar la DLL maliciosa: CreateToolhelp32Snapshot, Process32First, Process32Next
Abrir el proceso: GetModuleHandle, GetProcAddress, OpenProcess
Escribir la ruta a la DLL dentro del proceso: VirtualAllocEx, WriteProcessMemory
Crear un hilo en el proceso que cargará la DLL maliciosa: CreateRemoteThread, LoadLibrary
Otras funciones a utilizar: NTCreateThreadEx, RtlCreateUserThread
Cargar una DLL maliciosa sin llamar a las llamadas normales de la API de Windows. La DLL se mapea dentro de un proceso, resolverá las direcciones de importación, corregirá las reubicaciones y llamará a la función DllMain.
Encontrar un hilo de un proceso y hacer que cargue una DLL maliciosa
Encontrar un hilo objetivo: CreateToolhelp32Snapshot, Thread32First, Thread32Next
Abrir el hilo: OpenThread
Suspender el hilo: SuspendThread
Escribir la ruta a la DLL maliciosa dentro del proceso de la víctima: VirtualAllocEx, WriteProcessMemory
Reanudar el hilo cargando la biblioteca: ResumeThread
Inyección de Ejecución Portátil: El ejecutable se escribirá en la memoria del proceso de la víctima y se ejecutará desde allí.
El malware desmapeará el código legítimo de la memoria del proceso y cargará un binario malicioso
Crear un nuevo proceso: CreateProcess
Desmapear la memoria: ZwUnmapViewOfSection, NtUnmapViewOfSection
Escribir el binario malicioso en la memoria del proceso: VirtualAllocEc, WriteProcessMemory
Establecer el punto de entrada y ejecutar: SetThreadContext, ResumeThread
La SSDT (Tabla de Descriptores de Servicio del Sistema) apunta a funciones del kernel (ntoskrnl.exe) o controlador GUI (win32k.sys) para que los procesos de usuario puedan llamar a estas funciones.
Un rootkit puede modificar estos punteros a direcciones que controla.
IRP (Paquetes de Solicitud de I/O) transmiten piezas de datos de un componente a otro. Casi todo en el kernel utiliza IRPs y cada objeto de dispositivo tiene su propia tabla de funciones que puede ser enganchada: DKOM (Manipulación Directa de Objetos del Kernel).
La IAT (Tabla de Direcciones de Importación) es útil para resolver dependencias. Es posible enganchar esta tabla para secuestrar el código que será llamado.
EAT (Tabla de Direcciones de Exportación) Hooks. Estos hooks pueden hacerse desde userland. El objetivo es enganchar funciones exportadas por DLLs.
Inline Hooks: Este tipo es difícil de lograr. Esto implica modificar el código de las funciones mismas. Tal vez poniendo un salto al principio de esto.
Aprende y practica Hacking en AWS:HackTricks Training AWS Red Team Expert (ARTE) Aprende y practica Hacking en GCP: HackTricks Training GCP Red Team Expert (GRTE)