Breaking: Chainfire heeft vandaag SuperSU Beta 2.27 aangekondigd, waarmee de noodzaak voor kernel-ramdisk-aanpassingen om gebruik te maken van root-toegang op Android 5.0 wordt weggenomen
Tot nu toe moest je, als je root wilde worden op Android 5.0, een aangepaste kernel op je apparaat flashen om enkele SELinux-beperkingen te omzeilen. XDA Senior erkende ontwikkelaar Kettingvuur onlangs het eerder noodzakelijke vrijgegeven CF-Auto-Root pakket, dat de nodige aanpassingen aan de ramdisk aan de kernel maakte om de SELinux-beperking uit het install-recovery.sh script op AOSP te verwijderen. Vanmorgen toverde Chainfire echter net als hij een glimlach op veel gezichten aangekondigd op Twitter dat dit in de toekomst niet meer nodig zou zijn.
Tot vandaag was Chainfire van plan om automatisch een geautomatiseerde, op ZIP gebaseerde patchtool uit te brengen patch kernelimages vanuit TWRP-herstel, totdat hij een geschikte methode tegenkwam om de noodzaak ervan weg te nemen dit.
Deze onthulling betekent dat Android 5.0-gebruikers niet langer een aangepaste kernel hoeven te gebruiken om root-toegang te krijgen via SuperSU (of andere root-oplossingen). Hoewel dit geen groot probleem was op Nexus-apparaten met ontgrendelbare bootloaders, was de noodzaak voor ramdisk-aanpassingen dat wel zorgwekkend voor veel gebruikers van apparaten met een bootloader-vergrendeling waarvoor geen ontgrendeling beschikbaar is (ja, helaas wel bestaan). Het antwoord op hun gebeden is nu hier, en we kunnen een exclusieve uitleg geven over de noodzakelijke veranderingen. In ieder geval voor nu (tot/tenzij Google dit patcht) is het mogelijk om root-toegang te verkrijgen en vervolgens SuperSU te installeren en te gebruiken op een standaard Android 5.0-apparaat, zonder dat de kernel-ramdisk hoeft te worden aangepast. De reden hiervoor is de noodzaak voor SuperSU om een service als root te draaien, om onbeperkte root-toegang op SELinux-beveiligde apparaten mogelijk te maken.
Voorheen maakte SuperSU gebruik van de vooraf geïnstalleerde AOSP flash_herstel service (gebruikt in AOSP om het herstel bij te werken na een OTA-installatie) om de SuperSU-daemon te starten (die feitelijk de rootrechten biedt voor apps die daarom vragen). Met de release van Lollipop is deze service toegevoegd aan een beperkte SELinux-context, wat betekent dat deze niet langer onvervalste toegang tot het systeem heeft. De voorgaande kernelmodificaties probeerden de SELinux-beperkingen uit dit script te verwijderen.
Chainfire's nieuwste bètaversie van SuperSU lost dit op door gebruik te maken van de kernservice 'Zygote' (verantwoordelijk voor het starten van alle Java-services, en dus alle apps die op een apparaat zijn geïnstalleerd). Omdat Zygote een van de weinige services is die beschikbaar is op Android L, die als root binnen de onbeperkte "init" SELinux-context, dit maakt het een belangrijk doelwit voor gebruik bij de werking van SuperSU. Na het opstarten wordt de SELinux "init"-context van de Zygote-service overgezet naar de uiteindelijke (beperkte) "Zygote"-context. Chainfire is erin geslaagd de Zygote-bestanden met succes aan te passen, zodat code als rootgebruiker kan worden uitgevoerd. binnen de onbeperkte "init"-context, waardoor SuperSU terugkomt naar Android L, zonder kernel wijzigingen.
Dit is niet de eerste keer dat Chainfire zich tot Zygote wendt om deze problemen op te lossen; de eerdere bètaversie 2.23 gebruikte Zygote als een middel om mogelijk enkele andere SELinux-problemen te omzeilen (die ervoor zorgden dat root-apps kapot gingen op Android L). Hierdoor konden sommige (maar niet alle) niet-functionerende apps werken - de rest heeft enkele updates van hun ontwikkelaars nodig. Helaas bleek bij het raadplegen van de 5.0 AOSP-code dat Google deze methode om de Zygote-dienst over te nemen al had verbroken. Gezien al zijn eerdere pogingen om Zygote over te nemen waren mislukt, is dit een veelbelovende stap voorwaarts.
Chainfire wilde er graag op wijzen dat SuperSU al lange tijd in staat is om SELinux-beleid op een draaiend systeem te wijzigen (en waarschuwt over het gemak met welke een OEM dit zou kunnen uitschakelen, en echt betekenisvolle en eenvoudige root-toegang zou kunnen voorkomen), en hoe eventuele wijzigingen aan Zygote moeten worden aangebracht Zorgvuldig, aangezien de dienst wordt uitgevoerd vanuit verschillende contexten, voor verschillende taken, en dit brengt de mogelijkheid met zich mee van een aantal (vervelende) subtiele mislukkingen. Deze nieuwe SuperSU bèta 2.27 is een build voor enthousiastelingen en andere techneuten om mee te spelen, om erachter te komen wat er kapot gaat. Fingers crossed: er zijn geen onverwachte bugs die de aandacht trekken, en dit is een haalbare weg vooruit.
Let op: zelfs als deze bèta werkt en Zygote de voorkeursweg is om root-toegang te krijgen, is het hele proces in de toekomst slechts een wijziging in één regel zodat ze niet door Google worden verbroken, waardoor gepatchte kernel-ramdisks de toekomst zouden worden voor root-toegang op Android (waardoor root wordt uitgesloten voor bootloader-locked apparaten). Als waarschuwing kan het zijn dat het nieuwe proces niet eens werkt op een volledig up-to-date AOSP-build, vanwege een aantal tamelijk grote SELinux-versies. veranderingen van de afgelopen maanden, die niet in de retailtoestellen waren opgenomen, maar die er in de toekomst ongetwijfeld zullen zijn releases. Vroeg of laat lijkt het echter waarschijnlijk dat aangepaste kernel-ramdisks nodig zullen zijn voor root, maar deze nieuwe bèta biedt mogelijk een kort uitstel van uitvoering voordat we die kant op moeten gaan.
Uitchecken de releasenotes voor meer informatie over de risico's die gepaard gaan met het testen hiervan, en voor links. Ontwikkelaars moeten zich er ook van bewust zijn dat Chainfire momenteel hard werkt aan de "How-To SU"-gids (volledig bijgewerkt voor Android 5.0), die binnen enkele dagen beschikbaar zou moeten zijn.
[Hartelijk dank aan Chainfire voor zijn werk hier, en hulp bij het voorbereiden van dit artikel.]