# Virus (informatica)

Un virus, in informatica, è un software appartenente alla categoria dei malware che, una volta eseguito, infetta dei file in modo da fare copie di se stesso, generalmente senza farsi rilevare dall'utente. Il termine viene usato per un programma che si integra in qualche codice eseguibile (incluso il sistema operativo) del sistema informatico vittima, in modo tale da diffondersi su altro codice eseguibile quando viene eseguito il codice che lo ospita, senza che l'utente ne sia a conoscenza.
I virus entrano nel computer sfruttando le vulnerabilità (exploit) dell'applicazione o del sistema operativo e arrecando danni al sistema, rallentando o rendendo inutilizzabile il dispositivo infetto. I virus comportano dunque un certo spreco di risorse in termini di RAM, CPU e spazio sul disco fisso. Come regola generale si assume che un virus possa danneggiare direttamente solo il software della macchina che lo ospita, anche se esso può indirettamente provocare danni anche all'hardware, ad esempio causando il surriscaldamento della CPU mediante overclocking, oppure fermando la ventola di raffreddamento. La parola è spesso erroneamente utilizzata in sineddoche per parlare di malware. Ne è un esempio il diffuso termine antivirus.

## Storia
### I primi studi e la definizione

Nel 1949 John von Neumann dimostrò matematicamente la possibilità di costruire un programma per computer in grado di replicarsi autonomamente. Il concetto di programma auto-replicante trovò la sua evoluzione pratica nei primi anni '60 nel gioco ideato da un gruppo di programmatori dei Bell Laboratories della AT&T chiamato "Core War", nel quale più programmi si dovevano sconfiggere sovrascrivendosi a vicenda.
Il termine virus venne adottato la prima volta da Fred Cohen (1984) della University of Southern California nel suo scritto Experiments with Computer Viruses (Esperimenti con i virus per computer), dove questi indicò Leonard Adleman come colui che aveva adattato tale termine dalla biologia. La definizione di virus era la seguente:
«Un virus informatico è un programma che ricorsivamente ed esplicitamente copia una versione possibilmente evoluta di sé stesso».
Ma il termine era già stato utilizzato prima. Nel 1972 David Gerrold scrisse un romanzo di fantascienza La macchina di D.I.O. (When H.A.R.L.I.E. was One), dove è presente una descrizione di un programma per computer chiamato VIRUS che adotta il medesimo comportamento di un virus. Nel 1975 John Brunner scrisse il romanzo Codice 4GH (The Shockwave Rider) in cui sono descritti programmi chiamati tapeworms che si infiltrano nella rete con lo scopo di cancellare tutti i dati. Nel 1973 la frase "virus del computer" era stata usata nel film Il mondo dei robot (Westworld). Il termine virus del computer con il significato corrente è inoltre presente anche nell'albo a fumetti Uncanny X-Men n. 158, pubblicato nel 1982. Si può dunque affermare che Cohen fece per primo uso della parola virus solo in campo accademico, dato che questa era già presente nella lingua parlata.

### I primi programmi famosi

