3. Metodi d'infezione

Come già detto in precedenza, un computer virus è un programma che può infettare altri programmi, modificandoli ed includendo, eventualmente, una copia evoluta del proprio codice. Le proprietà d'infezione lo diffondono attraverso PC o reti sfruttando le autorizzazioni dei singoli utenti. Ciascun programma che abbia subito l'infezione può comportarsi come un computer virus e così può propagare l'infezione [Coh84].

Esempio di un semplice computer virus V scritto in pseudo linguaggio C:

main() /* 1234567 la firma del computer virus */
{
/* sceglie a caso un file EXE ed inserisce il codice del computer virus all'inizio del file se non è presente la firma del virus "1234567" */
void infect_executable()
{
  do {
    file = get_random_executable_file;
  } while (1234567 not in first_line);

  prepend virus to file
}

/* effettua il danno */
void do_damage()
{
  .../* linee di codice per causare danni */
}

/* restituisce zero se si verifica una particolare condizione d'innesco */
void trigger_pulled()
{
  ....
}

infect_executable();
if (trigger_pulled()) then do_damage();
.....
}

Lo scopo del precedente computer virus V consiste nel cercare un eseguibile E che non contenga nell'header una particolare stringa (firma del virus, che nell'esempio è 1234567). In caso affermativo, inserisce il suo codice all'inizio di E ottenendo il file infetto I. Quando l'utente esegue E, inavvertivamente eseguirà il file infetto I che a sua volta cercherà un file E' da infettare, producendo un nuovo file I'. La proprietà chiave di un computer virus è la capacità di infettare altri programmi, questo è realizzato attraverso la chiusura transitiva.

Un esempio di chiusura transitiva è il seguente:

Se V infetta uno dei file E dell'utente A e l'utente B esegue il file E (ricevuto da A), V si diffonde tra i file di B.







3.1 File virus

Appartengono a questo gruppo quei computer virus [4] che usano il file system del sistema operativo per propagarsi. Questi computer virus infettano tutti i tipi di file eseguibili del DOS, quali BAT (file batch), SYS (file di sistema), EXE (file eseguibili), COM (file di comando) ed inoltre quelli caratteristici di altre piattaforme come Macintosh, Unix e Windows9x.

In accordo alle modalità di infezione, i file virus si dividono in:







3.1.1 Overwriting virus

Gli overwriting virus sono più facili da realizzare in quanto sovrascrivono il file in modo che, dopo l'infezione, la parte iniziale del programma è sovrascritta dal virus con ovvi problemi d'esecuzione.

L'algoritmo di lavoro di un overwriting virus ha di solito un codice poco elegante che gli consente di compiere alcune semplici operazioni:

  1. Cerca un file in modo casuale
  2. Apre il file in lettura
  3. Legge i primi byte
  4. Chiude il file
  5. Se infetto torna al punto 1
  6. Apre il file in scrittura
  7. Scrive sul file il proprio codice inserendo la firma nei primi byte
  8. Chiude il file







3.1.2 Parasitic virus

A questo gruppo appartengono tutti quei file virus che cambiano il contenuto dei file da infettare durante il trasferimento delle loro copie, ma i file stessi restano completamente o parzialmente utilizzabili. Lo scopo fondamentale di questi parasitic virus è di inserire, a seconda del tipo di infezione, il proprio codice:



virus prepending: I virus che inseriscono il proprio codice all'inizio del file sono i più comuni.
Essi possono usare due metodi d'infezione :
il primo consiste nel copiare l'inizio del file da infettare alla fine e successivamente copiare il corpo del virus nello spazio liberato, come illustrato in figura 2.

prepending - primo modo

figura 2: prepending - primo metodo

Nel secondo metodo il virus crea una sua immagine in memoria, accoda il file da infettare e poi salva il risultato della concatenazione sul disco, come in figura 3.

prepending - secondo modo

figura 3: prepending - secondo motodo

In questo processo d'infezione, individuato il file da infettare, il virus, spesso, ne fa una copia. Infetta il file aggiungendovi il proprio codice, riloca i necessari indirizzi nel corpo del programma, e lo testa, attendendo la sua completa esecuzione. Nel caso in cui l'esecuzione è avvenuta senza errori, il virus, cancella la copia e salva il file così infettato, altrimenti la ripristina.



virus appending: è la modalità più utilizzata dai parasitic virus. Esso modifica il top del file in modo tale che il codice del virus viene eseguito per primo. In un file COM (vedi figura 4a), i primi tre (o più) byte servono per rappresentare il jump ad un parte nel corpo del file oppure l'indirizzo della routine che passa il controllo al corpo del virus.

L'algoritmo di lavoro prevede le seguenti operazioni:

  1. aggiunge il corpo del virus al file

  2. salva il jump originale nel corpo del virus

  3. sovrascrive il jump originale con quello del virus

Inoculazione di un virus alla fine del file
figura 4a: Inoculazione di un virus alla fine del file


In un file EXE (vedi figura 4b), l'algoritmo di lavoro modifica la struttura dell'header (c.f.r. tabella 1).

Inoculazione di un virus alla fine del file
figura 4b: Inoculazione di un virus alla fine del file


L'header del file EXE, formato da 32 byte, è esplicitato nella seguente tabella nella quale i byte alterati, sono quelli marcati con un asterisco:

 Offset  Nome  Dimensione  Commento
 00h Tipologia del file 2 byte

Contiene il valore 4Dh5Ah (MZ o ZM) che indica il formato del file

 *02h Dimensione dell'ultima pagina 2 byte

Indica la dimensione, in byte, dell'ultima pagina

 *04h Numero di pagine 2 byte

Indica il numero di pagine, da 512 byte, contenute nel file

 06h Numero di entry 2 byte

Indica il numero di entrate nella tabella di rilocazione

 08h Paragrafi 2 byte

