PSA: fai attenzione a installare qualsiasi cosa con SELinux impostato su permissivo

Una funzionalità Android non documentata consente a qualsiasi app arbitraria di ottenere l'accesso root su un ambiente SELinux permissivo. Continua a leggere per saperne di più!

Nel mondo del modding Android, le persone tendono a considerare l'accesso root come la pietra angolare di tutte le cose. Consente agli utenti di assumere il controllo completo dei propri dispositivi e aggiungere funzionalità che non sono sempre disponibili nella configurazione di serie. Ma come si suol dire - "da un grande potere derivano grandi responsabilità" - non è saggio aggirare il modello di sicurezza di Android a meno che tu non sappia in cosa ti stai cacciando. Gli appassionati veterani di Android sui nostri forum probabilmente sono a conoscenza della potenziale esistenza di backdoor sul proprio dispositivo e è più probabile che tu stia eseguendo una mod affidabile abilitata per root sopra l'ultima versione di Android con la sicurezza più recente cerotti. Detto questo, potresti conoscere alcune persone a cui non interessa davvero quali modifiche root installano purché apparentemente funzionino per loro. Questo è il motivo per cui puoi ancora trovare un sacco di mod che funzionano solo quando SELinux è impostato su permissivo, il che, a sua volta, lascia gli utenti estremamente suscettibili alle minacce alla sicurezza.

Cos'è SELinux

SELinux o Linux con sicurezza avanzata, è un modulo di sicurezza del kernel Linux specificatamente progettato per l'accesso e la gestione delle policy di sicurezza. Introdotto originariamente in Android 4.3 Jelly Bean e impostato sulla modalità Enforcing come predefinita a partire da Android 4.4 KitKat, SELinux aiuta a far rispettare i diritti di controllo degli accessi e tenta di prevenire l'escalation dei privilegi attacchi. In poche parole, SELinux funge da ostacolo per il controllo non autorizzato sul tuo dispositivo, come un'app o una vulnerabilità che mira a ottenere l'accesso root in modo dannoso. Impostare SELinux su "Enforcing" per impostazione predefinita è uno dei modi principali con cui gli utenti normali sono protetti da tali attacchi.

Perché SELinux permissivo non è raccomandato

Per ribadire, il modo tipico per ottenere l'accesso root su un dispositivo Android non richiede necessariamente la modifica dello stato di SELinux. Passare alla modalità SELinux da "Enforcing" a "Permissive" disabilita intenzionalmente una delle principali funzionalità di sicurezza del dispositivo, motivo per cui l'utente deve consentire esplicitamente che ciò accada installando un kernel personalizzato specializzato o modificando i parametri dell'immagine di avvio esistente. Una mod mal codificata e priva di una politica SELinux adeguata di solito costringe gli utenti finali a passare a SELinux permissivo e sostanzialmente espande la superficie di attacco. Questo è esattamente ciò che sviluppatore vvb2060 dimostrato quando loro ha pubblicato un metodo di escalation dei privilegi proof of concept dove l'unico requisito per ottenere il controllo è SELinux permissivo.

Entra nella Magica

Per un utente ottenere l'accesso root completo sul proprio dispositivo con Android 10 (o versioni successive) con SELinux impostato su permissivo è incredibilmente facile fare: Tutto quello che devi fare è premere Installa e "Magica" otterrà automaticamente l'accesso root in un servizio e installerà Magisk all'avvio Immagine. Questo è qualcosa di molto più ampio della semplice modifica del tuo dispositivo. Secondo XDA Senior Recognized Developer e manutentore di Magisk topjohnwu, qualsiasi app arbitraria, incluso malware, può eseguire il root permanente del tuo dispositivo senza il tuo consenso e permesso utilizzando il PoC.

Se ti stai chiedendo a livello tecnico cosa sta sfruttando Magica, topjohnwu ha spiegato quanto segue in un post su Reddit:

"Quando SELinux è permissivo durante l'avvio, zygote lo saprà e disabiliterà i filtri syscall seccomp. Ciò sostanzialmente non limita le chiamate di sistema consentite nei processi di terze parti.

Su Android 10+, è presente una nuova funzionalità "non documentata" chiamata "App Zygote" in cui le app di terze parti possono generare il proprio Zygote per "Servizi isolati" (anch'essi quasi non documentati). Sia "App Zygote" che "Servizi isolati" sono funzionalità speciali progettate per Chrome/Webview*. I processi dell'app Zygote vengono eseguiti con autorizzazioni speciali e, con seccomp disabilitato, può chiamare setuid 0 e aumentare i propri privilegi e ottenere l'accesso root.

È ancora in qualche modo restrittivo rispetto a ciò che forniscono le normali soluzioni root (ad esempio Magisk), tuttavia tonnellate di misure di sicurezza in Android verranno completamente annullate quando UID = 0. Ad esempio, è sufficiente utilizzarlo per applicare patch alle immagini di avvio, il che significa che può essere utilizzato per iniettare malware come Magisk modificato per aiutarlo a ottenere permessi di root "reali".

Aggiornamento: cosa può fare lo stesso UID=0? Nell'ambito di Android, quasi tutti i servizi hanno il semaforo verde cieco quando l'UID del processo richiedente è 0. Ciò significa che questo processo root è in grado di manipolare tonnellate di cose utilizzando API specifiche di Android (ad esempio ActivityManager)"

*Secondo lo sviluppatore aviraxp, queste due funzionalità sono più generalmente progettate "per condividere risorse e memoria tra più processi isolati".

Conclusione

Considerando il danno irreparabile che può essere inflitto agli utenti presi di mira dal malware in un ambiente SELinux permissivo, suggeriamo vivamente a tutti di continuare ad applicarlo a meno che non sia assolutamente necessario. Anche se siamo semplicemente fortunati ad avere un exploit proof of concept, non abbiamo idea di quanti autori di malware siano già a conoscenza di questo percorso di attacco. Dopotutto, se non lo facesse, la vittima continuerà a rimanere ignara dello stato compromesso del proprio dispositivo testimoniare l'utilizzo attivo dell'exploit, cosa non difficile da ottenere per un'app non autorizzata con root persistente accesso.