notes - b0ySie7e
GithubPortafolioWrite-ups
  • 👋Bienvenido a mi blog
  • Introducción a la ciberseguridad
    • 📓¿Como inicio en la ciberseguridad?
  • Teoria y Conceptos
    • 📓Redes
      • Identificación de Dispositivos
      • Local Area Network (LAN)
      • Sub redes
      • Procolo ARP
      • Protocolo DHCP
    • 📓Pentesting
      • OSSTMM
      • OWASP
      • NCSC CAF
  • Sistemas Operativos
    • Linux
      • Comandos
    • Windows
      • Comandos
  • Enumeración
    • Enumeracion de red
      • Enumeracion de Hosts
      • Enumeracion de Puertos y servicios
    • FootPrinting
      • Domain Information
      • FTP
      • SMB
      • NFS
      • DNS
      • SMTP
      • IMAP-POP3
      • SNMP
      • MySQL
      • MSSQL
      • Oracle TNS
      • IPMI
      • Linux Remote Management Protocols
      • Windows Remote Management Protocols
    • Enumeración web
      • Uso de google dorks
      • Whois
      • Dig
      • Enumeraciónde subdominios
      • Enumeración automatizada
  • Hacking Web
    • Ataques Comunes
      • Fuzzing
      • Sub dominios
      • SQL Injection
      • Cross-Site Scripting
      • Local File Inclusion
      • Remote File Inclusion
      • File Upload Attacks
      • Command Injections
    • Otras explotaciones
  • Escalada de Privilegios
    • 📕Linux
      • Enumeración automatizada - Tools
      • Kernel Exploit
      • Sudo
      • SUID
      • Capabilities
      • Cron Jobs
      • Path
      • NFS
    • 📕Windows
      • Enumeración automatizada - Tools
      • Harvesting Passwords from Usual Spots
      • Other Quick Wins
      • Abusing Service Misconfigurations
      • Abusing dangerous privileges
      • Abusing vulnerable software
  • Guias y Herramientas
    • Git
    • Buffer Over Flow
    • MetaSploit
      • Introducción
      • Modules
      • Targets
      • Payloads
      • Encoders
      • Sessions
    • Nmap
    • Pivoting Tunneling Port Forwarning
      • Port Forwarding SSH
      • Pivoting Metasploit
      • Socat Redirection with a Reverse Shell
      • Socat Redirection with a Bind Shell
      • Others tools for pivoting
    • Transferencias de Archivos
      • Evading Detection
      • Linux File Transfer Methods
      • Miscellaneous File Transfer Methods
      • Transferring Files with Code
      • Windows File Transfer Methods
      • Otros
        • Usando ICMP
        • Usando ncat y tar
    • Shell y Payloads
      • Spawning shell interactiva
      • Conexión de RDP
    • Password Attacks
      • Cracking
      • Windows Local Password Attacks
      • Linux Local Password Attacks
      • Windows Lateral Movement
    • Fortinet
      • Configuración estática de Firewall
      • Licencia
      • Configuración de interfaces
      • Primera política
      • Rutas estaticas
  • Red Team Path - THM
    • Enumeración
      • Linux
      • Windows
    • Movimiento lateral
      • Movimiento Lateral
    • Pivoting
      • PortForwarining y pivoting
    • Host Evasion
      • Windows Internal
      • Introduccion a Windows
      • Abusing Windows Internal
      • Introducción a Antivirus
      • AV Evasion ShellCode
      • Principios de Ofuscación
      • Evasión de Firmas
      • Bypass UAC
      • Runtime Detection Evasion
      • Evading Logging and Monitoring
      • Living Off the Land
    • Networking Security Evasión
      • Network Security Solutions
      • Firewalls
      • Sandbox Evasion
    • Comprometiendo un directorio activo
      • Active Directory Basics
      • Breaching Active Directory
      • Enumerating Active Directory
      • Exploiting Active Directory
      • Persisting Active Directory
      • Credentials Harvesting
