RSS

Virus e Antivirus… (1)

29 Ottobre 2011

Internet, Varie

antivirus-64

Questo è un lungo articolo in cui parlerò di Virus informatici e, sebbene la lettura non ha nulla a che vedere con Linux, può essere utile per acquisire un background culturale informatico. E’ diviso in tre parti: tipologie di virus, ricerca di virus su files e ricerca di virus in memoria.

Negli anni 90 ebbì la conoscenza dei virus informatici perchè il laboratorio scolastico subì un attacco di due virus: il Datalock e il StarDot 801 a distanza di poche settimane. Per un informatico servì veramente poco per analizzarne la struttura (tramite un hex editor, un debugger e un disassemblatore) e conoscerne quindi i principi di funzionamento. A quel tempo poi non c’erano i 3 milioni e passa virus attuali ma qualche centinaia e per ottenerne una trentina per fare ulteriori analisi dovetti fare scambi via posta di dischetti infetti con altre persone che pubblicavano annunci sulle riviste informatiche (a quel tempo non c’era internet come oggi e le poste recapitavano le lettere!).

Tutto questo era per poter realizzare una antivirus, prodotto che magari avrebbe potuto a quei tempi ottenere anche un certo successo se lo avessi completato, considerando che non ce n’erano moltissimi in circolazione come oggi (c’era comunque il Norton, di cui ricordo anche un bellissimo libro tecnico proprio sui virus dello stesso autore e il McAfee, giusto per citarne i più noti). Il tutto si è poi arenato (e oggi direi per fortuna, perchè se stessi ancora perdendo tempo appresso ai virus per arginare le scelte progettuali di Windows non molto affiatate con la sicurezza che ne favoriscono la diffusione, sarebbe stato proprio un lavoro non gratificante…) proprio per la difficoltà ad accedere a nuovi virus e poter creare la libreria iniziale per poter rilasciare l’antivirus presso il pubblico.

Lo standard per gli antivirus di allora, che grossomodo si ritrova anche nei prodotti odierni, era dato da queste due tipologie di prodotti:

  • Scansione tramite pattern: si hanno delle sequenze di bytes estratti dal virus (chiamate anche firme) che vengono utilizzate come pattern di ricerca. Se un file contiene quella sequenza allora esso è infetto dal virus, ammesso che la firma non sia troppo generica e possa dar luogo a molti falsi positivi. L’antivirus si aggiorna tramite l’inserimento di nuove firme da usare per la fase di scansione e questo è un vantaggio, lo svantaggio è che con l’aumentare del numero di pattern da usare, aumenta anche il tempo di scansione. Un altro svantaggio lo si ha nel caso di virus polimorfici, come vedremo tra poco.
  • Scansione euristica: si tratta di varie tecniche con cui si esamina un file per trovare se contiene al suo interno un virus, esaminando l’ipotetico comportamento del programma (sia “eseguendo” il programma su un ambiente simulato, che “disassemblandolo” al volo alla ricerca di comportamenti tipici di un virus). Il vantaggio è che si riescono a trovare virus anche sconosciuti, senza bisogno di un continuo aggiornamento, mentre lo svantaggio è quello che possono esserci molti falsi positivi, dato che alcuni programmi, come le utility, per loro natura accedono ai files anche in modo simile ai virus.

L’antivirus che avevo progettato (e che vedremo nel prossimo articolo) concettualmente non si basava su nessuno di questi due metodi e qualche tempo dopo trovai che alcune implementazioni simili vennero fatte per la ricerca dei virus polimorfici per ovviare al problema che manifestavano con la classica ricerca dei pattern.

A questo punto è d’obbligo però parlare sommariamente delle varie tipologie di virus, in base alle loro macro categorie in cui possono essere divisi, partendo dal presupposto che lo scopo principale di un virus è quello di insinuarsi dentro altri programmi e diffondersi quindi su altri computer tramite lo scambio (oggi molto agevolato da internet) di programmi infetti. Come azione collaterale, alcuni virus possono mostrare la loro presenza facendo degli effetti video/audio in certe circostanze, ma in altri casi, possono portare alla cancellazione dei nostri dati (per cui ci accorgiamo che c’è in virus sul pc in base al danno che ci ha procurato!).

