ArticoliAwarenessCyberSecurity

Come si comporta un malware?

Come si comporta un malware? Innanzitutto, i malware si distinguono in base all’intenzione del codice malevolo e normalmente si usa dividerli in alcune categorie specifiche:

  • Backdoor: letteralmente “porta sul retro” ovvero una comunicazione nascosta che viene sfruttata da un attaccante per accedere ad un sistema bypassando i normali sistemi di autenticazione. Sull’argomento, vi invitiamo a leggere il bellissimo articolo di CyberSecurity360 che potete leggere qui: https://www.cybersecurity360.it/nuove-minacce/backdoor-cosa-sono-come-funzionano-come-difendersi/;
  • Rabbit: programma malevolo che moltiplica più e più volte la propria dimensione (in termini di disco o di processi) in modo da esaurire le risorse disponibili;
  • Ransomware: divenuti particolarmente celebri a partire dal gennaio 2017 – nonostante fossero diffusi anche in precedenza – rappresentano una tipologia di malware che mira ad inibire l’accesso ai sistemi e ai dati in essi contenuti;
  • Rootkit: il rootkit è un programma o un “kit” di strumenti che tendono ad annidarsi in una postazione elettronica con l’obiettivo del mantenimento dei privilegi massimi all’interno della stessa;
  • Spyware: tipologia di malware che spia l’utente al fine di violarne la privacy o la sicurezza;
  • Trojan: malware nascosto o, per meglio dire, travestito da un programma che l’utente desidera installare;
  • Worm: rappresenta un codice che punta alla propria autoreplicazione e diffusione (es. inviando una copia di se stesso ai contatti della vittima precedente, etc.);
  • Virus: simile ai worms (cfr. sopra), rispetto a questi possiedono anche la possibilità d’alterare e/o modificare i files legittimi.

Oggi vorremmo analizzare con voi alcuni estratti di malware pubblicamente disponibili a fini di ricerca scritti in linguaggio JScript, ovvero l’implementazione di ECMAScript di Microsoft (per ulteriori informazioni/approfondimenti vi consigliamo la consultazione dei seguenti link: https://docs.microsoft.com/en-us/previous-versions/hbxc2t98(v=vs.85) e https://docs.microsoft.com/it-it/archive/blogs/jscript/).

Esistono molte analisi tecniche concernenti i malware (es. https://iopscience.iop.org/article/10.1088/1742-6596/1140/1/012042/pdf, https://sansorg.egnyte.com/dl/7WQkeUbSPW/). Noi vorremmo provvedere una brevissima escursione sulla metodologia dell’offuscamento del codice, sull’obiettivo dello stesso e sul come viene perseguito.

Dalla cattura sinottica sotto riportata si può vedere, a destra, il codice originale del malware e, a sinistra, la metodologia seguita: abbiamo infatti optato per utilizzare un approccio statico, e non dinamico. Tendenzialmente, la distinzione tra l’una e l’altra sta nell’esecuzione, o meno, di parti del malware al fine d’osservarne il comportamento operativo. Tale tecnica risulta essere particolarmente fruttuosa nel caso di malware scritti in un linguaggio con codice sorgente compilato ed è ottimale nel caso in cui l’analisi mediante un debugger, come ad esempio, Immunity, Ghidra, al fine d’ottenere un processo di reverse engineering soddisfacente, si riveli particolarmente complesso o tedioso.

Lettura sinottica codice offuscato deobfuscato

Noi abbiamo preferito analizzare manualmente il codice andando dunque ad analizzare le singole istruzioni che, per l’appunto, erano “mimetizzate” dietro a nomi più o meno casuali e, soprattutto, a quello che viene chiamato “rumore di fondo” ovverosia istruzioni – molte, moltissime istruzioni – che non apportano alcuna istruzione proficua al codice malevolo ma che sono esclusivamente dirette all’aumento della possibilità d’essere rilevati da un software antivirus (e, in particolare, delle analisi comportamentali dell’utente).

Tale rumore, tali istruzioni superflue, quindi, rappresentano molto spesso calcoli matematici quali sommatori e tangenti, con l’obiettivo di “confondere” o, più correttamente, inibire il riconoscimento automatizzato della vera intenzione del codice, specie di quello basato sull’analisi comportamentale dell’utente. L’idea è quella di far passare inosservato il vero codice che si desidera eseguire.

Rumore del codice

Come si può vedere dalla breve estrazione del codice sopraindicato e, soprattutto, dai commenti inclusi (preceduti dal doppio carattere “//”), il case in questione è quello che effettivamente rispecchia la condizione – qui non riportata – che risulta corretta. Tuttavia, il ciclo if (oddacgunrest() === 81) non potrà essere eseguito in quanto il valore della funzione non è pari a 81. Di conseguenza l’intero ciclo non viene eseguito. L’obiettivo è esattamente distrarre i software di protezione fintato che non venga correttamente eseguito il codice desiderato (escluso dalla cattura soprastante). Oltre a ciò, moltissimi malware tendono a ricostruire alcune espressioni fondamentali come, ad esempio, WScript.Shell e/o IEX.

Come riportato nella prossima immagine, in particolare, ciò viene effettuato spaccando le parole o facendole ricostruire dal pc stesso. In questo modo, ad un’analisi iniziale, non si vedono immediatamente le vere intenzionalità del codice.

Offuscamento del codice

Nel caso da noi analizzato, dunque, l’intera partita si gioca entro questi limiti: distrarre i meccanismi di difesa al fine di eseguire delle istruzioni per il download di veri e propri malware dannosi e, magari, giungere ad ottenere una persistenza (quindi una resilienza all’eliminazione) all’interno della postazione infettata.

Abbiamo dunque visto alcune tecniche basilari della scrittura dei codici malevoli: speriamo che questo aiuti non solo nella prevenzione dell’esecuzione degli stessi – aumentando quella che viene chiamata “awareness” – ma che aiuti anche a capire se, nel caso, l’azienda o l’utente siano stati “targettizzati”.


Affronta i problemi prima che si presentino: guarda come potremmo aiutarti!