Negli ultimi giorni stiamo sentendo parlare di varianti del Covid-19 e come tutti i virus anche quelli informatici trovano il modo di celarsi alla vista per potersi diffondere meglio. Non è un caso che molti aspetti dell’informatica sembrano essere una sorta di “copia” di com’è la realtà. D’altronde, la natura ci offre meccanismi di una semplicità disarmante che possono facilmente essere replicati nel mondo binario dei computer.
Abbiamo già parlato in un articolo precedente di come fanno gli antivirus a trovare, fra i file che abbiamo nei nostri sistemi, quelli dannosi. In questo caso, ci poniamo dall’altro lato della barricata andando a vedere quali tecniche sono comunemente usate per elidere la protezione dei programmi anti-malware. Come ogni buon virus, la strategia principale per vivere è l’effetto sorpresa. Fintanto che riesce a replicarsi senza farsi vedere riuscirà a far danni, quando sarà noto potrà facilmente essere identificato ed eliminato.
Avevamo parlato, infatti, della capacità di scovare virus sulla base di una firma che li caratterizzano: quale tecnica migliore del trasformare il proprio codice per nascondersi? Creare una variante di sé stesso rende difficile trovare parti uguali nella copia e quindi diminuisce la probabilità di un match corretto. Le tecniche più comuni come i virus polimorfici e metamorfici realizzano proprio i meccanismi necessari a cambiare il codice per non renderlo identificabile.
L’idea alla base di questa tecnica è la cifratura. La crittografia è un algoritmo che è in grado di rendere oscuro un testo in chiaro. I cifrari sono noti nel mondo fin dall’antichità (cifrario di Cesare) e si sono evoluti con il passare del tempo. Chi è avvezzo alla sicurezza conoscerà nomi come AES, RSA, ecc. che sono i più moderni algoritmi di cifratura ma che richiedono anche una certa dose di capacità computazionale. In realtà esistono tecniche molto più semplici che si basano sulle operazioni aritmetiche o booleane. Fra questi operatori il favorito dai crittografi è lo XOR detto anche OR esclusivo.
Facciamo un esempio per capire meglio di cosa stiamo parlando. Ad ogni carattere in informatica viene associato un valore di una data codifica. Per esempio, la lettera A nella codifica ASCII corrisponde al valore esadecimale 41. Scegliendo una “chiave di codifica” (in questo caso soltanto un numero) come 68 esadecimale siamo in grado di modificare la nostra lettera iniziale. Infatti, 0x41 XOR 0x68 fa 0x29 che corrisponde al carattere parentesi tonda “)”. Allargando questo semplice concetto a una porzione di codice estesa è facile capire come sia possibile nascondere il vero codice malevolo da occhi indiscreti. Al momento opportuno sarà sufficiente decodificare il codice con la stessa chiave per ottenere il valore iniziale (0x29 XOR 0x68 fa di nuovo 0x41).
I virus polimorfici sfruttano questo meccanismo per nascondere il codice malevolo e cambiarlo ad ogni nuova infezione. Grazie a un motore polimorfico sono in grado di decifrare il codice malevolo nell’istante più appropriato, eseguirlo e quindi cambiare chiave per cifrarlo di nuovo. Il codice, di fatto, rimane lo stesso tuttavia cambia di aspetto (viene modificata la sua cifratura), rimanendo invisibile agli occhi di un antivirus che cerca sempre la stessa “firma”.
Le varianti polimorfiche dei virus informatici sono abbastanza basilari ma alcuni di loro possono completamente trasformarsi: i virus metamorfici (dal greco metamórphōsis ‘trasformazione’). Il White Paper redatto da Symantec analizza alcuni approcci tipici e ci spiega come andare a caccia di questi virus imprevedibili. Infatti, a differenza dei precedenti, i malware metamorfici utilizzano un motore per modificare tutte le parti che li compongono, compreso il motore stesso di trasformazione. Una tecnica base è per esempio il riordino del codice che può essere fatto con istruzioni di JUMP: è possibile mantenere intatta la sintassi del codice ma modificare come questo è scritto spostando righe e aggiungendo dei salti per seguire il flusso iniziale.
Tipicamente questi programmi, durante la loro esecuzione, creano una immagine temporanea della loro traduzione binaria, la modificano applicando ad esempio il riordinamento e poi si traducono di nuovo in codice macchina. In altre parole, a partire da un programma iniziale sono in grado di creare una copia del tutto diversa come forma (nessuna parte è uguale alla precedente) ma esattamente speculare in termini di funzionamento.
Con queste premesse è ormai chiaro quanto sia difficile riuscire a identificare e tener traccia di queste varianti particolari di virus informatici. Digital Guardian ci allerta sulle possibili insidie che ci sono sul web e di quanto siano ancora efficaci questi virus nonostante siamo diventati molto esperti anche nella produzione di antivirus. Infatti, i tradizionali approcci basati soltanto sulle firme risultano inefficaci. Ma naturalmente abbiamo sempre un’arma in nostro possesso e in questo caso parliamo di sandbox.
La sandbox è il nostro alleato che studia i comportamenti degli eseguibili per capire se c’è qualcosa di strano. In particolare, è proprio grazie al fatto che il virus è libero che possiamo trovarlo. Come abbiamo accennato, in entrambi i casi c’è sempre una fase temporanea e intermedia dove, nel primo caso troviamo il codice in chiaro, mentre nel secondo c’è una immagine temporanea del virus. Questi due istanti sono fondamentali e potendoli monitorare possiamo intervenire laddove troviamo comportamenti simili a quelli descritti.
In conclusione, quindi, manteniamo la massima prudenza come ogni volta quando navighiamo nel web. In caso contrario potremmo imbatterci in virus a cui… piace cambiare!