Sulla sicurezza di Linux (ancora!)

Il mio articolo dell’altro ieri sulla sicurezza di Linux ha scatenato la solita, accesissima discussione tra i sostenitori di Linux, quelli di Windows e quelli degli altri sistemi operativi. Tra i commenti che mi sono arrivati, ce n’è stato uno che mi segnalava questo articolo di Geekzone:

How to write a Linux virus in 5 easy steps

Qui di seguito trovate le mie osservazioni su questo tema.

La gallina domani (e la pagliuzza nell’occhio degli altri)

Resto sempre molto perplesso di fronte alle contestazioni che vengono mosse a Linux ed al suo software in tema di sicurezza.

Circa il 96% della popolazione mondiale usa una delle varie versione di Windows e se ne lamenta in continuazione. Sono proprio gli utenti Windows a lamentarsi della scarsissima sicurezza di Windows, dei suoi continui problemi, della necessità di riavviare il sistema uno o due volte al giorno, della necessità di reinstallare tutto quanto una volta o due all’anno e via dicendo. Nonostante tutto questo, questi stessi fanatici di Windows sono sempre pronti a sottolineare che esiste, in fondo, una vulnerabilità nascosta da qualche parte dentro Linux e che, in fondo, l’immunità di Linux è destinata a terminare quando Linux sarà diffuso quanto Windows.

In altri termini, questa gente preferisce tenersi per anni un sistema operativo che costa loro una novantina di euro ad edizione, che non funziona, che si pianta in continuazione, che costringe l’utente a ripartire da zero un paio di volte l’anno, che è responsabile del 99% delle infezioni solo perchè il principale concorrente (che è gratuito) potrebbe, un giorno, chissà quando, forse avere l’1% dei problemi che ora affliggono Windows.

Francamente, mi sembra che questi “analisti” abbiamo davvero bisogno di farsi vedere da uno psichiatra. Voi che ne dite?

Non vi sembrerebbe più logico godersi Linux (“aggratis”) fintanto che è sicuro ed affidabile e pensare all’eventuale, fosco futuro di Linux se e quando ce ne sarà bisogno?

Da StarBasic ai Launcher

Comunque, la questione sollevata dall’articolo di Geekzone è una cosa già nota da tempo (e non è mai stata sottovalutata). In realtà, fa parte di una intera categoria di “sfighe” che può essere cataloga sotto il nome di “script eseguibili” o di “interpreti di linguaggio incapsulati nei programmi”. Si tratta della stessa vulnerabilità che si trova alla base dei “virus di macro” o “worm”, che dir si voglia. Questa vulnerabilità è già nota da tempo ed è già stata affrontata in vari casi.

Quando è arrivato sul mercato OpenOffice (ex StarOffice), alla fine degli anni ’90, ci si è subito accorti della presenza di StarBasic al suo interno. StarBasic è una implementazione “open source” di un interprete basic molto, molto simile a Visual Basic di Microsoft. Siccome Visual Basic era già allora (come adesso) il responsabile del 70% delle epidemie, si è subito temuto il peggio.

A causa di queste preoccupazioni, l’implementazione di StarBasic è stata eseguita tenendo conto delle lezioni imparate da Visual Basic. L’esecuzione degli script in OpenOffice è normalmente disabilitata e l’interprete stesso impone dei limiti molto seri a cosa può fare il codice che proviene dall’esterno.

Questo stesso approcio è stato adottato con gli interpreti di linguaggio interni di Mozilla Firefox e Thunderbird, come pure di molti altri programmi.

Le vulnerabilità citate dall’articolo (i “launcher” di Gnome e KDE) sono anch’esse note da tempo, come dimostra questo articolo: “.desktop files and security”. Non so se verranno risolte nel modo suggerito dall’autore ma sono assolutamente sicuro del fatto che verranno tenute nella dovuta considerazione.

Se lo esegui, lo esegui…

