È passata più di una settimana dal rilascio ufficiale del nuovo Firefox, il browser di casa Mozilla, e già si parla di un ritorno del re, di nuovo in vetta alla classifica del miglior browser, scansando Chrome e Internet Explorer. D’altronde Firefox ha una lunga storia, i più affezionati lo ricorderanno sotto forma di Phoenix prima e di Firebird poi, prima di giungere al più noto nome utilizzato attualmente.
Ma di sicuro chi ha nel cuore questo browser lo ricorderà come colui che, per primo, è riuscito ad incrinare seriamente l’egemonia di Internet Explorer dopo che, con la crisi di Netscape – e, diciamocelo, qualche mossa astuta e discutibile da parte della società di Redmond – era stato lasciato un vuoto incolmato per anni.
Per molto tempo Internet Explorer 6 ha dominato la scena internazionale. Un browser che, con l’andare degli anni, ha purtroppo dimostrato anche tutte le sue debolezze in fase di progettazione. Ecco perché il lancio su larga scala di Firefox fu visto, nel 2004, come un’attesa ventata di novità.
Mozilla ha rapidamente sottratto grosse fette di mercato ad Internet Explorer grazie ad una politica di aggiornamenti software tempestivi, una buona architettura software, l’implementazione di nuove feature quali ad esempio le estensioni e, soprattutto, una maggior impermeabilità ai malware (da malicious software, termine corretto ma spesso erroneamente sostituito da virus).
Di fronte ad un Firefox vivace ed in continua espansione, Internet Explorer 6 sembrava un browser anziano, lento a sistemare i propri bug, con molti problemi di aderenza agli standard e, soprattutto, pieno di falle. Secondo le statistiche attuali che ci può fornire Secunia, dal 2003 ad oggi in Internet Explorer 6 sono state trovate ben 227 vulnerabilità.
Il periodo 2004-2006 è stato un periodo nero per il browser di Microsoft: da una parte un’emorragia inarrestabile di utenti verso Firefox, dall’altra un continuo bersaglio da parte dei pirati informatici, i quali sfruttavano le falle di Internet Explorer per la diffusione di malware.
Questo è fondamentalmente il background della situazione attuale, che ha portato alla nomina de facto di Firefox come il browser più sicuro ed Internet Explorer come il browser più insicuro e vulnerabile. Ad oggi, tuttavia, è ancora così? Come si sono evolute le minacce e i vari browser disponibili sul mercato?
Il mese in corso ha ufficialmente regalato agli utenti le ultime versioni dei più noti browser disponibili in ambiente Windows: Google Chrome 10, Internet Explorer 9, Mozilla Firefox 4. Tutti e tre con grandi novità, nuove funzionalità, tecnologie migliorate. Non è interesse di questo post focalizzarsi sulle tecnologie legate al browser in sé, quali eventuali performance di navigazione, nuovi engine JavaScript, supporto ai nuovi HTML5 e CSS3, aderenza agli standard, accelerazione hardware e molto altro.
Ci sono già numerosi articoli online a riguardo, dove ognuno dice la propria. Basti dire che, su carta, tutti e tre i maggiori browser sono tecnicamente equiparabili. Poi, su campo, si vedrà con il tempo e con test di terze parti. Dove invece ci si vuole focalizzare è l’aspetto sicurezza lato client. Per fare ciò, tuttavia, è necessario un attimo fare il punto della situazione su come le minacce per l’utente finale si siano evolute.
Negli ultimi anni si è registrato nel settore della sicurezza informatica un incremento vertiginoso di kit pronti all’uso, tool messi in vendita nel mercato nero, capaci di creare pagine web ad hoc contenenti exploit in grado di sfruttare falle conosciute – o falle ancora sconosciute – dei browser web od eventuali plugin da quest’ultimi utilizzati. Per chi fosse a digiuno del concetto di exploit, è possibile citare una definizione data da Wikipedia:
“An exploit (from the same word in the French language, meaning “achievement”, or “accomplishment”) is a piece of software, a chunk of data, or sequence of commands that takes advantage of a bug, glitch or vulnerability in order to cause unintended or unanticipated behavior to occur on computer software, hardware, or something electronic (usually computerised). This frequently includes such things as gaining control of a computer system or allowing privilege escalation or a denial of service attack.”
Nel caso specifico, una eventuale pagina web contenente un exploit costruito ad hoc per sfruttare una falla del browser – o di qualche plugin – potrebbe portare all’esecuzione automatica, senza interazione dell’utente, di codice nocivo, eseguito con i privilegi con cui è stato eseguito il browser o il plugin.
Non è un fenomeno raro incappare casualmente in qualche pagina web compromessa, anzi è molto più frequente di quello che gli utenti possano pensare. Questo perché a volte non è necessario andare per forza su siti web a luci rosse o siti warez per capitare in qualche pagina web nociva, ma anche siti web apparentemente affidabili e conosciuti potrebbero essere stati compromessi e potrebbero contenere del codice nocivo.
È stato il caso di Aruba qualche anno fa, che si è vista compromettere molti siti web ospitati nei loro server; è stato il caso di siti web di cantanti famosi come Roberto Vecchioni o Carmen Consoli o gli Zero Assoluto; è stato il caso del noto sito web Anti-phishing Italia; è stato il caso del sito web della rete sismica sperimentale italiana. L’utente naviga tranquillamente in questi siti web e, spesso incolpevole, rischia di rimanere infetto.
Purtroppo riuscire a garantire che il proprio software sia privo di qualsiasi bug è tecnicamente impossibile, soprattutto in progetti di medio-grandi dimensioni, quali possono essere i browser web. E ammesso e non concesso che sia anche possibile, gli sviluppatori dei browser non possono comunque garantire che anche i plugin installati siano effettivamente privi di bug.
Ne è un esempio il pluri-colpito Adobe Flash Player, o il Quick Time Player. L’utente dovrebbe sempre controllare che tutti i software installati nel proprio PC siano costantemente aggiornati, per evitare che vecchi bug corretti nelle versioni aggiornate dei software possano essere ancora veicolo di malware.
Questo passo, sebbene sia importantissimo, non permette di avere la certezza assoluta che i software siano comunque privi di bug : exploit 0 day, cioè precedentemente sconosciuti, vengono scovati ed utilizzati per scopi nocivi sempre più frequentemente. Il problema degli exploit è un problema insomma da prendere in seria considerazione, un problema da non sottovalutare, un problema purtroppo reale.
Per arginare tale problema, vista la natura in alcuni casi imprevedibile dell’attacco, si tenta sempre più un approccio generico preventivo, cioè delle tecnologie in grado di prevenire o tamponare genericamente un attacco basato su exploit. In questo approccio preventivo generico è possibile distinguere due fasi: una fase preventiva ed una reattiva. Entrambi, come già detto, fanno parte dell’approccio preventivo al problema exploit e contribuiscono a prevenire e mitigare un eventuale exploit e conseguenti danni al sistema.
Per poter comprendere la prima fase preventiva è necessario porsi la seguente domanda: data la presenza di una possibile falla nel codice, come si può rendere tale falla quanto più difficilmente utilizzabile al fine di non poterla sfruttare tramite un exploit?
La risposta al quesito è l’utilizzo di tutte le tecnologie possibili messe a disposizione dal sistema operativo per tale scopo – specifichiamo che l’articolo in questione è focalizzato in un ambiente Windows . Si può dunque parlare di Data Execution Prevention, Address Space Layout Randomization e Safe Exception Handlers. Ovviamente gli sviluppatori software dovrebbero compilare i propri software rendendoli compatibili con tali tecnologie.
È necessario far notare inoltre che queste tecnologie sono state totalmente implementate a partire da Windows Vista. Windows XP è quindi parzialmente escluso, potendo utilizzare il DEP, ma senza ASLR, grave lacuna che rende il DEP vulnerabile e facilmente aggirabile.
Questa fase preventiva è sufficiente a mitigare il problema exploit? Sebbene sia molto efficace, è stato mostrato più volte come – a causa (spesso, ma non sempre) della non collaborazione dei programmatori i quali non compilano i propri software rendendoli compatibili con tali tecnologie – non basti da sola a garantire la sicurezza del sistema. Un esempio efficace è l’ultimo exploit per il Flash Player plugin, scoperto agli inizi del mese corrente e che è in grado di superare agevolmente sia DEP che ASLR, riuscendo ad eseguire correttamente il proprio payload.
Entra quindi in gioco la fase reattiva. Per meglio comprenderla bisogna porsi la seguente domanda: “Se anche l’exploit riuscisse ad eseguirsi e a superare la prima fase preventiva, come si può mitigare il problema rendendo l’attacco quanto più possibile innocuo?“.
Come si è detto precedentemente, un eventuale exploit potrebbe riuscire ad eseguire del codice con gli stessi privilegi con cui il software vulnerabile è stato eseguito. Nel caso del browser, esso viene normalmente eseguito con i privilegi dell’account utente che sta utilizzando il software. Coloro che in questo momento sono già andati avanti con la mente e stanno pensando che basti dunque un account limitato ad arginare il problema, facciano un passo indietro, purtroppo non è così.
Il fatto che si utilizzi un account limitato permette di arginare eventuali danni al sistema nella sua totalità, ma non previene la possibilità per un malware di insediarsi comunque nel contesto dello specifico account utente. Ne sono una testimonianza tra tutti i vari trojan ZeuS, SpyEye, Carberp, capaci di rubare informazioni private anche in un account limitato. Lo stesso discorso vale per i plugin, i quali comunque vengono caricati dal browser e, normalmente, ereditano gli stessi permessi e privilegi.
Per questo motivo è nata la modalità protetta di Internet Explorer e la sandbox che è alla base di Google Chrome.
Il browser di Google implementa sin dalla sua nascita una solida sandbox, capace di isolare la sessione di navigazione dal resto del sistema. Grazie ad un framework cross-compatible da Windows 2000 a Windows 7, la sandbox di Google Chrome permette di isolare completamente il browser utilizzando tutte le funzionalità di sicurezza messe a disposizione nativamente dal kernel NT di Windows. Detto in maniera semplice ed efficace, ogni finestra di navigazione aperta in Google Chrome è uno specifico processo, isolato dagli altri, processo al quale sono stati rimossi tutti i privilegi ed i permessi e che è stato ulteriormente limitato utilizzando una solida gabbia creata grazie ai job object di Windows.
Lo stesso discorso vale per i plugin, quali ad esempio Adobe Flash Player, che sono eseguiti in questa sandbox. Il risultato di tale architettura del software è che, anche se un exploit riuscisse ad essere eseguito, rimarrebbe intrappolato nelle maglie della solida gabbia creata da Chrome.
Per quanto riguarda Internet Explorer, anch’esso dalla versione 7 – anche se, ovviamente, migliorato molto nelle successive versioni – implementa una modalità protetta, con la differenza che il browser di Microsoft sfrutta esclusivamente le nuove tecnologie implementate in Windows Vista e Windows 7. Anche in Internet Explorer ogni tab di navigazione è un processo a sé stante, creato ad un livello di integrità basso.
Per comprendere meglio questo concetto è necessario comprendere il meccanismo del Mandatory Integrity Control integrato a partire da Windows Vista. Spiegando molto velocemente il concetto – potrebbe essere argomento di ulteriore approfondimento in un prossimo contributo – ogni processo viene eseguito con uno specifico livello di integrità. Tali livelli si dividono in alto, medio e basso (in realtà ce ne sono altri, ma per il momento a noi interessano questi tre).
Nessun processo può accedere a processi che sono eseguiti ad un livello di integrità superiore. Tutti i processi vengono eseguiti di default ad un livello di integrità medio e hanno specifiche limitazioni, ovviamente non possono avere accesso ai processi eseguiti con un livello di integrità alto e non possono avere accesso alle zone di sistema per le quali vi è bisogno dei diritti di amministratore.
I processi eseguiti con un livello di integrità basso hanno permessi e privilegi drasticamente ridotti, non possono scrivere su disco se non in specifiche e limitate cartelle, non possono avere accesso ad altri processi che non siano eseguiti ad un pari livello di integrità, non possono accedere al registro di sistema.
Come già detto, Internet Explorer, in modalità protetta, esegue ogni proprio processo ad un livello di integrità basso, plugin compresi. In questa maniera un eventuale exploit, se anche riuscisse ad essere eseguito e riuscisse a scaricare un malware nel pc, erediterebbe i privilegi di un processo eseguito ad un livello di integrità basso, cioè non riuscirebbe ad avere accesso alle zone del sistema necessarie per un’eventuale infezione.
Mozilla Firefox come si comporta al momento? Purtroppo Mozilla Firefox non si è ancora adattato agli altri due browser. La società ha in programma una sandbox da diverso tempo, concetto inserito in un progetto di più ampio respiro dedicato alla separazione in diversi processi delle varie tab di navigazione.
Il progetto, denominato Electrolysis, sembra tuttavia in stallo, anche se comunque il suo scopo principale è la separazione in più processi delle varie finestre di navigazione. Solo dopo aver effettuato tutto ciò sembra sia prevista una eventuale sandbox, che però al momento non è dato sapere quando e se verrà implementata.
Mozilla Firefox 4, al momento, fa affidamento su un approccio preventivo fermo esclusivamente alla prima fase. Infatti sia il processo di Firefox che il Plugin Container, il processo che si occupa di separare i plugin dal processo principale del browser onde evitare che un crash dei plugin causi il blocco completo del software, sono eseguti ad un livello di integrità medio, ereditano in altre parole gli stessi privilegi e permessi dell’account utente che ha eseguito il browser.
In tutti e tre i casi stiamo parlando di un utilizzo dei sistemi operativi Windows Vista o successivi. In ambiente Windows XP. mancando tutta la parte relativa alla gestione dei livelli di integrità, Internet Explorer 7 ed Internet Explorer 8 non possono usufruire della modalità protetta (Internet Explorer 9 rompe definitivamente la compatibilità con Windows XP). Dei tre browser, solo Chrome fornisce un sistema di sicurezza compatibile anche con Windows XP.
Se è vero che Firefox è ricco di estensioni, tra le quali la famosissima NoScript che funziona da script firewall – in grado di bloccare tutti gli script presenti nelle pagine web ad eccezione di quelli presenti nella white list configurabile dall’utente – è altresì vero che è l’utente che si deve attrezzare ad installare tale estensione, deve comprenderne il funzionamento e deve diventarci in qualche modo “amico”. Uno strumento molto potente, vero, ma che potrebbe risultare ostico alla maggior parte degli utenti. E per gli utenti meno esperti?
Sicuramente Firefox, considerato da molti il re dei browser, nella sua quarta reincarnazione darà del filo da torcere ai pretendenti Google Chrome e Internet Explorer in molti campi. Ma è ancora corretto ad oggi considerarlo il browser più sicuro?