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

178 lines
9.9 KiB
Markdown
Raw Normal View History

<details>
<summary><strong>Aprende hacking en AWS de cero a héroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
Otras formas de apoyar a HackTricks:
* Si quieres ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** revisa los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Consigue el [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección de [**NFTs**](https://opensea.io/collection/the-peass-family) exclusivos
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sígueme** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
* **Comparte tus trucos de hacking enviando PRs a los repositorios de GitHub de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details>
<figure><img src="/.gitbook/assets/image (675).png" alt=""><figcaption></figcaption></figure>
Encuentra vulnerabilidades que importan más para poder 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**](https://www.intruder.io/?utm\_source=referral\&utm\_campaign=hacktricks) hoy.
{% embed url="https://www.intruder.io/?utm_campaign=hacktricks&utm_source=referral" %}
***
2023-06-03 01:46:23 +00:00
# Genérico
2022-05-01 16:32:23 +00:00
2023-06-03 01:46:23 +00:00
## Redes
2020-12-03 18:00:02 +00:00
| Sockets Raw | Sockets WinAPI |
| ------------- | -------------- |
| socket() | WSAStratup() |
| bind() | bind() |
| listen() | listen() |
| accept() | accept() |
| connect() | connect() |
| read()/recv() | recv() |
| write() | send() |
| shutdown() | WSACleanup() |
2020-12-03 18:00:02 +00:00
2023-06-03 01:46:23 +00:00
## Persistencia
2020-12-03 18:00:02 +00:00
| Registro | Archivo | Servicio |
| ----------------- | -------------- | ---------------------------- |
| RegCreateKeyEx() | GetTempPath() | OpenSCManager |
| RegOpenKeyEx() | CopyFile() | CreateService() |
| RegSetValueEx() | CreateFile() | StartServiceCtrlDispatcher() |
| RegDeleteKeyEx() | WriteFile() | |
| RegGetValue() | ReadFile() | |
2020-12-03 18:00:02 +00:00
## Cifrado
2020-12-03 18:00:02 +00:00
| Nombre |
| ---------------------- |
| WinCrypt |
| CryptAcquireContext() |
| CryptGenKey() |
| CryptDeriveKey() |
| CryptDecrypt() |
| CryptReleaseContext() |
2020-12-03 18:00:02 +00:00
2023-06-03 01:46:23 +00:00
## Anti-Análisis/VM
2020-12-03 18:00:02 +00:00
| Nombre de Función | Instrucciones de Ensamblaje |
| ---------------------------------------------------------- | --------------------------- |
| IsDebuggerPresent() | CPUID() |
| GetSystemInfo() | IN() |
| GlobalMemoryStatusEx() | |
| GetVersion() | |
| CreateToolhelp32Snapshot \[Verificar si un proceso corre] | |
| CreateFileW/A \[Verificar si un archivo existe] | |
2020-12-03 18:00:02 +00:00
2023-06-03 01:46:23 +00:00
## Sigilo
2020-12-03 18:00:02 +00:00
| Nombre | |
| ------------------------- | -------------------------------------------------------------------------- |
| VirtualAlloc | Asignar memoria (packers) |
| VirtualProtect | Cambiar permisos de memoria (packer 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 | |
2020-12-03 18:00:02 +00:00
2023-06-03 01:46:23 +00:00
## Ejecución
2020-12-03 18:00:02 +00:00
| Nombre de Función |
| ------------------ |
| CreateProcessA/W |
| ShellExecute |
| WinExec |
| ResumeThread |
| NtResumeThread |
2020-12-03 18:00:02 +00:00
## Misceláneo
2020-12-03 18:00:02 +00:00
2023-06-03 01:46:23 +00:00
* GetAsyncKeyState() -- Registro de teclas
* SetWindowsHookEx -- Registro de teclas
* GetForeGroundWindow -- Obtener nombre de ventana en ejecución (o el sitio web desde un navegador)
* LoadLibrary() -- Importar librería
* GetProcAddress() -- Importar librería
* CreateToolhelp32Snapshot() -- Listar procesos en ejecución
2023-06-03 01:46:23 +00:00
* GetDC() -- Captura de pantalla
* BitBlt() -- Captura de pantalla
* InternetOpen(), InternetOpenUrl(), InternetReadFile(), InternetWriteFile() -- Acceder a Internet
* FindResource(), LoadResource(), LockResource() -- Acceder a recursos del ejecutable
2020-12-03 18:00:02 +00:00
2023-06-03 01:46:23 +00:00
# Técnicas de Malware
2021-09-07 00:15:14 +00:00
2023-06-03 01:46:23 +00:00
## Inyección de DLL
2021-09-07 00:15:14 +00:00
Ejecutar una DLL arbitraria dentro de otro proceso
2021-09-07 00:15:14 +00:00
1. Localizar el proceso para inyectar la DLL maliciosa: CreateToolhelp32Snapshot, Process32First, Process32Next
2. Abrir el proceso: GetModuleHandle, GetProcAddress, OpenProcess
3. Escribir la ruta a la DLL dentro del proceso: VirtualAllocEx, WriteProcessMemory
4. Crear un hilo en el proceso que cargará la DLL maliciosa: CreateRemoteThread, LoadLibrary
2021-09-07 00:15:14 +00:00
Otras funciones a usar: NTCreateThreadEx, RtlCreateUserThread
2021-09-07 00:15:14 +00:00
## Inyección de DLL Reflectiva
2021-09-07 00:15:14 +00:00
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, arreglará las reubicaciones y llamará a la función DllMain.
2021-09-07 00:15:14 +00:00
## Secuestro de Hilo
2021-09-07 00:15:14 +00:00
Encontrar un hilo de un proceso y hacer que cargue una DLL maliciosa
2021-09-07 00:15:14 +00:00
1. Encontrar un hilo objetivo: CreateToolhelp32Snapshot, Thread32First, Thread32Next
2. Abrir el hilo: OpenThread
3. Suspender el hilo: SuspendThread
4. Escribir la ruta a la DLL maliciosa dentro del proceso víctima: VirtualAllocEx, WriteProcessMemory
5. Reanudar el hilo cargando la librería: ResumeThread
## Inyección de PE
2021-09-07 00:15:14 +00:00
2023-06-03 01:46:23 +00:00
Inyección de Ejecución Portátil: El ejecutable se escribirá en la memoria del proceso víctima y se ejecutará desde allí.
2021-09-07 00:15:14 +00:00
## Vaciamiento de Proceso
2021-09-07 00:15:14 +00:00
2023-06-03 01:46:23 +00:00
El malware desmapeará el código legítimo de la memoria del proceso y cargará un binario malicioso
2021-09-07 00:15:14 +00:00
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
2021-09-07 00:15:14 +00:00
2022-05-01 16:32:23 +00:00
# Hooking
2021-09-07 00:15:14 +00:00
* La **SSDT** (**Tabla de Descriptores de Servicios del Sistema**) apunta a funciones del kernel (ntoskrnl.exe) o al controlador de 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
* Los **IRP** (**Paquetes de Solicitud de E/S**) 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 se puede hook: DKOM (Manipulación Directa de Objetos del Kernel)
* La **IAT** (**Tabla de Direcciones de Importación**) es útil para resolver dependencias. Es posible hook esta tabla para secuestrar el código que se llamará.
* Hooks de **EAT** (**Tabla de Direcciones de Exportación**). Estos hooks se pueden hacer desde **userland**. El objetivo es hook funciones exportadas por DLLs.
* **Hooks en línea**: Este tipo son difíciles de lograr. Esto implica modificar el código de las funciones en sí. Tal vez poniendo un salto al principio de esta.
<figure><img src="/.gitbook/assets/image (675).png" alt=""><figcaption></figcaption></figure>
Encuentra vulnerabilidades que importan más para poder 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**](https://www.intruder.io/?utm\_source=referral\&utm\_campaign=hacktricks) hoy.
{% embed url="https://www.intruder.io/?utm_campaign=hacktricks&utm_source=referral" %}
<details>
<summary><strong>Aprende hacking en AWS de cero a héroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
Otras formas de apoyar a HackTricks:
* Si quieres ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** revisa los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Consigue el [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección de [**NFTs**](https://opensea.io/collection/the-peass-family) exclusivos
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sígueme** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
* **Comparte tus trucos de hacking enviando PRs a los repositorios de GitHub de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details>