Con tecnología de GitBook
En esta página
  • Procesos (Processes)
  • Threads
  • Virtual Memory
  • Dynamic Link Libraries
  • Portable Executable Format
  1. Red Team Path - THM
  2. Host Evasion

Windows Internal

AnteriorHost EvasionSiguienteIntroduccion a Windows

Última actualización hace 10 meses

Procesos (Processes)

Un proceso mantiene y representa la ejecución de un programa; una aplicación puede contener uno o más procesos. Un proceso tiene muchos componentes en los que se divide para almacenarlo e interactuar con él. Los desglosan estos otros componentes: "Cada proceso proporciona los recursos necesarios para ejecutar un programa. Un proceso tiene un espacio de direcciones virtuales, código ejecutable, identificadores abiertos para objetos del sistema, un contexto de seguridad, un identificador de proceso único, variables de entorno, una clase de prioridad, tamaños mínimo y máximo del conjunto de trabajo y al menos un hilo de ejecución". Esta información puede parecer intimidante, pero esta sala pretende hacer este concepto un poco menos complejo.

Como se mencionó anteriormente, los procesos se crean a partir de la ejecución de una aplicación. Los procesos son fundamentales para el funcionamiento de Windows; la mayor parte de las funciones de Windows pueden abarcarse como una aplicación y tienen un proceso correspondiente. A continuación se muestran algunos ejemplos de aplicaciones predeterminadas que inician procesos.

  • MsMpEng (Microsoft Defender)

  • wininit (teclado y ratón)

  • lsass (almacenamiento de credenciales)

Los atacantes pueden atacar procesos para evadir detecciones y ocultar malware como procesos legítimos. A continuación se muestra una pequeña lista de posibles vectores de ataque que los atacantes podrían emplear contra procesos,

  • Inyección de proceso ( )

  • Proceso de vaciado ( )

  • Enmascaramiento de proceso ( )

Los procesos tienen muchos componentes; se pueden dividir en características clave que podemos utilizar para describir procesos a un alto nivel. La siguiente tabla describe cada componente crítico de los procesos y su propósito.

Componente del proceso

Objetivo

Espacio privado de direcciones virtuales

Direcciones de memoria virtual que se asignan al proceso.

Programa ejecutable

Define el código y los datos almacenados en el espacio de direcciones virtuales.

Manijas abiertas

Define identificadores de recursos del sistema accesibles al proceso.

Contexto de seguridad

El token de acceso define el usuario, los grupos de seguridad, los privilegios y otra información de seguridad.

Identificacion de proceso

Identificador numérico único del proceso.

Hilos

Sección de un proceso prevista para su ejecución.

También podemos explicar un proceso en un nivel inferior, ya que reside en el espacio de direcciones virtuales. La tabla y el diagrama siguientes muestran cómo se ve un proceso en la memoria.

Componente

Objetivo

Código

Código que ejecutará el proceso.

Variables globales

Variables almacenadas.

Montón de procesos

Define el montón donde se almacenan los datos.

Recursos de proceso

Define otros recursos del proceso.

Bloque de entorno

Estructura de datos para definir la información del proceso.

Es excelente tener esta información cuando profundizamos en la explotación y el abuso de las tecnologías subyacentes, pero aún son muy abstractas. Podemos hacer tangible el proceso observándolos en el Administrador de tareas de Windows . El administrador de tareas puede informar sobre muchos componentes e información sobre un proceso. A continuación se muestra una tabla con una breve lista de los detalles esenciales del proceso.

Valor/Componente

Objetivo

Ejemplo

Nombre

Definir el nombre del proceso, normalmente heredado de la aplicación.

conhost.exe

PID

Valor numérico único para identificar el proceso.

7408

Estado

Determina cómo se está ejecutando el proceso (en ejecución, suspendido, etc.)

Correr

Nombre de usuario

Usuario que inició el proceso. Puede denotar privilegio del proceso.

SISTEMA