Il primo malware della storia informatica è stato Creeper, un programma scritto per verificare la possibilità che un codice potesse replicarsi su macchine remote. Il programma chiamato Elk Cloner è invece accreditato come il primo virus per computer apparso al mondo. Fu creato nel 1982 da Rich Skrenta sul DOS 3.3 della Apple e l'infezione era propagata con lo scambio di floppy disk: il virus era presente nel settore di boot di un disco infetto e veniva caricato in memoria insieme al sistema operativo all'avvio del computer. Dalla metà degli anni novanta, con la diffusione di internet, i virus ed i cosiddetti malware in generale, iniziarono a diffondersi assai più velocemente, usando la rete e lo scambio di e-mail come mezzo per nuove infezioni.
Il primo virus informatico che si guadagnò notorietà a livello mondiale venne creato nel 1986 da due fratelli pakistani proprietari di un negozio di computer per punire, secondo la loro versione, chi copiava illegalmente il loro software. Il virus si chiamava Brain, si diffuse in tutto il mondo, e fu il primo esempio di virus che infettava il settore di avvio del DOS.
Il primo file infector apparve nel 1987. Si chiamava Lehigh e infettava solo il file command.com. Nel 1988 Robert Morris Jr. creò il primo worm a diffondersi via internet, il Morris worm. L'anno seguente, nel 1989, fecero la loro comparsa i primi virus polimorfi, con uno dei più famosi: Vienna, e venne diffuso il trojan AIDS (conosciuto anche come Cyborg), molto simile al trojan dei nostri giorni chiamato PGPCoder. Entrambi infatti codificano i dati del disco fisso chiedendo poi un riscatto all'utente per poter recuperare il tutto.
Nel 1995 comparve il primo dei macrovirus, virus scritti nel linguaggio di scripting di programmi di Microsoft come Word ed Outlook che infettano soprattutto le varie versioni dei programmi Microsoft attraverso lo scambio di documenti. Concept fu il primo macro virus della storia. Nel 1998 la nascita di un altro dei virus storici, Chernobyl o CIH, famoso perché sovrascriveva il BIOS della scheda madre e la tabella delle partizioni dell'hard disk infettato ogni 26 del mese.

### Internet e la diffusione

La diffusione di massa di Internet nella fine degli anni 90 determina la modifica delle tecniche di propagazione virale: in questa fase i worm si diffondono prevalentemente via e-mail. Tra i worm di maggior spicco antecedenti al 2000: Melissa, Happy99 e Bubbleboy, il primo worm capace di sfruttare una falla di Internet Explorer e di autoeseguirsi da Outlook Express senza bisogno di aprire l'allegato.
Nel 2000 il famoso I Love You che dà il via al periodo degli script virus, i più insidiosi tra i virus diffusi attraverso la posta elettronica perché sfruttano la possibilità, offerta da diversi programmi come Outlook e Outlook Express di eseguire istruzioni attive (dette script), contenute nei messaggi di posta elettronica scritti in HTML per svolgere azioni potenzialmente pericolose sul computer del destinatario. I virus realizzati con gli script sono i più pericolosi perché possono attivarsi da soli appena il messaggio viene aperto per la lettura. I Love You si diffuse attraverso la posta elettronica in milioni di computer di tutto il mondo, al punto che per l'arresto del suo creatore, un ragazzo delle Filippine, dovette intervenire una squadra speciale dell'FBI. Era un messaggio di posta elettronica contenente un piccolo programma che istruiva il computer a rimandare il messaggio appena arrivato a tutti gli indirizzi contenuti nella rubrica della vittima, in questo modo generando una specie di catena di sant'Antonio automatica che saturava i server di posta.
Dal 2001 si è registrato un incremento di worm che, per diffondersi, approfittano di falle di programmi o sistemi operativi senza bisogno dell'intervento dell'utente. L'apice nel 2003 e nel 2004: SQL/Slammer, il più rapido worm della storia - in quindici minuti dopo il primo attacco, Slammer aveva già infettato metà dei server che tenevano in piedi internet mettendo fuori uso i bancomat della Bank of America, spegnendo il servizio di emergenza 911 a Seattle e provocando la cancellazione per continui inspiegabili errori nei servizi di biglietteria e check-in di alcune compagnie aeree; ed i due worm più famosi della storia: Blaster e Sasser. Nel giugno 2009 è nata una nuova tipologia di virus che ha come bersaglio sistemi informatici industriali, il primo virus di questa nuova tipologia è stato Stuxnet che ha preso di mira i sistemi SCADA.

## Descrizione

