Modifica
La modifica della PS3 e' assai complessa da capire e spiegare, vediamo come per la prima volta la console e' stata bucata. Il primo team a bucare la console fu il "fail0verflow", l'hacking fu possibile grazie ad un enorme errore da parte di Sony nell'implementare l'"ECDSA". Ma facciamo un passo indietro, Sony decise di rimuovere la feature "OtherOS" che permetteva di installare Linux sulla console a partire dal firmware 3.21 (facendo infuriare gli hacker) giustificandosi dicendo:
"disabilng the Other OS feature will help ensure that PS3 owners will continue to have access to the board range of gaming and entertainment content from SCE and its content partners on a more secure system"
infatti oltre a voler garantire agli utenti un sistema sicuro ed equo, la vera paura di Sony era di perdere i partner che sviluppavano i giochi sulla loro piattaforma. Chi e' quel pazzo che sceglierebbe una piattaforma facile da bucare per pubblicare il proprio lavoro? (e poi vederlo piratato). Sony fu costretta a rimuovere Other OS.
Gran parte della sicurezza della console fa affidamento (Come accade per la Xbox360) all'"Hypervisor" (un software che permette la virtualizzazione dell' hardware per renderlo disponibile ai software che si trovano ad un livello piu' alto nel sistema (per livello piu' alto si intende piu' lontano dal linguaggio macchina e piu' vicino al linguaggio di programmazione che assume parole con un significato), infatti Linux veniva eseguito sotto sorveglianza dall'Hypervisor che impediva al Kernel Linux di accedere ai vari dispositivi di sistema (Come la GPU e la CPU). Bypassare l'Hypervisor significa avere accesso diretto all'hardware della console.
Il team fail0verflow si presento' al "27th Chaos Communication Congress" presentando il loro lavoro.
"disabilng the Other OS feature will help ensure that PS3 owners will continue to have access to the board range of gaming and entertainment content from SCE and its content partners on a more secure system"
infatti oltre a voler garantire agli utenti un sistema sicuro ed equo, la vera paura di Sony era di perdere i partner che sviluppavano i giochi sulla loro piattaforma. Chi e' quel pazzo che sceglierebbe una piattaforma facile da bucare per pubblicare il proprio lavoro? (e poi vederlo piratato). Sony fu costretta a rimuovere Other OS.
Gran parte della sicurezza della console fa affidamento (Come accade per la Xbox360) all'"Hypervisor" (un software che permette la virtualizzazione dell' hardware per renderlo disponibile ai software che si trovano ad un livello piu' alto nel sistema (per livello piu' alto si intende piu' lontano dal linguaggio macchina e piu' vicino al linguaggio di programmazione che assume parole con un significato), infatti Linux veniva eseguito sotto sorveglianza dall'Hypervisor che impediva al Kernel Linux di accedere ai vari dispositivi di sistema (Come la GPU e la CPU). Bypassare l'Hypervisor significa avere accesso diretto all'hardware della console.
Il team fail0verflow si presento' al "27th Chaos Communication Congress" presentando il loro lavoro.
Fase di Avvio
La fase di avvio avviene seguendo la cosiddetta "Chain of Trust" (catena della fiducia, che potete osservare qui a destra, quella in alto vale per i firmware minori al 3.60 mentre quella sotto vale per il 3.60 in poi):
Quindi il sistema come avrete ben capito e' suddiviso in livelli, per accedere ad ogni livello bisogna eseguire la decriptazione e l'avvio dell'apposito loader (questo compito spetta al mtldr). Tutto cio' avviene dalla memoria flash che contiene il tutto. Inoltre ogni livello possiede delle specifiche SysCalls (richieste di sistema), esse servono a richiedere un servizio che si trova ad un livello piu' basso alla quale il livello attuale non puo' accedere. Per ogni livello inoltre alcune SysCalls possono essere bloccate. |
|
Primi bypass: Dongle USB
La prima tipologia di modifica in grado di bypassare le protezioni della console consisteva in un dongle, chiamato "PSJailbreak" (in seguito ne uscirono di altri, anche cloni) e permetteva di giocare ai backup da hard disk. L'utilizzo era semplicissimo, bastava inserirlo in una delle porte USB della PS3 ed il gioco era fatto. L'exploit entrava in azione quando la PS3 cercava il JIG (dongle ufficiale Sony per entrare in service mode), questa "ricerca" poteva essere avviata premendo il tasto "Eject" entro 200ms dall'accensione del sistema. Il dongle emulava un HUB USB di 6 porte dove venivato connessi e disconnessi dispositivi USB fake (virtualmente) prendendo il controllo dei blocchi di memoria che contenevano i descrittori dei dispotivi USB e delle relative configurazioni.
Dopo l'uscita di "PSJailbreak" altri sviluppatori riuscirono a capire come funzionava il dongle attraverso il reverse engineering dello stesso e crearono "PSGroove", un'alternativa open source di "PSJailbreak". Per motivi di sicurezza 4 bytes del codice sorgente erano stati cambiati in 0xx78, 0x78, 0x78, 0x78 e cio' rendeva impossibile l'emulazione del lettore BluRay, tali bytes andavano sostituiti con 0x62, 0x64, 0x76, 0x64, successivamente il codice sorgente (payload, file hex) andava flashato su un chip compatibile (ATMEL) e il funzionamento era uguale al "PSJailbreak", si inseriva il dongle USB in una delle porte e si premeva il tasto "Eject" per entrare in modalita' "Ricerca JIG". Avvio dell'exploit (grossomodo):
Dopo l'uscita di "PSJailbreak" altri sviluppatori riuscirono a capire come funzionava il dongle attraverso il reverse engineering dello stesso e crearono "PSGroove", un'alternativa open source di "PSJailbreak". Per motivi di sicurezza 4 bytes del codice sorgente erano stati cambiati in 0xx78, 0x78, 0x78, 0x78 e cio' rendeva impossibile l'emulazione del lettore BluRay, tali bytes andavano sostituiti con 0x62, 0x64, 0x76, 0x64, successivamente il codice sorgente (payload, file hex) andava flashato su un chip compatibile (ATMEL) e il funzionamento era uguale al "PSJailbreak", si inseriva il dongle USB in una delle porte e si premeva il tasto "Eject" per entrare in modalita' "Ricerca JIG". Avvio dell'exploit (grossomodo):
Porta |
Funzione |
Porta 1 |
Dopo che l'HUB e' stato inizializzato, un dispositivo USB viene collegato alla porta USB 1 con un pid/vid di uguale a 0xAAAA/0x5555, esso ha 4 configurazioni e ognuna e' lunga 0xf00 bytes. |
Porta 2 |
Dopo che la PS3 ha finito di leggere i descrittori dalla porta USB 1, torna all'indirizzo dell'HUB USB e dice al sistema PS3 che un dispositivo e' stato collegato nella porta USB 2 con un PID/VID 0xAAAA/0xBBBB, con una configurazione lunga 22 bytes. Solo i primi 18 bytes sono dati USB reali mentre gli ultimi 4 bytes sono: 04 21 B4 2F con una lunghezza di 04 e un byte di tipo invalido, tutto cio' che provera' ad interpretarlo come un descrittore probabilmente passera' oltre, inclusi gli ultimi 2 bytes. Dopo che la porta 3 viene connessa, la porta 2 viene disconnessa, cio' causera' il fatto che i descrittori della porta 2 verranno liberati, liberando un po' di spazio tra i descrittori della porta 1 e la porta 3. |
Porta 3 |
Il dispositivo collegato alla porta USB 3 ha un PID/VID 0xAAAA/0x5555, uguale alla porta numero 1. A differenza della porta 1 pero', ha 2 configurazioni, ognuna lunga 0xa4d bytes. I dati che contengono sono letteralmente spazzatura ma cio' non importa se vengono utilizzati come descrittori dato che la lunghezza risultera' comunque valida. Il dongle ora invia il messaggio che il dispositivo sulla porta 3 e' stato scollegato. |
Porta 4 |
Un dispositivo viene collegato alla porta 4 con PID/VID 0xAAAA/0x5555 e 3 configurazioni.
|
Porta 5 |
Il dongle inserisce il JIG fake nella porta 5 dopo che la porta 4 ha compiuto il suo lavoro. Utilizza lo stesso PID/VID del JIG originale Sony (0x054C/0x02EB). La PS3 invia 64 bytes al fake JIG per autenticarlo e il dongle risponde con 64 bytes di dati statici e la PS3 allochera' spazio per questa risposta. A questo punto il codice non e' stato ancora patchato quindi il la risposta statica del JIG fallira' durante l'autenticazione. |
Porta 6 |
Il dispositivo che viene inserito nella porta 6 non ha niente a che fare con l'exploit. Ha un PID/VID 0xAAAA/0xDEC0. Il payload invia un singolo byte (0xAA) per il controllo del trasferimento cosi' il dongle capira' che l'exploit ha funzionato e puo' accendere il LED verde per avvertire l'utente. Una funzione nel payload originale PSJailbreak si assicurera' che questo dispositivo rimanga collegato. Se per qualche motivo dovesse scollegarsi esso chiamera' l'LV1_Panic e la PS3 verra' spenta. PSGroove ha rimosso questa funzionalita'. |
Successivamente, dopo che l'exploit viene avviato, il payload viene caricato e provvede ad assicurarsi che il dongle inserito sia l'originale "PSJailbreak", poi copia il resto del payload in memoria, abilita il menu sviluppatore per installare i file PKG, attiva l'emulazione del lettore BluRay con inserito il disco del backup scelto e provvede a patchare il valore restituito dall'hypercall 99 in modo da avviare applicazioni non firmate.
In quanto all'hardware dei dongle, troviamo principalmente un microcontrollore che esegue tutto il "gioco", una memoria EEPROM che contiene il payload, il cristallo per far oscillare il microcontrollore, regolatore di tensione e un controller per l'HUB USB. I microcontrollori sono quasi sempre "Actel" ma e' possibile usare anche quelli dell'Atmel.
In quanto all'hardware dei dongle, troviamo principalmente un microcontrollore che esegue tutto il "gioco", una memoria EEPROM che contiene il payload, il cristallo per far oscillare il microcontrollore, regolatore di tensione e un controller per l'HUB USB. I microcontrollori sono quasi sempre "Actel" ma e' possibile usare anche quelli dell'Atmel.
ECDSA
Tornando a prima, la console fu bucata grazie ad un grave errore da parte di Sony nell'implementazione dell'ECDSA (Elliptic Curve Digital Signature Algorythm). Questo sistema veniva utilizzato per creare una firma digitale di un dato (per esempio un file) in modo da verificare la sua autenticita' senza comprometterne la sicurezza. E' un po' difficile da spiegare e sto ancora cercando di capire come funziona nel dettaglio ma piu' o meno e' cosi':
Abbiamo un equazione matematica che rappresenta una curva su un grafico, scegliamo un punto casuale sulla curva e lo consideriamo il punto di origine. Poi generiamo un numero a caso, questo numero rappresenta la chiave privata (private key, k), elaboriamo un equazione matematica utilizzando il numero casuale precedentemente generato e il punto di origine e ricaviamo un secondo punto sulla curva che rappresenta la chiave pubblica (public key, Q). Quando si vuole firmare un file utilizziamo la chiave privata con un hash del file (L'hash e' una semplice funzione matematica che viene applicata su ogni byte del file e restituisce un numero che e' unico per il file, in questo caso viene utilizzata la SHA1, quella piu' utilizzata e' l'MD5) in un'altra equazione matematica e questo restituira' la firma. La firma e' divisa in due parti, chiamate R e S.
Per verificare che la firma sia corretta abbiamo solo bisogno della chiave pubblica che inseriamo all'interno di un'altra equazione matematica con una parte della firma (S) e se la firma e' corretta utilizzando la chiave privata restituira' l'altra parte della firma (R).
Abbiamo un equazione matematica che rappresenta una curva su un grafico, scegliamo un punto casuale sulla curva e lo consideriamo il punto di origine. Poi generiamo un numero a caso, questo numero rappresenta la chiave privata (private key, k), elaboriamo un equazione matematica utilizzando il numero casuale precedentemente generato e il punto di origine e ricaviamo un secondo punto sulla curva che rappresenta la chiave pubblica (public key, Q). Quando si vuole firmare un file utilizziamo la chiave privata con un hash del file (L'hash e' una semplice funzione matematica che viene applicata su ogni byte del file e restituisce un numero che e' unico per il file, in questo caso viene utilizzata la SHA1, quella piu' utilizzata e' l'MD5) in un'altra equazione matematica e questo restituira' la firma. La firma e' divisa in due parti, chiamate R e S.
Per verificare che la firma sia corretta abbiamo solo bisogno della chiave pubblica che inseriamo all'interno di un'altra equazione matematica con una parte della firma (S) e se la firma e' corretta utilizzando la chiave privata restituira' l'altra parte della firma (R).
Purtroppo non conoscendo in modo approfondito questo sistema mi fermo qui, tornando al discorso PS3, la Sony aveva commesso un grave errore durante l'implementazione di tale sistema, nel dettaglio durante la fase di generazione del numero casuale, infatti ogni volta che bisognava creare una firma utilizzavano sempre lo stesso numero, mentre questo numero doveva essere casuale! E questo cosa comporta? Che gli sviluppatori di homebrew erano in grado di firmare il loro proprio codice con la stessa firma di Sony.
Con l'arrivo del firmware 3.55 Sony riusci' a patchare tutti i dongle USB e, le console uscite di fabbrica con un firmware minimo installabile maggiore al 3.56 possiedono un nuovo hardware e nuove key (questa volta con l'ECDSA implementato correttamente) e in questo modo Sony e' riuscita a mettere in sicurezza la console.
Con l'arrivo del firmware 3.55 Sony riusci' a patchare tutti i dongle USB e, le console uscite di fabbrica con un firmware minimo installabile maggiore al 3.56 possiedono un nuovo hardware e nuove key (questa volta con l'ECDSA implementato correttamente) e in questo modo Sony e' riuscita a mettere in sicurezza la console.
ODE
Nel 2013 il team "Cobra" rilascio' il Cobra ODE (Optical Drive Emulator) che andava installato all'interno della console ed interposto nel collegamento tra il Bluray e la scheda madre (infatti se guardade le mobo degli ODE noterete due porte uguali, una di input e una di output per il flat del lettore Bluray), questo ODE era dotato di una porta USB che era in grado di essere riconosciuta come se fosse il lettore Bluray e di conseguenza caricare backup dei giochi. Gli ODE piu' famosi sono appunto il Cobra ODE e il 3K3Y ODE. Oltre alla mainboard dell'ODE molto spesso venivano fornite anche le daughter board per aggiungere connettori o estendere i collegamenti. Si tratta della prima modifica "universale" applicabile su tutte le console (Cobra ODE), tuttavia non permette l'installazione di un CFW ma solo l'avvio di backup.