Zranitelnost Androidu může v některých případech narušit i jeho jinak poměrně propracovaný bezpečnostní model. Aplikace běží v sandboxu, mají omezená oprávnění a běžná aplikace by rozhodně neměla mít možnost sáhnout si na kernel nebo získat práva roota. Aplikace běží v sandboxu, mají omezená oprávnění a běžná aplikace by rozhodně neměla mít možnost sáhnout si na kernel nebo získat práva roota. Jenže co když problém není přímo v Androidu? Bezpečnostní výzkumník Lukas Maar v rámci výzkumu OEMpocalypse Now ukázal, že kombinace zranitelností ve výrobcovském softwaru může za určitých podmínek umožnit právě tohle: začít s obyčejnou neprivilegovanou aplikací a skončit u root přístupu k zařízení. Výzkum se týkal zařízení několika velkých výrobců, mimo jiné Samsungu, Xiaomi, Oppo, OnePlus a Realme.
Zranitelnost Androidu ukazuje rizika OEM komponent a root exploitu
Když se řekne Android, většina lidí si představí operační systém od Googlu. Ve skutečnosti ale výrobci telefonů nad základní Android přidávají obrovské množství vlastního kódu.
Patří sem například:
- systémové aplikace,
- vlastní služby a démoni,
- IPC rozhraní,
- ovladače,
- úpravy kernelu,
- různé komponenty pro hardware a další funkce telefonu.
A právě tyto dodatečné komponenty představují další attack surface. Čím více kódu v zařízení máme, tím více potenciálních míst existuje, kde může být chyba. A nemusí přitom jít o chybu v samotném Androidu od Googlu.
Od obyčejné aplikace k rootu
Princip popsaného útoku je zajímavý hlavně tím, že útočník nezačíná s administrátorskými právy. Na začátku může být obyčejná škodlivá aplikace běžící v prostředí untrusted_app. Android přitom počítá s tím, že právě sandbox zabrání aplikaci v přístupu k citlivým částem systému. Problém vzniká ve chvíli, kdy některá výrobcovská komponenta poskytuje aplikaci cestu k privilegovanější funkci a zároveň nedostatečně kontroluje, co může volající proces provést. Útočník tak může využít první zranitelnost k překonání části bezpečnostních hranic systému. To je ale pouze první krok.
Druhý krok: kernel
Další část exploit chainu se týká výrobcovského kernelového ovladače. Výzkum pracuje mimo jiné se zranitelností typu use-after-free. Zjednodušeně řečeno jde o situaci, kdy program pokračuje v používání objektu nebo oblasti paměti poté, co byla tato paměť uvolněna. V prostředí kernelu může být taková chyba velmi nebezpečná. Kernel totiž pracuje s mnohem vyššími oprávněními než běžná aplikace. Pokud se útočníkovi podaří chybu vhodně zneužít, může získat možnost manipulovat s kernelovou pamětí a následně zvýšit svá oprávnění. Výsledkem může být root. A najednou máme poměrně děsivý řetězec:
neprivilegovaná aplikace → OEM komponenta → kernel → root
MITRE ATT&CK: T1404
Z pohledu frameworku MITRE ATT&CK Mobile se tento scénář dobře hodí k technice T1404 – Exploitation for Privilege Escalation. Princip této techniky je jednoduchý: útočník využije zranitelnost v aplikaci, službě, operačním systému nebo kernelu k získání vyšších oprávnění. Přesně o to v tomto případě jde. Útočník nepotřebuje začínat jako root. Využije zranitelnosti v jednotlivých vrstvách systému a postupně se snaží dostat k vyšším oprávněním. T1404 je proto dobrý příklad toho, proč nestačí sledovat pouze malware samotný. Důležitý je také způsob, jakým malware zvyšuje svá oprávnění.
Proč je root tak zásadní?
Root není jen „další oprávnění“. Jde o zásadně vyšší úroveň kontroly nad systémem.
Po získání root oprávnění se útočník může dostat k datům a funkcím, ke kterým běžná aplikace přístup mít nemá. V závislosti na konkrétním útoku může například manipulovat se systémovými komponentami, zasahovat do bezpečnostních mechanismů nebo získávat citlivá data. Právě proto je privilege escalation tak důležitou součástí útočných řetězců.
Proč je zajímavý rozdíl mezi výrobci?
Výzkum zároveň ukazuje zajímavý problém moderního Android ekosystému.
Každý výrobce si Android různě upravuje.
Jeden přidává vlastní služby, druhý vlastní ovladače, třetí další systémové komponenty.
Bezpečnostní problém tak nemusí být univerzální pro všechny telefony s Androidem.
Může být specifický pro konkrétního výrobce, konkrétní komponentu nebo konkrétní model.
To komplikuje nejen samotné zabezpečení, ale také testování.
Výrobce totiž ve výsledku nechrání pouze „Android“. Musí zabezpečit také obrovské množství vlastního kódu, který nad Android přidává.
Co to znamená pro běžného uživatele?
Dobrá zpráva je, že uživatel nemusí dělat nic exotického.
Základem je:
1. Aktualizovat Android.
2. Instalovat bezpečnostní aktualizace výrobce.
3. Neinstalovat aplikace z nedůvěryhodných zdrojů.
4. Věnovat pozornost tomu, jaká aplikace se do telefonu instaluje a co po uživateli požaduje.
Samotná existence zranitelnosti ještě neznamená, že je telefon automaticky napadený.
Problém je v tom, že podobné chyby mohou vytvořit cestu, která výrazně zvyšuje možnosti útočníka poté, co se mu podaří dostat škodlivý kód do zařízení.
A hlavní poučení?
Tenhle případ podle mě dobře ukazuje jednu věc:
Attack surface není jen operační systém.
Do bezpečnosti telefonu vstupuje také všechno, co do něj výrobce přidá.
Služby, aplikace, ovladače a další OEM komponenty mohou být stejně důležitou součástí bezpečnostního modelu jako samotný Android.
A pokud se podaří spojit několik zranitelností do jednoho exploit chainu, může být výsledek výrazně závažnější než každá chyba samostatně.
Začít totiž můžete jako obyčejná aplikace bez oprávnění.
A skončit můžete u rootu.