Un virus è composto da un insieme di istruzioni, come qualsiasi altro programma per computer. È solitamente composto da un numero molto ridotto di istruzioni, ed è specializzato per eseguire soltanto poche e semplici operazioni e ottimizzato per impiegare il minor numero di risorse, in modo da rendersi il più possibile invisibile. Caratteristica principale di un virus è quella di riprodursi e quindi diffondersi nel computer ogni volta che viene aperto il file infetto.
Tuttavia, un virus di per sé non è un programma eseguibile. Un virus, per essere attivato, deve infettare un programma ospite, o una sequenza di codice che viene lanciata automaticamente, come ad esempio nel caso dei boot sector virus. La tecnica solitamente usata dai virus è quella di infettare i file eseguibili: il virus inserisce una copia di sé stesso nel file eseguibile che deve infettare, pone tra le prime istruzioni di tale eseguibile un'istruzione di salto alla prima linea della sua copia ed alla fine di essa mette un altro salto all'inizio dell'esecuzione del programma. In questo modo quando un utente lancia un programma infettato viene da prima impercettibilmente eseguito il virus, e poi il programma. L'utente vede l'esecuzione del programma e non si accorge che il virus è ora in esecuzione in memoria e sta compiendo le varie operazioni contenute nel suo codice.
Principalmente un virus esegue copie di sé stesso, ma può avere anche altri compiti molto più dannosi (cancellare o rovinare dei file, formattare l'hard disk, aprire delle backdoor, far apparire messaggi, disegni o modificare l'aspetto del video, installare altri malware, ed altre attività minacciose per un sistema informatico.

### Componenti

I virus informatici più semplici sono composti da due parti essenziali, sufficienti ad assicurarne la replicazione:
* una routine di ricerca, che si occupa di ricercare dei file adatti ad essere infettati dal virus e controlla che gli stessi non ne contengano già una copia, per evitare una ripetuta infezione dello stesso file;
* una routine di infezione, con il compito di copiare il codice virale all'interno di ogni file selezionato dalla routine di ricerca perché venga eseguito ogni volta che il file infetto viene aperto, in maniera trasparente rispetto all'utente.
Molti virus sono progettati per eseguire del codice estraneo alle finalità di replicazione del virus stesso e contengono dunque altri due elementi:
* la routine di attivazione, che contiene i criteri in base ai quali il virus decide se effettuare o meno l'attacco (es. una data, o il raggiungimento di un certo numero di file infetti);
* il payload, una sequenza di istruzioni in genere dannosa per il sistema ospite, come ad esempio la cancellazione di alcuni file o la visualizzazione di messaggi popup sullo schermo (gli adware sono malware che si specializzano nel far apparire banner pubblicitari su computer della vittima).
I virus possono essere criptati e magari cambiare algoritmo e/o chiave ogni volta che vengono eseguiti, quindi possono contenere altri tre elementi:
* una routine di decifratura, contenente le istruzioni per decifrare il codice del virus;
* una routine di cifratura, di solito criptata essa stessa, che contiene il procedimento per criptare ogni copia del virus;
* una routine di mutazione, che si occupa di modificare le routine di cifratura e decifratura per ogni nuova copia del virus.

### Modalità di diffusione

Ciò che distingue i virus propriamente detti dai worm è la modalità di replicazione e di diffusione: un virus è un frammento di codice che non può essere eseguito separatamente da un programma ospite, quindi si deve appoggiare ad un altro programma/eseguibile per essere attivato, mentre un worm è un software applicativo a sé, e nonostante sia più grande, non deve copiarsi in altri file, ma è sufficiente che sia eseguito. Inoltre, alcuni worm sfruttano per diffondersi delle vulnerabilità di sicurezza, e non dipendono quindi dal fatto di ingannare l'utente per farsi eseguire, infatti vengono eseguiti in automatico.

### Ciclo di vita di un virus

I virus informatici presentano numerose analogie con quelli biologici per quello che riguarda il ciclo di vita, che si articola nelle fasi seguenti:
* creazione: è la fase in cui lo sviluppatore progetta, programma e diffonde il virus. Di solito i cracker per la realizzazione di virus utilizzano linguaggi di programmazione a basso livello (ad esempio l'assembly) in modo da ottenere codice virale di pochi centinaia di byte.
* incubazione: il virus è presente sul computer da colpire ma non compie alcuna attività. Rimane inerte fino a quando non si verificano le condizioni per la sua attivazione;
* infezione: il virus infetta il file e di conseguenza il sistema
* attivazione: al verificarsi delle condizioni prestabilite dal cracker, il virus inizia l'azione dannosa.
* propagazione: il virus propaga l'infezione, riproducendosi e infettando sia file nella stessa macchina che altri sistemi.
* riconoscimento: l'antivirus riconosce un certo file come infetto. Tale riconoscimento può avvenire in più modi, a seconda di com'è fatto il virus e di quali algoritmi l'antivirus utilizza per la scansione del sistema e dei file che contiene. In casi particolari, se ad esempio il virus non è abbastanza diffuso, può non avvenire affatto, e quindi il virus può proliferare infettando sempre più file, e quindi diffondersi verso ulteriori PC.
* estirpazione: è l'ultima fase del ciclo vitale del virus. Il virus viene eliminato dal sistema: di solito questa fase non viene eseguita direttamente dall'utente, ma da un software antivirus che cerca di fermare in qualche modo l'infezione.

## Criteri di classificazione dei virus

I virus informatici possono essere suddivisi in categorie in base alle seguenti caratteristiche:
* ambiente di sviluppo
* capacità operative degli algoritmi
* nocività (possibili danni provocati).

### Ambiente di sviluppo

I virus si sviluppano su diversi supporti fisici e per questo sono classificabili in:
* file virus, che a loro volta si dividono in:
** parasitic virus;
** companion virus;
** virus link;
* boot virus;
* macro virus;
* network virus.
Esistono poi combinazioni delle caratteristiche precedenti: ad esempio vi sono virus che sono contemporaneamente file virus e boot virus. In tal caso il loro algoritmo di infezione è più complesso, potendo eseguire attacchi differenti.
Si possono incontrare anche in versioni infette dei giochi che si scaricano gratis da Internet, come 4Story, Cabal e così via. In qualche caso gli utenti hanno riscontrato particolari problemi di annidamento di virus nella cache di Java.

### Capacità operative degli algoritmi

In base alle caratteristiche dei loro algoritmi, i virus si distinguono in:
* TSR virus;
* virus polimorfi;
* stealth virus
In generale non esistono molti virus informatici che sono solo stealth, polimorfici o TSR, perché sarebbero facilmente individuabili. In realtà i computer virus sono formati da una combinazione dei precedenti.

### Possibili danni

A seconda del tipo di danni causati, i virus possono essere:
* innocui: se comportano solo una diminuzione dello spazio libero sul disco senza nessun'altra alterazione delle operazioni del computer;
* non dannosi: se comportano solo una diminuzione dello spazio libero sul disco, col mostrare grafici, suoni o altri effetti multimediali.
* dannosi: possono provocare problemi alle normali operazioni del computer (ad esempio, cancellazione di alcune parti dei file, modifica di file o apertura di applicazioni);
* molto dannosi: Causano danni difficilmente recuperabili, come la cancellazione di informazioni fondamentali per il sistema (formattazione di porzioni del disco, modifica dei parametri di sicurezza del sistema operativo, ...).

## Sintomi più frequenti di infezione

* Rallentamento del computer: il computer lavora molto più lentamente del solito. Impiega molto tempo ad aprire applicazioni o programmi. Il sistema operativo impiega molto tempo ad eseguire semplici operazioni che solitamente non richiedono molto tempo, questo segnale è il più comune e si manifesta quasi ogni volta che viene eseguito;
* Impossibilità di eseguire un determinato programma o aprire uno specifico file;
* Scomparsa di file e cartelle: i file memorizzati in determinate cartelle (di solito quelle appartenenti al sistema operativo o a determinate applicazioni) vengono cancellati (totalmente o in parte) o resi inaccessibili all'utente;
* Impossibilità di accesso al contenuto di file: all'apertura di un file, viene visualizzato un messaggio di errore o semplicemente risulta impossibile aprirlo. Un virus potrebbe aver modificato la File Allocation Table (FAT) provocando la perdita degli indirizzi che sono il punto di partenza per la localizzazione dei file;
* Messaggi di errore inattesi o insoliti: visualizzazione di finestre di dialogo contenenti messaggi assurdi, buffi, dispettosi o aggressivi;
* Riduzione di spazio nella memoria e nell'hard disk: riduzione significativa dello spazio libero nell'hard disk; quando un programma è in esecuzione, viene visualizzato un messaggio indicante memoria insufficiente per farlo (sebbene questo non sia vero e ci siano altri programmi aperti);
* Settori difettosi: un messaggio informa della esistenza di errori nella parte di disco sulla quale si sta lavorando e avverte che il file non può essere salvato o che non è possibile eseguire una determinata operazione;
* Modifiche delle proprietà del file: il virus modifica alcune o tutte le caratteristiche del file che infetta. Di conseguenza risultano non più corrette o modificate le proprietà associate al file infettato. Tra le proprietà più colpite: data/ora (di creazione o dell'ultima modifica), la dimensione;
* Errori del sistema operativo: operazioni normalmente eseguite e supportate dal sistema operativo determinano messaggi di errore, l'esecuzione di operazioni non richieste o la mancata esecuzione dell'operazione richiesta; in certi casi, l'errore può essere così serio da causare un riavvio spontaneo del computer.
* Ridenominazione di file: un virus può rinominare i file infettati e/o file specifici, ad esempio di sistema;
* Problemi di avvio del computer: il computer non si avvia o non si avvia nella solita maniera, oppure impiega molto tempo per caricarsi;
* Interruzione del programma in esecuzione senza che l'utente abbia eseguito operazioni inaspettate o fatto qualcosa che potrebbe aver provocato questo risultato;
* Tastiera e/o mouse non funzionanti correttamente: la tastiera non scrive ciò che è digitato dall'utente o esegue operazioni non corrispondenti ai tasti premuti. Il puntatore del mouse si muove da solo o indipendentemente dal movimento richiesto dall'utente;
* Scomparsa di sezioni di finestre: determinate sezioni (pulsanti, menu, testi etc…) che dovrebbero apparire in una particolare finestra sono scomparse o non vengono visualizzate. Oppure, in finestre nelle quali non dovrebbe apparire nulla, appaiono invece icone strane o con contenuto insolito (ad esempio nella barra delle applicazioni di Windows;
* Antivirus disattivato automaticamente: Può capitare che un malware disattivi forzatamente un antivirus per poter essere eseguito senza correre il rischio di essere rilevato;
* Lentezza della connessione Internet: il virus potrebbe usare la connessione per propagare l'infezione, o inviare dati a chi ha scritto il virus;
* Limitazioni nella visualizzazione di alcuni siti Internet, soprattutto quelli dei produttori di antivirus: è un meccanismo di protezione da parte del virus, che in questo modo impedisce di adottare contromisure dopo l'infezione.
Si tenga comunque presente che i sintomi appena descritti potrebbero essere riconducibili a cause diverse da virus.

## Tecniche usate per il rilevamento di virus

Non esiste un metodo generale per individuare un virus all'interno di un sistema. Le tecniche di rilevamento utilizzate dagli antivirus sono diverse: utilizzate contemporaneamente garantiscono un'ottima probabilità di rilevamento della presenza di un virus. In base alle tecniche di rilevamento usate, gli antivirus si distinguono in tre tipi:
* programmi di monitoraggio: mirano a prevenire un'infezione mediante il controllo di attività sospette (ad esempio, la richiesta di formattazione di un disco oppure l'accesso a zone privilegiate di memoria). Sono importanti perché rappresentano la prima linea di difesa (essi non rimuovono il virus; lo individuano e lo bloccano). Ma sono facili da bypassare attraverso la tecnica di tunneling.
* scanner: effettuano la ricerca dei virus attraverso due tecniche:
** il confronto tra le firme memorizzate in un database interno, con quelle, eventualmente, contenute nei file infetti;
** l'utilizzazione delle tecniche euristiche per i virus che sono cifrati o sconosciuti.
* programmi detection: utilizzano due tecniche:
** verifica dell'integrità: calcolano l'hash dei file da confrontare successivamente coi nuovi valori risultanti da un nuovo calcolo per verificare che i file non abbiano subito modifiche nel frattempo.
** tecniche euristiche: salva le informazioni sufficienti per ripristinare il file originale qualora questo venga danneggiato o rimosso da un virus.

## Virus ieri e oggi

Oggi sono ben pochi i codici malevoli ai quali si può attribuire, propriamente, il nome di virus. Quando un tempo lo scambio dei file avveniva tramite supporti fisici, generalmente i floppy, erano questi ad essere veicolo delle infezioni e pertanto era importante, volendo creare un virus che si diffondesse, che questo fosse il più silenzioso possibile. Venivano scritti in assembly e questo li rendeva piccoli, performanti ed insidiosi seguendo la regola: se non sai cosa cercare figurati se sai come trovarlo.
Parlando oggi di virus, entrando nel particolare, si commette però un errore. Si intende quindi, con il termine virus, tutto il codice malevolo in grado di arrecare danno ad un utente. Lo scambio di file tramite dispositivi fisici quali il floppy, il quasi totale abbandono degli stessi per effettuare una procedura di boot e di ripristino, ha reso obsoleto il vecchio concetto di virus, un piccolo codice malevolo difficile da individuare. Nondimeno le macchine sono sempre più performanti, gli utenti sempre di più e sempre meno preparati, la banda larga è disponibile a tutti. Le informazioni viaggiano da un capo all'altro del pianeta senza vincoli fisici ormai, e così anche il codice malevolo.
Il vecchio concetto di virus è stato sostituito con quello più moderno di worm. I worm non sono più scritti in assembly ma in linguaggi di programmazione di livello sempre più alto in stretta convivenza con il sistema operativo e le sue vulnerabilità. Tutto questo rende la stesura di un codice malevolo molto più semplice che in passato ed il gran numero e la diversità di worm con rispettive varianti ne è un esempio lampante. Questi nuovi tipi di infezioni penetrano nel sistema quasi sempre da soli sfruttando le vulnerabilità, non fanno molto per nascondersi, si replicano come vermi anziché infettare i file, che è un'operazione più complessa ed ormai in disuso.
Ultimamente vanno molto di moda payload altamente distruttivi o che espongono la vittima ad altri tipi di attacchi. La vita dei worm è generalmente più breve di quella di un virus perché identificarlo, grazie ad internet, è diventato un business ora più grande che in tempi passati ed è probabilmente questo che porta sempre più spesso gli ideatori a voler un ciclo di vita più breve anche per la macchina che lo ospita e qualche capello in meno all'utente. I worm agiscono sempre più spesso come retrovirus e, volendo correre più veloce delle patch che correggono le vulnerabilità che ne hanno permesso la diffusione, spesso ci si trova ad aggiornare l'antivirus quando il codice ha già preso piede nel sistema.

### Scambio di virus

Molti programmatori di virus, soprattutto nel passato, si sono scambiati sorgenti di virus per capire nuove tecniche di programmazione. Molti scambi di virus sono avvenuti tramite siti web chiamati VX. VX significa Virus exchange.

### Falsi virus

La scarsa conoscenza dei meccanismi di propagazione dei virus e il modo con cui spesso l'argomento viene trattato dai mass media favoriscono la diffusione tanto dei virus informatici quanto dei virus burla, detti anche hoax: sono messaggi che avvisano della diffusione di un fantomatico nuovo terribile virus con toni catastrofici e invitano il ricevente ad inoltrarlo a quante più persone possibile. È chiaro come questi falsi allarmi siano dannosi in quanto aumentano la mole di posta indesiderata e diffondono informazioni false, se non addirittura dannose.

## Altre minacce informatiche

All'inizio tutte le minacce informatiche erano virus come sopra definiti, successivamente sono comparse e si sono specializzate diverse altre minacce, anche se nel linguaggio comune continuano impropriamente ad essere chiamate "virus informatici", come trojan, o adware. Nell'uso comune il termine virus viene frequentemente ed impropriamente usato come sinonimo di malware, indicando quindi di volta in volta anche categorie di "infestanti" diverse, come ad esempio worm, trojan, dialer o spyware.