Nedokumentuota Android funkcija leidžia bet kuriai savavališkai programai gauti šakninę prieigą leistinoje SELinux aplinkoje. Skaitykite toliau, kad sužinotumėte daugiau!
„Android“ modifikavimo pasaulyje žmonės linkę root prieigą laikyti visų dalykų kertiniu akmeniu. Tai leidžia vartotojams visiškai valdyti savo įrenginius ir pridėti funkcijų, kurios ne visada pasiekiamos atsargų konfigūracijoje. Tačiau, kaip sakoma – „su didele galia ateina ir didelė atsakomybė“ – nėra protinga apeiti „Android“ saugos modelį, nebent žinote, į ką atsiduriate. „Android“ entuziastai veteranai mūsų forumuose tikriausiai žino, kad jūsų įrenginyje gali būti užpakalinių durų ir labiau tikėtina, kad naudosite patikimą pagrindinę versiją su naujausia „Android“ versija su naujausia sauga pleistrai. Tai pasakius, galbūt pažįstate kelis žmones, kuriems nelabai rūpi, kokius pagrindinius pakeitimus jie įdiegia, jei atrodo, kad jie jiems tinka. Štai kodėl vis dar galite rasti sunkvežimio modifikacijų, kurios veikia tik tada, kai SELinux nustatytas leistinas, o tai savo ruožtu daro jų naudotojus itin jautrius saugumo grėsmėms.
Kas yra SELinux
SELinux arba „Linux“ su patobulinta sauga, yra „Linux“ branduolio saugos modulis, specialiai sukurtas prieigai ir saugos strategijoms valdyti. Iš pradžių buvo pristatyta „Android 4.3 Jelly Bean“ ir nustatytas jo vykdymo režimas kaip numatytasis nuo „Android“. 4.4 KitKat, SELinux padeda užtikrinti prieigos kontrolės teises ir bando užkirsti kelią privilegijų eskalavimui išpuolių. Trumpai tariant, SELinux veikia kaip kliūtis neteisėtai valdyti jūsų įrenginį, pvz., programą ar pažeidžiamumą, kuriuo siekiama piktybiškai įgyti šakninę prieigą. Pagal numatytuosius nustatymus SELinux nustatymas į „Enforcing“ yra vienas iš pagrindinių būdų, kaip paprasti vartotojai yra apsaugoti nuo tokių atakų.
Kodėl leistinas SELinux nerekomenduojamas
Pakartotinai, įprastas būdas pasiekti root prieigą „Android“ įrenginyje nebūtinai turi pakeisti SELinux būseną. Pakeitus SELinux režimą iš „Įgyvendinimo“ į „Leidžiamą“, tyčia išjungiama viena iš pagrindinių įrenginio saugos funkcijų, todėl vartotojas turi aiškiai leisti tai įvykti, įdiegdamas specializuotą tinkintą branduolį arba modifikuodamas esamo įkrovos vaizdo parametrus. Prastai užkoduotas modifikavimas, neturintis tinkamos SELinux politikos, paprastai verčia galutinius vartotojus pereiti prie leistino SELinux ir iš esmės išplečia atakos paviršių. Būtent tai yra kūrėjas vvb2060 parodė, kai jie paskelbė koncepcijos privilegijų eskalavimo metodo įrodymą kur vienintelis reikalavimas norint įgyti valdymą yra leistinas SELinux.
Įveskite Magica
Naudotojui stebėtinai lengva gauti visišką root prieigą prie savo įrenginio, kuriame veikia Android 10 (ar naujesnė versija), kai SELinux nustatytas kaip leistinas. daryti: tereikia paspausti diegimą ir „Magica“ automatiškai įgis root prieigą prie paslaugos ir įdiegs Magisk įkrovoje vaizdas. Tai yra kažkas daug platesnės apimties nei tik įrenginio patobulinimas. Pasak XDA vyresniojo pripažinto kūrėjo ir „Magisk“ prižiūrėtojo topjohnwu, bet kokia savavališka programa, įskaitant kenkėjiškas programas, gali visam laikui įsitvirtinti jūsų įrenginį be jūsų sutikimo ir leidimo naudojant PoC.
Jei jums įdomu techniniu lygiu, ką „Magica“ išnaudoja, topjohnwu paaiškino taip „Reddit“ įrašas:
"Kai SELinux yra leistinas įkrovos metu, zygote tai žinos ir išjungs seccomp syscall filtrus. Tai iš esmės neriboja, kokie sistemos skambučiai leidžiami trečiųjų šalių procesuose.
10 ir naujesnėse versijose „Android“ yra nauja „nedokumentuota“ funkcija, vadinama „App Zygote“, kurioje trečiųjų šalių programoms leidžiama sukurti savo Zygote „izoliuotoms paslaugoms“ (taip pat beveik nedokumentuota). „App Zygote“ ir „Isolated Services“ yra specialios funkcijos, sukurtos „Chrome“ / žiniatinklio peržiūrai*. „App Zygote“ procesai veikia su specialiais leidimais, o išjungus „seccomp“, ji gali iškviesti „setuid 0“ ir išplėsti savo privilegiją bei gauti šakninę prieigą.
Tai vis dar yra kažkaip ribojanti, palyginti su tai, ką siūlo įprasti šakniniai sprendimai (pvz., Magisk), tačiau daugybė „Android“ saugos priemonių bus visiškai nugalėtos, kai UID = 0. Pavyzdžiui, užtenka jį naudoti įkrovos vaizdams pataisyti, o tai reiškia, kad jį galima naudoti kenkėjiškoms programoms, tokioms kaip modifikuotas Magisk, įterpti, kad būtų galima įgyti „tikruosius“ šakninius leidimus.
Atnaujinimas: ką gali pats UID=0? „Android“ sistemoje beveik visos paslaugos dega žalia šviesa, kai užklausos proceso UID yra 0. Tai reiškia, kad šis šakninis procesas gali manipuliuoti daugybe dalykų, naudojant specifines „Android“ API (pvz., „ActivityManager“).
*Pagal kūrėją aviraxp, šios dvi funkcijos yra labiau skirtos „dalintis ištekliais ir atmintimi tarp kelių izoliuotų procesų“.
Išvada
Atsižvelgdami į nepataisomą žalą, kuri gali būti padaryta naudotojams, kuriems kenkėjiška programa yra skirta leistinoje SELinux aplinkoje, primygtinai rekomenduojame visiems ir toliau ją vykdyti, nebent tai absoliučiai būtina. Nors mums tiesiog pasisekė, kad turime koncepcijos išnaudojimo įrodymą, neįsivaizduojame, kiek kenkėjiškų programų autorių jau žino apie šį puolimo kelią. Galų gale, auka ir toliau nepaisys pažeistos savo įrenginio būklės, jei to nepadarė stebėkite, kaip išnaudojimas yra aktyviai naudojamas, o tai nesunku pasiekti nesąžiningai programai, kuri turi nuolatinę šaknį prieiga.