Skip to content
KitploitKITPLOIT
StrumentiExploitsBlog
Log in
Invia
StrumentiExploitsBlog
Invia

Strumenti di Hacking, PenTest e Cybersecurity per il tuo Arsenale di Sicurezza!

Kitploit è una directory di strumenti di hacking, cybersecurity e pentesting. Scopri gli ultimi aggiornamenti dei progetti per trovare vulnerabilità, analizzare sistemi, automatizzare i test e rafforzare la tua sicurezza.

··Feed·Contatto·Privacy·© 2026 Kitploit

Directory degli strumenti

Categorie

Vedi tutte le categorie
Loading categories
herpaderping — Proof of concept, strumento e approfondimento tecnico di Process Herpaderping. Process Herpaderping aggira i prodotti di sicurezza oscurando le intenzioni di un processo. | Kitploit
Strumenti/GitHubGitHub/jxy-s/herpaderping
Strumenti DifensiviExploitPenetration Testing
GitHubjxy-s/herpaderping

herpaderping

Proof of concept, strumento e approfondimento tecnico di Process Herpaderping. Process Herpaderping aggira i prodotti di sicurezza oscurando le intenzioni di un processo.

Vedi Repository
1.2k22493 anni faRevisionato da Kitploit

Più Popolari

Vedi tutti →

Scopri gli strumenti più utilizzati dalla nostra community.

Esplora tutti gli strumenti

Sfoglia la nostra collezione di strumenti

Vedi tutti gli strumenti →
Condividi

Process Herpaderping

[][png.HerpaderpIcon] Process Herpaderping è un metodo per oscurare le intenzioni di un processo modificando il contenuto su disco dopo che l'immagine è stata mappata. Ciò risulta in un comportamento curioso da parte dei prodotti di sicurezza e del sistema operativo stesso.

![][png.mimioogle]

![][gif.SurivDemo]

Sommario

Generalmente, un prodotto di sicurezza interviene sulla creazione di un processo registrando un callback nel kernel di Windows ([PsSetCreateProcessNotifyRoutineEx][msdn.PsSetCreateProcessNotifyRoutineEx]). A questo punto, un prodotto di sicurezza può ispezionare il file usato per mappare l'eseguibile e determinare se questo processo deve essere autorizzato a essere eseguito. Questo callback del kernel viene invocato quando il thread iniziale viene inserito, non quando l'oggetto processo viene creato.

A causa di ciò, un attore può creare e mappare un processo, modificare il contenuto del file, quindi creare il thread iniziale. Un prodotto che effettua l'ispezione al callback di creazione vedrebbe il contenuto modificato. Inoltre, alcuni prodotti utilizzano un approccio di scansione su scrittura che consiste nel monitorare le scritture dei file. Un'ottimizzazione comune qui è registrare che il file è stato scritto e rimandare l'ispezione effettiva fino a quando non si verifica [IRP_MJ_CLEANUP][msdn.IRP_MJ_CLEANUP] (ad esempio quando l'handle del file viene chiuso). Pertanto, un attore che utilizza un flusso di lavoro write -> map -> modify -> execute -> close eluderà la scansione su scrittura che si basa esclusivamente sull'ispezione a [IRP_MJ_CLEANUP][msdn.IRP_MJ_CLEANUP].