Il problema di fondo è che se si riesce a convincere l’utente ad eseguire un programma, in pratica si può fare qualunque cosa. Dato che un programma è, per sua stessa definizione, una collezione organizzata di “azioni”, si può “agire” in qualunque modo.

A questo non c’è rimedio. Perchè sia utilizzabile, un computer deve eseguire delle azioni. Se è l’utente ad autorizzare l’esecuzione di queste azioni, il computer deve eseguirle. Né il sistema operativo né l’antivirus possono arrogarsi il diritto di “sovrascrivere” la volontà dell’utente con la propria.

Voi accettereste di guidare un’automobile che gira agli incroci come ritiene più opportuno, infischiandosene della vostra volontà?

Trojan Vs Virus

La differenza fondamentale tra il tipo di attacco descritto in questo articolo (“How to write a Linux virus in 5 easy steps”) e gli attacchi che subisce Windows sta nella collaborazione dell’utente.

Per attaccare un sistema Linux (come è ampiamente dimostrato in quell’articolo) è necessario convincere l’utente ad eseguire un programma. In altri termini si deve usare un Trojan Horse e/o fare uso della famosa “ingegneria sociale”. Di conseguenza, se l’utente sa come comportarsi ed è cauto, è molto probabile che riesca ad evitare il contagio.

Per attaccare un sistema Windows, invece, non è necessaria la collaborazione dell’utente. Conficker, per esempio, è riuscito ad infettare nove o dieci milioni di computer senza mai avere bisogno della collaborazione dei loro utenti.

Questa, infatti, è la differenza fondamentale tra un Trojan Horse ed un Worm: i worm si propagano da soli, sfruttando le falle del sistema. Non hanno bisogno della collaborazione degli utenti.

In altri termini, su Windows nemmeno un utente esperto, cauto e preparato può realmente difendersi dalle infezioni. Anche se sa come comportarsi, non può ugualmente imporre al suo sistema operativo ed ai suoi programmi di comportarsi in modo “sicuro”. La sua sicurezza non dipende da lui. Dipende da Microsoft.

Se vi sembra una differenza da poco…

ActiveX Vs Java

Una delle principali falle di sicurezza di Windows deriva dalla pessima abituzione di Microsoft di esporre su Internet dei servizi che possono eseguire codice senza prendersi cura in modo adeguato della loro sicurezza.

Questo è ciò che è avvenuto, per esempio, con gli ActiveX di Internet Explorer. Il motore che gestisce gli ActiveX esegue del codice (C++) che proviene dal mondo esterno (dai siti web) e lo fa sulla macchina dell’utente. I rischi per l’utente sono piuttosto evidenti anche per un occhio non esperto.

Incredibilmente, tutto quello che ha saputo fare Microsoft per garantire la sicurezza dell’utente è stato imporre un meccanismo di firma digitale agli ActiveX e consigliare gli utenti di non installare ActiveX non firmati. Un sistema del genere non poteva funzionare ed infatti nel giro di pochi mesi gli ActiveX sono diventati la principale fonte di infezione di Internet.

Cose simili sono avvenute anche in seguito, a causa dei vari interpreti di linguaggio presenti all’interno di Internet Explorer, Outlook e dei programmi Office.

A fronte della sostanziale irresponsabilità di Microsoft, si può vedere cosa ha fatto Sun per garantire la sicurezza della sua virtual machine Java. Java implementa un suo modello di sicurezza, basato sull’isolamento del programma dal mondo esterno (“sandboxing”). Questo sistema viene ritenuto valido ancora oggi, a quasi 15 anni di distanza, ed è stato adottato, ad esempio, per Google Android.

Se anche questa vi sembra una differenza da poco….

Sicurezza Vs Mercato

Il problema di fondo è che per Microsoft ciò che conta davvero è il mercato. Se una funzionalità torna utile agli operatori commerciali (che condizionano il suo mercato), deve essere lasciata dove si trova anche se rappresenta un rischio per gli utenti. Questo è quello che è avvenuto con gli ActiveX e con molte funzionalità pericolose di IE e di Outlook. Molti utenti e molti specialisti hanno chiesto di rimuoverle o di riprogettarle ma non c’è stato nulla da fare. Quelle funzionalità sono rimaste dov’erano per decenni, senza nessun riguardo per la sicurezza degli utenti.

