Home News PS4 Kernel Security — CR0.WP Protection

[Scena PS4] PS4 Kernel Security — CR0.WP Protection

348
0

La piattaforma PSDevWiki accoglie la documentazione per un nuovo livello di sicurezza implementato da Sony all’interno del firmware della console PlayStation 4, come descritto dal developer CelesteBlue.

Lo sviluppatore ha fornito anche alcuni suggerimenti utili su come superare i livelli di sicurezza attraverso exploit futuri, sebbene fino ad oggi non siano stati presi in considerazioni simili vulnerabilità.

Che cos’è la protezione CR0.WP di PS4? (da psdevwiki)

Dal firmware 6.51, Sony ha strumentato tutte le istruzioni che scrivono nel registro CR0 con controlli per i tentativi di cancellare CR0.WP (Write Protection), necessario per applicare le patch al kernel. Ecco come appare nel kernel 6.51:

a1b79: 0f 22 c0 mov cr0,rax
a1b7c: 48 a9 00 00 01 00 prova rax, 0x10000
a1b82: 75 02 jne a1b86 <-- salta l'istruzione successiva se CR0.WP non viene cancellato
a1b84: 0f 0b ud2 <-- #UD eccezioni, causa un kernel panic
a1b86: c3 ret

Nota che il controllo è dopo la scrittura, per evitare che un gadget ROP punti direttamente al mov e salti la verifica.

PS4 CR0.WP Protection

Sony ha introdotto una protezione aggiuntiva sul firmware 6.51 che ha reso più difficoltoso applicare patch nel kernel. In genere, il jailbreak ci permette di ottenere l’accesso al livello kernel del firmware tramite un exploit.

Successivamente viene patchato il firmware all’interno della RAM, questo per permetterci di escludere alcune protezioni. La patch è ciò che fa di solito un HEN (Homebrew ENabler), rimuovendo i controlli delle firme per consentire l’installazione e l’esecuzione di pacchetti non firmati (fPKG).

Patchare il firmware significa sovrascrivere parte del suo codice con un codice diverso. Per questo, l’hack deve scrivere nella memoria protetta, che solitamente viene solo letta. Pertanto, è preventivamente necessario rendere scrivibili alcune parti della RAM.

La protezione CR0.WP ha reso più difficile abilitare l’accesso in scrittura, anche dopo aver ottenuto il controllo del sistema. Ora se il sistema rileverà un tentativo di cambiare la memoria protetta in memoria scrivibile, causerà un kernel panic e spegnerà la PS4.

Si tratta comunque di una protezione già nota agli hacker e aggirata sui firmware 6.72~7.55, CelesteBlue ha fornito comunque alcuni dettagli su come aggirare il nuovo livello di sicurezza.

Bypass (in ordine cronologico):

  • Usa un mov “non intenzionale” a cr0 nel mezzo di un’altra istruzione (ad esempio l’istruzione “call $+0x220f1c” (e8 17 ​​0f 22 00) contiene un “mov cr0, rax” non intenzionale (0f 22 00)).
  • Usa la scrittura del kernel per dare al tuo processo le autorizzazioni JIT, allocare la memoria JIT e inserire lì codice personalizzato (evita del tutto il problema, poiché è specifico per ROP).
  • Poiché l’IDT è scrivibile su FreeBSD e PS4, è possibile sovrascrivere un gestore di eccezioni senza prima cancellare CR0.WP. Si può sovrascrivere il gestore di #UD con un gadget a propria scelta (uno stack pivot, o un “add rsp, … ; ret”, o qualsiasi altra cosa), e l’istruzione UD2 nel codice di mitigazione salterà felicemente ad esso invece del reale handler, con CR0.WP azzerato.

Fonte: wololo.net

Articolo precedenteL’emulatore Play! si aggiorna alla versione 0.43 e guadagna il supporto per l’immagine del disco CHD
Articolo successivo[Scena PS5] Reverse Engineering e dump dei dati della fotocamera PS5
Sono Nato nel 1980 e da diversi anni coltivo la passione per tutto ciò che riguarda il mondo dei videogiochi, ho vissuto l'era degli home computer con il Commodore 64 e l'Amiga 500, da sempre appassionato di giochi di ruolo e di titoli di avventura.