Estos son con los que interactuaría más como usuario final o manipularía como atacante.

Los procesos son el núcleo de la mayoría de los componentes internos de Windows.

Threads

Un subproceso es una unidad ejecutable empleada por un proceso y programada en función de factores del dispositivo.

Los factores del dispositivo pueden variar según las especificaciones de la CPU y la memoria, los factores lógicos y de prioridad, entre otros.

Podemos simplificar la definición de hilo: "controlar la ejecución de un proceso".

Dado que los subprocesos controlan la ejecución, este es un componente comúnmente objetivo. El abuso de subprocesos se puede utilizar por sí solo para ayudar en la ejecución del código, o se utiliza más ampliamente para encadenar otras llamadas API como parte de otras técnicas.

Los subprocesos comparten los mismos detalles y recursos que su proceso principal, como código, variables globales, etc. Los subprocesos también tienen sus valores y datos únicos, que se describen en la siguiente tabla.

Componente

Objetivo

Stack (Pila)

Todos los datos relevantes y específicos del hilo (excepciones, llamadas a procedimientos, etc.)

Thread Local Storage(Thread Local Storage)

Consejos para asignar almacenamiento a un entorno de datos único

Stack Argument (Argumento de pila)

Valor único asignado a cada hilo.

Context Structure (Estructura de contexto)

Mantiene los valores de registro de la máquina mantenidos por el kernel.

Los subprocesos pueden parecer componentes básicos y simples, pero su función es fundamental para los procesos.

Virtual Memory

La memoria virtual es un componente crítico de cómo funcionan e interactúan los componentes internos de Windows entre sí. La memoria virtual permite que otros componentes internos interactúen con la memoria como si fuera memoria física sin riesgo de colisiones entre aplicaciones. El concepto de modos y colisiones se explica con más detalle en la tarea 8.

El administrador de memoria también utilizará páginas o transferencias para manejar la memoria. Las aplicaciones pueden utilizar más memoria virtual que la memoria física asignada; el administrador de memoria transferirá o paginará la memoria virtual al disco para resolver este problema. Puede visualizar este concepto en el siguiente diagrama.

El espacio de direcciones virtuales máximo teórico es de 4 GB en un sistema x86 de 32 bits.

El espacio de direcciones virtuales máximo teórico es de 256 TB en un sistema moderno de 64 bits.

La proporción exacta de diseño de direcciones del sistema de 32 bits se asigna al sistema de 64 bits.

La mayoría de los problemas que requieren configuración o AWE se resuelven con el máximo teórico aumentado.

Puede visualizar ambos diseños de asignación de espacio de direcciones a la derecha.

Aunque este concepto no se traduce directamente en conceptos o aspectos internos de Windows, es fundamental comprenderlo. Si se entiende correctamente, se puede aprovechar para ayudar a abusar de las partes internas de Windows.

Dynamic Link Libraries

Cuando se carga una DLL como función en un programa, la DLL se asigna como una dependencia. Dado que un programa depende de una DLL, los atacantes pueden apuntar a las DLL en lugar de a las aplicaciones para controlar algún aspecto de la ejecución o funcionalidad.

Las DLL se crean de la misma manera que cualquier otro proyecto/aplicación; sólo requieren una ligera modificación de sintaxis para funcionar. A continuación se muestra un ejemplo de una DLL del proyecto de biblioteca de vínculos dinámicos Win32 de Visual C++ .

#include "stdafx.h"
#define EXPORTING_DLL
#include "sampleDLL.h"
BOOL APIENTRY DllMain( HANDLE hModule, DWORD ul_reason_for_call, LPVOID lpReserved
)
{
    return TRUE;
}

void HelloWorld()
{
    MessageBox( NULL, TEXT("Hello World"), TEXT("In a DLL"), MB_OK);
}

A continuación se muestra el archivo de encabezado de la DLL ; definirá qué funciones se importan y exportan. Discutiremos la importancia (o la falta de) del archivo de encabezado en la siguiente sección de esta tarea.