Indica la dimensione dell'intero header, in numero di paragrafi (16byte)

 0Ah Minima allocazione 2 byte

Indica, il minimo spazio di memoria, in paragrafi

 0Ch Massima allocazione 2 byte

Indica il massimo spazio di memoria, in paragrafi

 *0Eh PreReloc SS 2 byte

Indica il valore dello Stack Segment (SS) prima della rilocazione

 *10h Stack Pointer(SP) iniziale 2 byte

Valore iniziale del registro SP

 12h Negative checksum 2 byte

Sempre Ignorato

 *14h PreReloc IP 2 byte

Valore iniziale del registro Instruction Pointer (IP)

 *16h PreReloc CS 2 byte

Valore Code Segment (CS) prima della rilocazione

 18h Offset della tabella di rilocazione 2 byte

Indica la posizione relativa (OFFSET) della tabella di rilocazione, all'interno dell'header.

 1Ah Numero di Overlay 2 byte

Ignorato

 1Ch Riservato 4 byte

Informazioni sul linker

tabella 1: parte formattata dell'header



In particolare l'algoritmo di lavoro esegue le seguenti modifiche:

  1. salva nel corpo del virus, il valore CS:IP (indirizzo completo della prima istruzione del file EXE originale) e SS (necessario per le chiamate a procedure del file EXE), per consentire al computer virus di eseguire il codice del programma portatore

  2. modifica i valori CS, IP e SS (offset 16h,14h e 0Eh rispettivamente) in modo da far puntare l'indirizzo completo (CS:IP) all'inizio del codice virale e salvare eventuali chiamate a procedure nello stack segment (SS)

  3. modifica la lunghezza del file infetto (offset 02h e 04h) aggiungendovi la dimensione del codice virale


Per i file SYS (vedi figura 5a) tali virus possono essere estremamente pericolosi ed hanno una grossa vitalità, perché si installano in memoria prima del caricamento di un programma anti-virus. Essi aggiungono il loro codice al corpo del file e modificano l'header in modo da cambiare gli indirizzi delle routine Interrupts e strategy del driver da infettare.
Al caricamento di un driver infetto, il virus lo intercetta, lo inizializza e rimane in memoria insieme al codice del driver, diventando di fatto una parte del sistema operativo.

Infezione di un device driver
figura 5a: Infezione di un device driver


virus inserting: vi sono diversi modi per incorporare il virus nel mezzo dei file. Il metodo più usato dai virus inserting, è quello di spostare porzione di codice alla fine del file oppure di espandere il file, inserendo il prorpio codice nello spazio liberato. Alcuni virus comprimono le porzioni di codice in modo che la grandezza del file resti inalterata, come il virus Mutant.







3.1.3 Companion virus

Sono particolari file virus il cui algoritmo di lavoro crea un clone di un file che ha lo stesso nome ma diversa estensione in modo da non modificare la dimensione del file da infettare. Il file companion conterrà, oltre al corpo del virus, anche il link al file originale.
Questa tipologia di file virus trova terreno fertile nell'ambiente DOS/WINDOWS, causa la caratteristica di eseguire, in ordine di priorità, prima il file COM e poi gli EXE [Wil93].

Un esempio chiarificatore è il seguente:

supposto che il file attaccato sia XCOPY.EXE, per esso viene creato un file companion XCOPY.COM (contenente il virus). Per la caratteristica precedente, nell'istante in cui l'ignaro utente esegue il comando XCOPY, il DOS, eseguirà XCOPY.COM che oltre al virus contiene la chiamata al file XCOPY.EXE.







3.1.4 Link virus

I link virus, come i companion virus, non cambiano il contenuto fisico del file ma forzano il sistema operativo ad eseguire il proprio codice. Quando questi tipi di virus diventano residenti in memoria, ogni floppy non protetto in scrittura viene infettato inserendo il proprio codice nell'ultimo cluster del dischetto. Mentre per gli hard disk il virus si allocherà nel cluster non utilizzato di recente. Il virus ottiene i puntatori originali dei file eseguibili dal disco e li copia in un'area non utilizzata della root directory del disco. I puntatori originali sono modificati in modo da puntare al codice del virus nell'hard disk. Controllando la directory dei dischi infettati, non risulterà nulla di alterato, quindi tutti i programmi avranno la loro data e dimensione originale. Ciò succede perchè i programmi originali non vengono alterati. Se l'utente esegue uno di questi programmi, allora il virus eseguirà prima il suo codice ed in seguito, utilizzando gl'indirizzi dei file memorizzati nell'ultimo cluster della root directory, eseguirà il file richiesto. I link virus, (vedi figura 6) generalmente, si aggiornano, ad ogni riavvio, sulle eventuali modifiche fatte alla struttura dei file dall'utente.

Se, ad esempio, un file viene spostato in un altra directory durante una normale sessione di lavoro, il link virus ne perde il controllo. Al succesivo riavvio del sistema, il virus, riattivandosi otterrà il nuovo indirizzo del file con il metodo precedentemente descritto. Tra i link virus più conosciuti si evidenzia la famiglia dei virus Dir_II.

Link virus

figura 6: Link virus







3.1.5 File worm

Sotto alcuni aspetti sono simili ai companion virus, ma a differenza di quest'ultimi, non contengono puntatori ad alcun file eseguibile. Quando questi si propagano, creano delle copie sui dischi o directory locali, con la speranza che un giorno l'utente li esegua.

Questi virus associano alle loro copie nomi speciali, come Install.exe o Winstart.bat, in modo da mettere in condizione l'utente di eseguirle. I file worm, usano tecniche piuttosto inusuali, per esempio inseriscono le loro copie nei file archivio (ARJ, ZIP ed altri), come i virus ARJ e WINSTART.







3.2 Boot virus

