Tácticas del equipo rojo: técnicas avanzadas de monitoreo de procesos en operaciones ofensivas

Hola de nuevo. En la víspera del Pentest. Práctica de prueba de penetración ” tradujo otro material interesante para usted.




En este artículo, comprenderemos las capacidades de las conocidas utilidades de monitoreo de procesos y demostraremos cómo usar la tecnología subyacente a estas herramientas para las operaciones ofensivas del Equipo Rojo.

Una buena comprensión técnica del sistema en el que confiamos es un criterio clave para tomar decisiones sobre cuál será el próximo paso de la operación. La recopilación y el análisis de datos sobre procesos en ejecución en sistemas comprometidos nos brinda una gran cantidad de información y nos ayuda a comprender cómo funciona la infraestructura de TI de la organización objetivo. Además, los datos de proceso solicitados periódicamente nos ayudan a responder a los cambios ambientales y a recibir señales de activación cuando comienza una investigación.

Para poder recopilar datos detallados sobre procesos en puntos finales comprometidos, creamos un conjunto de herramientas que reunieron el poder de las utilidades de procesos avanzadas y los marcos C2 (como Cobalt Strike).

Las herramientas (y su código fuente) se pueden encontrar aquí .

Utilidades internas del sistema de Windows


Para comenzar, descubriremos qué utilidades se pueden usar para recopilar información sobre procesos informáticos en Windows. Luego aprendemos cómo estas utilidades recopilan información para que luego puedan usarse en los kits de herramientas de Red Team.

El sistema operativo Windows está equipado con muchas utilidades preparadas para administrar el sistema. Aunque la mayoría de las herramientas proporcionadas son adecuadas para fines de administración básica del sistema, algunas de ellas no tienen las funciones necesarias para la resolución avanzada de problemas y el monitoreo. Por ejemplo, el administrador de tareas de Windows nos brinda información básica sobre todos los procesos que se ejecutan en el sistema, pero ¿qué sucede si necesitamos información más detallada, como descriptores de objetos, conexiones de red o módulos cargados como parte de un proceso específico?

Para recopilar dicha información hay una herramienta más avanzada. Por ejemplo, las utilidades del sistema del paquete Sysinternals. Como miembro del Equipo Rojo con amplia experiencia en administración de redes y sistemas, siempre he sido un gran admirador de Sysinternals.

Cuando soluciono problemas de un sistema de servidor de ejecución lenta o una computadora cliente infectada, a menudo comencé a solucionar problemas usando herramientas como Process Explorer o Procmon.
Desde el punto de vista del análisis forense digital, estas herramientas también parecen muy útiles para realizar análisis dinámicos básicos de muestras de malware y buscar artefactos en sistemas infectados. Entonces, ¿por qué estas herramientas son tan populares entre los administradores de sistemas y los profesionales de seguridad? Vamos a resolverlo, profundizando en cierta información del proceso que podemos obtener utilizando la herramienta Process Explorer.

Usando Process Explorer


Lo primero que vemos al iniciar Process Explorer es una lista / árbol de todos los procesos en ejecución del sistema. Esto nos brinda información sobre los nombres de los procesos, sus identificadores, el contexto del usuario y el nivel de integridad del proceso y la información de la versión. La información adicional también se puede reflejar ajustando las columnas en consecuencia.



Si utilizamos el panel inferior, podremos ver todos los módulos cargados por un proceso en particular, o pasar a ver descriptores para familiarizarnos con todos los objetos descriptores nombrados que utiliza el proceso:



Los módulos de navegación pueden ser útiles al buscar bibliotecas maliciosas cargadas en el proceso o para Red Team, es un producto de seguridad activo (por ejemplo, EDR) que ha implementado un módulo de conexión API en modo de usuario.



Cambiar a descriptores de visualización le permite familiarizarse con el tipo y el nombre de todos los objetos con nombre utilizados en el proceso. Esto puede ser útil para averiguar qué archivos y claves de registro están abiertos, qué canalizaciones con nombre se utilizan para la comunicación entre procesos.
Si hace doble clic en el nombre del proceso, aparecerá una ventana con información más detallada. Veamos algunas pestañas para conocer las propiedades adicionales del objeto:



pestaña Imagenmuestra información sobre la ruta binaria, el directorio de trabajo y las opciones de línea de comandos. Además, muestra información sobre el contexto del usuario, el proceso principal, el tipo de imagen (x86 o x64) y mucho más.