Il Virus V-Sign in azione

Il Virus V-Sign in azione

Solitamente il virus si pone in testa o in coda ad un file (facilitando quindi la rilocazione del codice originale che viene spostato), oppure si posiziona dentro al file infetto stesso (rovinando irreparabilmente il file e compromettendone il corretto funzionamento) e setta la sua esecuzione ad avvenire prima dell’esecuzione dell’originario programma non infetto.

Ovviamente c’è differenza in questo a seconda del tipo di file infetto che nei sistemi Windows erano il formato .com (ereditato dal primissimo DOS) e il .exe. Il file .com è molto semplice, essendo una lista di istruzioni macchina da svolgere in sequenza partendo dall’inizio e che vengono caricate in una “locazione fissa” (sarebbe meglio dire pagina) in memoria, mentre il .exe contiene programmi più voluminosi che sono rilocati in memoria e pertanto nel primo blocco del file ci sono informazioni essenziali per caricare e gestire correttamente il file (i primi due caratteri fissi sono MZ e penso che molti che hanno aperto un file .exe con un editor gli avranno notati).

Ritornando in tema, possiamo dividere i virus in:

  • Non residenti in memoria: il virus agisce al momento in cui si esegue il file infetto e solitamente va alla ricerca di un file (più o meno casuale) nel disco per infettarlo e, se è il caso, attiva l’effetto collaterale. Concettualmente è la tipologia più semplice di virus
  • Residenti in memoria (TSR: terminate & stay resident ): sono virus che alla prima esecuzione rimangono residenti in memoria e possono sostituire le normali funzioni di sistema operativo e del bios. Possono altresì modificare le operazioni di boot per permettere di venire attivati al successivo riavvio del sistema operativo, senza che un file infetto venga prima eseguito (questa è una funzione che può essere inserita anche da quelli non residenti in memoria, per assicurarsi di infettare un nuovo file ad ogni riavvio del pc). Essendo sempre attivi in memoria possono agevolmente infettare i file che vengono letti o eseguiti dall’utente.
  • I virus possono poi essere catalogati in Stealth quando sono in grado di mascherare la loro presenza. Ci sono varie tecniche di camuffamento e le migliori sono quelle realtime offerte dai virus TSR. Le tecniche base, offerte da quasi ogni virus è quella di lasciare inalterata la data di modifica del file che viene infettato (che altrimenti il sistema operativo cambierebbe nella corrente, rendendo sospetto il file). Quelle più sofisticate e che solo i virus che agiscono sopra il sistema operativo sono in grado, ad esempio:
    •  di fornire la dimensione del file infetto come se non fosse infetto (antivirus che monitorano il cambiamento della dimensione del file fallirebbero)
    • di rendere disponibile la copia del file non infetto a chi lo stia leggendo (così un antivirus che faccia una scansione per pattern non troverà quel file infetto, e così anche per quelli che si salvano un checksum dei file e li confrontano per verificare i cambiamenti non autorizzati). E’ per questo che ogni antivirus prima di effettuare la scansione dei file, esegue anche la scansione in memoria, perchè altrimenti con un virus stealth in memoria, la scansione dei file potrebbe dare esito negativo pur essendo i file infetti (e con certi virus che infettato i fiels che vengono aperti, tutto l’hardisk diverrebbe infetto dalla scansione antivirus!).
  •  Un altra caratteristica che possono avere i virus (sia TSR che non) è quella di essere polimorfici. Ci sono vari modi di essere polimorfi. Un metodo (molto semplice concettualmente, un pò meno per implementazione) è quello di cambiare la sequenza del proprio codice per apparire sempre diversi:
    • la sequenza di routine A, B, C, D che compongono un virus, vengono di volta in volta salvati in modo diversi (ovvero mutano) ad ogni infezione: ABCD BADC CDAB, ecc. n questo caso un pattern di un antivirus che cerchi BC come stringa del virus, non lo identificherebbe come tale nella BADC e CDAB.
    •  Altri sistemi sono che la procedura A venga variata in molti modi diversi (A1, A2, A3…) ma che una volta eseguita ciò che produce sia l’effetto originario di A.
    •  Il metodo più efficace è però quello invece di transcodificare il corpo del virus con un algoritmo di “cifratura” che sia sempre diverso e rendendo polimorfica (come nel metodo precedente) la routine di decriptazione che viene eseguita per prima. In questo caso gli antivirus con pattern matching hanno difficoltà a trovare un pattern univoco per trovare il virus in considerazione del fatto che:
      • il corpo del virus è sempre diverso (la cifratura infatti ha un numero di varianti potenzialmente infinito ai fini pratici)
      • l’algoritmo iniziale di decriptazione muta ad ogni infezione e può raggiungere un numero molto grande di casi differenti, imponendo di dover avere un numero altrettanto grande di pattern di ricerca per trovare un singolo virus (e questo è appunto il motivo per cui la ricerca tramite pattern è poco efficace nei virus polimorfici).

