Nedokumentovaná funkce systému Android umožňuje libovolné aplikaci získat přístup root v tolerantním prostředí SELinux. Čtěte dále a dozvíte se více!
Ve světě moddingu pro Android mají lidé tendenci považovat přístup root za základní kámen všech věcí. Umožňuje uživatelům převzít úplnou kontrolu nad svými zařízeními a přidat funkce, které nejsou vždy dostupné ve skladové konfiguraci. Ale jak se říká – „s velkou mocí přichází velká zodpovědnost“ – není moudré obcházet bezpečnostní model Androidu, pokud nevíte, do čeho jdete. Pro zkušené nadšence pro Android na našich fórech si pravděpodobně uvědomujete, že na vašem zařízení mohou existovat zadní vrátka a je pravděpodobnější, že nad nejnovější verzí Androidu s nejnovějším zabezpečením používáte důvěryhodný mod s povoleným rootem náplasti. Když už to bylo řečeno, možná znáte pár lidí, kteří se ve skutečnosti nestarají o to, jaké kořenové vylepšení si nainstalují, pokud pro ně zdánlivě fungují. To je důvod, proč stále můžete najít spoustu modů, které fungují pouze tehdy, když je SELinux nastaven na permisivní, což zase způsobuje, že jejich uživatelé jsou extrémně náchylní k bezpečnostním hrozbám.
Co je SELinux
SELinux, popř Linux se zvýšenou bezpečností, je bezpečnostní modul linuxového jádra speciálně navržený pro přístup a správu bezpečnostních politik. Původně představeno v Androidu 4.3 Jelly Bean a nastaveno na režim Vynucování jako výchozí od Androidu 4.4 KitKat, SELinux pomáhá vynutit přístupová práva a snaží se zabránit eskalaci oprávnění útoky. Stručně řečeno, SELinux funguje jako překážka pro neoprávněnou kontrolu nad vaším zařízením, jako je aplikace nebo zranitelnost, jejichž cílem je získat přístup root se zlými úmysly. Nastavení SELinuxu na "Enforcing" ve výchozím nastavení je jedním z klíčových způsobů, jak jsou normální uživatelé chráněni před takovými útoky.
Proč se Permisivní SELinux nedoporučuje
Pro zopakování, typický způsob, jak získat root přístup na zařízení Android, nemusí nutně měnit stav SELinux. Posun režimu SELinux z „Vynucování“ na „Povolující“ záměrně deaktivuje jednu z klíčových funkcí zabezpečení na zařízení, a proto uživatel to musí výslovně povolit instalací specializovaného vlastního jádra nebo úpravou parametrů stávajícího zaváděcího obrazu. Špatně nakódovaný mod postrádající správnou SELinux politiku obvykle nutí koncové uživatele přejít na permisivní SELinux a v podstatě rozšiřuje útočnou plochu. To je přesně ten vývojář vvb2060 prokázali, když zveřejnila metodu eskalace práv konceptu kde jediným požadavkem k získání kontroly je permisivní SELinux.
Zadejte Magica
Pro uživatele je překvapivě snadné získat úplný root přístup na svém vlastním zařízení se systémem Android 10 (nebo vyšším) s SELinux nastaveným na permisivní. udělat: Vše, co musíte udělat, je stisknout install a "Magica" automaticky získá root přístup ve službě a nainstaluje Magisk do bootu obraz. Jde o něco mnohem širšího, než je pouhé vyladění vašeho zařízení. Podle XDA Senior Recognized Developer a správce Magisk topjohnwu, jakákoli libovolná aplikace, včetně malwaru, může trvale rootovat vaše zařízení bez vašeho souhlasu a povolení pomocí PoC.
Pokud vás na technické úrovni zajímá, co Magica využívá, topjohnwu vysvětlil následující příspěvek na Redditu:
"Když je SELinux během spouštění povolený, zygote to bude vědět a zakáže filtry systémových volání seccomp. To v zásadě neomezuje povolená systémová volání v procesech třetích stran.
Na Androidu 10+ je nová „nedokumentovaná“ funkce nazvaná „App Zygote“, kde aplikacím třetích stran je povoleno vytvářet vlastní Zygote pro „Isolated Services“ (také téměř nezdokumentované). „App Zygote“ i „Isolated Services“ jsou speciální funkce navržené pro Chrome/Webview*. Procesy App Zygote běží se speciálními oprávněními a s deaktivovaným seccomp může volat setuid 0 a eskalovat svá oprávnění a získat přístup root.
Stále je to nějak omezující ve srovnání s tím, co poskytují běžná kořenová řešení (např. Magisk), nicméně tuny bezpečnostních opatření v Androidu budou zcela poraženy, když UID=0. Stačí jej například použít k opravě zaváděcích obrazů, což znamená, že jej lze použít k vložení malwaru, jako je upravený Magisk, aby mu pomohl získat „skutečné“ oprávnění root.
Aktualizace: co umí samotné UID=0? V rámci systému Android mají téměř všechny služby slepé zelené světlo, když je UID žádajícího procesu 0. To znamená, že tento kořenový proces je schopen manipulovat s mnoha věcmi pomocí rozhraní API specifických pro Android (např. ActivityManager)“
*Podle vývojáře aviraxp, tyto dvě funkce jsou obecněji navrženy "pro sdílení zdrojů a paměti mezi více izolovanými procesy."
Závěr
S ohledem na nenapravitelné škody, které mohou být způsobeny uživatelům, na něž se malware zaměřuje v tolerantním prostředí SELinux, důrazně doporučujeme, aby jej všichni nadále vynucovali, pokud to není nezbytně nutné. I když máme jen štěstí, že máme důkaz o zneužití konceptu, netušíme, kolik autorů malwaru už o této cestě útoku ví. Koneckonců, oběť bude i nadále zapomínat na kompromitovaný stav svého zařízení, pokud tak neučinila být svědkem aktivního využívání exploitu, čehož není těžké dosáhnout pro nepoctivou aplikaci, která má trvalý kořen přístup.