El Hilos pestaña contiene información sobre cómo ejecutar las discusiones en el proceso. Cuando selecciona una secuencia y luego hace clic en ella, el botón de pila reflejará la pila de llamadas para esta secuencia en particular. Para ver subprocesos / llamadas iniciadas en modo kernel, Process Explorer usa el controlador kernel, que se instala cuando se trabaja en modo elevado.

Desde el punto de vista de DFIR, la información de hilos es útil para detectar inyecciones en la memoria, por ejemplo, cuando existe una amenaza de virus sin archivos. Por lo tanto, las transmisiones que no están respaldadas por archivos en el disco pueden indicar un comportamiento sospechoso. Para obtener más información sobre hilos y memoria, le recomiendo que preste atención a la herramienta Process Hacker .



Otra pestaña interesante en Process Explorer es la pestaña TCP / IP. En él verá todas las conexiones de red asociadas con este proceso. Desde el punto de vista del ataque, esto puede ser útil para comprender cuándo se realiza una conexión desde un sistema comprometido. Una sesión remota entrante de PowerShell o una sesión RDP puede indicar que una investigación ya ha comenzado.

Usando los métodos discutidos para el ataque


Ahora que hemos aprendido algunas cosas interesantes sobre los procesos y sobre la información que podemos recopilar sobre ellos utilizando Process Explorer, puede preguntarse cómo acceder a esta información desde nuestros marcos C2 favoritos. Por supuesto, podríamos usar PowerShell, ya que esto nos daría la oportunidad de usar un poderoso lenguaje de scripting y API de Windows. Sin embargo, hoy PowerShell está bajo la supervisión constante del servicio de seguridad, por lo que intentamos evitar este método.

En Cobalt Strike, podemos usar el comando ps en el contexto de las balizas. Este comando muestra información básica sobre el proceso en función de todos los procesos que se ejecutan en el sistema. En combinación con un script @r3dQu1nn ProcessColor, es probable que este método sea el mejor para obtener datos del proceso.

El resultado del comando ps es útil para ordenar rápidamente los procesos en ejecución, pero no contienen información detallada que pueda ayudarlo a comprender mejor el sistema. Para recopilar información más detallada, creamos nuestras propias utilidades para obtener información sobre los procesos. Con su ayuda, podemos recopilar y enriquecer la información obtenida de los sistemas comprometidos.

Ps herramientas


No es fácil replicar la funcionalidad y la información proporcionadas por una herramienta como Process Explorer. Primero necesitamos descubrir cómo funcionan estas herramientas bajo el capó (y en modo de usuario), luego debemos entender cómo reflejar mejor esta información en la consola y no en la interfaz gráfica.

Después de analizar el código fuente, quedó claro que muchas herramientas de bajo nivel para proporcionar información del sistema se basan en gran medida en la API nativa NtQuerySystemInformation . Aunque la API y sus estructuras asociadas no están completamente documentadas, esta API le permite recopilar mucha información sobre el sistema Windows. Entonces, usando NtQuerySystemInformationComo punto de partida para recopilar información sobre los procesos que se ejecutan en el sistema, utilizaremos el PEB de procesos individuales para recopilar información detallada sobre cada uno de ellos. Usando la API NtQueryInformationProcess, podemos leer la estructura PROCESS_BASIC_INFORMATIONusando el descriptor de proceso y encontrarla PebBaseAddress. Luego usamos la NtReadVirtualMemoryAPI para leer la estructura RTL_USER_PROCESS_PARAMETERS, lo que nos permitirá conocer los parámetros ImagePathNamey el CommandLineproceso.

Utilizando estas API como base de nuestro código, hemos escrito las siguientes herramientas para obtener información sobre procesos:

  • Psx : muestra una lista detallada de todos los procesos que se ejecutan en el sistema.
  • Psk : muestra información del kernel, incluidos los controladores cargados.
  • Psc: TCP-.
  • Psm: ( , ).
  • Psh: (, , ).
  • Psw: .

Todas estas herramientas están escritas en C como DLL reflectantes y pueden integrarse reflexivamente en un proceso generado utilizando un marco C2 como Cobalt Strike (o cualquier otro marco que admita inyecciones reflectantes de DLL). Para Cobalt Strike, hemos agregado un script de agresor que puede usarse para cargar herramientas usando el administrador de script de Cobalt Strike.

Veamos cada herramienta específica lanzada en Cobalt Strike para demostrar la funcionalidad y mostrar qué información se puede recopilar al usarla:

Psx


