SuperSU BETA: Root Android Lollipop på lagerkjernen

Frem til nå, hvis du ønsket å få rot på Android 5.0, måtte du blinke en modifisert kjerne på enheten din for å omgå noen SELinux-begrensninger. Senior anerkjent Developer Chainfire ga nylig ut den tidligere nødvendige CF-Auto-Root-pakken, som gjorde nødvendige kjerne-ramdisk-modifikasjoner for å fjerne SELinux-begrensningen fra install-recovery.sh-skriptet på AOSP. I morges brakte Chainfire imidlertid smil til mange ansikter, da han kunngjorde på Twitter at dette ikke lenger vil være nødvendig fremover.

Frem til i dag hadde Chainfire planlagt å frigjøre et automatisk ZIP-basert lappeverktøy, for automatisk å lappe kjernebilder fra TWRP-utvinning, til han kom over en passende metode for å fjerne behovet for dette.

Denne avsløringen betyr at Android 5.0-brukere ikke lenger trenger å kjøre en modifisert kjerne for å få root-tilgang via SuperSU (eller andre root-løsninger). Selv om det ikke er et stort problem på Nexus-enheter med opplåsbare oppstartslastere, var behovet for ramdisk-modifikasjoner noe for mange brukere av bootloader-låste enheter som ingen opplåsing er tilgjengelig for (ja, de finnes dessverre). Svaret på bønnene deres er nå her, og vi kan presentere en eksklusiv forklaring på endringene som trengs. I det minste for nå (til / med mindre Google lapper dette), er det mulig å få root-tilgang og deretter installere og bruke SuperSU på en aksje Android 5.0-enhet, uten at noen kjerner ramdisk justerer. Årsaken til dette er behovet for at SuperSU kjører en tjeneste som root, for å gi mulighet for ubegrenset root-tilgang på SELinux-beskyttede enheter.

Tidligere ville SuperSU utnytte den forhåndsinstallerte AOSP flash_recovery- tjenesten (brukt i AOSP for å oppdatere utvinning etter en OTA-installasjon) for å starte SuperSU-demonen (som faktisk gir root-rettighetene for apper som ber om det). Med utgivelsen av Lollipop har denne tjenesten blitt lagt til en begrenset SELinux-kontekst, noe som betyr at den ikke lenger har uforfalsket tilgang til systemet. De forrige kjernemodifiseringene prøvde å fjerne SELinux-begrensningene fra dette skriptet.

Chainfires siste betaversjon av SuperSU løser dette ved å bruke kjernen 'Zygote' -tjenesten (ansvarlig for å starte alle Java-tjenester, og dermed alle appene som er installert på en enhet). Siden Zygote er en av de eneste tjenestene som er tilgjengelige på Android L, som startes som rot innenfor den ubegrensede “init” SELinux-konteksten, gjør dette det til et primært mål for bruk i drift av SuperSU. Etter oppstart har Zygote-tjenesten sin SELinux “init” -kontekst overført til den endelige (begrensede) “Zygote” -konteksten. Chainfire har klart å modifisere Zygote-filene for å kjøre kode som rotbruker, i den ubegrensede "init" -konteksten, og dermed bringe SuperSU tilbake til Android L, uten kjernemodifikasjoner.

Dette er ikke første gang Chainfire har henvendt seg til Zygote for å løse disse problemene; den tidligere 2.23 betaen brukte Zygote som et middel til å muligens omgå noen andre SELinux-problemer (som førte til at root-apper brøt på Android L). Dette tillot noen (men ikke alle) appene som ikke fungerer, å fungere - resten krever noen oppdateringer fra utviklerne. Dessverre, da AOSP-koden 5.0 ble konsultert, kom det frem at Google allerede hadde brutt denne metoden for å overta Zygote-tjenesten. Gitt alle hans tidligere forsøk på å overta Zygote hadde mislyktes, er dette et lovende skritt fremover.

Chainfire var opptatt av å påpeke at SuperSU lenge har vært i stand til å endre SELinux-policyer på et kjørende system (og advarer om hvor enkelt en OEM kan deaktivere dette, og virkelig forhindre meningsfull og enkel rottilgang), og hvordan eventuelle modifikasjoner ble gjort til Zygote må gjøres nøye, gitt tjenesten kjøres fra forskjellige forskjellige kontekster, for forskjellige oppgaver, og dette øker muligheten for en rekke (ekle) subtile feil. Denne nye SuperSU beta 2.27 er en bygning for entusiaster og andre teknologier å leke med, for å finne ut hva som bryter. Fingrene krysset - det er ingen uventede show-stopp-feil, og dette er en levedyktig vei videre.

Legg merke til - selv om denne betaen fungerer og Zygote er den foretrukne avenyen for å få root-tilgang, fremover, er hele prosessen bare en endringslinje fra å bli ødelagt av Google, noe som vil gjøre at lappete kjerne ramdisker fremtiden for root tilgang på Android (og dermed utelukke rot for låste enheter som er låst av bootloader). Faktisk, som en heads-up, kan det hende at den nye prosessen ikke engang fungerer på en fullt oppdatert AOSP-bygg, på grunn av noen ganske store SELinux-endringer i løpet av de siste månedene, som ikke var inkludert i detaljhandelenhetene, men som vil uten tvil være der i fremtidige utgivelser. Før eller siden virker det imidlertid sannsynlig at modifiserte kjerne-ramdisker vil være nødvendige for rot, men denne nye betaen kan tilby en kort gjennomføringsopphold før vi må gå i den retningen.

Sjekk ut utgivelsesnotatene for mer informasjon om risikoen forbundet med å teste dette ut, og for koblinger. Utviklere bør også være klar over at Chainfire for tiden jobber hardt med “How-To SU” -guiden (fullt oppdatert for Android 5.0), som bør være tilgjengelig i løpet av de neste dagene.

[En stor takk til Chainfire for arbeidet hans her, og hjelp til å utarbeide denne artikkelen.]