È di pochi giorni fa la notizia della pubblicazione di un report della società di sicurezza Damballa secondo cui dal 3% al 5% di tutti i sistemi enterprise sono infetti da malware che li rende membri di grosse botnet (computer zombie, quindi). Il report prosegue poi affermando che mediamente trascorrono 54 giorni dal momento in cui un virus viene rilasciato e quello in cui il nostro antivirus riceve la signature (firma) per riconoscerlo, che circa la metà dei malware non sono stati riconosciuti come tali nel momento in cui sono giunti sul sistema testato, e che a distanza di 180 giorni da quel momento ancora ben il 15% di loro risultava non identificato.
Lo studio si basava su sei mesi di test e circa 200.000 campioni di virus sottomessi al McAfee Scan Engine 5.3. Ovviamente l’azienda sfrutta questo report per poi proporre il suo magico rimedio, ma ritengo comunque buona l’attendibilità dei dati, peraltro in linea con indagini passate.
Visto che è un tema sempre caldo, vorrei cogliere quest’occasione per discutere, in maniera, per forza di cose, coincisa, su quale sia la reale efficacia di un software antivirus.
Premetto che, per semplicità e comodità, quando in questo articolo leggerete il termine virus, non sarà da intendersi in senso stretto bensì come sinonimo di malware, ovvero un generico agente software malevolo.
Vorrei iniziare con una riflessione che dovrebbe essere abbastanza ovvia. Quando si legge di un antivirus che si fregia di un’efficacia del 98% (dato ovviamente parziale, gonfiato e manomesso) significa che circa il 2% dei virus che gli vengono sottomessi non sono riconosciuti. Sapete quanti virus vengono rilasciati ogni mese? Alcune decine di migliaia. Ciò significa che alcune centinaia di virus ogni mese potrebbero infettare con facilità il nostro sistema.
D’altro canto la situazione reale è addirittura meno rosea, e per scoprire il vero tasso d’efficacia degli antivirus basta guardare le statistiche e i report che AV-comparatives pubblica ormai da alcuni anni. In quello di novembre 2008 sono stati presi in considerazione 16 tra gli antivirus più diffusi e il migliore di essi ha riconosciuto soltanto il 70% (peraltro con un numero di falsi positivi assai elevato) dei virus sottopostigli, mentre i due peggiori un misero 20% circa; la media tra tutti è un po’ al di sotto del 50%. I dettagli guardateli voi, non mi interessa fare nomi di prodotti in questo momento.
Quest’estate si è invece svolta la Race to Zero, ovvero una competizione presso il Defcon, il più importante raduno hacker al mondo, dove i partecipanti dovevano modificare una serie di malware, forniti dagli organizzatori, per renderli non riconoscibili a una ricca serie di antivirus; la gara era suddivisa in diversi round di difficoltà crescente, vinti man mano da chi per primo rendeva i virus irriconoscibili a tutti gli antivirus.
Il contest è stato poi vinto da un team che in sei ore ha passato tutti e nove i round rendendo virus ed exploit molto famosi e pericolosi totalmente irriconoscibili per tutti gli antivirus.
Iniziative come questa hanno il merito di destare i vendor dei prodotti di security dal sonno beato che spesso li intorpidisce e gli impedisce di innovare.
Sono parecchi anni che si parla della scarsa efficacia delle attuali soluzioni antivirus, ma ben poco è stato fatto. Negli ultimi tempi i principali produttori hanno affiancato al classico approccio signature-based, un approccio euristico. In poche parole l’antivirus non analizza più solo l’”impronta digitale” del malware, bensì adotta due tipi di analisi ben più concrete: da un lato si cerca di capire staticamente quali istruzioni contiene il virus (se un software contiene istruzioni per eliminare file importanti è quantomeno sospetto), dall’altro si fa girare l’agente malevolo in un ambiente virtuale minimale al fine di analizzarne il comportamento quando in esecuzione.
Entrambi i metodi hanno però una quantità di falsi positivi abbastanza elevata ma soprattutto esistono numerose tecniche anti-antivirus per renderne difficile l’applicabilità. I virus più sofisticati sono in grado di capire quando girano in un ambiente virtuale (peraltro, i ricercatori sono soliti usare macchine virtuali come VMware per analizzare i malware) e non su un computer vero e proprio, così da modificare il loro comportamento per non farsi riconoscere e analizzare.
Inoltre, esistono tool appositi, detti packer, per rendere invisibili agli antivirus i malware, anche già noti, grazie a processi di compressione e/o criptazione (offuscamento). Ovviamente poi sono stati inventati gli unpacker, usati dai ricercatori per poter analizzare normalmente il virus.
Il polimorfismo di un virus consiste invece nel avere il corpo criptato e nel portarsi dietro una funzione di decriptazione che cambia per ogni sistema infetto, in modo che non vi siano parti statiche nel virus su cui gli antivirus possono costruire le proprie signature.
Tutto questo è stato la linfa fitale per i partecipanti del Race to Zero contest. Per chi volesse una visione approfondita di alcune tecniche di anti-emulation e anti-debugging consiglio questo articolo.
C’è poi da notare l’evoluzione che il malware in generale ha avuto negli anni: agli inizi l’infenzione di un virus era piuttosto evidente dagli strani comportamenti che poteva avere il computer vittima, oggigiorno i virus cercano invece di essere il più invisibili possibili. Cercano di passare inosservati perché non sono più dei ragazzini divertiti a scriverli, ma sono persone (magari anche sempre adolescenti) che hanno spesso a che fare col crimine informatico vero e proprio e quindi con la ricerca del profitto.
Personalmente definirei quantomeno ingenuo e borioso chi afferma “Io non ho un antivirus eppure il mio PC non è mai stato infetto, basta fare un po’ di attenzione”. Prima obiezione ovvia: come può sapere se il suo computer sia infetto o meno? È poi vero che fare un minimo di attenzione in più riduce sensibilmente la possibilità di prendersi un malware di qualche tipo, ma le loro vie di diffusione sono assai numerose e molto sofisticate, ben più di quanto possa immaginare un utente comune. La prudenza perciò non è mai troppa, come si suol dire.
Per non parlare del caso in cui un malintenzionato prenda di mira un bersaglio specifico e crei un virus ad-hoc, in questo caso sarà ancora più improbabile del solito che l’antivirus lo riconosca.
Possiamo pure dire che ho dipinto una situazione a tinte molto fosche. C’è qualche via di scampo? Dipende… Un possibile cambio radicale di approccio al problema è quello di usare dei software basati su white list, come Bouncer della CoreTrace, al posto delle black list. Questo significa adottare una logica del default deny, ovvero tutto ciò che gira sulla mia macchina gira perché gli è stato esplicitamente permesso, tutto il resto è bloccato di default. Questo è magari applicabile su un server, ma non certamente su un PC desktop: gli utenti si troverebbero ad dover dare in continuazione a nuovi processi il permesso di essere eseguiti, finendo per automatizzare il consenso, non più informato, a quel punto.
C’è poi la via del trusted computing, molto dibattuta.
Ogni computer ha una propria misura di sicurezza accettabile; il computer del nonno avrà requisiti diversi da un computer governativo (anche da un punto di vista legislativo e di standard internazionali di sicurezza). A noi fare una buona scelta di compromesso.
In conclusione, lungi da me definire inutili gli antivirus e prodotti simili, il mio intento è semplicemente quello di non farvi sovrastimare la loro efficacia. Bisogna inoltre evitare di pensare di essere al sicuro grazie ad essi e con questo avere la scusa per compiere azioni lesive per la sicurezza del proprio sistema. Un po’ come non si deve andare ai 130 Km/h in auto in città solo perché si hanno 7 airbag e cintura di sicurezza.