#ifndef INDLL_H
    #define INDLL_H
    #ifdef EXPORTING_DLL
        extern __declspec(dllexport) void HelloWorld();
    #else
        extern __declspec(dllimport) void HelloWorld();
    #endif

#endif

Se ha creado la DLL , pero aún queda la pregunta de ¿cómo se utilizan en una aplicación?

Las DLL se pueden cargar en un programa mediante enlaces dinámicos en tiempo de carga o enlaces dinámicos en tiempo de ejecución .

Cuando se carga mediante enlaces dinámicos en tiempo de carga , se realizan llamadas explícitas a las funciones DLL desde la aplicación. Solo puede lograr este tipo de vínculo proporcionando un encabezado ( .h ) y un archivo de biblioteca de importación ( .lib ). A continuación se muestra un ejemplo de cómo llamar a una función DLL exportada desde una aplicación.

#include "stdafx.h"
#include "sampleDLL.h"
int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
    HelloWorld();
    return 0;
}

Cuando se carga mediante enlaces dinámicos en tiempo de ejecución , se utilizaLoadLibrary una función independiente ( o ) para cargar la DLL en tiempo de ejecución. Una vez cargado, debe utilizar para identificar la función DLL exportada a la que llamar. A continuación se muestra un ejemplo de carga e importación de una función DLL en una aplicación.LoadLibraryEx``GetProcAddress

...
typedef VOID (*DLLPROC) (LPTSTR);
...
HINSTANCE hinstDLL;
DLLPROC HelloWorld;
BOOL fFreeDLL;

hinstDLL = LoadLibrary("sampleDLL.dll");
if (hinstDLL != NULL)
{
    HelloWorld = (DLLPROC) GetProcAddress(hinstDLL, "HelloWorld");
    if (HelloWorld != NULL)
        (HelloWorld);
    fFreeDLL = FreeLibrary(hinstDLL);
}
...

En el código malicioso, los actores de amenazas suelen utilizar enlaces dinámicos en tiempo de ejecución más que enlaces dinámicos en tiempo de carga. Esto se debe a que es posible que un programa malicioso necesite transferir archivos entre regiones de memoria, y transferir una única DLL es más manejable que importar utilizando otros requisitos de archivos.

Portable Executable Format

Los ejecutables y las aplicaciones son una gran parte del funcionamiento interno de Windows en un nivel superior. El formato PE ( P ortable E xecutable) define la información sobre el ejecutable y los datos almacenados. El formato PE también define la estructura de cómo se almacenan los componentes de datos.

El formato PE ( Portable Ejecutable ) es una estructura general para archivos ejecutables y de objetos. Los archivos PE ( Portable Executable ) y COFF ( Common Object File F ormat ) conforman el formato PE .

Los datos PE se ven más comúnmente en el volcado hexadecimal de un archivo ejecutable. A continuación, dividiremos un volcado hexadecimal de calc.exe en secciones de datos PE.

La estructura de los datos de PE se divide en siete componentes,

El encabezado de DOS( DOS Header) define el tipo de archivo.

El encabezado de DOS define el formato del archivo como . El encabezado de DOS se puede ver en la sección de volcado hexadecimal a continuación.MZ .exe

Offset(h) 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F
00000000  4D 5A 90 00 03 00 00 00 04 00 00 00 FF FF 00 00  MZ..........ÿÿ..
00000010  B8 00 00 00 00 00 00 00 40 00 00 00 00 00 00 00  ¸.......@.......
00000020  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
00000030  00 00 00 00 00 00 00 00 00 00 00 00 E8 00 00 00  ............è...
00000040  0E 1F BA 0E 00 B4 09 CD 21 B8 01 4C CD 21 54 68  ..º..´.Í!¸.LÍ!Th

El código auxiliar de DOS (DOS Stub) es un programa que se ejecuta de forma predeterminada al principio de un archivo y que imprime un mensaje de compatibilidad. Esto no afecta ninguna funcionalidad del archivo para la mayoría de los usuarios.

