Occultamento Macro tramite P-code: VBA Stomping (T1564.007)

Il VBA Stomping è una tecnica di evasione difensiva catalogata sotto TA0005 (Defense Evasion) che sfrutta una peculiarità architetturale dei documenti Microsoft Office contenenti macro. Quando un file .docm, .xlsm o .pptm viene salvato, il codice VBA viene memorizzato in due forme distinte all'interno dei module stream: il sorgente compresso e una versione precompilata chiamata p-code, custodita nel PerformanceCache. L'esecuzione dipende dalla corrispondenza tra la versione di Office indicata nello stream _VBA_PROJECT e quella dell'applicazione host.

L'attaccante sfrutta questa dualità sovrascrivendo il sorgente VBA con byte nulli, codice benigno o dati casuali, lasciando intatto il p-code malevolo. Il risultato è devastante per le pipeline di analisi statica: strumenti che ispezionano il sorgente vedono codice innocuo (o nessuna macro), mentre Office esegue silenziosamente il p-code compromesso.

La tecnica si colloca tipicamente nella fase di weaponization e initial access della kill chain, spesso in combinazione con phishing mirato. Il suo impatto è rilevante perché molti scanner enterprise e sandbox automatizzate — anche di fascia alta — hanno storicamente valutato solo il sorgente VBA, ignorando il p-code. La contromisura MITRE censita è M1042 (Disable or Remove Feature or Program), che raccomanda di disabilitare i componenti VB non necessari negli ambienti aziendali dove le macro non sono richieste per processi di business.

Simulare il VBA Stomping in laboratorio richiede la comprensione del formato Compound File Binary (CFB) usato da Office. Il tool di riferimento nella comunità è EvilClippy (open source), sviluppato da Outflank e disponibile su GitHub, che implementa direttamente lo stomping delle macro. Un flusso operativo tipico su Windows parte da un documento .docm contenente una macro AutoOpen che lancia PowerShell o esegue shellcode via CreateObject("WScript.Shell").

La catena si sviluppa in tre fasi. Prima si genera il payload malevolo in VBA e lo si salva nel documento con Office della stessa versione della vittima target (fondamentale per il matching di _VBA_PROJECT). Il comando di stomping tipico è:

EvilClippy.exe -s fake.vba -t 2019x86 payload.docm

Dove -s sostituisce il sorgente con un file benigno (fake.vba può contenere un semplice MsgBox "Hello") e -t specifica la versione target di Office per garantire l'esecuzione del p-code. Il flag -g consente di rendere invisibili i moduli VBA nell'IDE integrato, aumentando ulteriormente l'occultamento.

Su Linux, la controparte analitica è oletools (open source) del progetto decalage2, in particolare olevba e pcodedmp. Per la simulazione red team, si può usare pcodedmp (open source) per verificare che il p-code stomped sia effettivamente diverso dal sorgente:

pcodedmp -d payload.docm

e confrontarlo con:

olevba payload.docm

Se le due uscite divergono in modo significativo, lo stomping è riuscito.

Per catene più elaborate, il payload VBA può caricare shellcode tramite DynamicWrapperX o eseguire in-memory download-and-execute con URLDownloadToFileA via Declare PtrSafe. Gli operatori maturi combinano lo stomping con VBA purging (rimozione totale del sorgente lasciando solo p-code) usando il flag -r di EvilClippy, che rende il file completamente invisibile agli scanner classici.

In un ingaggio autorizzato è essenziale documentare la versione esatta di Office bersaglio: un mismatch causa la ricompilazione del sorgente benigno e il fallimento del payload. Su macOS, dove Office ha un runtime VBA differente, la tecnica è meno affidabile: le versioni Office for Mac 2019+ ricompilano più frequentemente il sorgente, riducendo la finestra operativa. Test in sandbox isolate (FLARE VM (open source) o REMnux (open source)) sono lo standard per validare la resa reale prima del deployment.

Vuoi diventare un Ethical Hacker ma non sai da dove iniziare?

Accedi alle lezioni gratuite e segui il percorso corretto fin dal primo passo

TEST GRATUITO
2 minuti · 7 domande Che professionista cyber sei? Scopri il profilo più vicino al tuo modo di pensare e inizia dal percorso giusto.
We use cookies

Utilizziamo i cookie sul nostro sito Web. Alcuni di essi sono essenziali per il funzionamento del sito, mentre altri ci aiutano a migliorare questo sito e l'esperienza dell'utente (cookie di tracciamento). Puoi decidere tu stesso se consentire o meno i cookie. Ti preghiamo di notare che se li rifiuti, potresti non essere in grado di utilizzare tutte le funzionalità del sito.