Per abusare di questa convenzione, scriviamo prima un binario su un file di destinazione su disco. Quindi, mappiamo un'immagine del file di destinazione e la forniamo al sistema operativo da usare per la creazione del processo. Il sistema operativo mappa gentilmente il binario originale per noi. Usando l'handle del file esistente, e prima di creare il thread iniziale, modifichiamo il contenuto del file di destinazione per oscurare o falsificare il file che supporta l'immagine. Qualche tempo dopo, creiamo il thread iniziale per iniziare l'esecuzione del binario originale. Infine, chiuderemo l'handle del file di destinazione. Esaminiamolo passo dopo passo:

  1. Scrivi il binario di destinazione su disco, mantenendo l'handle aperto. Questo è ciò che verrà eseguito in memoria.
  2. Mappa il file come sezione immagine ([NtCreateSection][msdn.NtCreateSection], [SEC_IMAGE][msdn.SEC_IMAGE]).
  3. Crea l'oggetto processo usando l'handle della sezione (NtCreateProcessEx).
  4. Usando lo stesso handle del file di destinazione, oscura il file su disco.
  5. Crea il thread iniziale nel processo (NtCreateThreadEx).
    • A questo punto il callback di creazione del processo nel kernel scatterà. I contenuti su disco non corrispondono a ciò che è stato mappato. L'ispezione del file in questo momento porterà a un'attribuzione errata.
  6. Chiudi l'handle. [IRP_MJ_CLEANUP][msdn.IRP_MJ_CLEANUP] si verificherà qui.
    • Poiché abbiamo nascosto i contenuti di ciò che è in esecuzione, l'ispezione in questo momento porterà a un'attribuzione errata.

![][svg.StateDiagram]

plantuml

@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 : Crea il file di destinazione, mantieni l'handle aperto.
Write : Scrivi il payload sorgente nel file di destinazione.
Modify : Oscura il file su disco.
NtCreateSection : Crea la sezione usando l'handle del file.
NtCreateProcessEx : La sezione immagine per il processo viene mappata e memorizzata nella cache nell'oggetto file.
NtCreateThreadEx : La sezione in cache viene utilizzata.
NtCreateThreadEx : Le routine di notifica del processo scattano nel kernel.
Inspect : I contenuti su disco non corrispondono a ciò che è stato eseguito. 
Inspect : L'ispezione del file in questo momento porterà a un'attribuzione errata.
@enduml

Comportamento

Vedrai nella demo qui sotto, CMD.exe è usato come destinazione di esecuzione. La prima esecuzione sovrascrive i byte su disco con un pattern. La seconda esecuzione sovrascrive CMD.exe con ProcessHacker.exe. Lo strumento Herpaderping aggiusta il binario per assomigliare il più possibile a ProcessHacker.exe, conservando persino la firma originale. Nota le molteplici esecuzioni dello stesso binario e come il processo appare all'utente rispetto a ciò che è nel file su disco.

![][gif.ProcessHerpaderp]

![][png.procmon]

Approfondimento

Abbiamo osservato il comportamento e parte di questo potrebbe sorprendere. Proviamo a spiegare questo comportamento.

[Approfondimento tecnico][md.DivingDeeper]

Contesto e Motivazione

Nella progettazione di prodotti per la protezione delle piattaforme Windows, molti ingegneri in questo settore (me compreso) hanno fatto affidamento su nozioni preconcette riguardo a come il sistema operativo gestirà i dati. In questo scenario, alcuni potrebbero aspettarsi che il file su disco rimanga "bloccato" quando il processo viene creato. Non puoi eliminare il file. Non puoi scriverci. Ma puoi rinominarlo. Come si vede qui, nelle giuste condizioni, puoi effettivamente scriverci. Rimani vigile sulle tue supposizioni, mettile sempre in discussione e fai le tue ricerche.

La motivazione per questa ricerca è nata quando ho scoperto come eseguire l'analisi quando un file viene scritto. Con il precedente background nella ricerca su Process Hollowing e Doppelganging, avevo teorizzato che questo potesse essere possibile. L'obiettivo è fornire una migliore sicurezza. Non puoi creare una serratura migliore senza prima capire come rompere quella vecchia.

Tecniche Simili

Herpaderping è simile a Hollowing e Doppelganging, tuttavia ci sono alcune differenze chiave:

Process Hollowing

Process Hollowing implica modificare la sezione mappata prima che l'esecuzione inizi, che in astratto appare così: map -> modify section -> execute. Questo flusso di lavoro porta il flusso di esecuzione previsto del processo Hollowed a divergere in codice non inteso. Doppelganging potrebbe essere considerato una forma di Hollowing. Tuttavia, Hollowing, a mio parere, è più vicino all'iniezione in quanto Hollowing di solito implica una scrittura esplicita nel codice già mappato. Questo differisce da Herpaderping dove non ci sono sezioni modificate.

Scarica lo strumento