Lo stesso avviene quando una funzionalità è “cool” ed aiuta a vendere. Non c’è modo di cavarsela dai piedi.

Sistemi operativi (davvero) sicuri

Neanche Linux, BSD, OpenSolaris e MacOS X sono invulnerabili, ovviamente. Ma tra essere “vulnerabili” ad alcune, rare forme di attacco ed essere un vero terreno di cultura per virus e batteri di ogni sorta, passa ancora una bella differenza. Non è certamente un caso che praticamente tutte le epidemie degli ultimi 10 o 15 anni abbiano colpito solo Windows.

Linux, BSD, OpenSolaris e MacOS X non sono invulnerabili e non potranno diventarlo. Non importa cosa si faccia.

Per avere sistemi operativi “invulnerabili” occorre ripartire da zero, con un approccio progettuale e “politico” completamente diverso. Su questo terreno, Microsoft è molto, molto più avanti di tutti gli altri produttori. Basta guardare Midori (derivato da Singularity).

Ambienti operativi sicuri

Quando si aggiunge una interfaccia grafica ad un programma, le sue dimensioni decuplicano (aumentano di dieci volte). Questo è anche ciò che è successo a Microsoft nel passaggio da MS/DOS a Windows. Questo è ciò che è successo a GNU/Linux con il passaggio dalla shell (a caratteri) a Gnome e KDE.

Con la complessità aumenta il numero di bug e di vulnerabilità.

La categoria più ampia e più pericolosa di bug e di vulnerabilità riguarda, ancora una volta, gli interpreti di linguaggio interni ai programmi e le funzionalità di esecuzione del codice. La questione dei file .desktop citata nell’articolo “How to write a Linux virus in 5 easy steps” fa parte di questa categoria.

Per avere dei desktop manager sicuri bisogna rinunciare a queste funzionalità (come fanno i desktop manager più vecchi) oppure bisogna implementarle con una attenzione maniacale alla sicurezza.

L’inserimento di interpreti di linguaggio (Python) all’interno di Gnome e KDE è certamente una fonte di preoccupazione. Va affrontata con onestà e con coraggio.

Programmi applicativi sicuri

Un discorso simile vale per gli interpreti che si trovano all’interno di Firefox, di Thunderbird e di OpenOffice. Tutti questi “script engine” sono delle potenziali fonti di problemi e vanno implementati con la massima cura.

Utenti sicuri

Solo eliminando le falle che permettono di scavalcare l’utente si può concentrare il discorso della sicurezza sull’elemento che dovrebbe essere fondamentale per essa: l’Uomo.

In un mondo perfetto, l’unico modo di eseguire un programma dovrebbe essere quello di farlo eseguire esplicitamente ad un utente che sa che cosa sta facendo. Niente automatismi.

A quel punto, davvero la sicurezza sarebbe nelle mani dell’utente.

Per il momento, resta ancora per il 99% nelle mani di Microsoft, di McAfee, di Norton e di Kaspersky (quando si è fortunati). Finchè le cose resteranno in questo modo, Windows resterà molto meno sicuro di molti altri sistemi operativi.

Alessandro Bottoni

alessandro.bottoni@infinito.it

Annunci

Rispondi

Inserisci i tuoi dati qui sotto o clicca su un'icona per effettuare l'accesso:

Logo WordPress.com

Stai commentando usando il tuo account WordPress.com. Chiudi sessione / Modifica )

Foto Twitter

Stai commentando usando il tuo account Twitter. Chiudi sessione / Modifica )

Foto di Facebook

Stai commentando usando il tuo account Facebook. Chiudi sessione / Modifica )

Google+ photo

Stai commentando usando il tuo account Google+. Chiudi sessione / Modifica )

Connessione a %s...

%d blogger hanno fatto clic su Mi Piace per questo: