2012-10-30 13 views
14

Sto scrivendo un'app che userà su per eseguire alcuni comandi nel kernel di Linux. Mi stavo chiedendo come SuperUser capisca che l'applicazione sta chiedendo i privilegi di root? Inoltre, ci sono modi noti (attraverso l'offuscamento) in cui questo controllo può essere aggirato?In che modo l'app SuperUser di Android rileva che un'app richiede root?

In altre parole: In che modo Android/(SuperUser) sa che un'app richiede i privilegi di root nonostante il fatto che non ci siano autorizzazioni esplicitamente richieste nel file manifest di Android.

Sto ponendo questa domanda da un punto di vista della sicurezza. Voglio sapere i dettagli di come funziona per essere sicuro che un'app dannosa non possa ignorare SuperUser.

risposta

14

quando si esegue questo:

Process p = Runtime.getRuntime().exec("su"); 

Si sta tentando di eseguire "su", che solo un app con le autorizzazioni di superutente può fare! Quindi, ogni volta che Android rileva che stai tentando di eseguire "su", l'app avrà bisogno di autorizzazioni di superutente.

Inoltre, Android ha un'area riservata a cui può accedere solo il sistema Android. Se la tua app sta tentando di accedere a qualcosa, Android capirà che è necessario un superutente.

Ad esempio, supponiamo di voler modificare il file host o modificare alcune configurazioni di rete come DHCP. Oppure stai tentando di accedere ai file dall'area di sistema, ad es. /data Android controllerà se l'app ha i permessi di superutente e solo allora gli garantirà l'accesso a tali cose.

Informazioni su software dannoso, ogni volta che un'applicazione richiede l'accesso come superutente, il sistema richiederà all'utente di concedere o negare le autorizzazioni di superutente all'app. Solo allora l'app può ottenere l'accesso come root. Quindi spetta all'utente decidere se accettare o negare l'accesso root per qualsiasi app. (Sistema chiederà all'utente ogni volta un app sta tentando di accedere a qualcosa che ha bisogno di un accesso root, MENO dite sistema per ricordare la vostra scelta di accettazione o il rifiuto per una particolare applicazione.)

PS: Si potrebbe considerare check-out website for Superuser app.

+1

+1 bella spiegazione –

+2

e come/perché il Superuser' applicazione 'agire solo come fornitore ** ** Su diritti? Cosa lo rende responsabile? – waqaslam

+0

@Waqas Questo potrebbe rispondere alla tua domanda http://androidsu.com/superuser/ semplicemente esplorare il sito. Aggiornerò il link nella risposta. Potrebbe essere utile per gli altri. :) –

6

In realtà è piuttosto semplice. Vanilla Android non ha nemmeno su o superuser. Quando esegui il root del dispositivo, esegui una shell come root. Quindi si installa il binario su e superuser.apk. Dopo l'installazione, la shell torna alle normali autorizzazioni. Tutte queste app di root solo ora possono chiamare su per chiedere l'accesso come root.

Quando viene eseguito su, chiama superuser.apk con un messaggio che chiede se si desidera elevare i privilegi. Il binario su e superuser.apk sono protetti tramite il normale sandboxing di Android. Si noti che una volta concessi i privilegi di root di un'app è libero di fare tutto ciò che desidera, inclusa la sovrascrittura di su con la propria versione.

17

Ci sono due parti nel sistema di superutente: lo superuser binary (su sul terminale) e lo SuperUser.apk (app Android per gestire le app utilizzando su).Guardando il codice sorgente del su binary, quando si richiede l'accesso do attraverso

Process p = Runtime.getRuntime().exec("su"); 

pubblica un intento tramite il gestore di messaggistica per android che un'applicazione ha richiesto per l'accesso superutente.

sprintf(command, "/system/bin/am broadcast -a '%s' --es socket '%s' --ei caller_uid '%d' --ei allow '%d' --ei version_code '%d' > /dev/null",action, socket_path, ctx->from.uid, allow, VERSION_CODE); 

il gestore approssimativo in ascolto per questo intento e chiede all'utente di gestire la richiesta (allow/deny).

+0

Secondo la tua spiegazione, sembra che 'su' trasmetta un messaggio che chiede a Superuser.apk di dire se dovrebbe consentire l'accesso root o meno. Quindi mi chiedo, cosa impedisce a un'altra app di rispondere a quella richiesta invece di Superuser.apk? (che sarebbe un'enorme vulnerabilità se fosse possibile, quindi suppongo che non lo sia, solo curiosità) Inoltre, quale protezione esiste per impedire a un'app di richiedere root con un nome falso? (Vale a dire la richiesta malicious.apk radice sotto il nome di awesome-radice-solo-app.apk per ingannare l'utente a dare accesso) – youen