Esta herramienta muestra una lista detallada de todos los procesos que se ejecutan en el sistema. La salida se puede comparar con la información en la pantalla principal de Process Explorer. Psx muestra el nombre del proceso, su identificación, PID padre, tiempo de creación e información relacionada con los archivos binarios del proceso (arquitectura, nombre de la compañía, versión, etc.). Como puede ver, también muestra información interesante del núcleo activo del sistema, por ejemplo, la dirección base del núcleo, que es útil cuando se opera el núcleo (por ejemplo, para calcular las compensaciones de los dispositivos ROP). Toda esta información se puede recopilar desde un contexto de usuario normal (sin elevación de privilegios).



Si tenemos suficientes permisos para abrir el descriptor de proceso, puede leer información adicional, como el contexto del usuario y el nivel de integridad de su token. Enumerar PEB y las estructuras relacionadas le permite obtener información sobre la ruta de la imagen y los parámetros de la línea de comando:



Como habrá notado, leemos y mostramos información de la versión de las imágenes de procesos binarios, por ejemplo, el nombre y la descripción de la compañía. Conociendo el nombre de la empresa, puede enumerar fácilmente todos los productos de seguridad activos en el sistema. Con esta herramienta, comparamos los nombres de empresas de todos los procesos activos con una lista de proveedores conocidos de productos de seguridad y mostramos los resultados:



Psk


Esta herramienta refleja información sobre el núcleo en ejecución, incluidos todos los módulos de controladores cargados. Al igual que la herramienta Psx, también proporciona un resumen de todos los módulos de kernel cargados de productos de seguridad conocidos.



Psc


Esta herramienta utiliza los mismos métodos para mostrar información sobre procesos activos que Psx , excepto que muestra solo procesos con una conexión de red activa (IPv4, IPv6 TCP, RDP, ICA):



Psm


Puede usar esta herramienta para obtener información detallada sobre un proceso específico. Mostrará una lista de todos los módulos (DLL) utilizados por el proceso y la conexión de red:



Psh


Lo mismo que Psm , pero en lugar de módulos cargados, muestra una lista de descriptores de proceso:



Psw


La última pero no menos importante herramienta Psw . Esta herramienta mostrará una lista de procesos con identificadores de ventana activos, aquellos que están abiertos en el escritorio del usuario, incluidos los títulos de las ventanas. Esto es útil para determinar qué interfaces de aplicaciones gráficas abre el usuario sin tener que tomar capturas de pantalla del escritorio:



Casos de uso


Te preguntarás: "¿Y cómo nos ayuda todo esto en las operaciones ofensivas?" Después de obtener acceso a un activo comprometido, usualmente usamos esta información para los siguientes propósitos:

  • Detecta herramientas de seguridad en un activo comprometido. No solo por información de proceso, sino también por módulos cargados.
  • Detección de motores de gancho personalizados.
  • Busque oportunidades de maniobras (a través de sesiones de red) y escalada de privilegios.

Después del primer compromiso, puede solicitar periódicamente información similar sobre los procesos y comenzar a crear desencadenantes. Por ejemplo, ingresamos automáticamente esta información en RedELK . Luego puede crear alertas sobre cambios sospechosos en la información del proceso, tales como:

  • Inicie una herramienta de auditoría de seguridad o instale un nuevo producto de seguridad de punto final.
  • Conexiones de red entrantes desde el departamento de seguridad a través de una sesión RDP o PowerShell remoto.
  • Abrir un identificador por otro proceso en uno de nuestros artefactos maliciosos (por ejemplo, un archivo utilizado para preservar la presencia).

Conclusión


En este artículo, mostramos cómo se pueden utilizar herramientas como Sysinternals Process Explorer para obtener información detallada sobre los procesos que se ejecutan en el sistema, y ​​cómo esta información puede ayudar a los administradores y profesionales de seguridad a solucionar y verificar el sistema en busca de problemas de seguridad o actuación.

La misma información también es relevante y útil para Red Team, que tiene acceso a sistemas comprometidos durante la operación. Ayuda a comprender mejor el sistema y la infraestructura de TI de su objetivo, y el cuestionamiento periódico de dicho sistema permite que el Equipo Rojo responda a posibles cambios en el entorno (por ejemplo, un desencadenante de investigación).

Hemos replicado algunas de las funcionalidades proporcionadas por herramientas como Process Explorer, por lo que podemos usar la misma información en operaciones ofensivas. Para hacer esto, se han creado varias herramientas de monitoreo de procesos que pueden usarse como parte del marco C2, por ejemplo, Cobalt Strike. Mostramos cómo usar estas herramientas y qué información puede usar para recopilarlas.

Estas herramientas están disponibles en nuestra página de GitHub y están listas para usar como parte de Cobalt Strike.



Aprende más sobre el curso.



All Articles