PSA: Vær forsiktig med å installere noe med SELinux satt til permissive

En udokumentert Android-funksjon lar enhver vilkårlig app få root-tilgang på et tillatt SELinux-miljø. Les videre for å vite mer!

I en verden av Android-modding har folk en tendens til å betrakte root-tilgang som hjørnesteinen i alle ting. Det lar brukere ta full kontroll over enhetene sine og legge til funksjoner som ikke alltid er tilgjengelige i lagerkonfigurasjonen. Men som de sier — «med stor makt kommer stort ansvar» — det er ikke lurt å omgå Androids sikkerhetsmodell med mindre du vet hva du går inn på. For veteran Android-entusiaster på forumene våre er du sannsynligvis klar over potensialet for bakdører på enheten din, og det er mer sannsynlig at du kjører en pålitelig root-aktivert mod på toppen av den nyeste Android-versjonen med den nyeste sikkerheten lapper. Når det er sagt, kjenner du kanskje noen mennesker som egentlig ikke bryr seg om hvilke root-justeringer de installerer så lenge de tilsynelatende fungerer for dem. Dette er grunnen til at du fortsatt kan finne en lastebil med mods som bare fungerer når SELinux er satt til permissive, som igjen gjør brukerne ekstremt utsatt for sikkerhetstrusler.

Hva er SELinux

SELinux, eller Sikkerhetsforbedret Linux, er en Linux-kjernesikkerhetsmodul spesielt utviklet for tilgang og administrasjon av sikkerhetspolicyer. Opprinnelig introdusert i Android 4.3 Jelly Bean og satt til håndhevingsmodus som standard siden Android 4.4 KitKat, SELinux hjelper til med å håndheve tilgangskontrollrettigheter og forsøk på å forhindre eskalering av privilegier angrep. I et nøtteskall fungerer SELinux som et hinder for uautorisert kontroll over enheten din, for eksempel en app eller sårbarhet som tar sikte på å få root-tilgang med ondsinnethet. Å sette SELinux til "Enforcing" som standard er en av nøkkelmåtene som normale brukere er beskyttet mot slike angrep.

Hvorfor Permissive SELinux anbefales ikke

For å gjenta, den typiske måten å oppnå root-tilgang på en Android-enhet trenger ikke nødvendigvis å endre SELinux-statusen. Å skifte SELinux-modus fra "Enforcing" til "Termissive" vil med vilje deaktivere en av de viktigste sikkerhetsfunksjonene på enheten, og det er derfor brukeren må eksplisitt tillate det å skje ved å installere en spesialisert tilpasset kjerne eller endre parametrene til det eksisterende oppstartsbildet. En dårlig kodet mod som mangler en skikkelig SELinux-policy tvinger vanligvis sluttbrukere til å gå over til tillate SELinux og utvider i det vesentlige angrepsoverflaten. Det er akkurat det utvikleren vvb2060 demonstrert når de publiserte en proof of concept-rettighetsopptrappingsmetode hvor det eneste kravet for å få kontroll er permissive SELinux.

Gå inn i Magica

For en bruker å få full root-tilgang på sin egen enhet som kjører Android 10 (eller høyere) med SELinux satt til permissive, er det sjokkerende enkelt å gjør: Alt du trenger å gjøre er å trykke installer, og "Magica" vil automatisk få root-tilgang i en tjeneste og installere Magisk til oppstarten bilde. Dette er noe langt bredere enn bare å justere enheten din. I følge XDA Senior Recognized Developer og Magisk vedlikeholder topjohnwu, enhver vilkårlig app, inkludert skadelig programvare, kan rote enheten din permanent uten ditt samtykke og tillatelse ved å bruke PoC.

Hvis du lurer på på et teknisk nivå hva Magica utnytter, forklarte topjohnwu følgende i et Reddit-innlegg:

"Når SELinux er tillatt under oppstart, vil zygote vite dette og deaktivere seccomp syscall-filtre. Dette frigjør i utgangspunktet hvilke systemanrop som er tillatt i tredjepartsprosesser.

På Android 10+ er det en ny «udokumentert» funksjon kalt «App Zygote» der tredjepartsapper får lov til å skape sin egen Zygote for «Isolated Services» (også nesten udokumentert). Både «App Zygote» og «Isolated Services» er spesialfunksjoner utviklet for Chrome/Webview*. App Zygote-prosesser kjøres med spesielle tillatelser, og med seccomp deaktivert kan den kalle setuid 0 og eskalere privilegiet og få root-tilgang.

Det er fortsatt på en eller annen måte begrensende sammenlignet med hva vanlige rotløsninger gir (f.eks. Magisk), men tonnevis av sikkerhetstiltak i Android vil bli fullstendig beseiret når UID=0. For eksempel er det nok å brukes til å lappe oppstartsbilder, noe som betyr at det kan brukes til å injisere skadelig programvare som modifisert Magisk for å hjelpe den med å få "ekte" root-tillatelser.

Oppdatering: hva kan UID=0 selv gjøre? Innenfor Androids rammeverk har nesten alle tjenester et blindt grønt lys når forespørselsprosessens UID er 0. Dette betyr at denne rotprosessen er i stand til å manipulere tonnevis av ting ved å bruke Android-spesifikke APIer (f.eks. ActivityManager)"

*I følge utvikler aviraxp, er disse to funksjonene mer generelt utformet "for å dele ressurser og minne mellom flere isolerte prosesser."

Konklusjon

Tatt i betraktning den uopprettelige skaden som kan påføres brukere som er målrettet av skadelig programvare i et tillatt SELinux-miljø, anbefaler vi sterkt at alle fortsetter å håndheve det med mindre det er absolutt nødvendig. Selv om vi bare er heldige som har en proof of concept-utnyttelse, aner vi ikke hvor mange skadevareforfattere som allerede vet om denne angrepsveien. Tross alt vil et offer fortsette å være uvitende om den kompromitterte tilstanden til enheten sin hvis de ikke gjorde det være vitne til at utnyttelsen blir brukt aktivt, noe som ikke er vanskelig å oppnå for en useriøs app som har vedvarende rot adgang.