21/08/2024
PEC vidar
A distanza di due settimane ritorna un’ondata di malspam tramite PEC mirata a diffondere il malware Vidar. Il nuovo modello di email sembra essere una risposta alla comunicazione precedente e include un link che permette di scaricare un file JavaScript malevolo, solo dopo aver verificato lato backend che la richiesta provenga da un client Windows.
Le PEC inviate utilizzano sottodomini diversi dello stesso dominio. Grazie alla collaborazione con i Gestori PEC sono state identificate centinaia di URL di repository da cui si ottiene un file JavaScript con hash di volta in volta differente il cui deoffuscamento rimanda sempre alla stessa URL.
Al fine di velocizzare il processo di decodifica abbiamo predisposto uno script Python che risolve il file JavaScript tramite l’inserimento delle due righe di codice esadacimale hex_qckwduarn
e hex_iytmehmnkezyoqj
, le uniche variabili presenti nel codice JS.
def gbyqqhnfbzucrwe(hex_string):
if not isinstance(hex_string, str):
raise ValueError('check input')
if len(hex_string) % 2 != 0:
raise ValueError('printing')
xxcnsnbrsjdynz = []
for i in range(0, len(hex_string), 2):
kutjzmolspwdm = hex_string[i:i+2]
raxhndodgjn = 0
for j in range(len(kutjzmolspwdm)):
raxhndodgjn <<= 4
wiuvbhshwuvaxub = kutjzmolspwdm[j]
if '0' <= wiuvbhshwuvaxub <= '9':
raxhndodgjn |= ord(wiuvbhshwuvaxub) - ord('0')
elif 'A' <= wiuvbhshwuvaxub <= 'F':
raxhndodgjn |= ord(wiuvbhshwuvaxub) - ord('A') + 10
elif 'a' <= wiuvbhshwuvaxub <= 'f':
raxhndodgjn |= ord(wiuvbhshwuvaxub) - ord('a') + 10
else:
raise ValueError('document ready')
xxcnsnbrsjdynz.append(raxhndodgjn)
return xxcnsnbrsjdynz
def xor_strings(qckwduarn, iytmehmnkezyoqj):
nvjmkwcdjxiydgjz = ''
for i in range(len(qckwduarn)):
nvjmkwcdjxiydgjz += chr(qckwduarn[i] ^ iytmehmnkezyoqj[i % len(iytmehmnkezyoqj)])
return nvjmkwcdjxiydgjz
# INSERIRE QUI LE STRINGHE ESADECIMALI
hex_qckwduarn = ''
hex_iytmehmnkezyoqj = ''
qckwduarn = gbyqqhnfbzucrwe(hex_qckwduarn)
iytmehmnkezyoqj = gbyqqhnfbzucrwe(hex_iytmehmnkezyoqj)
nvjmkwcdjxiydgjz = xor_strings(qckwduarn, iytmehmnkezyoqj)
print("Decodifica:")
print(nvjmkwcdjxiydgjz)
iheezmyxtsthutoe = [
'winmgmts:root\\cimv2:Win32_Process',
'less powershel',
'conhost --head',
nvjmkwcdjxiydgjz,
'time',
]
eddvxaxeqs = ''
array = iheezmyxtsthutoe
arrayLength = len(array)
dcmqzdmh = 0
for index in range(arrayLength):
if index >= 1898:
break
znlhotuowotfpa = array[1898 - index - 1] if 1898 - index - 1 < arrayLength else ''
qohziolvyweuizfz = array[1898 - index] if 1898 - index < arrayLength else ''
ueoicmlokwxmqh = array[1898 - index + 1] if 1898 - index + 1 < arrayLength else ''
dcmqzdmh = znlhotuowotfpa + qohziolvyweuizfz + ueoicmlokwxmqh
eddvxaxeqs = dcmqzdmh
print("Comandi da eseguire:")
print("Create:", iheezmyxtsthutoe[0])
print("Create:", iheezmyxtsthutoe[1])
print("Create:", eddvxaxeqs)
L’output ottenuto contiene un array di numeri interi, in questo caso assegnati alla variabile $avvlqzhpv
e il valore numerico da sottrarre (8524
):
A questo punto la URL da cui ottenere il primo payload può essere facilmente risolta.
Dalla nuova URL viene fornito un ulteriore JavaScript contenente il payload finale, che a sua volta rimanda a una nuova URL, anch’essa con dominio .top
. Questa URL richiede un parametro key
univoco per fornire l’eseguibile finale. Nel nostro caso, le chiavi recuperate erano già state utilizzate.
Azioni di contrasto
Le attività di contrasto sono state già messe in atto con il supporto dei Gestori PEC che hanno provveduto a bloccare gli indirizzi coinvolti nell’invio delle mail malevole. Gli IoC relativi alla campagna sono stati diramati attraverso il Feed IoC del CERT-AgID verso i Gestori PEC e verso le strutture accreditate.
Si invita a prestare sempre attenzione a questo genere di comunicazioni. Nel dubbio, è possibile inoltrare email ritenute sospette alla casella di posta [email protected]
Indicatori di Compromissione
Al fine di rendere pubblici i dettagli della campagna odierna si riportano di seguito gli IoC rilevati:
Link: Download IoC