I Boot virus infettano il Boot sector di un floppy disk e il Boot sector o l'MBR dell'hard disk [5]. L'infezione avviene nel seguente modo:

  1. il Boot sector (MBR) originale è copiato in un altro settore del disco (come il primo settore libero)

  2. se la dimensione del virus è minore di 512 byte (dimensione del boot sector), allora il virus sovrascrive il vecchio settore di avvio, altrimenti inserisce la parte iniziale nel Boot sector, mentre il restante codice del virus è scritto in altri settori del disco (vedi figura 7). Questi settori, in genere, sono marcati come BAD sector per evitare che il codice del virus venga sovrascritto da altri dati.

    Infezione dei boot virus
    figura 7: struttura del Boot virus


Ci sono vari modi per installare sul disco il Boot sector infetto e la continuazione del virus: si può inserire il virus nei settori dei cluster liberi di un disco logico, oppure nei settori non usati del disco fisico, cioè quelli non appartenenti ad una partizione.
Nel primo caso, il virus deve gestire la File Allocation Table (FAT) ed in particolare deve marcare BAD i cluster corrispondenti ai settori occupati dal virus. Questo metodo, per esempio, è quello usato dai virus Brain e Ping Pong [Hof97].
Nel secondo caso, il virus utilizza dei settori del disco che non vengono usati o sono raramente usati. Su un hard disk questi settori sono quelli che si trovano tra il Master Boot Record e il Boot sector, mentre sui dischetti sono quelli finali della root directory.
Ci sono anche altri metodi per installare un virus su un disco, per esempio, formattare una traccia addizionale (solo per i floppy) o sfruttare i settori non utilizzati alla fine di una partizione.

Algoritmo di lavoro:
la maggior parte dei boot virus conosciuti è di tipo residente in memoria. Essi diventano TSR quando si fa un reboot da un disco infetto. In quel momento il bootstrap loader del sistema legge il contenuto del primo settore del disco usato per fare il boot, copia in memoria le informazioni lette e trasferisce il controllo al virus.

Il virus in genere esegue le seguenti operazioni:

  1. si riserva una certa quantità di memoria libera

  2. carica dal disco, se è presente, la seconda parte

  3. copia il codice virale nello spazio di memoria ottenuto al punto 1

  4. setta i vettori d'interrupt necessari

  5. esegue operazioni addizionali che variano in base al tipo di virus

  6. carica in memoria il Boot sector originale e gli trasferisce il controllo

I boot virus si comportano in modo analogo ai file virus residenti in memoria, agganciano gli interrupt di I/O per infettare i dischi, ed inoltre, al verificarsi di una condizione di innesco, eseguono delle operazioni distruttive o degli effetti audio/video.







3.3 Macro virus

I macro virus [3] sono creati con metalinguaggi di solito inglobati in alcuni programmi come Word, Excel e 123 Lotus, e non infettano i normali eseguibili ma s'inseriscono come macro in normali documenti.
Le macro sono combinazioni di dati e di codice eseguibile e necessitano d'essere interpretate dall'interprete VBA (Visual Basic for Application).
Solitamente i macro virus si trasmettono attraverso documenti con estensione DOC e DOT. Un documento infetto contiene una serie di macro che permettono al macro virus di replicarsi autonomamente e causare un certo tipo d'azione o di danno. Le macro possono infettare tutte le piattaforme come OS/2, MAC ed altre, purché supportino i programmi precedentemente descritti.

Informazioni generali

La locazione fisica del macro virus all'interno del file dipende dal formato, che nel caso dei prodotti Microsoft è estremamente complicato (ogni documento Word, foglio elettronico Excel, consiste di una seguenza di blocchi di dati, collegati insieme ad un enorme quantità di dati ausiliari). Questo formato è chiamato OLE.
La struttura dei file assomiglia al file system del Dos, ma è più complicata in quanto la root directory del file punta alle directory dei vari blocchi di dati, quindi esistono diverse FAT che contengono informazioni circa la posizione dei blocchi di dati contenuti nel file.
Dato il complicato formato dei file di Word, Excel ed Office97, il meccanismo di diffusione dei macro virus in un file può essere rappresentato approssimativamente come in figura 8.

infezione da macro virus

figura 8: infezione da macro virus

E' importante conoscere i formati dei documenti Word, dei fogli elettronici di Excel e specialmente quelli di Office per comprendere come i macro virus sfruttano le loro caratteristiche.
I documenti hanno le seguenti caratteristiche: in essi ci sono blocchi di dati ridondanti, ossia dati non collegati al testo in alcun modo, oppure copie di dati che vengono salvati accidentalmente (cfr. Altri dati in figura 8). Spesso quando viene digitato un carattere, insieme ad esso, vengono salvati uno o più blocchi di dati dedicati.

Inoltre nei cluster dei documenti, spesso, vi sono alcuni junk (pezzi di codice spurio) aggiunti al resto dei dati.
Questo significa che la dimensione dei file non è legata direttamente al numero di caratteri contenuti nel testo, bensì alla presenza di codice ausiliario. In altre parole, la dimensione dei file può diminuire dopo la fusione con altri file, oppure aumentare in seguito alla cancellazione di parte del testo.

Lo stessa cosa succede per i macro virus: dopo che il file è stato infettato, la sua dimensione può crescere, decrescere oppure restare inalterata. Quindi, sfruttando i bug presenti nella libreria OLE, il codice dei macro virus può essere inserito all'interno di qualsiasi documento Office, senza che le sue tracce vengano riconosciute da qualsiasi antivirus o visualizzate da un qualsiasi text editor.

Algoritmo di lavoro dei macro virus:
Il pacchetto Office è basato su un sistema di esecuzione automatico di macro predefinite. In altre parole, quando viene selezionato un comando dal menu File, come ad esempio File Save, questo sistema cerca e, nel caso esiste, esegue l'omonima macro che svolgerà le funzioni per cui è stata progettata.
Dalla successiva tabella è possibile conoscere le macro/funzioni predefinite dai singoli pacchetti contenuti in Office.

