Skip to content
KitploitKITPLOIT
HerramientasBlog
Enviar
HerramientasBlog
Enviar

¡Herramientas de Hacking, PenTest y Ciberseguridad para tu Arsenal de Seguridad!

Kitploit es un directorio de herramientas de hacking, ciberseguridad y pentesting. Descubre las últimas actualizaciones de proyectos para encontrar vulnerabilidades, analizar sistemas, automatizar pruebas y fortalecer tu seguridad.

··Feeds·Contacto·Privacidad·© 2026 Kitploit

Directorio de Herramientas

Categorías

Ver todas las categorías
Loading categories
herpaderping — 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. | Kitploit
Herramientas/GitHubGitHub/jxy-s/herpaderping
Herramientas DefensivasExplotaciónPruebas de Penetración
GitHubjxy-s/herpaderping

herpaderping

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.

Ver Repositorio
1.2k2241hace 3 añosRevisado por Kitploit

Más Populares

Ver todos →

Descubre las herramientas más usadas por nuestra comunidad.

Explora todas las herramientas

Explora nuestra colección de herramientas

Ver todas las herramientas →
Compartir

Process Herpaderping

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.

Resumen

Generalmente, un producto de seguridad actúa sobre la creación de procesos registrando un callback en el kernel de Windows (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 (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.

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:

  1. Escribir el binario destino en disco, manteniendo el identificador abierto. Esto es lo que se ejecutará en memoria.
  2. Mapear el archivo como una sección de imagen (NtCreateSection, SEC_IMAGE).
  3. Crear el objeto del proceso usando el identificador de sección (NtCreateProcessEx).
  4. Usando el mismo identificador de archivo destino, ocultar el archivo en disco.
  5. Crear el hilo inicial en el proceso (NtCreateThreadEx).
    • En este punto, el callback de creación de procesos en el kernel se disparará. El contenido en disco no coincide con lo que fue mapeado. La inspección del archivo en este momento resultará en una atribución incorrecta.
  6. Cerrar el identificador. IRP_MJ_CLEANUP ocurrirá aquí.
    • Dado que hemos ocultado el contenido de lo que se está ejecutando, la inspección en este punto resultará en una atribución incorrecta.

plantuml

root@kitploit:~
@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

Comportamiento

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.

Profundizando

Hemos observado el comportamiento y parte de esto puede ser sorprendente. Intentemos explicar este comportamiento.

Inmersión técnica profunda

Antecedentes y Motivación

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.

Técnicas Similares

Herpaderping es similar a Hollowing y Doppelganging, sin embargo, hay algunas diferencias clave:

Process Hollowing

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

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 transacción. El sistema operativo ha parcheado esta técnica. Bueno, parchearon el bloqueo que causaba. Quizás consideran esto un uso "legal" de una transacción. Afortunadamente, Windows Defender detecta la técnica Doppelganging. Doppelganging difiere de Herpaderping en que Herpaderping no depende de operaciones de archivos transaccionados. Y Defender no detecta Herpaderping.

Comparación

Para referencia, las técnicas generalizadas:

TipoTécnica
Hollowingmapear -> modificar sección -> ejecutar
Doppelgangingtransaccionar -> escribir -> mapear -> revertir -> ejecutar
Herpaderpingescribir -> mapear -> modificar -> ejecutar -> cerrar

Podemos ver las diferencias expuestas aquí. Si bien Herpaderping es posiblemente más ruidoso que Doppelganging, en el sentido de que los bits maliciosos sí llegan al disco, hemos visto que los productos de seguridad siguen siendo incapaces de detectar Herpaderping.

Posible Solución

No hay una solución clara aquí. Parece razonable que evitar que una sección de imagen sea mapeada/almacenada en caché cuando hay acceso de escritura al archivo debería cerrar la brecha. Sin embargo, eso puede o no ser una solución práctica.

Otra opción podría ser vaciar los cambios realizados al archivo a través de la sección de imagen en caché si aún no se ha mapeado en un proceso. Sin embargo, dado que el mapeo en el nuevo proceso ocurre en NtCreateProcess, probablemente esa no sea una solución viable.

Desde el punto de vista de la detección, no hay una buena manera de identificar los bits reales que se mapearon; la inspección en IRP_MJ_CLEANUP o en un callback registrado en PsSetCreateProcessNotifyRoutineEx resulta en una atribución incorrecta ya que los bits en disco han sido cambiados; habría que reconstruir el archivo a partir de la sección que se creó. Vale la pena señalar aquí que hay un nuevo callback en Windows 10 que se puede registrar: PsSetCreateProcessNotifyRoutineEx2; sin embargo, este sufre el mismo problema que el callback anterior: se invoca cuando se ejecuta el hilo inicial, no cuando se crea el objeto del proceso. Microsoft agregó PsSetCreateThreadNotifyRoutineEx, el cual se invoca cuando se inserta el hilo inicial si se registra con PsCreateThreadNotifyNonSystem, a diferencia de cuando está a punto de comenzar la ejecución (como hacía el callback anterior). Extender PSCREATEPROCESSNOTIFYTYPE para que se invoque cuando se crea el objeto del proceso tampoco ayudará; hemos visto en la sección Profundizando que el objeto de la sección de imagen se almacena en caché en la llamada a NtCreateSection, no en NtCreateProcess.

No podemos identificar fácilmente qué se ejecutó. Nos queda intentar detectar el comportamiento explotador por parte del actor; dejo el descubrimiento de los indicadores de comportamiento como ejercicio para el lector.

Plataformas Afectadas Conocidas

A continuación se muestra una lista de productos y sistemas operativos Windows que han sido probados a fecha de (31/8/2020). Las pruebas se realizaron con un binario malicioso conocido.

Divulgación Responsable

Esta vulnerabilidad fue divulgada al Microsoft Security Response Center (MSRC) el 17/7/2020 y se abrió un caso por MSRC el 22/7/2020. MSRC concluyó su investigación el 25/8/2020 y determinó que los hallazgos son válidos pero no cumplen con su criterio para un servicio inmediato. En este momento, su caso está cerrado, sin resolución, y marcado para revisión futura, sin un cronograma.

No estamos de acuerdo con la gravedad de este error; esto fue comunicado a MSRC el 27/8/2020.

  1. Existen vulnerabilidades similares en esta clase (Hollowing y Doppelganging).
  2. Se demuestra que la vulnerabilidad derrota las características de seguridad inherentes al sistema operativo (Windows Defender).
  3. La vulnerabilidad permite a un actor obtener ejecución de código arbitrario.
  4. El usuario no es notificado de la ejecución de código no previsto.
  5. La información del proceso presentada al usuario no refleja con precisión lo que se está ejecutando.
  6. Las facilidades para identificar con precisión el proceso no son intuitivas o son incorrectas, incluso desde el kernel.

Fuente

Este repositorio contiene una herramienta para ejercitar el método Herpaderping de ofuscación de procesos. El uso es el siguiente:

root@kitploit:~
Process Herpaderping Tool - Copyright (c) Johnny Shaw
ProcessHerpaderping.exe SourceFile TargetFile [ReplacedWith] [Options...]
Usage:
  SourceFile               Source file to execute.
  TargetFile               Target file to execute the source from.
  ReplacedWith             File to replace the target with. Optional,
                           default overwrites the binary with a pattern.
  -h,--help                Prints tool usage.
  -d,--do-not-wait         Does not wait for spawned process to exit,
                           default waits.
  -l,--logging-mask number Specifies the logging mask, defaults to full
                           logging.
                               0x1   Successes
                               0x2   Informational
                               0x4   Warnings
                               0x8   Errors
                               0x10  Contextual
  -q,--quiet               Runs quietly, overrides logging mask, no title.
  -r,--random-obfuscation  Uses random bytes rather than a pattern for
                           file obfuscation.
  -e,--exclusive           Target file is created with exclusive access and
                           the handle is held open as long as possible.
                           Without this option the handle has full share
                           access and is closed as soon as possible.
  -u,--do-not-flush-file   Does not flush file after overwrite.
  -c,--close-file-early    Closes file before thread creation (before the
                           process notify callback fires in the kernel).
                           Not valid with "--exclusive" option.
  -k,--kill                Terminates the spawned process regardless of
                           success or failure, this is useful in some
                           automation environments. Forces "--do-not-wait
                           option.

Clonación y Compilación

El repositorio utiliza submódulos; después de clonar, asegúrese de inicializar y actualizar los submódulos. Los archivos de proyecto están orientados a Visual Studio 2019.

root@kitploit:~
git clone https://github.com/jxy-s/herpaderping.git
cd .\herpaderping\
git submodule update --init --recursive
MSBuild .\herpaderping.sln

Créditos

Los siguientes se utilizan sin modificaciones. Créditos a sus autores.

  • Windows Implementation Libraries (WIL)
    Una biblioteca C++ de solo encabezados creada para facilitar la vida de los desarrolladores en Windows a través de interfaces C++ tipificadas y legibles para patrones comunes de codificación en Windows.
  • Process Hacker Native API Headers
    Colección de archivos de encabezado de la API nativa. Recopilados de archivos de encabezado y archivos de símbolos de Microsoft, así como de mucha ingeniería inversa y conjeturas.
Descargar herramienta
Sistema OperativoVersiónVulnerable
Windows 7 Enterprise x866.1.7601Sí
Windows 10 Pro x6410.0.18363.900Sí
Windows 10 Pro Insider Preview x6410.0.20170.1000Sí
Windows 10 Pro Insider Preview x6410.0.20201.1000Sí
Producto de SeguridadVersiónVulnerable
Windows Defender AntiMalware Client4.18.2006.10Sí
Windows Defender Engine1.1.17200.2Sí
Windows Defender Antivirus1.319.1127.0Sí
Windows Defender Antispyware1.319.1127.0Sí
Windows Defender AntiMalware Client4.18.2007.6Sí
Windows Defender Engine1.1.17300.2Sí
Windows Defender Antivirus1.319.1676.0Sí
Windows Defender Antispyware1.319.1676.0Sí
Windows Defender AntiMalware Client4.18.2007.8Sí
Windows Defender Engine1.1.17400.5Sí
Windows Defender Antivirus1.323.267.0Sí
Windows Defender Antispyware1.323.267.0Sí