4. Rilevamento e ripristino

In seguito all'infezione di un virus, il problema fondamentale consiste nel:

  1. rilevare la sua presenza all'interno di un sistema

  2. 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].







4.1 Il problema del rilevamento di un computer virus è formalmente indecidibile

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:

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:

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].







4.2 Tecniche usate per il rilevamento

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.







4.3 Ripristino di un sistema infetto

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:







4.3.1 Ripristino del Boot sector e dell'MBR

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.


Riparazione Boot Sector

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).


    Riparazione Boot sector

    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.


    Riparazione Boot sector

    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.







4.3.2 Disattivazione dalla RAM

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
SEGMENTO:0164
SEGMENTO:0166
SEGMENTO:0169
SEGMENTO:016B
SEGMENTO:016E
SEGMENTO:0170
SEGMENTO:0174
...

3D 10 FF
74 18
80 FC 4B
74 16
80 FC 4E
75 09
81 FB 07 0A
74 03
...

CMP
JE
CMP
JE
CMP
JNE
CMP
JE
...

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.
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:

  • metodo ADDRESS: ricerca in posizioni fisse di memoria.
    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.


  • metodo CUT: cerca il virus in un'area di memoria ritagliata.
    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].


  • metodo SCAN: scansione della memoria
    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).

    Scanning Memory

    figura 12: Scanning Memory


  • metodo FULL_SCAN: la scansione completa della memoria
    Il valore del SEGMENTO varia tra 0000h fino a A000h. Questo metodo viene utilizzato quando non si può utilizzare il metodo SCAN.


  • metodo SPECIAL: casi speciali
    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
.. .. ..   ..........   .. .. ..   ............

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".







4.3.3 Ripristino dei file

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.
    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.

    metodo MOVE per file COM

    figura 13a: metodo MOVE per file COM


    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 MOVE per file EXE

    figura 13b: Metodo MOVE per file EXE


  • metodo JERUSALEM e START: ripristino dei file infettati all'inizio.
    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).

    JERUSALEM e START JERUSALEM e START

    figura 14: Metodo JERUSALEM e START


  • metodo DELETE: cancellazione dei file infetti.
    è 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

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:
    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).


  • per mezzo dell'esecuzione di programmi infetti:
    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.


  • per mezzo dell'apertura di file infetti:
    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.


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.




Metodi d'infezione E-mail virus