Quante volte avete inserito un cd o una chiavetta USB nel computer e automaticamente è stata avviata l’esecuzione di un programma contenuto su quel supporto ? E’ il caso classico dei cd di installazione dei programmi. Ma cosa avviene in realtà ? E’ molto semplice : Windows, per impostazione predefinita, ogni volta che viene inserito un nuovo media (un supporto magnetico come un cd oppure una pen-drive o anche un floppy) va a vedere se sul supporto esiste un file (che potrebbe anche essere nascosto) che si chiama Autorun.inf e, se presente, esegue le istruzioni che vi sono contenute.

Il file autorun.inf è un normalissimo file di testo (visualizzabile e modificabile con un semplice notepad) la cui struttura è identica a quella dei file .ini. Per avere qualche informazione in più sul file autorun.inf potete consultare questa pagina di wikipedia.

Il file autorun.inf non è pericoloso di per se, contrariamente a quello che orrendamente ho sentito qualche volta dire (“ti sei beccato il virus autorun.inf …”): può essere pericoloso il contenuto che viene eseguito dalle istruzioni contenute in autorun.inf. Di seguito riporto, a puro titolo di esempio, un possibile contenuto per il file autorun.inf:

[autorun]
open=install\setup.exe
icon=icona.ico

In questo esempio dunque, il sistema operativo Windows, legge il file autorun.inf (che deve trovarsi nella radice principale del supporto inserito) ed esegue automaticamente il programma setup.exe contenuto nella sottocartella install del supporto, e rappresenta il file autorun.inf con l’icona contenuta nel file icona.ico (sempre all’interno del supporto). Fin qui nulla di male se non fosse per il fatto che il file setup.exe potrebbe essere infetto da virus o potrebbe installare qualcosa, che non vogliamo, in modo totalmente silente ed invisibile.

Ed è proprio la tecnica che ha utilizzato per la propria propagazione il virus Conficker (altrimenti noto come Downadup). Quindi, oltre alla solita raccomandazione di utilizzare sempre un buon antivirus costantemente aggiornato, può essere una buona idea aumentare la propria sicurezza disabilitando questa caratteristica di esecuzione automatica intrinseca a Windows Explorer.

Per quanto attiene a questo specifico aspetto, Windows Vista ha migliorato la sicurezza : l’esecuzione di autorun.inf (o meglio delle istruzioni che vi sono contenute) non avviene più in modo completamente automatico. Al contrario viene attivata una finestra di dialogo, detta Autoplay, che richiede se l’utente intenda eseguire le azioni di autorun.inf oppure qualcosa d’altro. Ma per le versioni precedenti di Windows (XP e 2003) l’impostazione predefinita è quella di una esecuzione cieca di autorun.inf
Tuttavia, sebbene Vista si riveli un pochino più sicuro, questa sicurezza svanisce rapidamente se l’utente, alla prima esecuzione di Autoplay, spunta il controllo di impostazione predefinita per evitare che venga riproposta in futuro la domanda.

Per disattivare o modificare questo comportamento esistono due strade. La prima è completamente manuale e NON permanente: in pratica bisogna avere l’accortezza di tenere premuto il tasto SHIFT ogniqualvolta si inserisce (o si collega) un nuovo supporto: in questo modo Windows XP non eseguirà in automatico le azioni di autorun.inf

La seconda strada è permanente e comporta la manipolazione del registro di sistema che può essere ottenuta mediante policy (gli amministratori di sistemi sanno di che parlo) oppure mediante una modifica diretta del registro di sistema tramite lo strumento regedit.

Questa seconda via può essere, a sua volta, divisa in due. Un metodo grezzo che disattiva l’esecuzione di autoun.inf indipendentemente dal tipo di unità inserita ed in tutte le condizioni. Questo primo metodo si basa su un invalidamento del file autorun.inf per cui il sistema non è più in grado di “gestire” questo tipo di file. Questa tecnica, detta IniFileMapping prevede la scrittura della seguente chiave/valore all’interno del registro di sistema:

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\IniFileMapping\Autorun.inf]
@="@SYS:DoesNotExist"

Questo metodo è piuttosto grezzotto perchè non interviene in alcun modo sulla catena di eventi che portano all’esecuzione dell’attività di autorun e si limita a reinviare la mappatura delle chiavi che dovrebbero definire le API di manipolazione di autorun.inf ad una posizione inesistente che ovviamente non ne definisce alcuna. In pratica è come se Windows, una volta inserito il nuovo supporto, cercasse comunque di eseguire l’attività di esecuzione automatica ma, una volta trovato il file autorun.inf, non sapesse cosa farci.

