# 0-day

0-day (o zero-day), in informatica, è una qualsiasi vulnerabilità di sicurezza informatica non espressamente nota allo sviluppatore o alla casa che ha prodotto un determinato sistema informatico; definisce anche il programma - detto "exploit" - che sfrutta questa vulnerabilità informatica per consentire l'esecuzione anche parziale di azioni non normalmente permesse da chi ha progettato il sistema in questione. Vengono chiamati 0-day proprio perché sono passati zero giorni da quando la vulnerabilità è stata conosciuta dallo sviluppatore e quindi lo sviluppatore ha avuto "zero giorni" per riparare la falla nel programma prima che qualcuno possa scrivere un exploit per essa. Nel momento in cui il bug viene risolto, lo 0-day perde parte della sua originale importanza perché non può più essere usato contro i sistemi aggiornati alla versione in cui viene risolta la vulnerabilità di quel preciso sistema.
Normalmente si parla di 0-day riferendosi ad essi come attività espressamente dolose compiute da cracker che si adoperano per trovarle proprio con l'intenzione di guadagnarsi un accesso abusivo ad un sistema informatico vulnerabile oppure a causare in esso comportamenti imprevisti che possono andare dalla perdita di dati a malfunzionamenti anche molto gravi.
Le vulnerabilità 0-day costituiscono una seria minaccia.

## Descrizione
### Etica

Esistono differenti ideologie relative alla collezione e uso delle informazioni delle vulnerabilità 0-day. La maggior parte delle aziende di sicurezza informatica compie ricerche sulle vulnerabilità 0-day in modo da capirne la natura e il loro utilizzo da parte di individui, worm e virus. Oppure, alcune aziende comprano vulnerabilità per accrescere la loro capacità di ricerca. Un esempio di questo tipo di programma è la Tipping's Point Zero Day Initiative. Anche se vendere e comprare queste vulnerabilità non è tecnicamente illegale nella maggior parte del mondo, c'è una grande controversia riguardo al metodo di divulgazione. Nel 2006 una decisione della Germania di includere l'articolo 6 della Convention Of Cybercrime e di EU Framework Decision on Attacks against Information Systems potrebbe far sì che la vendita o anche la produzione di vulnerabilità diventi illegale.
La maggior parte dei programmi ufficiali segue alcune forme di linee guida di RFPolicy o del più recente OIS Guidelines for Security Vulnerability Reporting and Response. In generale queste regole vietano la pubblica divulgazione di vulnerabilità senza la relativa notifica al produttore e prima di un tempo sufficiente a distribuire una patch.

### Finestra di vulnerabilità

Il tempo che intercorre tra la prima volta che un exploit diventa attivo e quando il numero di sistemi vulnerabili si riduce fino a diventare insignificante è chiamato finestra di vulnerabilità.
La time-line per ogni vulnerabilità è definita dai seguenti eventi principali:
* t$_0$: La vulnerabilità viene scoperta.
* t$_{1a}$: Una patch di sicurezza è pubblicata.
* t$_{1b}$: Un exploit diventa attivo.
* t$_2$: La maggior parte dei sistemi vulnerabili applica la patch.
Per le vulnerabilità normali abbiamo che t$_{1b}$-t$_{1a}$ > 0. Questo implica che il distributore di software era a conoscenza della vulnerabilità (al tempo t ≥ t$_0$) e ha avuto il tempo di pubblicare una patch di sicurezza (t$_{1a}$) prima che un hacker abbia avuto il tempo di creare un exploit funzionante (t$_{1b}$). Per gli exploit 0-day, abbiamo che t$_{1b}$-t$_{1a}$ ≤ 0, quindi l'exploit diventa attivo prima che una patch sia stata resa disponibile.
Non divulgando le vulnerabilità note, un distributore di software spera di raggiungere t$_2$ prima che t$_{1b}$ venga raggiunto, così da evitare exploits. Comunque, il distributore di software non ha garanzie che l'hacker non troverà delle vulnerabilità per conto proprio. Tra l'altro, le patch di sicurezza possono essere analizzate per rilevare le vulnerabilità sottostanti e generare automaticamente exploits funzionanti: perciò avremo sempre t$_0$ ≤ t$_{1a}$ e t$_0$ ≤ t$_{1b}$.
In pratica, la dimensione della finestra di vulnerabilità varia a seconda dei sistemi, dei distributori e delle singole vulnerabilità. È spesso misurata in giorni: un report del 2006 la stima in 28 giorni.

### Metodi di attacco

Gli sviluppatori di malware possono sfruttare le vulnerabilità 0-day attraverso alcuni diversi metodi di attacco.
Alcune volte, quando gli utenti visitano siti web non affidabili, codice malevolo sul sito può sfruttare le vulnerabilità dei browser Web. I browser Web sono un obiettivo particolare per i criminali a causa della loro enorme diffusione e utilizzo. I cybercriminali possono anche mandare email con allegati malevoli attraverso SMTP, i quali sfruttano vulnerabilità nell'applicazione che apre l'allegato. Gli exploit che sfruttano tipi di file comuni sono numerosi e frequenti.

