Fileless Malware — Process Ghosting — KING HAMLET — TOOL

Iker
6 min readJun 22, 2021
King Hamlet — The Ghost

El 15 de junio de 2021, el investigador Gabriel Landau, realizo la publicación de un artículo, en el cual mostraba una nueva técnica para poder crear procesos sin que estos tuvieran un archivo en disco asociado; esta técnica es llamada “Process Ghosting[i], y, consiste de forma general en los siguientes pasos:

1. Realizar la creación del archivo objetivo que queremos correr como un proceso.

2. Marcar el archivo en estado de “pendiente de borrado” a través de un API que nos provee el sistema operativo.

3. Escribir el programa a disco a través del descriptor de archivo que hemos obtenido en el primer paso.

4. Crear una sección de imagen para el archivo.

5. Cerrar el archivo, lo cual ocasionara que se borre inmediatamente.

6. Crear un proceso a partir de la imagen de sección que hemos obtenido en el paso 4.

7. Asignar las variables de entorno y argumentos al proceso que recién hemos creado.

8. Crear un hilo de ejecución para lograr que el proceso inicie su ejecución.

APIs utilizadas en los pasos, Azul API Estándar, Verde — API Especializada

Si hemos seguido todos los pasos correctamente, contaremos con un proceso que, aunque se está ejecutando de forma normal, el archivo en disco que corresponde al ejecutable no existe; logrando así un proceso que en múltiples casos no puede ser analizado por otros elementos sobre el sistema… como, por ejemplo, una solución antivirus.

Basado en esta técnica, he desarrollado la herramienta “King Hamlet”, una implementación para realizar “Process Ghosting” de otros archivos, la cual tiene dos funciones principales, la primera, cifrar un archivo utilizando AES-128 ECB con una llave proporcionada por el usuario; y, la segunda, utilizar la técnica de Process Ghosting para crear un proceso a partir del archivo de entrada, el cual corresponde al que hemos cifrado en pasos anteriores; la necesidad de cifrar el archivo es para que el mismo no sea detectado por herramientas de seguridad.

[i] https://www.elastic.co/blog/process-ghosting-a-new-executable-image-tampering-attack

TL;DR — COMO CREAR UN PROCESO FANTASMA

Windows, a pesar de impulsar fuertemente su plataforma “Universal Windows Platform”, no ha conseguido que sea adoptada de forma tan masiva, como lo fue su plataforma WinAPI (Win32), siendo esta ultima para la cual están diseñados la mayoría de programas que usamos en el sistema operativo, esto hace que se tenga que cargar con una gran cantidad de retrocompatibilidad sobre el sistema, dentro de las funcionalidades de esta plataforma se encuentra mapeada la lógica que permite que un proceso inicie, y es allí, donde reside en gran parte un fallo que nos permite crear procesos fantasmas y que además, estos no puedan ser identificados por soluciones antivirus.

Antivirus

Los antivirus, de forma general, aprovechan varios de los elementos expuestos por WinAPI, con el fin establecer notificaciones en caso que se creen nuevos archivos, llaves del registro, procesos, hilos de ejecución, librerías dinámicas, etc; estas APIs, le permiten al antivirus, el cual, generalmente corre como un driver sobre el sistema, saber en que momento debe analizar un elemento nuevo sobre el sistema; sin embargo, existe un API que no se corresponde con la funcionalidad que pareciera sugerir “PsSetCreateProcessNotifyRoutineEx”; esta API, solamente notifica cuando se crea un proceso mediante APIs estándar, como “CreateProcess”, “CreateProcessAsUser” y “CreateProcessWithLogon”; las cuales realmente son abstracciones de las APIs de bajo nivel utilizadas para crear un proceso, esto dado que un Proceso se compone del proceso, el cual engloba todas las variables, parámetros y demás elementos asignados por el sistema; y del hilo de ejecución, el cual es el que se encarga de realizar la ejecución del código que compone al programa. En el caso que no utilicemos las APIs estándar, sino, las de bajo nivel, podríamos crear un proceso y luego un hilo, teniendo un paso extra, también tenemos una ventana de oportunidad para modificar el proceso (Y el archivo base de este) antes de que se le notifique de la operación a una solución antivirus.

Ilustración 2 — Notificación de la creación del procesos y pasos del Antivirus

