
Prueba de concepto, herramienta y análisis técnico profundo de Process Herpaderping. Process Herpaderping sortea los productos de seguridad ocultando las intenciones de un proceso.
[
][png.HerpaderpIcon]
Process Herpaderping es un método para ocultar las intenciones de un proceso
modificando el contenido en disco después de que la imagen haya sido mapeada. Esto
resulta en un comportamiento curioso por parte de los productos de seguridad y del propio sistema operativo.
![][png.mimioogle]
![][gif.SurivDemo]
Generalmente, un producto de seguridad actúa sobre la creación de procesos registrando un callback en el kernel de Windows ([PsSetCreateProcessNotifyRoutineEx][msdn.PsSetCreateProcessNotifyRoutineEx]). En ese momento, un producto de seguridad puede inspeccionar el archivo que se usó para mapear el ejecutable y determinar si este proceso debe permitirse ejecutar. Este callback del kernel se invoca cuando se inserta el hilo inicial, no cuando se crea el objeto del proceso.
Debido a esto, un actor puede crear y mapear un proceso, modificar el contenido del
archivo y luego crear el hilo inicial. Un producto que realice la inspección en el
callback de creación vería el contenido modificado. Además, algunos productos
utilizan un enfoque de escaneo en escritura que consiste en monitorear las escrituras en archivos.
Una optimización común aquí es registrar que el archivo ha sido escrito y
diferir la inspección real hasta que ocurra [IRP_MJ_CLEANUP][msdn.IRP_MJ_CLEANUP]
(por ejemplo, cuando se cierra el identificador del archivo). Por lo tanto, un actor que
utilice un flujo de trabajo escribir -> mapear -> modificar -> ejecutar -> cerrar
sorteará el escaneo en escritura que se basa únicamente en la inspección en
[IRP_MJ_CLEANUP][msdn.IRP_MJ_CLEANUP].
Para abusar de esta convención, primero escribimos un binario en un archivo destino en disco. Luego, mapeamos una imagen del archivo destino y se la proporcionamos al sistema operativo para que la use en la creación del proceso. El sistema operativo amablemente mapea el binario original por nosotros. Usando el identificador de archivo existente, y antes de crear el hilo inicial, modificamos el contenido del archivo destino para ocultar o falsear el archivo que respalda la imagen. Algún tiempo después, creamos el hilo inicial para comenzar la ejecución del binario original. Finalmente, cerraremos el identificador del archivo destino. Recorramos esto paso a paso:
NtCreateProcessEx).NtCreateThreadEx).
![][svg.StateDiagram]
@startuml
hide empty description
[*] --> CreateFile
CreateFile --> FileHandle
FileHandle --> Write
FileHandle --> NtCreateSection
Write -[hidden]-> NtCreateSection
NtCreateSection --> SectionHandle
SectionHandle --> NtCreateProcessEx
FileHandle --> Modify
NtCreateProcessEx -[hidden]-> Modify
NtCreateProcessEx --> NtCreateThreadEx
Modify -[hidden]-> NtCreateThreadEx
NtCreateThreadEx --> [*]
FileHandle --> CloseFile
NtCreateThreadEx -[hidden]-> CloseFile
NtCreateThreadEx --> PspCallProcessNotifyRoutines
PspCallProcessNotifyRoutines -[hidden]-> [*]
CloseFile --> IRP_MJ_CLEANUP
IRP_MJ_CLEANUP -[hidden]-> [*]
PspCallProcessNotifyRoutines --> Inspect
PspCallProcessNotifyRoutines -[hidden]-> CloseFile
IRP_MJ_CLEANUP --> Inspect
Inspect -[hidden]-> [*]
CreateFile : Create target file, keep handle open.
Write : Write source payload into target file.
Modify : Obscure the file on disk.
NtCreateSection : Create section using file handle.
NtCreateProcessEx : Image section for process is mapped and cached in file object.
NtCreateThreadEx : The cached section is used.
NtCreateThreadEx : Process notify routines fire in kernel.
Inspect : The contents on disk do not match what was executed.
Inspect : Inspection of the file at this point will result in incorrect attribution.
@enduml
Verá en la demostración a continuación que se utiliza CMD.exe como destino de ejecución.
La primera ejecución sobrescribe los bytes en disco con un patrón. La segunda ejecución sobrescribe
CMD.exe con ProcessHacker.exe. La herramienta Herpaderping arregla el binario para
que se parezca lo más posible a ProcessHacker.exe, incluso conservando la firma
original. Observe las múltiples ejecuciones del mismo binario y cómo el proceso
se ve para el usuario en comparación con lo que hay en el archivo en disco.
![][gif.ProcessHerpaderp]
![][png.procmon]
Hemos observado el comportamiento y parte de esto puede ser sorprendente. Intentemos explicar este comportamiento.
[Inmersión técnica profunda][md.DivingDeeper]
Al diseñar productos para asegurar plataformas Windows, muchos ingenieros en este campo (yo incluido) han caído en nociones preconcebidas con respecto a cómo el sistema operativo manejará los datos. En este escenario, algunos podrían esperar que el archivo en disco permanezca "bloqueado" cuando se crea el proceso. No se puede eliminar el archivo. No se puede escribir en él. Pero se puede renombrar. Como se ve aquí, bajo las condiciones adecuadas, de hecho se puede escribir en él. Permanezcan vigilantes sobre sus suposiciones, cuéstionenlas siempre e investiguen.
La motivación para esta investigación surgió al descubrir cómo realizar análisis cuando se escribe un archivo. Con antecedentes previos investigando el Hollowing de procesos y el Doppelganging, había teorizado que esto podría ser posible. El objetivo es proporcionar una mejor seguridad. No se puede crear una mejor cerradura sin antes comprender cómo romper la antigua.
Herpaderping es similar a Hollowing y Doppelganging, sin embargo, hay algunas diferencias clave:
Process Hollowing implica modificar la sección mapeada antes de que comience la ejecución,
lo que abstractamente se ve así: mapear -> modificar sección -> ejecutar. Este flujo de trabajo
hace que el flujo de ejecución previsto del proceso hollowed (vaciado) diverja hacia
código no previsto. Doppelganging podría considerarse una forma de Hollowing.
Sin embargo, Hollowing, en mi opinión, está más cerca de la inyección en el sentido de que
generalmente implica una escritura explícita en el código ya mapeado. Esto difiere
de Herpaderping donde no hay secciones modificadas.
Process Doppelganging está más cerca de Herpaderping. Doppelganging abusa de
operaciones de archivos transaccionados y generalmente implica estos pasos:
transaccionar -> escribir -> mapear -> revertir -> ejecutar.
En este flujo de trabajo, el sistema operativo creará la sección de imagen y tendrá en cuenta las
transacciones, por lo que la sección de imagen en caché termina siendo lo que se escribió en la