### Protezione

La protezione 0-day è l'abilità di fornire protezione contro gli exploit 0-day. Dal momento che gli attacchi 0-day sono generalmente sconosciuti al pubblico, è spesso difficile difendersi da essi. Gli attacchi 0-day sono spesso efficaci contro reti "sicure" e possono rimanere ignoti anche dopo che vengono lanciati. Perciò, gli utenti di questi sistemi "sicuri" devono usare il buonsenso e abitudini sicure durante l'uso del computer.
La maggior parte delle tecniche esiste per limitare l'efficacia delle vulnerabilità 0-day che corrompono la memoria, come ad esempio i buffer overflow. Questi meccanismi di protezione esistono negli attuali sistemi operativi come macOS, Windows Vista, Solaris, Linux, Unix e ambienti Unix-like; Windows XP Service Pack 2 include una protezione limitata contro le generiche vulnerabilità di corruzione della memoria e le versioni precedenti la includono ancora meno. Il software di protezione dei desktop e server esiste anche per ridurre le vulnerabilità 0-day di buffer overflow. Tipicamente queste tecnologie sfruttano algoritmi euristici, bloccando i buffer overflow prima che causino dei danni.
È stato suggerito che una soluzione di questo tipo possa essere inattuabile perché è algoritmicamente impossibile, nel caso generale, analizzare ogni codice arbitrario al fine di determinare se sia malevolo, in quanto l'analisi riduce il problema della terminazione a un automa lineare limitato, in definitiva irrisolvibile. Comunque non è necessario riferirsi, la maggior parte delle volte, al caso generale (dividere tutti i programmi in malevoli e no) per eliminare una grande fetta di comportamenti malevoli.

## Worms

I worm che sfruttano 0-day approfittano di un attacco a sorpresa finché sono sconosciuti ai professionisti di sicurezza informatica. La storia recente mostra un aumento della propagazione di worm. Worm ben progettati possono diffondersi anche nell'arco di minuti con conseguenze devastanti su Internet.

## Virus

Un virus 0-day è un virus o malware per computer in precedenza sconosciuto per il quale la protezione degli antivirus non è ancora disponibile.
Tradizionalmente, i software antivirus si affidano a firme per identificare i malware. Questo può essere davvero efficace, ma non può difendere contro i malware a meno che le firme siano già state ottenute e gli update distribuiti. A causa di questo, l'approccio basato sulle firme non è efficace contro i virus 0-day.
Gli antivirus più moderni usano ancora le firme, ma effettuano anche altri tipi di analisi.

### Analisi del codice

Nell'analisi del codice, il linguaggio macchina del file viene analizzato per vedere se c'è qualcosa che sembra sospetto. Tipicamente, i malware hanno un comportamento caratteristico e l'analisi del codice tenta di rilevare se questo è presente nel codice.
Anche se utile, l'analisi del codice ha limitazioni significative. Non è sempre semplice determinare a cosa una sezione del codice è destinata; in particolare se è davvero complesso ed è stato scritto deliberatamente così con l'intenzione di ostacolarne l'analisi. Un'altra limitazione dell'analisi del codice è il tempo e le risorse disponibili. Nel mondo competitivo dei software antivirus, c'è sempre un equilibrio tra l'efficacia dell'analisi e il tempo impiegato.

### Emulazione

Un approccio per superare le limitazioni dell'analisi del codice è l'esecuzione di sospette sezioni di codice, da parte del software antivirus, in una sandbox e l'osservazione dei comportamenti. Questo può essere ordini di grandezza più veloce dell'analisi dello stesso codice.

### Firme generiche

Le firme generiche sono firme che sono specifiche di un certo comportamento invece che di uno specifico elemento o malware. La maggior parte dei nuovi malware non è totalmente nuovo, ma è una variazione di malware precedenti, o contiene codice di uno o più malware precedenti. Perciò i risultati delle analisi precedenti possono essere utilizzati contro i nuovi malware.

### Competitività nell'industria dei software antivirus

È generalmente accettato nell'industria degli antivirus che la protezione basata sulle firme della maggior parte delle aziende è effettivamente identica. Se una firma è disponibile per un elemento o malware, allora ogni prodotto (tranne quelli malfunzionanti) dovrebbe rilevarla. Comunque, alcuni produttori sono significativamente più veloci di altri a venire a conoscenza di nuovi virus e/o aggiornare i database delle loro firme per rilevarli.
C'è una grande differenza di efficacia in termini di protezione da virus 0-day. Il German Computer Magazine c't ha scoperto che il tasso di rilevamento per virus 0-day varia dal 20% al 60%. È principalmente nell'ambito dei virus 0-day che i produttori competono ai giorni nostri.