Nedokumentirana funkcija Android omogoča kateri koli poljubni aplikaciji, da pridobi korenski dostop v permisivnem okolju SELinux. Berite naprej, če želite izvedeti več!
V svetu spreminjanja Androida ljudje običajno menijo, da je korenski dostop temelj vseh stvari. Uporabnikom omogoča popoln nadzor nad svojimi napravami in dodajanje funkcij, ki niso vedno na voljo v standardni konfiguraciji. A kot pravijo — »z veliko močjo prihaja velika odgovornost« — ni pametno zaobiti Androidovega varnostnega modela, razen če veste, v kaj se spuščate. Izkušeni navdušenci nad Androidom na naših forumih se verjetno zavedate možnosti, da v vaši napravi obstajajo stranska vrata in večja je verjetnost, da boste poleg najnovejše različice Androida z najnovejšo varnostjo izvajali zaupanja vreden mod, ki podpira root obliži. Glede na to, morda poznate nekaj ljudi, ki jim ni prav vseeno, katere korenske popravke namestijo, dokler navidez delujejo zanje. Zato lahko še vedno najdete tovornjak modifikacij, ki delujejo samo, ko je SELinux nastavljen na permisivno, kar posledično pusti njihove uporabnike izjemno dovzetne za varnostne grožnje.
Kaj je SELinux
SELinux oz Linux z izboljšano varnostjo, je varnostni modul jedra Linuxa, posebej zasnovan za dostop in upravljanje varnostnih politik. Prvotno predstavljen v sistemu Android 4.3 Jelly Bean in od Androida naprej nastavljen na privzeti način za uveljavljanje 4.4 KitKat, SELinux pomaga uveljavljati pravice za nadzor dostopa in poskuša preprečiti stopnjevanje privilegijev napadi. Na kratko, SELinux deluje kot ovira za nepooblaščen nadzor nad vašo napravo, kot je aplikacija ali ranljivost, ki želi zlonamerno pridobiti korenski dostop. Privzeta nastavitev SELinuxa na "Enforcing" je eden od ključnih načinov zaščite običajnih uporabnikov pred takšnimi napadi.
Zakaj permisivni SELinux ni priporočljiv
Če ponovim, tipični način za doseganje korenskega dostopa v napravi Android ne zahteva nujno spreminjanja stanja SELinux. Premik načina SELinux iz »Enforcing« v »Permissive« namerno onemogoči eno ključnih varnostnih funkcij v napravi, zato uporabnik mora to izrecno dovoliti z namestitvijo specializiranega jedra po meri ali spreminjanjem parametrov obstoječe zagonske slike. Slabo kodirana modifikacija brez pravilne politike SELinux običajno prisili končne uporabnike, da preidejo na permisivni SELinux in v bistvu razširi površino napada. To je točno tisti razvijalec vvb2060 dokazal, ko so objavil dokaz o konceptu metode stopnjevanja privilegijev kjer je edina zahteva za pridobitev nadzora dovoljen SELinux.
Vstopi Magica
Za uporabnika, da dobi popoln korenski dostop v svoji napravi s sistemom Android 10 (ali novejšim) s SELinuxom, nastavljenim na permisivno, je šokantno enostavno narediti: Vse, kar morate storiti, je, da pritisnete namestitev in "Magica" bo samodejno pridobila korenski dostop v storitvi in namestila Magisk v zagon slika. To je nekaj veliko širšega obsega kot samo prilagajanje vaše naprave. Glede na XDA Senior Recognized Developer in Magisk vzdrževalec topjohnwu, vse poljubne aplikacije, vključno z zlonamerno programsko opremo, lahko trajno roota vašo napravo brez vašega soglasja in dovoljenja z uporabo PoC.
Če se na tehnični ravni sprašujete, kaj Magica izkorišča, je topjohnwu pojasnil naslednje v objavo na Redditu:
"Ko je SELinux dovoljen med zagonom, bo zygote to vedel in onemogočil filtre sistemskih klicev seccomp. To v bistvu ne omejuje, kateri sistemski klici so dovoljeni v procesih tretjih oseb.
V sistemu Android 10+ je na voljo nova "nedokumentirana" funkcija, imenovana "App Zygote", kjer je aplikacijam tretjih oseb dovoljeno ustvariti lastno Zygote za "izolirane storitve" (prav tako skoraj nedokumentirano). Tako »App Zygote« kot »Isolated Services« sta posebni funkciji, zasnovani za Chrome/Webview*. Procesi aplikacije Zygote se izvajajo s posebnimi dovoljenji in ko je seccomp onemogočen, lahko pokliče setuid 0 in poveča svoje privilegije ter pridobi korenski dostop.
Še vedno je nekako restriktiven v primerjavi s tem, kar ponujajo običajne korenske rešitve (npr. Magisk), vendar pa bo ogromno varnostnih ukrepov v Androidu popolnoma premaganih, ko je UID=0. Na primer, dovolj je, da se uporablja za popravljanje zagonskih slik, kar pomeni, da se lahko uporablja za vbrizgavanje zlonamerne programske opreme, kot je spremenjeni Magisk, ki mu pomaga pridobiti "prava" korenska dovoljenja.
Posodobitev: kaj lahko stori sam UID=0? V okviru Androida imajo skoraj vse storitve slepo zeleno luč, ko je UID zahtevanega procesa 0. To pomeni, da je ta korenski proces sposoben manipulirati na tone stvari z uporabo API-jev, specifičnih za Android (npr. ActivityManager)"
*Po navedbah razvijalca aviraxp, sta ti dve funkciji bolj splošno zasnovani "za skupno rabo virov in pomnilnika med več izoliranimi procesi."
Zaključek
Glede na nepopravljivo škodo, ki jo lahko povzročijo uporabniki, ki so tarča zlonamerne programske opreme v permisivnem okolju SELinux, vsem močno priporočamo, da jo še naprej izvajajo, razen če je to nujno potrebno. Čeprav imamo samo srečo, da imamo dokaz o izkoriščanju koncepta, se nam ne sanja, koliko avtorjev zlonamerne programske opreme že ve za to pot napada. Navsezadnje bo žrtev še naprej pozabila na ogroženo stanje svoje naprave, če tega ne stori priča, da se izkoriščanje aktivno uporablja, kar ni težko doseči za lažno aplikacijo, ki ima trajni root dostop.