Quando si parla di malware su piattaforme alternative a Microsoft Windows, quindi Linux oppure OS X – tra i sistemi operativi più diffusi – si accende sempre una sorta di guerra di religione, ignorando a volte le argomentazioni tecniche a favore di molte argomentazioni di parte che fanno diventare la discussione più una tifoseria da stadio che non un confronto costruttivo.

La realtà dei fatti – condivisa da chiunque conosca tecnicamente i vari sistemi operativi – è che tutti e tre i sistemi operativi sono a rischio malware, sebbene Windows sia ampiamente più vulnerabile – sia chiaro, non per una questione tecnica, quanto più che per una maggiore esposizione che causa una maggiore attenzione da parte degli utenti e dei malware writer. Infatti, stando alle statistiche di Aprile 2011 pubblicate da MarketShare, Windows detiene uno share di mercato dell’88,91%, OS X del 5,40%, Linux dello 0,94%. Una differenza in punti percentuali abissale, che ben evidenzia quanto Windows possa essere un target preferenziale rispetto alle altre due piattaforme.

Una delle obiezioni che solitamente viene addotta contro l’affermazione secondo la quale i sistemi operativi Linux sarebbero vulnerabili alle infezioni è quella che qualsiasi operazione viene eseguita come utente limitato e non come root, amministratore di sistema. Di conseguenza, un eventuale malware eseguito come utente limitato non permetterebbe di fare alcun danno al sistema in sé.

Come è stato ampiamente dimostrato più volte, la realtà dei fatti è che, invece, un qualsiasi malware, pur essendo eseguito come utente limitato, può comunque danneggiare gravemente tutto ciò che riguarda la sessione dell’utente che ne rimane infetto, pur non intaccando l’integrità del sistema operativo.

Il concetto di malware si è evoluto nel tempo, codici nocivi non più interessati a rimanere quanto più possibili nascosti nel sistema o codici altamente complessi sviluppati allo scopo di mostrare le capacità individuali dei vari programmatori. I malware attuali puntano tutto sulla capacità di poter intercettare e rubare quanti più dati possibili, dati personali, identità, dati di accesso a siti di e-banking o di commercio online, password di e-mail, ftp, qualsiasi dato che è in genere facilmente intercettabile anche senza aver a disposizione diritti amministrativi. La facile accessibilità ad un numero incredibile di engine polimorfici, sia lato client che lato server, permette ai malware di poter agire spesso in maniera indisturbata agli occhi dei software antivirus, sfruttando quel lasso di tempo che intercorre tra il rilascio del malware e l’aggiornamento rilasciato per i software antivirus. E tutto da un semplice account utente limitato. Di esempi ce ne possono essere vari, da ZeuS a SpyEye, a Carberp, a Tatanga, tutti trojan che possono lavorare tranquillamente in ambiente limitato senza avere a disposizione privilegi di amministratore di sistema.

Su Linux il concetto non si sposta poi di molto. Anche su questa piattaforma, considerata al sicuro da malware, è possibile intercettare tutti questi dati con un semplice malware che catturi ad esempio le attività del browser. D’altronde, con lo stesso principio utilizzato per Windows, sia il malware che l’eventuale browser vengono solitamente eseguiti nella stessa sessione dell’utente.

Un esempio si può fare con un semplice keylogger, capace di intercettare le password digitate da tastiera. Nel caso di Windows ci sono svariati modi per poter verificare lo stato della tastiera e di eventuali tasti premuti, anche da account limitato, ad esempio sfruttando l’API GetAsyncKeyState() che può essere eseguita senza privilegi amministrativi. In Linux viene in aiuto a questo scopo il gestore grafico X Window System, che si occupa tra l’altro di fornire l’interfaccia verso tastiera e mouse. Una sua funzione in particolare, XQueryKeymap(), svolgerebbe lo stesso identico lavoro della sua equivalente funzione in Windows precedentemente citata, e tutto questo ovviamente anche da account limitato.

In altre parole un trojan, quale ad esempio il famigerato SpyEye, che già è in grado di colpire Windows anche da account limitato compromettendo il funzionamento di Firefox al fine di intercettare ciò che passa per il browser, sarebbe facilmente portabile in ambiente Linux.

Nasce qui la seconda obiezione: come ci arriva questo malware in un ambiente Linux? Obiezione alla quale è facile rispondere: tramite gli stessi canali utilizzati per la maggior parte in Windows, quindi ingegneria sociale, warez, peer 2 peer, falsi plugin per visualizzare video a luci rosse. Tutti vettori di infezione dove è l’utente spesso a fare la differenza (n.b. spesso, non sempre).

Il fatto che esistano dei repository ufficiali che semplificano la vita agli utenti Linux, i quali possono attingere direttamente a tali server e scaricare i software che vogliono in maniera sicura, non esclude il fatto che molti software e tool non siano presenti in tali repository, ma vengono scaricati dai siti ufficiali delle varie software house o dai siti web dei vari sviluppatori. Inoltre, anche in Linux esistono programmi a pagamento, e dove esistono programmi a pagamento molto facilmente esistono anche crack e keygen – un esempio può essere VMWare workstation e relativi crack/keygen. Sicuramente ci sono anche alternative gratuite a tali prodotti, tuttavia lo stesso si può dire in ambito Windows, dove però gli utenti continuano spesso a preferire crack e keygen ad alternative free. Questo è uno dei potenziali vettori di infezione in ambito Linux, già ampiamente testato in ambito Windows.

