Xbox 360 hack: come far girare codice non “firmato”
Massimo Rabbi | 2 March 2007 | 16:57Un anonimo hacker in un messaggio lasciato su SecurityFocus ha illustrato una tecnica per eliminare il problema dell’impossibilità di eseguire codice non firmato su una Xbox 360.
L’hack sfrutta una vulnerabilità del kernel del sistema operativo della console, e usa una escalation di privilegi per switchare in hypervisor mode. In questa modalità, qualsiasi tipo di codice può essere fatto girare, anche un ipotetico sistema operativo alternativo quale Linux, avendo diretto accesso a tutto l’hardware dell’Xbox 360.
L’exploit funziona solamente su versioni del kernel tra la build 4532 (rilasciata il 31 ottobre 2006) e la build 4548 (rilasciata il 30 novembre dello stesso anno). Il bug del kernel è stato infatti patchato da Microsoft con il rilascio della build 4552, il 9 gennaio 2007. E’ per questo che l’hack funzionerà unicamente su versioni della Xbox360 che non sia state collegate al sistema Xbox Live e abbiano ricevuto patch dopo ottobre.
L’hacker infatti aveva già contattato la Microsoft a dicembre, illustrando nel dettaglio l’exploit, che era cosi’ stata in grado di correggere il problema con il rilascio della nuova patch.
Tipicamente tutto ciò che viene eseguito su una Xbox 360 viene suddiviso in threads che operano in modalità “hypervisor” o “supervised”. Solo pochissime operazioni - tra cui alcuni servizi essenziali forniti dal kernel stesso - hanno la possibilità di essere eseguite in hypervisor mode. I giochi e le applicazioni infatti girano in supervised mode, dove tutto il codice è read-only, crittato ed è autorizzato a girare solo se è presente una chiave firmata.
La crittazione della memoria è gestita da un’unica chiave di sessione ogni volta che viene avviata, rendendo così più difficili i tradizionali attacchi alla memoria (classici buffer overflow).
Tuttavia, del codice non firmato deve comunque di tanto in tanto interagire con codice privilegiato, e quindi viene invocata una syscall. Ogni volta che una syscall viene chiamata, viene passato un numero per identificare quella particolare istruzione.
Le funzioni “cmplwi” e “rldicr” effettuano il parsing di questo numero in maniera diversa: con la prima che guarda solo ai primi 32 bits del numero e l’ultima che esamina tutti i 64 bits.
E’ questa differenza che è stata usata per ingannare l’hypervisor e poter cosi’ eseguire codice non firmato/verificato.