WORD EXCEL OFFICE97
AutoOpen Auto_Open Document_Open
AutoClose Auto_Close Document_Close
Auto_Exec    
AutoExit    
AutoNew   Document_New
  Auto_Active  
  Auto_Deactive  

Tabella 2: Esempio di alcune macro/funzioni automatiche

Inoltre, esistono macro/funzioni associate a tasti oppure ad una particolare data, che vengono eseguite automaticamente (senza l'aiuto dell'utente). Questo significa che Word/Excel chiamano la macro/funzione dopo che è stata premuta una determinata combinazione di tasti o in un certo intervallo di tempo.

I macro virus, utilizzano entrambe queste tecniche. Ad esempio, se un documento infetto viene aperto, Word chiama automaticamente la macro infetta AutoOpen che esegue il codice del virus. Se, invece, il macro virus ridefinisce i tasti di scelta rapida, come ad esempio MAIUSC+F12 (Salva), si attiva non appena vengono premuti i tasti corrispondenti.







3.4 Network virus

I network virus, fanno largo uso dei protocolli e delle capacità delle reti per propagarsi [6]. La caratteristica principale di un network virus consiste nel trasferire ed eseguire il suo codice da un server remoto ad un altro. Questo tipo di virus divenne popolare agli inizi degli anni ottanta. Tra i più conosciuti troviamo troviamo Christmas Tree, Wank Worm virus e worm di Morris. Questi facevano uso delle funzioni non documentate ed errate dell'accesso alla rete per accedervi e propagarsi.

I network virus si diffondevano tramite le reti ed in modo simile ai companion virus, non modificavano i file originali ed i settori dei dischi. Essi si infiltravano nella memoria dei computer della rete, calcolavano gli indirizzi delle vittime ed inviavano loro delle copie virali. Dopo migliaia di epidemie, vennero corretti gli errori dei protocolli di rete e chiuse le back door. Nel 1997 riapparve un'evoluzione dei network virus, tra i primi troviamo Macro.Word.ShareFun, che infettava i messaggi di posta elettronica creando nuovi messaggi contenti documenti infetti da spedire ai primi 3 utenti della rubrica, ed Win.Homer che sfruttava il protocollo FTP.







3.5 TSR virus

I TSR virus, sono quei virus che risiedono in memoria in seguito alla loro esecuzione. La maggior parte di essi, per mascherare la loro presenza in memoria, manipolano le aree di sistema che controllano l'allocazione della memoria, in modo da riservarsi dello spazio libero, marcandolo come occupato e scrivendovi dentro la loro copia. Alcuni virus inseriscono il loro codice nelle aree del vettore d'interrupt libere (UMB) e nella memoria XMS o EMS. Il TRS virus, quando si installa in memoria, crea un nuovo interupt, scrive una routine specifica e la inserisce nei vettori d'interupt.

Algoritmo di lavoro:

  1. il virus controlla se una sua copia è già residente in memoria mediante un interrupt, che restituisce un valore che segnala la sua presenza

  2. Se il TSR virus non è già residente in memoria, allora si riserva uno spazio di memoria in cui collocasi ed attende il verificarsi di alcune condizioni, come ad esempio l'apertura di un file, per effettuare la sua opera di diffusione e danneggiamento.

Ogni TSR virus intercetta un particolare tipo di interrupt, ma quasi sempre l'INT 21h, che è responsabile delle operazioni di Input/Output della macchina.







3.6 Tecniche avanzate

Gli anni novanta sono stati caratterizzati dalla proliferazione di tecniche particolari come quelle che:

  • adottavano tecniche in grado di generare codice virale diverso ma funzionalmente equivalente

  • cercavano di evitare il rilevamento di un computer virus confondendosi con le istruzioni del programma da infettare

  • manipolavano gli interrupt del DOS e del Bios in modo da richiamare direttamente le routine necessarie alle infezioni, bypassando qualsiasi attività del DOS

  • sfruttavano tecniche particolari per bloccare il sistema







3.6.1 Virus polimorfi

I virus polimorfi sono particolari virus che generano copie differenti ad ogni infezione attraverso i motori polimorfi.
I motori polimorfi (polymorphic engine) non sono virus di per se, ma sono routine che sono unite al codice del virus, in modo tale da richiamare la routine di cifratura contenuta nel motore stesso. Un virus polimorfo è formato da due parti, un codice cifrato ed un codice in chiaro. Il codice cifrato contiene il motore polimorfo ed il codice del virus in forma cifrata, mentre il codice in chiaro contiene la funzione di decifratura. In linea di massima, la seguente struttura:

struttura di un virus polimorfo

dove la funzione di decifratura è lasciata in chiaro (non cifrata) per accedere al parte cifrata del codice del virus.

L'infezione avviene nel seguente modo:

  1. il virus decifra il codice cifrato mediante la funzione di decifratura

  2. viene eseguito il risultato della decifratura

    1. cerca un nuovo file da infettare

    2. se lo trova chiama il motore polimorfo il quale genera una nuova coppia di funzioni cifratura/decifratura

    3. cifra il motore polimorfo ed in seguito il codice del virus

    4. salva il risultato di tale cifratura

    5. aggiunge la funzione di decifratura nella nuova istanza del virus polimorfo.


Per poter scrivere tali motori, sono necessari alcuni concetti quali:

  • conoscenza approfondita dell'insieme delle istruzioni del microprocessore

  • manipolare gli opcode a livello di bit in modo che con delle opportune operazioni, si trasformi un valore senza significato in uno valido per il processore.

Tra i motori polimorfi più diffusi troviamo l'MtE (Mutation Engine) di 2.4 Kbyte ed il TPE (Triden Polimorphic Engine) di 1.5 Kbyte.

