8.8 KiB
API Común Usada en Malware
{% hint style="success" %}
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)
Apoya a HackTricks
- Revisa los planes de suscripción!
- Únete al 💬 grupo de Discord o al grupo de telegram o síguenos en Twitter 🐦 @hacktricks_live.
- Comparte trucos de hacking enviando PRs a los HackTricks y HackTricks Cloud repos de github.
Genérico
Redes
Sockets en Crudo | Sockets WinAPI |
---|---|
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() |
Cifrado
Nombre |
---|
WinCrypt |
CryptAcquireContext() |
CryptGenKey() |
CryptDeriveKey() |
CryptDecrypt() |
CryptReleaseContext() |
Anti-Análisis/VM
Nombre de Función | Instrucciones de Ensamblador |
---|---|
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 otorgando permisos 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 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() -- 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 recursos del ejecutable
Técnicas de Malware
Inyección de DLL
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
Inyección de DLL Reflectiva
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 Hilos
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 PE
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í.
Hollowing de Proceso
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
Hooking
- 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 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 estas.
{% hint style="success" %}
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)
Apoya a HackTricks
- Revisa los planes de suscripción!
- Únete al 💬 grupo de Discord o al grupo de telegram o síguenos en Twitter 🐦 @hacktricks_live.
- Comparte trucos de hacking enviando PRs a los HackTricks y HackTricks Cloud repos de github.