El código auxiliar de DOS imprime el mensaje . El código auxiliar de DOS se puede ver en la sección de volcado hexadecimal a continuación.This program cannot be run in DOS mode

00000040  0E 1F BA 0E 00 B4 09 CD 21 B8 01 4C CD 21 54 68  ..º..´.Í!¸.LÍ!Th
00000050  69 73 20 70 72 6F 67 72 61 6D 20 63 61 6E 6E 6F  is program canno
00000060  74 20 62 65 20 72 75 6E 20 69 6E 20 44 4F 53 20  t be run in DOS 
00000070  6D 6F 64 65 2E 0D 0D 0A 24 00 00 00 00 00 00 00  mode....$.......

El encabezado del archivo PE (PE File Header) proporciona información del encabezado PE del binario. Define el formato del archivo, contiene la firma y el encabezado del archivo de imagen, y otros encabezados de información.

El encabezado del archivo PE es la sección con el resultado menos legible por humanos. Puede identificar el inicio del encabezado del archivo PE desde elPE código auxiliar en la sección de volcado hexadecimal a continuación.

000000E0  00 00 00 00 00 00 00 00 50 45 00 00 64 86 06 00  ........PE..d†..
000000F0  10 C4 40 03 00 00 00 00 00 00 00 00 F0 00 22 00  .Ä@.........ð.".
00000100  0B 02 0E 14 00 0C 00 00 00 62 00 00 00 00 00 00  .........b......
00000110  70 18 00 00 00 10 00 00 00 00 00 40 01 00 00 00  p..........@....
00000120  00 10 00 00 00 02 00 00 0A 00 00 00 0A 00 00 00  ................
00000130  0A 00 00 00 00 00 00 00 00 B0 00 00 00 04 00 00  .........°......
00000140  63 41 01 00 02 00 60 C1 00 00 08 00 00 00 00 00  cA....`Á........
00000150  00 20 00 00 00 00 00 00 00 00 10 00 00 00 00 00  . ..............
00000160  00 10 00 00 00 00 00 00 00 00 00 00 10 00 00 00  ................
00000170  00 00 00 00 00 00 00 00 94 27 00 00 A0 00 00 00  ........”'.. ...
00000180  00 50 00 00 10 47 00 00 00 40 00 00 F0 00 00 00  .P...G...@..ð...
00000190  00 00 00 00 00 00 00 00 00 A0 00 00 2C 00 00 00  ......... ..,...
000001A0  20 23 00 00 54 00 00 00 00 00 00 00 00 00 00 00   #..T...........
000001B0  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
000001C0  10 20 00 00 18 01 00 00 00 00 00 00 00 00 00 00  . ..............
000001D0  28 21 00 00 40 01 00 00 00 00 00 00 00 00 00 00  (!..@...........
000001E0  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................

El encabezado opcional de imagen( Image Optional Header) tiene un nombre engañoso y es una parte importante del encabezado del archivo PE

Los diccionarios de datos (Data Dictionaries) son parte del encabezado opcional de la imagen. Apuntan a la estructura del directorio de datos de la imagen.

La Tabla de secciones(Section Table) definirá las secciones y la información disponibles en la imagen. Como se analizó anteriormente, las secciones almacenan el contenido del archivo, como código, importaciones y datos. Puede identificar la definición de cada sección en la tabla de la sección de volcado hexadecimal a continuación.

000001F0  2E 74 65 78 74 00 00 00 D0 0B 00 00 00 10 00 00  .text...Ð.......
00000200  00 0C 00 00 00 04 00 00 00 00 00 00 00 00 00 00  ................
00000210  00 00 00 00 20 00 00 60 2E 72 64 61 74 61 00 00  .... ..`.rdata..
00000220  76 0C 00 00 00 20 00 00 00 0E 00 00 00 10 00 00  v.... ..........
00000230  00 00 00 00 00 00 00 00 00 00 00 00 40 00 00 40  ............@..@
00000240  2E 64 61 74 61 00 00 00 B8 06 00 00 00 30 00 00  .data...¸....0..
00000250  00 02 00 00 00 1E 00 00 00 00 00 00 00 00 00 00  ................
00000260  00 00 00 00 40 00 00 C0 2E 70 64 61 74 61 00 00  ....@..À.pdata..
00000270  F0 00 00 00 00 40 00 00 00 02 00 00 00 20 00 00  ð....@....... ..
00000280  00 00 00 00 00 00 00 00 00 00 00 00 40 00 00 40  ............@..@
00000290  2E 72 73 72 63 00 00 00 10 47 00 00 00 50 00 00  .rsrc....G...P..
000002A0  00 48 00 00 00 22 00 00 00 00 00 00 00 00 00 00  .H..."..........
000002B0  00 00 00 00 40 00 00 40 2E 72 65 6C 6F 63 00 00  ....@..@.reloc..
000002C0  2C 00 00 00 00 A0 00 00 00 02 00 00 00 6A 00 00  ,.... .......j..
000002D0  00 00 00 00 00 00 00 00 00 00 00 00 40 00 00 42  ............@..B