Il secondo metodo è più elegante anche se più macchinoso e tiene in considerazione il modo in cui Windows cerca di capire se la funzionalità di autorun debba essere eseguita o no: ogni volta che viene inserito un nuovo supporto, Windows interroga dua chiavi specifiche di sistema per capire se su quella lettera di unità o su quello specifico tipo di unità debba essere eseguito, o meno, autorun. Queste due chiavi sono NoDriveAutorun e NoDriveTypeAutorun. Ognuna di queste chiavi può trovarsi alternativamente nel ramo HKLM (Local Machine) o HKCU (Current User) del registro: se vengono trovate in entrambi i rami allora assume rilevanza quella del ramo HKLM mentre quella nel ramo HKCU viene ignorata.

NoDriveTypeAutorun

Questa chiave si trova (o va creata) a seconda delle esigenze alternativamente in uno di questi percorsi:
HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer

Il tipo della chiave è REG_DWORD (DWORD a 32 bit). Il valore esadecimale da inserire viene calcolato utilizzando una sequenza di 8 bit dove :

  • La posizione del bit indica il tipo di drive (vedi tabellina sotto)
  • Il valore del bit 0 (zero) significa funzionalità attiva, il valore del bit 1 (uno) significa funzionalità disattivata

La seguente immagine rappresenta l’ordine dei bit.

NoDriveTypeAutoRun_bit

Un piccolo esempio aiuta a comprendere. Volendo disattivare la funzionalità di autorun sulle sole unità di tipo CD o DVD dovrò attivare il bit 1 nella posizione 5 lasciando tutti gli altri a zero il che mi porta al valore binario 00100000 che in esadecimale è il valore 20 che andrà inserito nella chiave. Volendo disabilitare la funzionalità autorun per tutti i tipi di drive dovrò attivare il bit 1 in tutte e 8 le posizioni ottenendo il valore binario 11111111 che corrisponde al valore esadecimale FF (ovvero il decimale 255). Nella chiave DWORD inserirò quindi il valore risultante da questo semplicissimo calcolo per il quale potete farvi aiutare dalla semplice calcolatrice di Windows in modalità scientifica: inserite, in modalità binaria, gli zeri e gli uno secondo l’ordine di attivazione (o disattivazione) della funzionalità autorun per i vari tipi di drive e quindi passate alla modalità esadecimale per ottenere il valore risultante.

NoDriveAutorun

La seconda chiave che Windows interroga per determinare se autorun debba essere eseguito o meno è NoDriveAutorun. A differenza della precedente, questa chiave non considera il tipo di unità bensì la lettera dell’unità.

Questa chiave si trova (o va creata) a seconda delle esigenze alternativamente in uno di questi percorsi:
HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer

Il tipo della chiave è REG_DWORD (DWORD a 32 bit). Il valore esadecimale da inserire viene calcolato utilizzando una sequenza di 26 bit ognuno dei quali rappresenta una sequenza dell’alfabeto : il primo bit rappresenta la lettera A mentre il 26° rappresenta la lettera Z.

----------1---------2-----
01234567890123456789012345
ABCDEFGHIJKLMNOPQRSTUVWXYZ

Volendo, per esempio, disattivare le funzionalità di autorun per tutti i drive successivi alla lettera H dovremo creare un valore binario nel modo seguente lasciando il bit a zero per le unità su cui autorun potrà essere eseguito e mettendo il bit a 1 per le unità su cui autorun NON deve essere eseguito.


ABCDEFGHIJKLMNOPQRSTUVWXYZ
--------------------------
00000000111111111111111111  <- Valore Binario

La conversione in esadecimale di questo valore binario è 3FFF che è il valore che inseriremo nella chiave. Per disabilitare l’esecuzione di autorun su tutte le possibili lettere di unità inseriremo invece il valore 3FFFFFF che corrisponde al binario 11111111111111111111111111 (ovvero una sequenza di 26 volte 1). Va da se che se non desideriamo inibire autorun su nessuna lettera di unità possiamo alternativamente inserire il valore 0 (zero) oppure omettere direttamente la chiave.

Conclusioni

L’utilizzo delle chiavi di registro NoDriveTypeAutorun e NoDriveAutorun consente una regolazione fine dell’attivazione/disattivazione delle funzionalità di autorun in contrapposizione al metodo di inibizione tout-cour del file autorun.inf descritta più sopra. Per esempio è possibile lasciare attiva la funzionalità sulle lettere fisiche di unità e disattivarla sulle lettere “alte” ovvero quelle assegnate automaticamente in seguito all’inserimento di pen-drive o alla mappatura di unità di rete.