PSA: Aveți grijă să instalați ceva cu SELinux setat la permisiv

O caracteristică Android nedocumentată permite oricărei aplicații arbitrare să obțină acces root într-un mediu SELinux permisiv. Citiți mai departe pentru a afla mai multe!

În lumea modding-ului Android, oamenii tind să considere accesul root ca piatra de temelie a tuturor lucrurilor. Permite utilizatorilor să preia controlul complet asupra dispozitivelor lor și să adauge funcții care nu sunt întotdeauna disponibile în configurația stocului. Dar, după cum se spune – „cu o mare putere vine o mare responsabilitate” – nu este înțelept să ocoliți modelul de securitate al Android decât dacă știți în ce vă băgați. Pentru pasionații veterani de Android de pe forumurile noastre, probabil că sunteți conștient de potențialul ca ușile din spate să existe pe dispozitivul dvs. și este mai probabil să rulați un mod de încredere activat pentru root pe lângă cea mai recentă versiune Android cu cea mai recentă securitate petice. Acestea fiind spuse, s-ar putea să cunoașteți câțiva oameni cărora nu le pasă cu adevărat ce modificări de rădăcină instalează, atâta timp cât par să funcționeze pentru ei. Acesta este motivul pentru care puteți găsi încă o mulțime de mod-uri care funcționează numai atunci când SELinux este setat la permisiv, ceea ce, la rândul său, îi lasă pe utilizatori extrem de susceptibili la amenințările de securitate.

Ce este SELinux

SELinux sau Linux cu securitate îmbunătățită, este un modul de securitate al nucleului Linux conceput special pentru accesul și gestionarea politicilor de securitate. Introdus inițial în Android 4.3 Jelly Bean și setat la modul de aplicare implicit de la Android 4.4 KitKat, SELinux ajută la aplicarea drepturilor de control al accesului și încearcă să prevină escaladarea privilegiilor atacuri. Pe scurt, SELinux acționează ca un obstacol pentru controlul neautorizat asupra dispozitivului dvs., cum ar fi o aplicație sau o vulnerabilitate care are ca scop obținerea accesului root în mod rău intenționat. Setarea implicită a SELinux la „Implementare” este una dintre modalitățile cheie prin care utilizatorii obișnuiți sunt protejați de astfel de atacuri.

De ce nu este recomandat SELinux permisiv

Pentru a reitera, modalitatea tipică de a obține accesul root pe un dispozitiv Android nu trebuie neapărat să schimbe starea SELinux. Trecerea modului SELinux de la „Implementare” la „Permisiv” dezactivează în mod intenționat una dintre caracteristicile cheie de securitate ale dispozitivului, motiv pentru care utilizatorul trebuie să permită în mod explicit să se întâmple, instalând un nucleu personalizat specializat sau modificând parametrii imaginii de boot existente. Un mod prost codificat, lipsit de o politică SELinux adecvată, îi obligă pe utilizatorii finali să treacă la SELinux permisiv și, în esență, extinde suprafața de atac. Exact asta este dezvoltatorul vvb2060 demonstrat când ei a publicat o metodă de escaladare a privilegiilor de dovadă a conceptului unde singura cerință pentru a obține controlul este permisiv SELinux.

Intră în Magica

Pentru ca un utilizator să obțină acces complet root pe propriul dispozitiv care rulează Android 10 (sau o versiune ulterioară) cu SELinux setat la permisiv, este șocant de ușor faceți: Tot ce trebuie să faceți este să apăsați pe instalare, iar „Magica” va obține automat acces root într-un serviciu și va instala Magisk la boot imagine. Acesta este ceva mult mai larg decât doar modificarea dispozitivului. Potrivit XDA Senior Recognized Developer și întreținător Magisk topjohnwu, orice aplicație arbitrară, inclusiv malware, vă puteți roota permanent dispozitivul fără acordul și permisiunea dvs prin utilizarea PoC.

Dacă vă întrebați la nivel tehnic ce exploatează Magica, topjohnwu a explicat următoarele în o postare Reddit:

„Când SELinux este permisiv în timpul pornirii, zygote va ști acest lucru și va dezactiva filtrele seccomp syscall. Acest lucru determină practic ce apeluri de sistem sunt permise în procesele terță parte.

Pe Android 10+, există o nouă caracteristică „nedocumentată” numită „App Zygote” în care aplicațiile terță parte au permisiunea de a genera propriul Zygote pentru „Servicii izolate” (de asemenea, aproape nedocumentate). Atât „App Zygote” cât și „Servicii izolate” sunt funcții speciale concepute pentru Chrome/Webview*. Procesele App Zygote rulează cu permisiuni speciale și, cu seccomp dezactivat, poate apela setuid 0 și își poate escalada privilegiul și obține acces root.

Este încă oarecum restrictiv în comparație cu ceea ce oferă soluțiile rădăcină normale (de exemplu, Magisk), totuși tone de măsuri de securitate în Android vor fi complet învinse când UID=0. De exemplu, este suficient pentru a fi folosit pentru a corecta imaginile de pornire, ceea ce înseamnă că poate fi folosit pentru a injecta malware, cum ar fi Magisk modificat, pentru a-l ajuta să obțină permisiuni „adevărate” de root.

Actualizare: ce poate face UID=0 în sine? În cadrul Android, aproape toate serviciile au lumină verde când UID-ul procesului de solicitare este 0. Aceasta înseamnă că acest proces rădăcină este capabil să manipuleze tone de lucruri folosind API-uri specifice Android (de exemplu, ActivityManager)"

* Potrivit dezvoltatorului aviraxp, aceste două caracteristici sunt mai general concepute „pentru partajarea resurselor și memoriei între mai multe procese izolate”.

Concluzie

Având în vedere prejudiciul ireparabil care poate fi provocat utilizatorilor vizați de malware într-un mediu SELinux permisiv, sugerăm cu tărie tuturor să-l pună în aplicare, dacă nu este absolut necesar. Deși suntem doar norocoși să avem o exploatare cu dovadă a conceptului, nu avem idee câți autori de programe malware știu deja despre această cale de atac. La urma urmei, o victimă va continua să rămână nevăzută de starea compromisă a dispozitivului său dacă nu a făcut-o asistați la utilizarea activă a exploitului, ceea ce nu este greu de realizat pentru o aplicație necinstită care are rădăcină persistentă acces.