martedì 21 ottobre 2014

Android Lollipop: sarà possibile avere i permessi di root?


Come promesso, eccovi qualche dettaglio sulla possibilità di effettuare la procedura di "rooting" su Android 5.0, introdotta da Chainfire, il guru del modding Androidiano (e non solo!).

Con un post sulla sua pagina Google+ Chainfire ha annunciato di essere riuscito a rootare la developer preview di Android L(ollipop) su Nexus 5 (precisamente la build LPX13D), ma aspettate a gioire, c'è qualcos'altro.

Già questo inverno, spulciando il codice sorgente di Android (AOSP), erano venuti a galla alcuni commit che restringevano l'utilizzo del superUser nella partizione /data, cosa che avrebbe intralciato il lavoro di alcune applicazioni che fanno uso di SuperSu. Comunque quella era storia vecchia, adesso il discorso è ben più intricato, visto che i developer della sezione sicurezza di Android hanno cominciato ad integrare commit su commit di SELinux.

Chainfire ci tiene a sottolineare che comunque molte delle modifiche sul codice sorgente di AOSP non sono presenti sulla developer preview e vice versa, il che significa che la situazione è ancora instabile e probabilmente ci saranno ulteriori cambiamenti al momento della presentazione del codice sorgente di Lollipop.

Funzionamento del root

Tanti di noi abbiamo rootato i nostri device, ma cosa avviene in realtà quando si è possessori di un device rootato è conoscenza di pochi: sulla maggior parte dei firmware e delle ROM, il daemon (in italiano demone, ma odio questa denominazione) di SuperSU viene avviato dallo script install-recovery.sh che parte in ambiente init, ossia quella "partizione" di esecuzione iniziale (dall'inglese initial) che avvia i processi basilari per far funzionare il proprio terminale. Questa partizione ha i permessi di root da stock, per cui è semplice introdurre questo demone che estende tali permessi a tutti i processi voluti dall'utente.

A partire dalla release in questione di Lollipop, adesso lo script install-recovery.sh viene eseguito in ambiente SELinux che, sebbene abbia l'accesso root, ha diverse restrizioni imposte dagli sviluppatori Android.

La prima soluzione quasi ovvia sarebbe quella di riportare l'esecuzione di questo script nella partizione originaria o comunque in una partizione che non soffra delle restrizioni imposta da quella di SELinux e, sempre citando Chainfire, nelle developer preview più vecchie, ce n'erano diverse. Con l'aggiornamento di queste build preview, i vari buchi di sicurezza sono stati "riempiti" dagli sviluppatori Android, andando così a rendere impossibile l'esecuzione di questo script in ambienti differenti da SELinux.

Quindi, come fare?

Visto che Chainfire è riuscito ad eseguire la procedura di rooting sulla build Lollipop, un exploit c'è, vediamo come.
Riprendendo il discorso di poc'anzi, per assicurarsi che lo script per il root venga eseguito, è necessario cambiare contesto, fornendone uno più semplice.


Chainfire è riuscito a trovare un escamotage, riallacciando l'esecuzione dello script nell'ambiente init modificando la ramdisk della boot.img: in poche parole è necessario modificare il kernel per modificare l'esecuzione dello script. Difatti, escludendo le linee di codice nel file init.rc che obbligano lo script ad andare ad eseguirsi in un contesto troppo sicuro, lo si agevola nell'esecuzione nell'ambiente init, come era in origine.

Ripercussioni

Non festeggiate perché ancora non vi ho detto il peggio. Difatti, affinché i permessi di root siano persistenti, è necessario che questi processi vengano ri-eseguiti (automaticamente) ad ogni reboot del telefono e la brutta notizia è che sono altamente instabili per l'equilibrio del sistema.
In più, aggiungendo a questa situazione drammatica anche la presenza dei bootloader bloccati dagli OEM, si presenta davanti una situazione davvero molto poco rosea.

È molto probabile che le prime build Lollipop degli OEM come Samsung, HTC, LG, Motorola e compagnia bella, siano prive di queste protezioni perché ci vuole tempo per apportarle e le esigenze del mercato, avido di aggiornamenti spinge verso aggiornamenti veloci, ma ciò non significa che nel futuro, ad ogni update, non ci sia una chiusura sempre peggiore in questo senso. Cosa significa? Che ad ogni update sarà necessario trovare nuovi exploit per rootare il proprio device.

Ripercussioni sulle app

Per gli sviluppatori di app che richiedono i permessi di root, ci sarà bisogno di aggiornamenti in materia di sicurezza. Difatti, in un logcat derivante da un'app che non riusciva a rebootare il telefono (procedura per la quale è necessario il permesso di root), si è visto che l'applicazione cercava di agire nella partizione /dev/block che, sfortunatamente, è sotto protezione SELinux. L'aggiornamento dovrà consistere nell'anteporre la richiesta su nell'operazione da svolgere. 
Dice Chainfire che non è un grosso problema, ma è comunque un problema che i developer devono affrontare, se vogliono che le loro app risultino funzionanti.

Ma allora disabilitiamo SELinux!

Certo che sì, è possibilissimo farlo, ma il prezzo da pagare è alto: disabilitando SELinux, disabiliteremo la maggiore barriera di sicurezza del nostro kernel e quindi del nostro dispositivo, mettendo a repentagli la sicurezza dei nostri dati.

Chainfire è riuscito, per ora, a far sì che le app che richiedono permessi di root, possano giocare col fatto che porzioni di SELinux possano essere settate a permissive, piuttosto che in enforcing, in modo da ovviare alcune operazioni root.

Credeteci o no, questa è la faccia di Jorrit Jongma, aka Chainfire
Conclusioni

Mentre è possibile disabilitare SELinux, Chainfire consiglia di non farlo ed è già al lavoro per trovare degli exploit di questo sistema di protezione per far coesistere la sicurezza ed al tempo stesso i permessi di superUser.

Ci vorrà ancora del tempo prima di vedere Android 5.0 Lollipop in azione sui Nexus ed ancora di più per vederlo sui Legacy, per cui mettetevi comodi e guardate il guru in azione!

Inoltre sarebbe carino da parte nostra, donare a colui che ha reso possibile tutto quello che orbita attorno al mondo del modding, per cui se volete donare, qui c'è il suo sito e sulla destra trovate il pulsante Donate.

Grazie per essere arrivati fin qua in fondo a leggere e auguriamoci che la parte più divertente di Android non muoia mai!