Considerando da quanto tempo i processori a 64 bit sono stati lanciati sul mercato (nel mondo dei personal computer sono arrivate nel 2003 anche se la diffusione, almeno per i primi anni, si è concentrata sui sistemi server), è quanto meno curioso apprendere oggi che tutte le CPU Intel x86-64 soffrono di un’importante vulnerabilità di sicurezza.
La notizia dell’individuazione della lacuna di sicurezza, che potrebbe consentire l’esecuzione di codice dannoso con i privilegi utente più elevati in assoluto, era stata data dal CERT, organizzazione statunitense che offre risposte alle principali emergenze informatiche (vedere questa pagina).
L’estensione a 64 bit per i processori x86 è stata originariamente introdotta da AMD con il nome di x86-64 ed è stata poi abbracciata da Intel (con il nome EM64T) e da altri produttori minori. In fase di definizione delle specifiche di x86-64, AMD ha deciso di ridurre lo spazio di memoria indirizzabile a 48 bit, lasciando inutilizzati i bit da 48 a 64. Per evitare l’inserimento di codice potenzialmente dannoso in quest’ultima area, le CPU AMD sfruttano quelli che vengono chiamati “indirizzi canonici”: i bit che vanno dal numero 48 al 64 debbono avere lo stesso valore del bit numero 47.
Nel caso in cui un’applicazione “Ring 3“, in esecuzione con i privilegi più limitati, oppure un utente normale tentino di sfruttare indirizzi non canonici per acquisire privilegi più elevati, il processore alza gli scudi producendo un errore di protezione generale. Il codice, quindi, viene ricaricato – ove possibile – da una locazione sicura a livello kernel.
Quando ci si riferisce al livello di privilegi con cui viene eseguita un’applicazione, gli esperti spesso usano il termine “ring”. Con “ring 0” vengono identificati i processi in esecuzione in modalità kernel mentre con “ring 3” le applicazioni in “user mode” quali il browser, il Blocco Note e così via.
Quando il processore opera in modalità kernel, esso ha accesso a tutti i registri ed all’intera memoria di sistema.
Di contro, allorquando la CPU operi in modalità utente (livello 3), viene permesso l’accesso esclusivamente a quelle aree di memoria che sono utilizzabili in “user mode”. Poiché il codice che viene eseguito in modalità kernel può avere accesso indiscriminato a tutte le aree del sistema, riuscire ad eseguire programmi in questo contesto è l’obiettivo a cui guardano con estremo interesse tutti gli autori di rootkit e di malware evoluti in genere.
I processori Intel osservano un comportamento similare alle CPU AMD fatta eccezione per una sottile differenza che riguarda le modalità con cui gli indirizzi canonici vengono trattati. Ne consegue che un aggressore può provare ad iniettare un segmento di codice dannoso sui processori Intel inducendoli a ripristinare tale codice dopo l’errore di protezione. Una volta presentatosi quest’evento, ciò che l’aggressore avrà ottenuto è un processo operante a livello del kernel che fa a sua volta riferimento all’area posta oltre i 48 bit dove è presente il codice malevolo, pronto per essere eseguito con i privilegi più elevati.
Sebbene il quadro possa apparire disastroso, va evidenziato che tutti i principali produttori di sistemi operativi si sono già attivati per rilasciare e distribuire una patch risolutiva. Sebbene, ad oggi, Intel non si sia ancora ufficialmente espressa sul problema, Microsoft – nel corso dell’ultimo “patch day” – ha rilasciato un aggiornamento in grado di tappare la falla (si tratta del bollettino MS12-042 rilasciato martedì scorso). Altri produttori si sono egualmente attivati (ved. questa pagina). Inizialmente, infatti, si riteneva che la problematica riguardasse solo gli utenti di Linux su macchine dotate di CPU Intel a 64 bit; successivamente la medesima défaillance è emersa in Windows, in BSD e, almeno in linea teorica, anche su Mac OS X.