Linux più sicuro di Vista?
A questa domanda proverò a dare una risposta analizzando alcuni fatti.
Innanzitutto Linux non è un sistema operativo (OS), ma un kernel, ovvero la parte più importante dell'OS: Linux internals (riprendendo dal testo di Tanenbaum) definisce kernel tutto ciò che su architettura x86 gira su ring0 (in alcuni casi -1) ovvero con più alto livello di privilegio. Quindi confrontare Vista a Linux è già sbagliato in partenza: sarebbe come confrontare una Alfa 145 con il motore Wankel. Infatti 'Linux' non è installabile così com'è ma solo attraverso le distro. Questa differenza è fondamentale per capire alcuni concetti esposti in seguito.
L'ideale sarebbe comparare Vista con Ubuntu, mia distro preferita giudicata da tantissimi la più usabile (la cui prossima versione della distro sarà rilasciata in Aprile).
Quando Windows viene buildato (terribile neologismo) viene creata un'immagine DVD contenente sia il kernel sia il resto dell'OS. Il lavoro invece di creazione di una distro è leggermente diverso perché somiglia molto di più all'assemblaggio di pezzi diversi di origine diversa (il kernel proviene da qui, openoffice da qui, ecc.). Il lavoro di chi produce una distro - nel caso considerato il team di Ubuntu - è quello di verificare che tutti i pezzi siano fondamentalmente compatibili fra di loro, compilare i vari flavor (x86, amd x86, x64, ecc.), aggiungere varie raffinerie© (font, sfondi, suoni, icone) e distribuire online.
Prima fondamentale differenza: nel caso di Vista, un'unica entità commerciale - Microsoft(MS) - è responsabile di tutta la "filiera" (come il team Ferrari corse ): a cominciare dal kernel per finire con il campo minato. Nel caso di Ubuntu la responsabilità è un po' distribuita. Cosa succede se si trova un baco di sicurezza in campo minato? Nel primo caso bisogna aspettare che MS prepari la patch; nel secondo caso bisogna aspettare che i campo-minato-linux-boys preparino la patch, la passino a quelli di Ubuntu, che a loro volta testeranno, ricompileranno la build e genereranno anche loro una patch.
Update 15 Aprile 2007: A dimostrazione che quello che ho scritto non è pura demagogia cito questo passaggio:
"You may be vulnerable if you do not manually patch your MadWi-Fi driver," said Butti. Before making it public, he shared the flaw with the MadWi-Fi development team, who have released a patch. However, not all Linux distributions have yet built the patch into their code, said Butti.
In poche parole è stato trovato un baco nello stack Wi-Fi (simile a quello per Mac o più antico per Windows), la patch è pronta, ma le distro non tutte l'hanno già inclusa. Fonte.
Seconda fondamentale differenza: Windows viene compilato usando gli ultimi ritrovati in termini di sicurezza sul fronte dei compilatori. Il Service Pack 2 di XP (SP2) è un esempio: sono stati introdotti nuovi flag nel compilatore C++ (ad esempio /GS), e secondo quanto descritto in questa presentazione:
Most critical Windows components have been recompiled in SP2 using the /GS switch
- Components included in network facing processes
- Components that operateon un-trusted input
All other files required for the installation of SP2 have been recompiled with /GS switch
In Ubuntu avviene qualcosa di simile, ma siccome il compilatore è gestito da un'altra entità tale sinergia non è sempre possibile soprattutto in maniera così pervasiva.
Il fatto che la gestione del codice di Windows sia centralizzata ha permesso poi l'uso massiccio delle annotazioni SAL (Standard Annotation Language). SAL è una tecnologia interessante introdotta nei nuovi compilatori C/C++ (vedi punto precedente) che permette di descrivere meglio l'input-output delle funzioni. La documentazione è qui; ma è spiegata chiaramente anche qui. In breve le annotazioni SAL (che hanno la forma di macro C++) descrivono meglio al compilatore le caratteristiche importanti (come la larghezza del buffer) dei parametri sia in ingresso che in uscita delle funzioni: se ad esempio si prova a scrivere in un buffer dichiarato come input (__in) il compilatore genera un errore; stessa cosa se qualche linea di codice potrebbe scrivere in un buffer di output (__out) oltre la sua lunghezza dichiarata.
A questo punto è facile - tramite flag di compilazione - forzare l'uso di SAL nel codice di Windows.
Ad ulteriore prova che tali policy funzionano bene è questo post, che spiega perché una vulnerabilità critica in VML non si manifesti anche in Vista (e ciò nonostante il pezzo di codice incriminato sia presente anche in Vista!!!). Provate ad immaginare cosa accadrebbe se il team Ubuntu volesse imporre a tutto il codice che viene incluso nella distro l'uso forzato di simili costrutti!
Ma SAL non è l'unico miglioramento in termini di sicurezza. Mi limito a riciclare la tabella:
Inoltre la centralizzazione del controllo sul codice permette l'implementazione del Security Development Cycle (SDL). Per rilasciare qualcosa di mastodontico come Windows Vista, bisogna passare per un ciclo di sviluppo raffigurato qui sotto (l'immagine è riciclata da questo post dove è riportata la fonte):
In breve: il personale viene formato tramite corsi di sicurezza obbligatori basati su testi canonici e corsi in aula; il codice scritto - oltre ad essere compilato con i flag di sicurezza attivati - deve superare i "controlli di qualità" (tools automatici che spulciano il codice alla ricerca di API 'proibite' e altro). Viene poi ulteriormente analizzato, verificato per la sicurezza insieme agli esperti interni del settore ed affidato a review esterne. In cima a tutto ciò si sono aggiunte features di sicurezza come UAC (descritta più sotto).
Per contro si capisce bene che chi mette semplicemente insieme i vari pezzi (Ubuntu) non ha nessun controllo sul livello di qualità di chi li scrive e li mantiene (non voglio denigrare, ma gli estimatori dell'open source indicano spesso tra i vantaggi che chiunque possa contribuire e ciò va nella direzione opposta).
I risultati del SDL si son già visti con il SP2, Windows 2003 ed ora con Vista. Il SDL ha anche portato al design di nuove features come l'UAC (User Account Control) e tante altre (*). Nonostante però qualcuno paragoni UAC a Sudo, ci sono tre fondamentali differenze:
- Se ci si logga come amministratori UAC a differenza di Sudo non richiede la password ma solo una conferma (Apple ha provato a prendersi gioco di questo usando da suo stile la menzogna come mezzo di marketing: questo post in inglese spiega un po' la realtà delle cose).
- A differenza di tutte le altre implementazioni, sia la richiesta di password, che quella di conferma, avvengono su un desktop separato (Secure Desktop). Questo impedisce che qualcunque software possa in qualche modo interferire maliziosamente con tale richiesta (spoofing).
- Sudo usa un meccanismo di ticketing. Una volta inserita la password, si rimane 'full administrator' per 5 minuti (durata di default). Durante quell'arco di tempo tutte le operazioni che richiedono pieni privilegi verranno automaticamente autorizzate. Ciò significa ad esempio che se qualcuno dovesse manomettere 'notepad', e notepad venisse eseguito subito dopo un comando che richiede sudo, la porta è aperta ad eventuali disastri. Al contrario Vista richiede l'intervento dell'utente per ogni processo diverso. Qualcuno ha persino suggerito di disabilitare UAC: non fatelo, UAC è come una cintura di sicurezza.
Evito di ripetermi sul fatto che molti considerano l'OpenSource intrinsecamente più sicuro: qui e qui ci sono miei due post sull'argomento.
Bottom line: Vista è - in quanto a sicurezza - decisamente all'avanguardia. Consiglio caldamente a tutti quelli che usano Windows XP di fare l'upgrade. Non fatevi spaventare da problemi di appcompat perché si superano facilmente o da fantomatiche cazzate che si sentono in giro (1 2 3 4 5)!
A questo punto la risposta alla domanda posta nel titolo a me sembra ovvia. Ognuno però creda quel che vuole.
-quack
(*) altre tecnologie di sicurezza introdotte in Vista sono indicate in questo articolo di Russinovich.
UPDATE: coincidenza delle coincidenze, durante la pausa pranzo ho avuto modo di comprare il numero di Aprile 2007 di Linux Magazine che spiega perché - secondo l'autore Scott Granneman - Vista è meglio di Linux. Nello stesso articolo indica anche 10 ragioni opposte e tra le 10 (in cui Linux sarebbe meglio di Vista) vi figura la security per i seguenti tre motivi:
- UAC perché implementato male menzionando la pubblicità Apple (incredibile che l'autore creda alla pubblicità Apple e la riporti come fonte rilevante)
- Il firewall di Vista per motivi spiegati su C|Net. Cosa strana è che le mie prove su Ubuntu hanno dato gli stessi esiti di Windows. Le porte outbound sembrano aperte di default.
- Bitlocker è figo, ma è solo per Business/Ultimate. Per Linux invece c'è TrueCrypt che è gratis ed equivalente e quindi meglio. Mia opinione:
a) La differenza tra Bitlocker e TrueCrypt è abissale, in quanto per BitLocker c'è bisogno di un minimo di supporto nel kernel in modo tale che anche i file dell'OS possano essere criptati.
b) TrueCrypt è disponibile anche per Windows Vista.
In generale ho avuto l'impressione che il tono della rivista fosse dilettantesco. Altre due perle:
- DRM in Vista: per il DRM si fa riferimento all'articolo di Gutmann ampiamente criticato da tutte le direzioni (Gutmann ci tiene a far sapere che Vista non l'ha provato)
- Sulla para-virtualizzazione in RHEL 5 un altro autore ci tiene a far sapere che il vantaggio della para-virtualizzazione sta nel fatto di non richiedere hardware specializzato a differenza della virtualizzazione vera e propria che richiede "something that's only been available in the most recent AMD and Intel CPUs". Che questo sia falso lo sanno anche le pietre