Tornando però alla prima obiezione, cioè quella di non avere la password di root e quindi l’impossibilità di danneggiare l’integrità del sistema. Quante volte gli utenti desktop di Linux, ad esempio Ubuntu oppure OpenSuse, nell’effettuare delle installazioni software, oppure delle configurazioni del sistema, fare del testing, si trovano nella necessità di inserire la propria password di root al fine di poter eseguire tali operazioni come root? Può un eventuale malware, in azione nel sistema con privilegi limitati, intercettare tale password?

La risposta è sì. Nel momento in cui l’utente digita la propria password davanti alla richiesta ad esempio del comando su, sudo, oppure davanti alla richiesta di gksudo o kdesudo, gksu, kdesu, un eventuale malware con privilegi limitati che sta interrogando lo stato della tastiera tramite XQueryKeymap() può intercettare tale password, ottenendo quindi la chiave d’accesso al sistema. Nel momento in cui viene chiesta la password di root, tale richiesta non viene in alcun modo isolata dal sistema, o filtrata, permettendo dunque a qualunque software di intercettarla.

 

Microsoft, in Windows Vista e Windows 7, nell’implementazione dello User Account Control e del Mandatory Integrity Control, ha implementato una tecnologia denominata User Interface Privilege Isolation, o UIPI, capace di isolare le interfacce grafiche in base ai livelli di integrità di ogni processo in esecuzione. Dei livelli di integrità ne è stato parlato già in precedenza in questo blog specificandone meglio il loro funzionamento, che è comunque riassumibile in una sorta di ulteriore suddivisione dei privilegi e permessi all’interno di uno specifico account. Ogni processo viene eseguito con uno specifico livello di integrità che può essere in generale alto, medio, basso, con il livello standard che è il medio. Nessun processo può in alcun modo avere accesso ai processi eseguiti con un livello di integrità superiore a quello del processo in questione; inoltre, scendendo di livello, aumentano le restrizioni in termini di permessi che vengono applicate al processo eseguito. Grazie alla tecnologia UIPI nessun processo può comunicare di default con le interfacce grafiche dei processi eseguiti ad un livello di integrità superiore. Questa tecnologia, implementata principalmente per la prevenzione degli shatter attack, è utilissima anche per isolare finestre importanti. Eseguendo un programma come amministratore, ad esempio, tutto ciò che verrà scritto in tale finestra non può essere intercettato da un malware eseguito in modalità utente, anche all’interno della stessa sessione. Questo perché il malware verrebbe eseguito ad un livello di integrità medio, mentre l’eventuale programma eseguito come amministratore verrebbe eseguito con un livello di integrità alto. Cosa che non avviene invece in Ubuntu Linux, come dimostrato nel video sopra pubblicato.

Inoltre anche in Windows potrebbe essere necessario inserire la password di amministratore se si sta lavorando da un account limitato e si ha bisogno di effettuare qualche modifica o installazione di qualche specifico software. Anche in Windows verrà mostrata la finestra di inserimento password, così come mostrato nel video di Ubuntu, con una differenza fondamentale: in Windows Vista e Windows 7, la finestra viene totalmente isolata dal sistema: si tratta della modalità UAC Secure Desktop, una modalità in cui tutti quanti i processi del sistema vengono sospesi ad eccezione dei processi eseguiti da account SYSTEM – quindi tutti i processi utente vengono totalmente sospesi, rimangono solo i processi critici di Windows. La finestra viene quindi totalmente isolata, così da poter permettere all’utente di inserire la propria password in sicurezza senza che eventuali malware eseguiti in modalità utente possano intercettarla. Nel video mostrato qui sotto è possibile visualizzare il comportamento di un semplice keylogger in Windows Vista e Windows 7 nelle situazioni sopra descritte.

 

Questo problema, mostrato sopra in Ubuntu, non è un problema di Ubuntu in sé, quanto dell’implementazione di X in generale. Un problema che è conosciuto già da svariato tempo, tanto che uno sviluppatore Debian ha dichiarato lo scorso Ottobre 2010:

If you ever believed that there is *any* way to prevent a program having access to your session to obtain root access when you use the same session to do stuff as root, you have been abused […] If there is a malicious program running in your session, you are completely screwed.

Stessa situazione verificabile anche su OpenSuse, come dimostrato nel video qui sotto:

 

In definitiva, sia Windows che Linux (nelle proprie incarnazioni delle varie distribuzioni) sono due ottimi sistemi operativi, entrambi con i propri pregi ed i propri difetti. Linux è da sempre un sistema rinomato per la sua solidità e stabilità; Windows, grazie al salto avanti fatto con Vista prima e 7 poi, è diventato un sistema operativo al passo con i tempi, estremamente valido e sicuro in termini tecnici. Nessuno dei due sistemi operativi è al sicuro da malware, entrambi sono ampiamente vulnerabili. Windows è maggiormente esposto, vero, paga dunque il pegno per essere il sistema operativo più diffuso al mondo. Linux è meno esposto in ambito desktop, se ne sta più tranquillo e al sicuro da potenziali attacchi di malware – non sarebbe redditizio in fondo focalizzarsi su un 1% circa di mercato e, a parte l’eventuale fama, non si avrebbe un rientro economico rapido. Ad oggi Linux è più al sicuro rispetto a Windows? A rigor di logica ovviamente sì. Linux è più sicuro di Windows? Come è possibile vedere, se si volesse attaccare il pinguino, ci sarebbero tutte le carte in regola per poterlo fare. Ad oggi, tuttavia, l’utilizzo di Linux è garanzia di una maggiore impermeabilità ai malware. L’importante è non farsi cogliere impreparati se il vento dovesse cambiare.