I virus polimorfi sono tanto più potenti quanto più capaci di generare nuove funzioni di decifratura e allo stesso tempo differenti.

Alcuni antivirus, per fronteggiare i virus polimorfi, effettuano una routine di rilevamento euristico che provoca, talvolta solo dei falsi allarmi.

Come in natura, l'obiettivo del virus è la sopravvivenza, così l'approccio più banale tratta la procedura di decifratura come una semplice sequenza di byte, mentre una procedura più avanzata, considera un algoritmo astratto che esegue i seguenti passi:


  1. setup pointer register
    Viene inizializzato il registro che contiene un puntatore alla zona di memoria da decifrare.

  2. setup count register
    Inizializza il registro contenente la lunghezza del codice da decifrare.

  3. usa il pointer register per decifrare una word

  4. aggiornamento del pointer register

  5. decremento del count register

  6. se il count register è maggiore di zero allora ritorna al passo 3

Per informazioni sulle istruzioni assembler onsultare il seguente libro : [Pet90].

Alcuni esempi di realizzazione dell'algoritmo in codice assembly sono i seguenti

Esempio 1

startenc:

     
 

mov

bx, OFFSET startenc

; carica nel registro bx l'indirizzo relativo, nel

     

; segmento, della label startenc

 

mov

cx, viruslength / 2

; carica nel registro cx il risultato della divisione

dec_loop:

     
 

xor

word ptr [bx],12h

; decifra una word alla volta

 

inc

bx

; aggiorna il pointer register

 

; per puntare alla prossima word

 

dec

cx

; decrementa il count register

 

jnz

dec_loop

; cicla finché è maggiore di zero


Esempio 2

start:

     
 

mov

bp, OFFSET start

; carica nel registro bp l'indirizzo relativo, nel segmento,

     

; della label start

 

mov

bx, viruslength

; carica nel registro bx il valore contenuto nella variabile

     

; locale viruslength

dec_loop:

     
 

add

ptr [bp+0Ch], 33h

; decifra un byte alla volta

 

inc

bp

; incrementa il pointer register

 

dec

bx

; decrementa il count register

 

jnz

dec_loop

; e cicla finché è maggiore di zero


I motori possono creare, per ogni istanza del virus, una procedura di decifratura differente nel codice ma uguale nell'algoritmo (cfr. Esempio1 ed Esempio2). Per renderle difficili da essere individuate da un'analisi, viene inserito al loro interno del codice fittizio noto come do-nothing (non fare nulla), il quale non altera l'algoritmo di decifratura, come mostrato nell'Esempio 3:

Esempio 3

Supponiamo di voler inizializzare il count register (registro ax) con il valore 0808h. Invece di scrivere questa istruzione mov ax,0808h, il motore sostituisce questa sequenza:

mov

ax, 0303h

; carica in ax il valore 0303h

mov

bx, 0101h

; carica in bx il valore 0101h

add

ax, bx

; aggiunge ad ax il valore di bx

mov

cl, 1

; carica in cl il valore 01h

shl

ax, cl

; esegue uno shift ciclo a sinistra su ax







3.6.2 Stealth virus

Uno stealth virus è un boot virus avanzato che oltre ad infettare il Boot sector dei floppy e l'MBR degli hard disk, reindirizza la chiamata al gestore degli interrupt di I/O dei dischi (interrupt INT 21h) verso uno proprio, in modo da nascondersi a qualsiasi programma antivirus.
Questi virus hanno un codice che non occupa più di sei settori.

Algoritmo di lavoro:

  1. a seconda del supporto fisico, il virus scrive la seconda parte del suo codice (lunga cinque settori) ed il contenuto del Boot sector originale

    1. negli ultimi cluster dei floppy disk, in particolare gli ultimi sei settori marcandoli come BAD.

    2. a partire da faccia 0 traccia 0 e settore 2 fino a faccia 0 traccia 0 e settore 9 sugli hard disk.

  2. lo stealth virus, sovrascrive il Boot sector originale con la parte iniziale del codice virale.

