mirror of
https://github.com/carlospolop/hacktricks
synced 2024-11-22 20:53:37 +00:00
160 lines
8.2 KiB
Markdown
160 lines
8.2 KiB
Markdown
# API comunes utilizadas en Malware
|
|
|
|
<details>
|
|
|
|
<summary><strong>Aprende a hackear AWS desde cero hasta convertirte en un experto 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 deseas ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
|
|
* Obtén el [**swag oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
|
|
* Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
|
|
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
|
* **Comparte tus trucos de hacking enviando PRs a los repositorios de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
|
|
|
</details>
|
|
|
|
**Grupo de Seguridad Try Hard**
|
|
|
|
<figure><img src="/.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
|
|
|
|
{% 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
|
|
|
|
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**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) en GitHub.
|
|
|
|
</details>
|