hacktricks/reversing/common-api-used-in-malware.md

11 KiB

☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥

Encuentra las vulnerabilidades que más importan para que puedas solucionarlas más rápido. Intruder rastrea tu superficie de ataque, realiza escaneos proactivos de amenazas, encuentra problemas en toda tu pila tecnológica, desde APIs hasta aplicaciones web y sistemas en la nube. Pruébalo gratis hoy.

{% embed url="https://www.intruder.io/?utm_campaign=hacktricks&utm_source=referral" %}


Genérico

Redes

Raw Sockets WinAPI Sockets
socket() WSAStratup()
bind() bind()
listen() listen()
accept() accept()
connect() connect()
read()/recv() recv()
write() send()
shutdown() WSACleanup()

Persistencia

Registro Archivo Servicio
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ón Instrucciones de Ensamblador
IsDebuggerPresent() CPUID()
GetSystemInfo() IN()
GlobalMemoryStatusEx()
GetVersion()
CreateToolhelp32Snapshot [Comprobar si un proceso se está ejecutando]
CreateFileW/A [Comprobar si un archivo existe]

Sigilo

Nombre
VirtualAlloc Asignar memoria (empaquetadores)
VirtualProtect Cambiar los permisos de memoria (empaquetador que da 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 de un navegador)
  • LoadLibrary() -- Importar biblioteca
  • GetProcAddress() -- Importar biblioteca
  • CreateToolhelp32Snapshot() -- Enumerar 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

Ejecuta una DLL arbitraria dentro de otro proceso

  1. Localiza el proceso en el que se va a inyectar la DLL maliciosa: CreateToolhelp32Snapshot, Process32First, Process32Next
  2. Abre el proceso: GetModuleHandle, GetProcAddress, OpenProcess
  3. Escribe la ruta de la DLL dentro del proceso: VirtualAllocEx, WriteProcessMemory
  4. Crea un hilo en el proceso que cargará la DLL maliciosa: CreateRemoteThread, LoadLibrary

Otras funciones a utilizar: NTCreateThreadEx, RtlCreateUserThread

Inyección de DLL Reflectante

Carga 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 hilos

Encuentra un hilo de un proceso y haz que cargue una DLL maliciosa

  1. Encuentra el hilo objetivo: CreateToolhelp32Snapshot, Thread32First, Thread32Next
  2. Abre el hilo: OpenThread
  3. Suspende el hilo: SuspendThread
  4. Escribe la ruta de la DLL maliciosa dentro del proceso víctima: VirtualAllocEx, WriteProcessMemory
  5. Reanuda 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í.

Hollowing de procesos

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

  1. Crea un nuevo proceso: CreateProcess
  2. Desmapea la memoria: ZwUnmapViewOfSection, NtUnmapViewOfSection
  3. Escribe el binario malicioso en la memoria del proceso: VirtualAllocEx, WriteProcessMemory
  4. Establece el punto de entrada y ejecuta: SetThreadContext, ResumeThread

Hooking

  • La SSDT (System Service Descriptor Table) 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 (I/O Request Packets) transmite 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 (Direct Kernel Object Manipulation).
  • La IAT (Import Address Table) es útil para resolver dependencias. Es posible enganchar esta tabla para secuestrar el código que se llamará.
  • Hooks de EAT (Export Address Table). Estos hooks se pueden hacer desde el 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 propias funciones. Tal vez colocando un salto al principio de esto.

Encuentra las vulnerabilidades que más importan para que puedas solucionarlas más rápido. Intruder rastrea tu superficie de ataque, realiza escaneos de amenazas proactivas, encuentra problemas en toda tu pila tecnológica, desde APIs hasta aplicaciones web y sistemas en la nube. Pruébalo gratis hoy.

{% embed url="https://www.intruder.io/?utm_campaign=hacktricks&utm_source=referral" %}

☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