Massiva campagna Ursnif, il dropper esclude 12 paesi dall’infezione

20/02/2019

malspam malware malware analysis ursnif

Nella giornata di ieri è stata registrata una corposa campagna di malspam per veicolare il malware Ursnif. La particolarità di questa campagna riguarda il fatto che il codice malevolo annidato nella macro non risulta normalmente individuabile da gran parte degli antivirus, è quanto accaduto in particolar modo nelle prime ore della diffusione.

Le tipologie di mail segnalate al CERT-PA da diversi Enti della Constituency sono di vario tipo, solitamente piuttosto sintetiche, scritte in lingua italiana e contenenti nell’oggetto le classiche keyword: “Sollecito“, “Pagamento“, “Fattura“… L’allegato malevolo in alcuni casi è situato dentro un file compresso, in altri casi viene esposto direttamente il file office.

Il documento allegato include una macro malevola che differenzia dalle altre varianti solo per qualche riga di codice. Il fatto che non venga facilmente rilevato dai software antivirus è dovuto ai vari livelli di offuscamento utilizzati per celare il codice originale. Inoltre, si ha evidenza che molte delle sandbox online non riescono ad attivare la componente malevola della macro e restituiscono un esito di analisi negativo.

Algoritmo di infezione

Il codice della macro fa uso del parametro xlCountrySetting per verificare le impostazioni della lingua. Il valore 39 riguarda l’Italia.

Dopo aver ottenuto il valore numerico corrispondente al paese di appartenenza, un algoritmo verifica che quel valore rientri nella lista dei paesi da compromettere.

Il calcolo viene effettuato mediante una espressione che confronta se il valore di xlCountrySetting moltiplicato per 3 risulta maggiore di xlTickLabelPositionHigh moltiplicato per -1 e diviso per 36. Tale codice riscritto in forma più elegante è del tipo:

If (xlCountrySetting * 3) > (xlTickLabelPositionHigh * -1 / 36) Then
  execute code
Else
  exit code

Come già detto, nel caso dell’Italia il valore di xlCountrySetting è 39, mentre il valore del parametro xlTickLabelPositionHigh è di -4127, un valore negativo.

In definitiva, considerando i seguenti valori dei parametri:

xlCountrySetting = 39 (Italia)
xlTickLabelPositionHigh = -4127

Nel nostro caso (Italia) l’espressione diventa la seguente:

If (39 * 3) > (-4127 * -1 / 36) Then

Il motivo per cui dalle macchine italiane l’infezione va a buon fine è spiegato dal fatto che la condizione prevista dall’algoritmo risulta soddisfatta:

If 117 > 114,63 Then
   execute code

Lista dei Paesi esclusi dall’infezione

Secondo quanto stabilito attraverso l’algoritmo di verifica, i paesi di cui il country code non soddisfa la disequazione, e quindi immuni all’infezione, sono i seguenti:

  1. Canada
  2. United States
  3. Kazakhstan
  4. Russia
  5. Egypt
  6. South Africa
  7. Greece
  8. Netherlands
  9. Belgium
  10. France
  11. Spain
  12. Hungary

Indicatori di compromissione

IoC (.txt) – File globale : Domini, hash files (SHA1, MD5 e SHA256), IPv4
IoC (HASHr.txt) – Lista dei soli hash file da utilizzare in combinazione con il tool HASHr