Common API used in Malware

Aprende a hackear AWS desde cero hasta convertirte en un experto con htARTE (HackTricks AWS Red Team Expert)!

Otras formas de apoyar a HackTricks:

Grupo de Seguridad Try Hard


Genérico

Redes

Raw SocketsWinAPI Sockets

socket()

WSAStratup()

bind()

bind()

listen()

listen()

accept()

accept()

connect()

connect()

read()/recv()

recv()

write()

send()

shutdown()

WSACleanup()

Persistencia

RegistroArchivoServicio

RegCreateKeyEx()

GetTempPath()

OpenSCManager

RegOpenKeyEx()

CopyFile()

CreateService()

RegSetValueEx()

CreateFile()

StartServiceCtrlDispatcher()

RegDeleteKeyEx()

WriteFile()

RegGetValue()

ReadFile()

Encriptación

Nombre

WinCrypt

CryptAcquireContext()

CryptGenKey()

CryptDeriveKey()

CryptDecrypt()

CryptReleaseContext()

Anti-Análisis/VM

Nombre de la FunciónInstrucciones de Ensamblaje

IsDebuggerPresent()

CPUID()

GetSystemInfo()

IN()

GlobalMemoryStatusEx()

GetVersion()

CreateToolhelp32Snapshot [Verificar si un proceso está en ejecución]

CreateFileW/A [Verificar si un archivo existe]

Sigilo

Nombre

VirtualAlloc

Asignar memoria (empaquetadores)

VirtualProtect

Cambiar permisos de memoria (empaquetador dando 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

Ejecución

Nombre de la Función

CreateProcessA/W

ShellExecute

WinExec

ResumeThread

NtResumeThread

Varios

  • GetAsyncKeyState() -- Registro de teclas

  • SetWindowsHookEx -- Registro de teclas

  • GetForeGroundWindow -- Obtener el nombre de la ventana en ejecución (o el sitio web desde 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() -- Acceder a Internet

  • FindResource(), LoadResource(), LockResource() -- Acceder a los recursos del ejecutable

Técnicas de Malware

Inyección de DLL

Ejecutar una DLL arbitraria dentro de otro proceso

  1. Localizar el proceso para inyectar la DLL maliciosa: CreateToolhelp32Snapshot, Process32First, Process32Next

  2. Abrir el proceso: GetModuleHandle, GetProcAddress, OpenProcess

  3. Escribir la ruta de la DLL dentro del proceso: VirtualAllocEx, WriteProcessMemory

  4. Crear un hilo en el proceso que cargará la DLL maliciosa: CreateRemoteThread, LoadLibrary

Otras funciones a utilizar: NTCreateThreadEx, RtlCreateUserThread

Inyección de DLL Reflectante

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.

Secuestro de Hilo

Encontrar un hilo de un proceso y hacer que cargue una DLL maliciosa

  1. Encontrar un hilo objetivo: CreateToolhelp32Snapshot, Thread32First, Thread32Next

  2. Abrir el hilo: OpenThread

  3. Suspender el hilo: SuspendThread

  4. Escribir la ruta de la DLL maliciosa dentro del proceso víctima: VirtualAllocEx, WriteProcessMemory

  5. Reanudar el hilo cargando la biblioteca: ResumeThread

Inyección PE

Inyección de Ejecución Portátil: El ejecutable se escribirá en la memoria del proceso víctima y se ejecutará desde allí.

Vaciamiento de Proceso

El malware desmapeará el código legítimo de la memoria del proceso y cargará un binario malicioso

  1. Crear un nuevo proceso: CreateProcess

  2. Desmapear la memoria: ZwUnmapViewOfSection, NtUnmapViewOfSection

  3. Escribir el binario malicioso en la memoria del proceso: VirtualAllocEc, WriteProcessMemory

  4. Establecer el punto de entrada y ejecutar: SetThreadContext, ResumeThread

Enganche

  • La SSDT (Tabla de Descriptores de Servicios 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 él controla

  • IRP (Paquetes de Solicitud de E/S) transmiten fragmentos 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 se pueden enganchar: 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 se llamará.

  • Enganches de EAT (Tabla de Direcciones de Exportación). Estos enganches se pueden hacer desde el userland. El objetivo es enganchar funciones exportadas por DLLs.

  • Enganches Inline: Este tipo es difícil de lograr. Esto implica modificar el código de las funciones en sí. Tal vez colocando un salto al principio de esto.

  • Comparte tus trucos de hacking enviando PRs a los repositorios de HackTricks y HackTricks Cloud en GitHub.

Última actualización