mirror of
https://github.com/carlospolop/hacktricks
synced 2024-11-22 20:53:37 +00:00
8.2 KiB
8.2 KiB
API comunes utilizadas en 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:
- Si deseas ver tu empresa anunciada en HackTricks o descargar HackTricks en PDF ¡Consulta los PLANES DE SUSCRIPCIÓN!
- Obtén el swag oficial de PEASS & HackTricks
- Descubre The PEASS Family, nuestra colección exclusiva de NFTs
- Únete al 💬 grupo de Discord o al grupo de telegram o síguenos en Twitter 🐦 @carlospolopm.
- Comparte tus trucos de hacking enviando PRs a los repositorios de HackTricks y HackTricks Cloud.
Grupo de Seguridad Try Hard
{% embed url="https://discord.gg/tryhardsecurity" %}
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 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
- Localizar el proceso para inyectar la DLL maliciosa: CreateToolhelp32Snapshot, Process32First, Process32Next
- Abrir el proceso: GetModuleHandle, GetProcAddress, OpenProcess
- Escribir la ruta de 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 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
- Encontrar un hilo objetivo: CreateToolhelp32Snapshot, Thread32First, Thread32Next
- Abrir el hilo: OpenThread
- Suspender el hilo: SuspendThread
- Escribir la ruta de la DLL maliciosa dentro del proceso 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 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
- 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
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.