Come già indicato da @Cube nel commento, alcuni (non tutti) telefoni Android consentono di sbloccare il bootloader per far lampeggiare kernel e firmware personalizzati sul dispositivo. Tuttavia, esiste un numero limitato di modelli che lo supportano poiché è destinato a ricercatori e sviluppatori. Inoltre, durante il processo di sblocco si perdono tutti i dati, quindi non è possibile utilizzarli per eseguire il flashing silenzioso di un sistema o kernel dannoso sul dispositivo di qualcuno senza che se ne accorga.
Ma in generale, il bootloader è bloccato, quindi questa è l'unica linea di difesa contro l'ottenimento di root: non consentire l'aggiornamento del software personalizzato. Come funzione sperimentale, Android ha recentemente introdotto anche dm-verity per rendere i rootkit persistenti ancora più difficili.
L'altro modo è utilizzare gli attacchi di escalation dei privilegi, il che significa che sfrutti attivamente una vulnerabilità in Android che ti consente di ottenere i privilegi di root. Ad esempio, alcuni servizi devono essere eseguiti come root, quindi se è possibile eseguire codice nel proprio contesto, si esegue il codice con i privilegi di root. Tuttavia, torniamo alla tua domanda sulle difese. Innanzitutto, i processi dell'app sono isolati da altri processi e dal middleware dal kernel. Più concretamente, Android (ab) usa la separazione utente di Linux assegnando ad ogni app un ID utente univoco. Quindi il kernel li isola nello stesso modo in cui gli utenti sono isolati sui sistemi Linux classici. Quindi i virus classici in cui altri programmi / app sono infetti semplicemente non sono possibili su Android se non ci sono vulnerabilità critiche a portata di mano. Inoltre, il middleware contiene molti punti di controllo di accesso in cui il chiamante viene controllato e verificato. Inoltre,
a partire da Android 4 Google ha iniziato a integrare SELinux in Android come il cosiddetto Security Extensions per Android, o SE per Android.
Qui viene aggiunto un controllo di accesso obbligatorio a grana fine per ridurre ulteriormente le possibilità di un attacco riuscito.
Quando si tratta di prevenire tipi speciali di attacchi, Android ha anche aggiunto il supporto per ASLR nelle versioni 4.x e lo ha esteso da allora. Ad esempio, su versioni più recenti di Android 5 i binari vengono caricati solo se vengono compilati come eseguibili indipendenti dalla posizione.
Quindi questo è un sottoinsieme di tutte le difese che Android fornisce contro gli attacchi in generale o gli exploit di root in particolare. Questo elenco non è completo, ma ti dà un'idea di cosa devono attaccare gli attaccanti e quanto gli sviluppatori di Android si interessano della sicurezza (che personalmente apprezzo molto).