Un esempio è il Brain [Hof97], un virus che si avvia dal Boot sector dei dischi, copia il contenuto del settore originale in una nuova locazione del disco, marca questi tre cluster (sei settori) come BAD nella FAT e scrive il codice del virus nel Boot sector del disco.
Esso, si installa in memoria riservando per sè tra i 3 Kbyte ed i 7 Kbyte di RAM. Si nasconde al rilevamento, intercettando qualsiasi interrupt (come ad esempio l'INT 21h) che possa interrogare il Boot sector in modo da reindirizzare la lettura del boot alla locazione dove ha provveduto a salvare il Boot sector originale.







3.6.3 Tunnelling

La caratterisitica fondamentale di questa tecnica è quella di manipolare gli interrupt originali del DOS e del BIOS, in questo modo si richiama direttamente le routine necessarie alle infezioni, scavalcando qualsiasi attività del DOS. I virus che usano questa tecnica, chiamati tunnelling virus, infettano e si propagano indifferentemente sia per mezzo di file con estensione EXE e COM che attraverso l'MBR degli hard disk, ed in alcune varianti, anche il Boot sector del floppy.
Le modalità d'infezione, cambiano a seconda che l'infezione si propaghi:



Da un file infetto

Quando l'infezione avviene per mezzo di un file infetto, il virus innanzi tutto va alla ricerca della propria presenza in memoria: chiama l'interrupt 21h che restituisce un valore e lo confronta con quello posto precedentemente in un registro interno (installation check). Se tali valori sono uguali, il virus si riconosce come già presente in memoria ed evita di procedere con un ulteriore installazione, eseguendo il programma già infetto. In caso contrario si installa in memoria, riservandosi una discreta quantità di memoria ed aggiornando un proprio contatore che tiene conto del numero di sistemi infettati. Dopo di ciò il virus va alla ricerca dell'indirizzo originale delle routine di gestione dell'interrupt 13h. Questa è un operazione rischiosa per il virus in quanto deve sbirciare il contenuto del relativo vettore d'interrupt senza che un eventuale antivirus residente in RAM se ne accorga. Esistono vari modi per fare questo e, qualunque sia la procedura adottata, essa consiste, in linea generale, nel "riagganciare" una normale e lecita chiamata fatta ad un certo interrupt per ottenere una certa particolare risposta. In questo modo un eventuale antivirus, che ha controllato le operazioni della chiamata iniziale, trovandole perfettamente "normali", considera ancora sotto il suo completo controllo l'interrupt stesso, mentre invece il virus cattura una risposta specifica.

Ottenuto l'indirizzo iniziale dell'interrupt 13h il virus lo utilizza per proprie operazioni sul disco e così elude il blocco da parte di programmi antivirus TSR che controllano la modifica dei vettori di interrupt. Fatto ciò il virus legge l'MBR del disco fisso per vedere se esso è già infetto. Se non lo è, e se una delle partizioni del disco è di un certo tipo, essa viene ridotta di un certo numero di settori, che vengono impiegati per celare l'MBR originale ed il codice virale, dopo di che viene creato un nuovo MBR con le informazioni sulla nuova partizione così modificata.

Il nuovo MBR è polimorfo e cifrato. Ciò significa che, a parte le nuove informazioni sulla nuova partizione, il resto dell'MBR è diverso da qualunque altro che sia stato o che venga successivamente infettato dal virus su un altro computer.
In tal modo la ricerca del virus per stringhe di riconoscimento diventa particolarmente difficoltosa. Per contro, il virus è in grado di rilevare se si tratta di un MBR infetto, poichè crea un checksum unico per ciascun MBR e lo scrive al suo interno; dopo di che, per verificare l'avvenuta infezione, ricalcola il checksum e lo confronta con quello contenuto nell'MBR. Fatto ciò, il virus, legge l'indirizzo originale della routine di gestione dell'INT 21 e, una volta ottenuto, lo impiega per tutte le successive operazioni con il sistema operativo.

A questo punto, ogni file con estensione COM o EXE che venga successivamente aperto, letto, rinominato o eseguito e che non sia stato ancora infetto, viene infettato dal virus che si attacca alla fine del file. Per controllare se un file è già infetto, il virus adotta la stessa tecnica di cifratura e di polimorfismo impiegata per individuare l'infezione sull'MBR dei dischi fissi.
I file con estensione COM sono incrementati di 2846 byte e quelli EXE di 2926 byte. L'unico limite per i file con estensione COM è dovuto al fatto che non possono superare i 64 Kbyte, perciò se loro lunghezza è superiore a 62690 byte, l'infezione da parte del virus non avviene. L'allungamento dei file tuttavia può essere diverso a seconda della variante del virus che impieghi altri tipi di checksum per il riconoscimento.



Dall'MBR di un disco fisso

Quando il virus è caricato ed eseguito dal Boot sector di un disco, riserva per se una certa quantità di memoria convenzionale, dove viene installata una propria routine di gestione dell'interrupt INT 1Ch, che ha la funzione di installare, a sua volta, quella dell'interrupt INT 21h [Wil93]. Successivamente, il virus, prende nota, dalla tavola dei vettori di interrupt, gli indirizzi originali delle routine di gestione degli interrupt INT 21h e INT 13h e le sostituisce con due proprie routine di gestione. Per il virus, è relativamente facile conoscere l'indirizzo di ciascuna routine di gestione, in quanto ha libero accesso alla tavola dei vettori di interrupt.
Quindi il virus, non modifica la tavola dei vettori di interrupt e per questo motivo, sfugge a quei programmi antivirus che rilevano la presenza di un virus proprio quando il vettore di interrupt viene modificato.

In questo modo il virus ottiene tre importanti risultati:

  • si installa in memoria prima che venga eseguito un qualunque altro programma

  • ha libero accesso agli indirizzi originali degli interrupt che possono essere utilizzati per una successiva azione

  • risulta difficile individuarlo se si infiltra attraverso il Boot sector di un disco infetto

Verrà illustrato con un esempio quello che fa realmente il tunnelling virus quando viene eseguito dal Boot di un disco infetto.

Supposto che durante una trasmissione radiofonica, il conduttore interrompa momentaneamente lo svolgimento del programma per rispondere alle richieste di un radioascoltatore. In questo caso, il conduttore rappresenta il processore, la richiesta di un brano la chiamata ad un'interrupt ed il contenuto del disco la relativa routine.
Ogni mattina, degli addetti (il BIOS ed il DOS), pongono i dischi da ascoltare (le routine degli interrupt) in una particolare posizione negli scaffali (area particolare della RAM) e preparano una tabella (tavola dei vettori) in cui i dischi sono disposti sempre nello stesso ordine alfabetico (ordinamento costante dei vettori d'interrupt nell'omonima tabella). Ogni coppia d'inservienti prepara la tabella indicando, a fianco di ciascun titolo, la posizione del disco sullo scaffale. Se un sabotatore (il virus), vuole danneggiare un programma, può scambiare, di nascosto, gli indirizzi dei dischi scritti sulla tabella (soluzione naive facilmente riconoscibile da un adetto al controllo della tabella) oppure nota l'esatta posizione dei dischi, sostituisce un disco con un altro negli scaffali, quando gli inservienti si accingono a predisporre lo studio per la trasmissione radiofonica.

E' proprio questo che accade quando il virus si pone residente in RAM attraverso un riavvio da disco precedentemente infettato. Esso prende nota degli indirizzi originali delle routine di gestione degli interrupt e, quando viene caricato il COMMAND.COM del DOS, conoscendo le posizioni esatte degli indirizzi suddetti, sostituisce, (per esempio) per gli interrupt 13h e 21h, due proprie routine di gestione. Agendo così il virus ha il pieno controllo sulle richieste di tali interrupt che giungono dal sistema operativo.

Il tunnelling virus controlla, attraverso un contatore interno, se sono state eseguite un certo numero predefinito di infezioni, per mostrarsi. Questa tecnica virale, utilizzata da Invisible Man, [Hof97] permette al virus di visualizzare un messaggio al raggiungimento di 20 infezioni. Infatti raggiunta tale cifra, se viene eseguito un programma che ha una data di creazione anteriore di oltre un anno rispetto a quella del sistema, sovrascrive il programma con un altro che fa apparire sullo schermo una poesia dedicata ad Ester e contemporaneamente suona la melodia di Invisible Man dei Queen. Il file infettato, risulta essere inutilizzabile.
Il messaggio contenuto all'interno dei file infetti è il seguente :

The invisible Man - Written in Salerno (ITALY), October 1992
Dedicated to Ester: I don't know either how
or when, but I will hold you in my arms again.

I'm the invisible man,
I'm the invisible man,
Incredible how you can
See right through me.

I'm the invisible man,
I'm the invisible man,
It's criminal how I can
See right through me.






3.6.4 Altre tecniche

Lo scopo principale di un hacker è quello di creare un computer virus che sia difficile da essere individuato. Il polimorfismo, le tecniche di stealth, quelle di tunnelling sono tra le migliori da usare ma non sufficienti a garantire la sopravvivenza del virus. Per realizzare un computer virus difficile da eliminare, se ne dovrebbe creare uno, dalla cui vita, dipende quella del file o sistema ospite. In parole povere, se il computer virus non funziona allora neanche il sistema lo farà. Normalmente quello che succede è il contrario. Quest'idea è stata già adottata per alcuni virus, tra i quali: One-Half, LZR, AIDS e KOHN_6 [Hof97].
One-Half cifra il disco fisso usando un sistema di cifratura simmetrico e memorizza la chiave segreta nel corpo del proprio codice. Per liberare la macchina dall'ospite sgradito, basta ottenere la chiave dal corpo del computer virus.



Attacco crittografico ibrido

Le considerazioni effettuate fino ad ora ci portano alla definizione del concetto d'attacco critto-virologo che può essere effettuato da un crittovirus, definito nel seguente modo:

Definizione 3.1
Un crittovirus [YY96] è un computer virus (cavallo di Troia) che usa una chiave pubblica generata dall'autore per cifrare un dato (o risorsa) D che risiede sul sistema ospite, in modo tale che D può essere ripristinato (utilizzando la chiave privata) solo dall'autore del virus (supponendo che non esistano dei backup recenti).

Le fasi dell'attacco crittovirologo si possono delineare in questa sequenza :

  • il crittovirus F cifra un dato critico D (ottenendo D') su un sistema S che contiene diverse risorse (software e hardware) utilizzate da un utente U

  • F si manifesta all'utente U e gli chiede di contattare il suo autore

  • l'autore del crittovirus, una volta contattato, richiede un riscatto in cambio della chiave privata

  • ottenuta la chiave privata, l'utente U può decifrare D' per ottenere D

Dal punto di vista dell'hacker, questo metodo ha lo svantaggio che liberando una sola vittima, potenzialmente, libera anche tutte le altre, visto che ha usato un crittosistema a chiave privata, quest'ultima è unica.
Un ulteriore svantaggio è dovuto al fatto che cifrare un file direttamente con la chiave pubblica è un processo lento e facilmente rilevabile.
La soluzione a questi problemi è l'impiego di un crittosistema ibrido, nel quale la chiave di sessione (chiave generata a caso dal virus) è usata per cifrare il dato critico. Se il crittovirus genera una chiave di sessione abbastanza grande e cifra quest'ultima con la chiave pubblica per ogni macchina attaccata, allora molto probabilmente, ciascuna vittima avrà bisogno di una chiave differente per riottenere le proprie informazioni. A questo punto, l'autore non sarà costretto a rilevare la chiave privata alle vittime, infatti, chiede che gli venga mandato un messaggio cifrato contenente la chiave di sessione ed eventuali informazioni aggiuntive, preparato dal virus stesso. Chiaramente, l'autore una volta ricevuto il messaggio, ed estorto quello che voleva (informazioni e/o soldi), lo decifra con la chiave privata ed invia la chiave di sessione alla vittima insieme alle informazioni necessarie al ripristino del dato D.
In particolare un crittovirus è equipaggiato con un buon generatore di numeri casuali in modo da generare una chiave di sessione casuale Ks ed un vettore casuale di inizializzazione IV.

Notazione usata:

U utente o vittima del virus
F virus
w autore
Ks chiave di sessione
Kf chiave pubblica
IV vettore di inizializzazione casuale
Kw chiave privata
D dato originale

Il virus forma il messaggio m = { IV, Ks } (plaintext) utilizzando il vettore IV e la chiave Ks, lo cifra con la chiave pubblica Kf ottenendo il messaggio cifrato m' = { IV, Ks, Kf } (ciphertext). Il virus poi cifra i dati critici del sistema usando Ks, IV e l'algoritmo di cifratura simmetrico scelto. Ovviamente D (il dato originale) è distrutto.
A questo punto il virus rileva la propria presenza all'utente U visualizzando un messaggio contenente m', con le informazioni per contattare w. Una volta che U ha contattato l'autore w, deve inviargli m' insieme al riscatto. Quindi w decifra m' usando la chiave privata Kw e invia la chiave di sessione Ks e IV alla vittima U. Poiché quest'ultima non viene a conoscenza di Kw, è incapace di aiutare le altre vittime del crittovirus.

Questo attacco è del tipo denial of service reversibile poiché, comunicando con le vittime, l'autore w riesce a restituire il dato che era bloccato (denied). Questo contrasta con la definizione tradizionale di attacco denial of service nel quale, il dato è bloccato per sempre (cancellato).



Attacco per estorcere informazioni

Nell'attacco per estorcere informazioni, l'autore W del virus costringe la vittima U a fornire informazioni in cambio della chiave di sessione Ks e del vettore d'inizializzazione IV, ed in più fornisce un meccanismo per verificare l'autenticità del dato che viene estorto. Questo attacco può avere successo solo se il virus riesce a cifrare delle informazioni critiche che non possono essere rimpiazzate dalla vittima. Questo attacco utilizza l'attacco crittografico ibrido con alcune modifiche. Infatti, può estorcere delle risorse, ma viene anche usato come strumento per lo spionaggio e raccolta illegale di informazioni industriali e/o commerciali.
L'attacco permette ad un autore di virus W di richiedere un file di grandezza arbitraria includendo il checksum ChkSum di tale file nel messaggio m. In questo attacco, w richiede il file desiderato insieme al testo cifrato del messaggio m (ciphertext).
La notazione usata è illustrata di seguito:

m = {ChkSum, IV, Ks}
m' = {ChkSum, IV, Ks}
Kf = chiave pubblica di w nel virus F
Kw = chiave privata di w
ChkSum = ChkSum del file richiesto da w
IV = vettore di inizializzazione (casuale)
Ks = chiave di sessione (casuale )

L'unico valore che non é strettamente casuale é ChkSum, che é funzione della chiave di sessione Ks, IV e del file richiesto.
L'attacco procede in questo modo:

  • il virus F, scritto da w, è programmato per cercare il dato critico D e il dato desiderato H

  • una volta giunto sul giusto sistema ospite S, il virus inizia un attacco crittografico ibrido

  • F genera IV e Ks, usando il generatore di numeri casuali contenuto nel proprio codice

  • F usa un algoritmo di cifratura simmetrica per cifrare D, e distrugge il dato originale D lasciando al suo posto il cifrato D'

  • il virus cerca il dato H da estorcere, se lo trova ne ricava il checksum ChkSum, ottenuto utilizzando H, IV, Ks, ed un algoritmo di cifratura simmetrica, come ad esempio MAC in modalità CFB.

  • il virus F compone il messaggio m e lo cifra con Kf ottenendo m', distruggendo l'immagine di m presente nella RAM

  • il virus mostra m' all'utente e gli dice di mandare m' ed H all'autore del virus secondo una certa modalità

  • la vittima seguendo le istruzioni fornite da F spedisce a W, il testo cifrato m' ed il dato H

  • l'autore del virus decifra m' con Kw ed estrae IV, Ks e ChkSum

  • w poi esegue un checksum su H usando IV e Ks e confronta il risultato con ChkSum. Se CheckSum corrisponde, w capisce che H è autentico ed invia Ks ed IV alla vittima. Altrimenti w capisce che la vittima ha alterato H e non gli invia nulla.

Supponendo che la vittima voglia ingannare w, e se la vittima non vuole conoscere Ks allora può spedire a w un H di sua scelta e il corrispondente m', ricavati scegliendo un H a caso ed eseguendo le stesse operazioni fatte dal virus su H. La vittima può fare questo solo se possiede una copia di backup di D.
Supponendo che la vittima vuole Ks ed IV ma non vuole dare H a w: potrebbe fare ciò o modificando H e lasciando m' inalterato o modificandoli entrambi. Se la vittima invia m' con un H alterato, l'autore se ne accorgerà quando computa il checksum di H. Se la vittima gli manda entrambi alterati, poiché non conosce Kw, l'alterazione di m' non sarà corretta e con molta probabilità sarà rilevata quando w computa il checksum di H. Supponendo per assurdo che il checksum corrisponda, la vittima riceverà sicuramente un Ks non buono. L'unica speranza della vittima é quella di catturare Ks ed IV durante il breve periodo di permanenza di questi valori nella RAM.




Conclusioni

Mandare le informazioni all'autore di un virus che effettua tali tipi di attacchi, non comporta assolutamente la scoperta dell'autore: infatti, le informazioni (cifrate con la chiave pubblica dell'autore del virus) possono essere depositate in una bacheca elettronica pubblica oppure postate in un newsgroup.

L'autore allora può prelevarle facendo perdere le sue tracce. Si potrebbe utilizzare un crittovirus per rubare delle informazioni da un sito remoto e sfruttare la diffusione virale come mezzo di comunicazione. Anziché annunciare la propria presenza dopo aver cifrato il dato D, il crittovirus protrebbe inglobare il dato cifrato D' nel suo corpo e continuare a diffondersi. Se il virus con le informazioni al suo interno incontra un suo antenato o fratello duplica il suo fardello e lo cede al suo clone. In questo modo sperando che la diffusione virale non sia rilevata, l'autore può essere tanto fortunato da incontrare il virus con le informazioni incorporate. A questo punto, utilizzando la sua chiave privata Kw decifra D' ed ottiene, senza correre alcun rischio, le informazioni cercate. Il virus é un ottimo mezzo di comunicazione poiché solo l'autore ha l'abilitá di decifrare D' e nessun altro può recuperare il lavoro svolto dal virus.

Lo scenario fin qui delineato potrebbe sembrare solo teorico, ma non lo è affatto, Adam Young e Moti Yung [YY96] hanno effettivamente descritto ed implementato (vedi appendice) un crittovirus per APPLE Macintosh utilizzando RSA per la cifratura a chiave pubblica, TEA (acronimo di Tiny Encryption Algoritm) per la cifratura del dato critico, truerand.c di D. P. Mitchell e Matt Blaze per la generazione dei numeri casuali (chiave di sessione e vettore di inizializzazione).



Classificazione Rilevamento e ripristino