Ahora que los encabezados han definido el formato y la función del archivo, las secciones pueden definir el contenido y los datos del archivo.

Sección

Objetivo

.texto

Contiene código ejecutable y punto de entrada.

.datos

Contiene datos inicializados (cadenas, variables, etc.)

.rdata o .idata

Contiene importaciones ( API de Windows ) y DLL.

.reloc

Contiene información de reubicación.

.rsrc

Contiene recursos de la aplicación (imágenes, etc.)

.depurar

Contiene información de depuración

# Interacting with Windows Internals

Interactuar con las partes internas de Windows puede parecer desalentador, pero se ha simplificado drásticamente. La opción más accesible e investigada para interactuar con Windows Internals es la interfaz a través de llamadas API de Windows . La API de Windows proporciona funcionalidad nativa para interactuar con el sistema operativo Windows. La API contiene la API de Win32 y, con menos frecuencia, la API de Win64.

La mayoría de los componentes internos de Windows requieren interactuar con hardware físico y memoria.

El kernel de Windows controlará todos los programas y procesos y unirá todas las interacciones de software y hardware. Esto es especialmente importante ya que muchas partes internas de Windows requieren interacción con la memoria de alguna forma.

Una aplicación por defecto normalmente no puede interactuar con el kernel ni modificar el hardware físico y requiere una interfaz. Este problema se resuelve mediante el uso de modos de procesador y niveles de acceso.

Un procesador de Windows tiene un modo de usuario y de kernel . El procesador cambiará entre estos modos según el acceso y el modo solicitado.

El cambio entre el modo de usuario y el modo kernel a menudo se ve facilitado por llamadas al sistema y a la API . En la documentación, este punto a veces se denomina " Punto de conmutación ".

Modo de usuario

Modo núcleo

Sin acceso directo al hardware

Acceso directo al hardware

Crea un proceso en un espacio de direcciones virtuales privado.

Se ejecutó en un único espacio de direcciones virtuales compartido

Acceso a "ubicaciones de memoria propias"

Acceso a toda la memoria física.

Las aplicaciones iniciadas en modo de usuario o " terreno de usuario" permanecerán en ese modo hasta que se realice una llamada al sistema o se interactúe a través de una API . Cuando se realiza una llamada al sistema, la aplicación cambiará de modo. En la foto de la derecha se muestra un diagrama de flujo que describe este proceso.

Al observar cómo interactúan los idiomas con la API de Win32 , este proceso puede deformarse aún más; la aplicación pasará por el tiempo de ejecución del lenguaje antes de pasar por la API. El ejemplo más común es la ejecución de C# a través de CLR antes de interactuar con la API de Win32 y realizar llamadas al sistema.