Per quanto riguarda al linguaggio con cui sono scritti i virus, ovviamente l’assembler è stato il linguaggio dominante nei primi tempi: si riesce a scrivere codice compatto ed efficiente, soprattutto nel fare le operazioni a basso livello tipiche dei virus TSR.

Nonostante questo, anche linguaggi ad alto livello furono usati, rendendo il virus molto più pesante (perchè si porta appresso tutte le librerie tipici dei linguaggi evoluti…e in alcuni casi come successo pochi anni fa, anche l’indirizzo dell’autore del virus perchè il proprio compilatore era stato registrato come prodotto originale e inseriva questa informazione nell’eseguibile a sua insaputa…), anche se certe funzioni a basso livello erano comunque presenti (d’altronde i linguaggi evoluti permettono comunque l’inserimento più o meno agevole di codice macchina).
Oggigiorno i macro virus (ad esempio dei prodotto Office) sono molto popolari, per cui i virus sono scritti con linguaggi di scripting ad alto livello (a quel tempo l’Office era appena stato rilasciato e il Lotus 123 era ancora in voga…). E’ anche vero che oggi sono i Worm più che i Virus a farla da padrona e il tipo di files utilizzati per una infezione sono enormemente aumentati 🙁

A questo punto, dopo aver visto sommariamente i vari tipi di virus e come agiscono ci fermiamo con questa prima parte, proseguiremo nel prossimo articolo con l’analisi dell’antivirus per la ricerca di files infetti

2 Responses to “Virus e Antivirus… (1)”

  1. nik68 Says:

    L’italiano dell’articolo è un po’ da rivedere (forse anche a causa della velocità di digitazione) ma il contenuto è superbamente chiaro e dettagliato (VECCHIA SCUOLA 😉 ).
    Da tempo (più o meno da quando inviavi dischetti via PT) non leggevo un ARTICOLO
    sui virus (ARTICOLO come si deve).
    Ancora meno se ne leggono su come cacciare i virus, se possibile,
    una volta che hanno impestato un PC.

  2. ice00 Says:

    Purtroppo il tempo è sempre tiranno e questo articolo, diviso in 3 parti, in cui la difficoltà degli argomenti aumenta in progressione (nell’ultima parte si parlerà di interrupt nei processori) ha richiesto parecchio tempo di scrittura e ovviamente qualcosa ci scappa sempre nonostante le varie riletture (ripasserò al setaccio la seconda parte di prossima pubblicazione…) 🙂

    Devo dire che da qualche parte in soffitta ho ancora quei dischetti scambiati… mentre ho una valigetta dietro l’armadio che contiene ancora i listati dei disassemblati dei virus con tutti i miei commenti del caso..

    Tra l’altro ora che mi fai pensare, potrei fare anche la quarta parte…relativamente alle tacniche anti-debugging che i virus attuano (nella valigetta di sicuro ho il listato giusto per questo scopo…) per rendere difficile la vita ai realizzatori di antivirus…

Leave a Reply