next up previous contents
Successivo: Algoritmo di lavoro dei Su: Struttura del File virus Precedente: Inoculazione di un virus

Inoculazione di un virus nei file COM ed EXE

I file eseguibili possono avere solo due formati: COM ed EXE. Il file in formato COM è una eredità del DOS 1.0, mentre il formato EXE è nato in seguito. La differenza principale è che un file COM non può essere più lungo di 64K e mantiene stack, dati e codice insieme. Un file EXE, invece non ha limitazioni sulla dimensione e mantiene separati stack, dati e codice. L'estensione del nome del file non sempre corrisponde al suo formato, infatti, il DOS stabilisce che si tratta di un file in formato EXE guardando i primi due byte del file, se questi corrispondono ad MZ o ZMgif, allora si tratta di un file EXE, altrimenti si tratta di un file COM.

I file COM ed EXE sono infettati in modo diverso: quindi un virus prima di infettare un file deve stabilirne il formato. I virus possono risolvere il problema in due modi: analizzando l'estensione o analizzando l'header (come il DOS). Il primo metodo può generare degli errori, perché, un file pur avendo estensione COM può avere formato EXE e viceversa. Ciò può portare ad una infezione sbagliata che non danneggia il virus, ma non da più la possibilità agli anti-virus di ripristinare il file originale.

I file virus si diffondono inserendosi nel corpo del file vittima. Ci sono tre possibilità: all'inizio del file (prepending), alla fine del file (appending) o nel mezzo.

Vi sono varie possibilità per inserire un virus nel mezzo di un file eseguibile, per esempio, può essere inserito nella stack area o in una porzione di codice non utilizzata o spostando un pezzo di codice da un'altra parte e inserendosi nel buco così creato.

   figure742
Figura 4: Prepending: primo modo

   figure747
Figura 5: Prepending: secondo modo

   figure752
Figura 6: Prepending: terzo modo (overwriting)

Per inserire il virus all'inizio del file ci sono tre modi. Il primo (vedi figura 4) consiste nel creare uno spazio vuoto iniziale, ricopiando e risistemando il codice originale del file dopo questo spazio, quindi il virus si copia nello spazio libero. Il secondo (vedi figura 5) consiste nel avere l'immagine del virus in memoria e di accodare a questa l'immagine del file da infettare e salvare poi sul disco il tutto. Il terzo (vedi figura 6) constiste nel sovrascrivere col codice del virus l'inizio del file, chiaramente ciò distrugge il file originale.

Alcuni virus, che infettano i file usando il primo o il secondo metodo, scrivono anche un blocco di informazioni alla fine del file (per esempio, il virus ``Jerusalem'' [Hof96] con questo blocco distingue i file infetti da quelli non infetti). L'inoculazione del virus all'inizio del file è spesso usata dai virus che infettano i file eseguibili in formato COM. Il modo più comune usato dai virus per infettare i file è attaccarsi alla loro fine. Il virus modifica l'inizio del file in modo che venga eseguito prima il codice del virus e poi quello del programma ospite.

   figure766
Figura 7: Inoculazione di un virus alla fine del file

 

OffsetNomeDim.Commento
00Signature2 byteSempre 4Dh5Ah
*02Last Page Size1 wordNumero di byte nell'ultima pagina
*04File Pages1 wordNumero di pagine da 512 byte
06Reloc Items1 wordNumero di entrate nella tabella di rilocazione
08Header Paragraphs1 wordDim. dell'header in numero di paragrafi (16 byte)
0AMinAlloc1 wordMinimo spazio di memoria richiesto in paragrafi
0CMaxAlloc1 wordMassimo spazio di memoria richiesto in paragrafi
*0EPreReloc SS1 wordValore Stack segment (SS) prima della rilocazione
*10Initial SP1 wordValore iniziale del registro SP
12Negative checksum1 wordSempre Ignorato
*14PreReloc IP1 wordValore iniziale del registro IP
*16PreReloc CS1 wordValore Code segment (CS) prima della rilocazione
18Reloc Table Offset1 wordPosizione della tabella di riloc. dentro l'header
1AOverlay Number1 wordIgnorata se non è un overlay
1CReserved2 wordInformazioni sul linker
Tabella 1: Parte formattata dell'header

* denota i byte che sono alterati dai virus

 

In un file COM (vedi figura 7), nella maggior parte dei casi, ciò è ottenuto modificando i primi tre (o più) byte del codice, inserendo una istruzione di JUMP (salto) al corpo del virus e copiando i byte originali prima di alterarli.

In un file EXE (vedi fugura 7), ciò è ottenuto alterando la parte formattata dell'header (vedi tabella 1). Si modifica l'indirizzo di inizio (CS:IP) in modo da farlo puntare all'inizio del virus, si modifica la lunghezza del modulo eseguibile (offset 02h e 04h) e si modifica anche il puntatore iniziale allo stack. Il valore originale di ogni entrata modificata viene conservato per dare la possibilità al virus di far eseguire poi il codice del programma portatore.


next up previous contents
Successivo: Algoritmo di lavoro dei Su: Struttura del File virus Precedente: Inoculazione di un virus

Aniello Castiglione e Gerardo Maiorano < anicas,germai@zoo.diaedu.unisa.it >