Adicionalmente a lo anterior, existen ciertos “Hooks” que provee Windows, los cuales permiten ser llamadas tanto post como pre-ejecución de ciertas APIs[ii], lo cual, permite realizar análisis a profundidad de la funcionalidad de los procesos, sin embargo, no son realmente utilizadas (Al menos por defecto) por las soluciones más extendidas comercialmente; dado la auto-limitación impuesta por la mayroai de antivirus, en la cual bien solamente se analiza el proceso a partir del archivo base, y en muy contadas ocasiones la memoria del mismo, o bien, no se analiza la memoria si no se ubica el archivo base; un proceso que no tenga un archivo en disco asociado, no será analizado en la mayoría de los casos; es este fallo el que es posible explotar mediante el uso de un API de bajo nivel como lo es “NtSetInformationFile”.

NtSetInformationFile

Las APIs de Windows con prefijos como “Nt”, “Ke”, “Io”, “Zw”; son en general APIs de bajo nivel, esto implica que son APIs expuestas directamente por el kernel o la librería NTDll; estas, comúnmente son utilizadas mayormente por Drivers y están relacionadas con operaciones avanzadas, las cuales terminan siendo abstraídas por otras librerías; la función “NtSetInformationFile” en particular, tiene como objetivo, modificar la información base de un objeto asociado a un archivo, estos cambios, pueden ir desde la fecha de creación, modificación, etc; hasta la creación de accesos directos o vínculos al archivo; de interés resulta la funcionalidad de especirficar al sistema operativo como debería borrar un archivo; allí se nos exponen las siguientes opciones en las dos versiones del API:

Dada la especificación, la versión básica del API nos permite borrar el archivo en el momento que este sea cerrado, sin embargo, en la especificación de la versión extendida, identificamos que por una parte es un API que cambia el archivo a un estado bloqueante y por ende no es posible por parte de otros procesos abrir el archivo en el estado actual, y por otra que el contenido que escribamos al archivo, no es persistido a disco, dado que el archivo va a ser eliminado; sin embargo, otros procesos que tengan un objeto con acceso de lectura al archivo, previamente a la llamada al API, pueden leer su contenido.

Utilizando la función “NtSetInformationFile” en conjunto con “NTCreateProcess” es posible crear un proceso, lo anterior dado, que “NTCreateProcess” no recibe como parámetros un objeto que este asociado a un archivo en disco, si no a una “Section”, que es en general una imagen del archivo, mapeada en memoria y que se utiliza para identificar las librerías que utilizar el proceso, las funciones expuestas, etc; por lo que es perfectamente viable que si logramos crear una “Section” (La cual si requiere un objeto que apunte a un archivo), y, posteriormente borrar el archivo a partir del cual la imagen fue creada, sin que el Antivirus pueda analizar el archivo, lograremos tener un proceso sin un archivo base.

Demostración funcionamiento “King Hamlet

[ii] https://s7d2.scene7.com/is/content/cylance/prod/cylance-web/en-us/resources/knowledge-center/resource-library/white-papers/Universal_Unhooking.pdf

King Hamlet — Tool

King Hamlet es una herramienta sencilla, la cual permite cifrar un archivo, el cual posteriormente se ubica en el sistema a atacar, y se utiliza la misma herramienta para descifrar el archivo y ejecutarlo mediante la técnica de “Process Ghosting”; esto permite evadir una cantidad significativa de soluciones de seguridad.

Información de uso de “King Hamlet

Es importante aclarar que, en la opción de ejecutar un archivo, el “targetfile.exe”, no es necesariamente un nombre significativo, y su objetivo es entregar una opción para no sobrescribir elementos que ya se encuentren presentes sobre el sistema.

Repositorio GitHub King Hamlet:

Demos:

McAfee Bypass
TrendMicro Maximum Security Bypass

Creditos:

https://www.elastic.co/blog/process-ghosting-a-new-executable-image-tampering-attack
https://github.com/hasherezade/process_doppelganging
https://github.com/bricke/tiny-AES-C
https://www.blackhat.com/docs/eu-17/materials/eu-17-Liberman-Lost-In-Transaction-Process-Doppelganging.pdf

--

--

Iker

CyberSecurity, Information Security, Tech and Data Enthusiast, Amateur Developer