In seguito all'infezione di un virus, il problema fondamentale consiste nel:
rilevare la sua presenza all'interno di un sistema
usare metodi o programmi antivirali per consentirne il ripristino
Ripristinato il sistema, per evitare che i virus tentino di infettarlo nuovamente, bisogna utilizzare delle misure preventive che garantiscano un certo grado di sicurezza verso questi attacchi virali, come ad esempio, l'utilizzo di un antivirus residente in memoria. Per una lista dei tool antivirus per varie piattaforme Dos/Windows e Macintosh [Ciac].
Non esiste un metodo generale per individuare un computer virus all'interno di un sistema, ma ciò non vuol dire che sia impossibile da scoprire. Questo concetto è noto come indecibilità. Se, ad esempio, è nota la firma (o signature) di un certo computer virus, basta cercala all'interno dei programmi per verificarne la presenza.
Per comprendere meglio il concetto di indecidibilità, sono date le seguenti:
Definizione 4.1
Un algoritmo è un insieme finito di istruzioni che, se eseguite, determinano
una elaborazione che ha sempre termine in un tempo finito.
Concetti equivalenti: funzioni ricorsive, linguaggi ricorsivi.
Definizione 4.2
Una procedura è un insieme finito di istruzioni che, se eseguite, determinano una
elaborazione che può non avere sempre termine in un tempo
finito.
Concetti equivalenti: funzioni parzialmente ricorsive, linguaggi ricorsivamente enumerabili.
Definizione 4.3
Un problema è decidibile se esiste un algoritmo che lo risolve.
Un problema è semi-decidibile se esiste una procedura (ma non un algoritmo) che lo risolve.
Un problema è indecidibile se non esiste nè una procedura, nè un algoritmo che lo risolve.
W. Dowling [Dow89] ha dimostrato che, qualunque sia il tipo di computer virus, nessun programma può, contemporaneamente, testare il proprio input alla ricerca del virus ed essere sicuro di non diffonderlo. Egli ha teorizzato che i programmi girano in un ambiente, quindi, qualsiasi programma è eseguito come subroutine di un programma logicamente indipendente, che è il Sistema Operativo.
Supponiamo che un computer virus sia un programma che se eseguito altera il codice del Sistema Operativo. Questa ipotesi da luogo alle seguenti osservazioni:
un aggiornamento del Sistema Operativo non è un computer virus, poichè esso viene sostituito e non alterato.
indipendentemente dal tipo di alterazione avvenuta, non è necessario che il programma definito computer virus inserisca il proprio codice in un programma ospite.
Definizione 4.4
Un programma P diffonde un computer virus sull'input X se, eseguendo P, con input X, sotto il Sistema
Operativo OS, allora P altera OS.
Definizione 4.5
Un programma P è SAFE sull'input X se eseguendo P, con input X, sotto OS, allora P non altera OS.
Definizione 4.6
Un programma P è SAFE se lo è per ogni input X.
Supponiamo di poter disporre di un programma filtro IS-SAFE, il quale, ricevendo in input un programma, stabilisce se è un computer virus o meno, con la garanzia di non diventare un veicolo per la diffusione dell'infezione.
Teorema 4.1
Questo programma filtro non può esistere.
Dimostrazione: Sia OS un sistema operativo, P un generico programma e X un fissato input per P. Supposto che esistano computer virus per OS (altrimenti non avremmo nulla da dimostrare) e, per assurdo, che esiste un programma filtro IS-SAFE, che sia SAFE, il quale sia in grado di stabilire se un arbitrario programma P, sia SAFE su un arbitrario input X, cioè:
IS-SAFE(P,X)
{
if ("P è SAFE sull'input X")
return YES;
else return NO;
}
Stabilito che esistano computer virus per OS e che esiste il programma filtro IS-SAFE, allora si potrebbe scrivere un programma V() che accetta un argomento che sia, contemporaneamente, SAFE e NOT-SAFE:
V(P) {
if(IS-SAFE(P,P)== NO) printf("Ciao"); /* qui è SAFE */
else "altera OS" /* qui non è SAFE */
}
Si dimostra che tale programma V() non potrebbe essere contemporaneamente SAFE e comportarsi in maniera corretta. Infatti, esaminiamo il comportamento di V(V), cioè come si comporta il programma V quando riceve in input se stesso, allora:
se V è SAFE sull'input V, significa che non è stata eseguita la clausola else (if (IS-SAFE(V,V) == NO)) cioè IS-SAFE avrebbe dato una risposta sbagliata e quindi non sarebbe corretto;
se V NOT-SAFE sull'input V (cioè se V(V) altera OS) vi sono due possibilità:
è stata eseguito la clausola else, cioè IS-SAFE(V,V)=YES, cioè IS-SAFE avrebbe dato una risposta sbagliata e quindi non sarebbe corretto;
se IS-SAFE(V,V)=NO, Cioè se V(V) stampa "Ciao". L'unico modo affinchè risulti V NOT-SAFE sull'input V è che sia colpa di IS-SAFE, cioè che il programma IS-SAFE sia NOT-SAFE, il che negherebbe l'ipotesi.
In ogni caso si è dimostrato che il programma filtro IS-SAFE non può essere contemporaneamente SAFE e corretto. Quindi non si può stabilire con esattezza se un arbitrario programma P è un computer virus oppure no [Fer93] [Dow89].
Visto che il problema del rilevamento di un computer virus è formalmente indecidibile, non si può stabilire con esattezza se un generico programma P è un computer virus o meno.
Gli antivirus hanno sviluppato tecniche di rilevamento, che se usate conteporaneamente, garantiscono, con ottima probabilità, di rilevare la presenza di un computer virus.
In genere esistono tre tipi di antivirus:
programmi di monitoraggio:
tendono a prevenire un'infezione controllando attività sospette, come ad esempio la richiesta di
formattazione di un disco oppure l'accesso a zone privileggiate di memoria. Rappresentano la prima linea
di difesa ma al tempo stesso sono facili da bypassare dai computer virus che utilizzano la tecnica di
tunnelling.
scanner:
ricercano i computer virus, confrontando le loro firme, memorizzate in un database interno, con quelle,
eventualmente, contenute nei file infetti, oppure usano
delle tecniche euristiche per quei virus che sono cifrati o
sconosciuti. Possono essere anche VxD, lasciando in background
l'antivirus, per consentire all'utente di svolgere il proprio lavoro.
programmi detection:
essi usano due tecniche:
verifica dell'integrità
calcolano e registrano un checksum o
hash value dei
dati e poi su richiesta effettuano un nuovo calcolo e confrontano i nuovi valori con quelli
registrati per verificare che i file non abbiano subito modifiche.
tecniche euristiche
salva un numero sufficiente di informazioni per ripristinare il file originale anche se questo viene
danneggiato da un computer virus. Di solito viene installato un sistema di protezione per
l'MBR (in genere da Bios) ed
un rilevatore di virus residente.
La fase successiva al rilevamento di un computer virus all'interno di un sistema è quella del ripristino, nella quale si cerca di riportare il sistema ad uno stato antecedente l'infezione.
Si possono avere i seguenti tipi:
Alcuni computer virus prima di installarsi nell'MBR o Boot sector, spostano il vecchio contenuto in una locazione del disco. Il ripristino di un disco infetto da questa tipologia di computer virus è un processo abbastanza semplice che consiste nell'individuare il settore originario e ricopiarlo nel settore di sistema (vedi figura 9). In altri casi, esistono computer virus che riscrivono il settore originario per cui le tecniche di ripristino devono avvalersi di un settore campione per ricostruirlo. Prima di ripristinare il settore di sistema è necessario definire l'area sul disco (indirizzo del settore) dove si trova il settore originario.
figura 9: Riparazione Boot Sector
L'indirizzo di tale area può essere in formato logico (numero del settore del disco logico, gestito dal DOS) o in formato assoluto (numero del cilindro, testina e settore del disco fisico gestito dal BIOS).
Il valore dell'indirizzo è calcolato in modo diverso a seconda del metodo usato dal computer virus per conservarsi il settore originale.
metodo ADDRESS: il settore è salvato in una posizione fissa.
Questo metodo è usato quando il computer virus salva il contenuto del settore originale in una
posizione fissa del disco (ad esempio: cilindro 0, testina 0, settore 3).
metodo ABSOLUTE: indirizzamento indiretto del settore assoluto.
L'indirizzo del settore originale è caricato dal corpo del virus, cioè il codice del virus
contiene il cilindro, la testina ed il settore della posizione originale (vedi figura 10).
figura 10: Riparazione Boot sector
In alcuni casi questi indirizzi non puntano al settore originale ma al primo settore del corpo del virus, (vedi figura 11) è quindi necessario aggiungere un certo valore (offset) per ottenere l'indirizzo del settore originale. Questo valore dipende dalla lunghezza del virus e dal suo algoritmo.
figura 11: Riparazione Boot sector
metodo LOGICAL: indirizzamento indiretto del settore logico.
Come per il metodo ABSOLUTE, l'indirizzo del settore che contiene il Boot Sector o l'MBR originale viene
caricato dal corpo del virus, ma in questo caso l'accesso al settore richiesto avviene tramite la INT 25h.
metodo SPECIAL: casi speciali.
In casi speciali (per esempio quando il computer virus è cifrato o è prodotto da tecnologie
polimorfe) può essere difficile il ripristino del settore. In questi casi l'eventuale ripristino
dipende solo da una totale conoscenza del codice del virus o dalla possibilità di stabilire,
analizzando la macchina, le caratteristiche dei dischi logici e/o fisici.
Il ripristino di un computer virus dalla RAM implica la ricerca e la modifica dell'eventuale codice in memoria in modo da negargli l'accesso ai file e/o settori durante questa operazione.
E' necessario trovare la mask del computer virus e definire le eventuali varianti. La mask è quella parte del codice capace di gestire gli interrupt intercettati dal computer virus. Per stabilire l'indirizzo della mask è necessario analizzare l'algoritmo del computer virus. La mask del computer virus viene messa in memoria ad un certo indirizzo SEGMENTO:OFFSET. Per la maggior parte dei computer virus il valore dell'OFFSET è costante e non dipende dalla grandezza della memoria o dalla memoria libera. Viene cambiato solo il valore del SEGMENTO. Per trovare l'indirizzo della mask è necessario controllare tutti gli indirizzi SEGMENTO:OFFSET mantenendo costante l'OFFSET e provando con tutti i valori di SEGMENTO ammissibili.
Per esempio, la parte residente del virus Twin.351 [Kas97]
si presenta così :
SEGMENTO:0161 |
3D 10 FF |
CMP |
AX, FF10h Virus_ID AH, 4Bh Infect_!!! AH, 4Eh Cont_Int_21 BX, 0A07h Cont_Int_21 ... |
Per questo computer virus può essere usata come mask
la parte di codice tra gli indirizzi 0161h - 016Bh (3D 10 FF, 74 18, 80 FC 4B, 74 16, 80 FC 4E).
Il valore dell'OFFSET è fissato a 0161h.
metodo ADDRESS: ricerca in posizioni fisse di memoria.
metodo CUT: cerca il virus in un'area di memoria ritagliata.
metodo SCAN: scansione della memoria
metodo FULL_SCAN: la scansione completa della memoria
metodo SPECIAL: casi speciali
Durante la disattivazione di un virus TSR c'è bisogno di tener conto che lo stesso potrebbe
utilizzare algoritmi speciali (di protezione) contro la correzione del codice virale in memoria (come fa il virus
Yankee [Hof97] ). In tale caso c'è bisogno di
disattivare anche tale algoritmo di "protezione".
Durante il ripristino dei file, bisogna prendere in considerazione le seguenti regole:
è necessario testare e curare tutti i file eseguibili di tutte le
directory di tutti i drive indipendentemente dagli attributi (read-only, system e hidden)
è desiderabile salvare e ripristinare gli attributi, la data e l'ora dei file periodicamente
deve essere possibile curare file infetti più di una volta anche dallo stesso computer virus
Esistono una serie di tecniche utili per ripristinare i file infetti ed il metodo dipende dalla
procedura eseguita dal computer virus che ha infettato quel particolare file:
metodo MOVE: ripristino dei file infetti alla fine.
I computer virus che infettano i file con estensione EXE cambiano i campi dell'header (vedi
tabella 1). I valori originali sono memorizzati da qualche parte
nel corpo del virus. Per ripristinare il file (vedi figura 13b) bisogna stabilire e trovare quali
campi sono stati cambiati, rimetterli nell'header, tagliare il corpo del computer virus e correggere i
campi che indicano la dimensione dell'immagine in memoria del programma.
metodo JERUSALEM e START: ripristino dei file infettati all'inizio.
metodo DELETE: cancellazione dei file infetti.
Qualsiasi computer che condivide informazioni è a rischio. I dischetti, i servizi OnLine, le reti
ed ultimamente anche gli attachment nelle e-Mail (e non i semplici messaggi) sono tutte autostrade per il
trasporto di computer virus. Riguardo al mezzo di trasporto utilizzato dal computer virus, ci sono tre
principali modi in cui esso può infettare il computer:
per mezzo dei dischetti:
per mezzo dell'esecuzione di programmi infetti:
per mezzo dell'apertura di file infetti: La maggior parte dei computer virus sono piuttosto innocui e facili da rimuovere.
Per qualsiasi cosa che riguarda la nostra sicurezza, la prevenzione è sempre la soluzione migliore:
non usare mai dischetti di cui non si conosce la provenienza, ma bisogna prima verificarlo con un
programma antivirus (operazione chiamata Scan). I CD-ROM sono molto meno a rischio, essendo memorie a
sola lettura, ma sono sempre potenziali portatori di computer virus. Un esempio, il virus Concept
fu trovato nel CD-ROM per il test di compatibilità di Windows 95 e in quello del Support Tools per
WindowsNT.
fissare sempre la linguetta di plastica che protegge da scrittura i dischetti. Prima di utilizzare
un dischetto con file di dati o giochi che si vuole copiare o usare su altri computer, è
altamente raccomandabile spostare tale linguetta sulla posizione di protezione da scrittura, in modo che
nessun computer virus possa infettare il dischetto.
essere sempre aggiornati e informati sulla comparsa di nuovi computer virus. Gli utenti di Internet
hanno a disposizione risorse infinite da cui poter attingere queste informazioni.
porre attenzione al download. Dopo aver scaricato un file dalla rete o ricevuto un attachment
(allegato) tramite posta elettronica, è consigliabile, prima di eseguirli, copiarli in una cartella,
la quale dovrà essere verificata con un programma antivirus.
memorizzare sempre in formato RTF o ASCII tutti i file dati da condividere. La scelta è
dovuta al fatto che questi formati non possono contenere macro virus o codice eseguibile.
stabilire un piano di backup periodico.
Il miglior modo di fissare il valore di SEGMENTO dipende dall'algoritmo usato dal computer virus.
I metodi più utilizzati per trovare la mask dei computer virus sono i seguenti:
Questo metodo è utilizzato quando la parte residente del virus viene inserita in un indirizzo
fisso di memoria (per esempio quando il computer virus sposta la sua parte residente nelle aree lasciate
libere del DOS, come fanno i virus Small e Tiny)
[Hof97]. In questo caso il valore del SEGMENTO è costante.
Questo metodo funziona particolarmente bene quando si cercano le porzioni residenti dei
Boot virus. La
maggior parte dei Boot virus decrementano la quantità della memoria convenzionale visibile dal DOS
(il valore della word all'indirizzo [0040h:0013h]) e scrivono la loro porzione
TSR in questa parte di memoria che si sono ritagliati. Quando si utilizza
il metodo CUT il valore del SEGMENTO varia tra l'indirizzo del segmento della fine della memoria DOS
fino all'indirizzo del segmento di inizio della memoria video (A000h). L'indirizzo d'inizio della zona ritagliata è
calcolato a partire dal valore contenuto all'indirizzo [0040h:0013h].
Questo metodo si utilizza quando i precedenti metodi non trovano un computer virus e lo stesso si trova
nell'area di memoria il cui indirizzo è più piccolo dell'indirizzo del programma corrente
(il programma antivirus in questo caso). Quando si utilizza questo metodo (vedi figura 12) il valore del
SEGMENTO varia da 0000h fino al valore del segmento del programma antivirus che sta lavorando (e
cioè fino al valore del registro CS).
figura 12: Scanning Memory
Il valore del SEGMENTO varia tra 0000h fino a A000h. Questo metodo viene utilizzato quando non si
può utilizzare il metodo SCAN.
Ci sono computer virus che utilizzano degli algoritmi di infezione della RAM talmente complicati da far
fallire i metodi standard visti in precedenza (per esempio un computer virus che cifra la sua parte
TSR,
come il BlackAdder.1015, molto diffuso in Campania). In questi casi c'è bisogno di
utilizzare delle routine apposite per curare questi computer virus.
Dopo aver trovato la posizione del codice del computer virus bisogna fare dei patch
al codice virale in modo che non possa più accedere ai file e/o settori mentre
l'antivirus sta cercando un file e sta ripristinando i file/settori infettati.
Questo avviene perchè se il computer virus infetta i file all'apertura, la scansione provoca
l'infezione. Per esempio:
Il codice del virus
Il codice disattivato
-------------------
---------------------
.. .. .. ..........
.. .. .. ............
80 FC 3D CMP AH, 3Dh
80 FC 3D CMP AH, 3Dh
74 XX JE Infect_File
90 NOP
90 NOP
E9 XX XX JPM Continue
E9 XX XX JPM Continue
.. .. .. ..........
.. .. .. ............
4.3.3 Ripristino dei file
Il ripristino dei file dall'infezione dei
virus appending attraverso il metodo MOVE (vedi figura 13a) consiste
nell'individuare, all'interno del corpo del virus, il jump originale, sovrascriverlo
al top del file ed eliminare il codice virale.
figura 13a: metodo MOVE per file COM
figura 13b: Metodo MOVE per file EXE
Se un computer virus sposta tutto il corpo di un file mentre lo infetta (virus Jerusalem),
o una porzione dell'inizio del file alla sua fine (virus Start)
[Kas97] e scrive se stesso nello spazio così ottenuto, allora
per ripristinare il file basta invertire la procedura seguita dal computer virus (vedi figura 14).
figura 14: Metodo JERUSALEM e START
è quello usato quando si può diagnosticare l'infezione di un certo virus ma non se
ne conosce ancora la cura, oppure si comporta come i file virus overwriting,
o quando il file stesso è un virus (come
nel caso di companion). L'azione è quella di cancellare il file
infetto, ossia distruggere il file sovrascrivendolo come ad esempio con tutti zero e poi rimuovere il
riferimento nella directory con il comando DEL. L'utilizzo di questo metodo può causare dei danni
ad altri file, come ad esempio la cancellazione di un file infetto col virus DIR II provoca un
errore nella FAT facendo comparire dei cluster persi su disco.
4.4 Misure preventive
i virus del settore di avvio sono in gran parte tutti i computer virus conosciuti. Il settore di
avvio del disco fisso è il luogo da cui i file si inizializzano all'accensione del computer. Questi
possono essere portati soltanto da dischetti infetti che si attaccano al settore d'avvio, quando si copia
il contenuto del dischetto infetto (anche un solo file può bastare...) nel disco fisso o
accidentalmente si cerca di far avviare il computer da tale dischetto. Non è possibile essere
contagiati da questi virus del settore di avvio per mezzo di un download sul proprio disco di file
prelevati da Internet (cioè scaricando un file da un computer remoto).
i virus tradizionali si inseriscono all'interno dei file di programmi eseguibili (quelli con estensione
COM, EXE, DLL, DRV, e altre estensioni che identificano file di sistema). Quando il programma che contiene
il virus è eseguito, il virus si trasferisce nella RAM, prende il controllo delle operazioni del
disco, e può a questo punto infettare qualsiasi altro programma che si esegue. I virus residenti
in memoria possono essere trasportati dai dischetti e/o quando file o programmi sono trasferiti da un
computer remoto o quando si aprono degli attachment nelle E-Mail. Non si può essere sicuri che un
programma sia libero da virus, anche se esso risiede nei dischetti di distribuzione di un produttore o in
una rete locale (LAN), fino a quando non lo si è verificato con un apposito programma antivirus.
i macro virus si nascondono nei file di dati, come quello che infetta i file di Microsoft Word,
attualmente in circolazione, e tali file trasportano informazioni utili per l'azione del virus. I file di
dati sono un perfetto nascondiglio per i virus, perchè la maggior parte delle persone,
generalmente, non prende alcuna precauzione contro i virus quando deve aprire un file di dati all'interno
di una applicazione. Bisogna dire però che la maggior parte dei macro virus sono limitati: il macro
virus di Microsoft Word chiamato Concept o Prank rimpiazza il comando FileSave che usa il
programma Word, causando un malfunzionamento durante il salvataggio dei documenti e registrandoli sempre
come modelli, piuttosto irritante ma non pericoloso. Non si può essere infettati da macro virus
attraverso lo scambio di file di dati in formato ASCII o
RTF poichè non contengono codice eseguibile.