mercoledì 27 gennaio 2010

GeoHot: Ps3 Exploit

Dopo 3 anni e mezzo di attesa finalmente si vede un hacker sfornare qual cosa di reale a disposizione di tutti in un piatto d'argento, ed ecco infatti che GeoHot rilascia il primo exploit per la Playstation3 in modo da essere trasparente e credibile nel suo operato.
Rilasciando questo exploit da la possibilità anche ad altri di fare nuove scoperte e far finalmente iniziare l'era underground della Playsation 3 anche perchè come dice lui non può stare giorno e notte dietro a questa consolle ma ha bisogno di svagarsi pure lui. Per tutti quelli che hanno fatto e in futuro faranno nuove scoperte dichiara di documentare tutto su ps2 dev wiki .
Inoltre dichiara:
  • "La potenza di questo exploit ha generato tonnellate di nuovi dati tutti da documentare. Vorrei vedere le chiamate mancanti dell'HV, la mappatura della memoria, la sequenza di boot documentata meglio, e i progressi sui driver della GPU. E ovviamente, la ricerca di un software exploit."

Questo exploit per adesso sfrutta l'otheros, una funzione che permette di installare linux purtroppo non presente sulle ps3 slim, è scritto in linguaggio C e occorre compilarlo e lanciarlo da linux con la versione 2.4.2 che utilizza lui, per le altre versioni è solo da provare. La sua utilità è quella di continuare li studi all'interno della ps3 in modo da poter sviluppare un software exploit ossia un vero e proprio hello world ma la meta forse è ancora un bel pò distante.
Ecco come sfruttarlo:
geohot: well actually it's pretty simple
geohot: i allocate a piece of memory
geohot: using map_htab and write_htab, you can figure out the real address of the memory
geohot: which is a big win, and something the hv shouldn't allow
geohot: i fill the htab with tons of entries pointing to that piece of memory
geohot: and since i allocated it, i can map it read/write
geohot: then, i deallocate the memory
geohot: all those entries are set to invalid
geohot: well while it's setting entries invalid, i glitch the memory control bus
geohot: the cache writeback misses the memory :)
geohot: and i have entries allowing r/w to a piece of memory the hypervisor thinks is deallocated
geohot: then i create a virtual segment with the htab overlapping that piece of memory i have
geohot: write an entry into the virtual segment htab allowing r/w to the main segment htab
geohot: switch to virtual segment
geohot: write to main segment htab a r/w mapping of itself
geohot: switch back
geohot: PWNED
geohot: and would work if memory were encrypted or had ECC
geohot: the way i actually glitch the memory bus is really funny
geohot: i have a button on my FPGA board
geohot: that pulses low for 40ns
geohot: i set up the htab with the tons of entries
geohot: and spam press the button
geohot: right after i send the deallocate call