PSA: Var försiktig med att installera något med SELinux inställt på tillåtande

En odokumenterad Android-funktion tillåter vilken godtycklig app som helst att få root-åtkomst i en tillåtande SELinux-miljö. Läs vidare för att veta mer!

I en värld av Android-modding tenderar människor att betrakta root-åtkomst som hörnstenen i allt. Det tillåter användare att ta fullständig kontroll över sina enheter och lägga till funktioner som inte alltid är tillgängliga i lagerkonfigurationen. Men som de säger — "med stor makt kommer stort ansvar" — det är inte klokt att kringgå Androids säkerhetsmodell om du inte vet vad du ger dig in på. För veteran Android-entusiaster på våra forum är du förmodligen medveten om potentialen för att bakdörrar finns på din enhet, och det är mer sannolikt att du kör en pålitlig root-aktiverad mod utöver den senaste Android-versionen med den senaste säkerheten plåster. Med det sagt kanske du känner några personer som inte bryr sig om vilka root-tweaks de installerar så länge de verkar fungera för dem. Det är därför du fortfarande kan hitta en lastbil med mods som bara fungerar när SELinux är inställt på tillåtande, vilket i sin tur gör deras användare extremt mottagliga för säkerhetshot.

Vad är SELinux

SELinux, eller Säkerhetsförbättrad Linux, är en Linux-kärna-säkerhetsmodul speciellt utformad för åtkomst och hantering av säkerhetspolicyer. Ursprungligen introducerad i Android 4.3 Jelly Bean och inställd på dess Enforcing-läge som standard sedan Android 4.4 KitKat, SELinux hjälper till att upprätthålla åtkomstkontrollrättigheter och försöker förhindra privilegieskalering attacker. I ett nötskal, SELinux fungerar som ett hinder för obehörig kontroll över din enhet, till exempel en app eller sårbarhet som syftar till att få root-åtkomst med uppsåt. Att ställa in SELinux på "Enforcing" som standard är ett av de viktigaste sätten att normala användare skyddas från sådana attacker.

Varför Permissive SELinux rekommenderas inte

För att upprepa, det typiska sättet att uppnå root-åtkomst på en Android-enhet behöver inte nödvändigtvis ändra SELinux-statusen. Att byta SELinux-läge från "Enforcing" till "Permissive" inaktiverar avsiktligt en av de viktigaste säkerhetsfunktionerna på enheten, vilket är anledningen till Användaren måste uttryckligen tillåta det att hända genom att installera en specialiserad anpassad kärna eller ändra parametrarna för den befintliga startavbildningen. En dåligt kodad mod som saknar en ordentlig SELinux-policy tvingar vanligtvis slutanvändare att byta till tillåtande SELinux och utökar i huvudsak attackytan. Det är precis vad utvecklare vvb2060 visade när de publicerade en proof of concept privilegieupptrappningsmetod där det enda kravet för att få kontroll är tillåtande SELinux.

Gå in i Magica

För en användare att få full root-åtkomst på sin egen enhet som kör Android 10 (eller senare) med SELinux inställt på tillåtande är det chockerande lätt att gör: Allt du behöver göra är att trycka på installera så får "Magica" automatiskt root-åtkomst i en tjänst och installerar Magisk till boot bild. Det här är något mycket bredare än att bara justera din enhet. Enligt XDA Senior Recognized Developer och Magisk-underhållare topjohnwu, alla godtyckliga appar, inklusive skadlig programvara, kan rota din enhet permanent utan ditt samtycke och tillåtelse genom att använda PoC.

Om du undrar på en teknisk nivå vad Magica utnyttjar, förklarade topjohnwu följande i ett Reddit-inlägg:

"När SELinux är tillåtande under uppstart kommer zygote att veta detta och inaktivera seccomp syscall-filter. Detta frigör i princip vilka systemanrop som är tillåtna i tredje parts processer.

På Android 10+ finns det en ny "odokumenterad" funktion som heter "App Zygote" där tredjepartsappar tillåts skapa sin egen Zygote för "Isolated Services" (också nästan odokumenterade). Både "App Zygote" och "Isolated Services" är specialfunktioner designade för Chrome/Webview*. App Zygote-processer körs med speciella behörigheter, och med seccomp inaktiverat kan den anropa setuid 0 och eskalera sin behörighet och få root-åtkomst.

Det är fortfarande på något sätt restriktivt jämfört med vad vanliga root-lösningar ger (t.ex. Magisk), men massor av säkerhetsåtgärder i Android kommer att vara helt besegrade när UID=0. Det räcker till exempel att användas för att patcha startbilder, vilket innebär att det kan användas för att injicera skadlig programvara som modifierad Magisk för att hjälpa den att få "riktiga" root-behörigheter.

Uppdatering: vad kan UID=0 själv göra? Inom Androids ram har nästan alla tjänster ett blindt grönt ljus när den begärande processens UID är 0. Detta innebär att den här rotprocessen kan manipulera massor av saker med Android-specifika API: er (t.ex. ActivityManager)"

*Enligt utvecklare aviraxp, är dessa två funktioner mer allmänt utformade "för att dela resurser och minne mellan flera isolerade processer."

Slutsats

Med tanke på den irreparable skada som kan tillfogas användare som riktas mot skadlig programvara i en tillåtande SELinux-miljö, rekommenderar vi starkt att alla fortsätter att tillämpa det om det inte är absolut nödvändigt. Även om vi bara har tur som har ett proof of concept-exploat, har vi ingen aning om hur många skadlig programvara som författare redan känner till denna attackväg. När allt kommer omkring kommer ett offer att fortsätta att förbli omedveten om enhetens komprometterade tillstånd om de inte gjorde det bevittna att utnyttjandet används aktivt, vilket inte är svårt att uppnå för en oseriös app som har ihållande rot tillgång.