Inyectaremos un cuadro de mensaje en nuestro proceso local para demostrar una prueba de concepto para interactuar con la memoria.

Los pasos para escribir un cuadro de mensaje en la memoria se describen a continuación,

  1. Asigne memoria de proceso local para el cuadro de mensaje.

  2. Escriba/copie el cuadro de mensaje en la memoria asignada.

  3. Ejecute el cuadro de mensaje desde la memoria del proceso local.

En el paso uno, podemos utilizar OpenProcesspara obtener el identificador del proceso especificado.

HANDLE hProcess = OpenProcess(
	PROCESS_ALL_ACCESS, // Defines access rights
	FALSE, // Target handle will not be inhereted
	DWORD(atoi(argv[1])) // Local process supplied by command-line arguments 
);

En el paso dos, podemos utilizar VirtualAllocExpara asignar una región de memoria con el búfer de carga útil.

remoteBuffer = VirtualAllocEx(
	hProcess, // Opened target process
	NULL, 
	sizeof payload, // Region size of memory allocation
	(MEM_RESERVE | MEM_COMMIT), // Reserves and commits pages
	PAGE_EXECUTE_READWRITE // Enables execution and read/write access to the commited pages
);

En el paso tres, podemos utilizar WriteProcessMemorypara escribir la carga útil en la región de memoria asignada.

WriteProcessMemory(
	hProcess, // Opened target process
	remoteBuffer, // Allocated memory region
	payload, // Data to write
	sizeof payload, // byte size of data
	NULL
);

En el paso cuatro, podemos usar CreateRemoteThreadpara ejecutar nuestra carga útil desde la memoria.

remoteThread = CreateRemoteThread(
	hProcess, // Opened target process
	NULL, 
	0, // Default size of the stack
	(LPTHREAD_START_ROUTINE)remoteBuffer, // Pointer to the starting address of the thread
	NULL, 
	0, // Ran immediately after creation
	NULL
); 

Existen múltiples utilidades disponibles que facilitan los procesos de observación; incluidos , y .

La memoria virtual proporciona a cada proceso un . Se utiliza un administrador de memoria para traducir direcciones virtuales a direcciones físicas. Al tener un espacio de direcciones virtuales privado y no escribir directamente en la memoria física, los procesos tienen menos riesgo de causar daños.

Este espacio de direcciones se divide por la mitad, la mitad inferior ( 0x00000000 - 0x7FFFFFFF ) se asigna a los procesos como se mencionó anteriormente. La mitad superior ( 0x80000000 - 0xFFFFFFFF ) se asigna a la utilización de la memoria del sistema operativo . Los administradores pueden modificar este diseño de asignación para aplicaciones que requieren un espacio de direcciones más grande a través de la configuración ( incrementarUserVA ) o .

Los describen una DLL como "una biblioteca que contiene código y datos que pueden ser utilizados por más de un programa al mismo tiempo".

Las DLL se utilizan como una de las funcionalidades principales detrás de la ejecución de aplicaciones en Windows. Según la , "El uso de DLL ayuda a promover la modularización del código, la reutilización del código, el uso eficiente de la memoria y la reducción del espacio en disco. Por lo tanto, el sistema operativo y los programas se cargan más rápido, se ejecutan más rápido y ocupan menos espacio en el disco de la computadora". ".

DLL Hijacking ()

DLL Side-Loading ()

DLL Injection ()

En esta sala solo proporcionaremos una breve descripción general del uso de algunas llamadas API específicas relevantes para los aspectos internos de Windows. Consulte la para obtener más información sobre la API de Windows .

documentos de Microsoft
T1055
T1055.012
T1055.013
Process Hacker 2
Process Explorer
Procmon
espacio de direcciones virtuales privado
AWE ( Extensiones de ventana de direcciones )
documentos de Microsoft
documentación de Windows
T1574.001
T1574.002
T1055.001
sala API de Windows
20231023085239.png
20231023093403.png
20231023103642.png