web-dev-qa-db-ja.com

Android SuperUserアプリは、アプリがrootを要求していることをどのように検出しますか?

suを使用してLinuxカーネルでいくつかのコマンドを実行するアプリを書いています。アプリケーションがroot権限を要求していることをSuperUserがどのように把握するのか疑問に思いましたか?また、このチェックをバイパスできる既知の方法(難読化による)はありますか?

言い換えると、Android /(SuperUser)は、Androidマニフェストファイルで明示的に要求された権限がないにもかかわらず、アプリにroot権限が必要であることをどのように認識しますか。

私はセキュリティの観点からこの質問をしています。悪意のあるアプリがSuperUserをバイパスできないようにするために、これがどのように機能するかについて詳しく知りたいです。

15
asudhak

スーパーユーザーシステムには、 スーパーユーザーバイナリ (端末のsu)と SuperUser.apk (suを使用してアプリを管理するAndroidアプリ)の2つの部分があります。 su binary のソースコードを見て、suアクセスをリクエストするとき

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

Androidメッセージングマネージャーを介して、アプリケーションがスーパーユーザーアクセスを要求したインテントを公開します。

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);  

マネージャーアプリはこのインテントをリッスンし、ユーザーにリクエストの処理(許可/拒否)を要求します。

18
Checksum

これを実行すると:

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

スーパーユーザー権限を持つアプリのみが実行できる「su」を実行しようとしています。したがって、Androidが「su」を実行しようとしていることを検出すると、アプリにスーパーユーザー権限が必要になることがわかります。

また、Androidには、Androidシステムのみがアクセスできる領域が予約されています。アプリがそこで何かにアクセスしようとしている場合、Androidはスーパーユーザーが必要であることを理解します。

たとえば、ホストファイルを変更しようとしている、またはDHCPなどのネットワーク構成を変更しようとしているとします。または、システム領域からファイルにアクセスしようとしています。 /data Androidは、アプリにスーパーユーザー権限があるかどうかを確認し、そのようなものへのアクセスのみを許可します。

悪意のあるソフトウェアについては、アプリがスーパーユーザーアクセスを必要とするときはいつでも、システムはユーザーにアプリへのスーパーユーザー権限を付与または拒否するように促します。そうして初めて、アプリはルートアクセスを取得できます。したがって、アプリのルートアクセスを受け入れるか拒否するかは、ユーザーが決定します。 (システムはユーザーに毎回プロンプトを表示しますアプリはrootアクセスが必要なものにアクセスしようとしています[〜#〜 ] [〜#〜]特定のアプリの承認または拒否の選択を記憶するようにシステムに指示しない限り。)

PS:チェックアウトを検討するかもしれません スーパーユーザーアプリのウェブサイト

15
Suraj Bajaj

実際、それは非常に簡単です。 Vanilla Androidにはsuまたはsuperuserさえありません。デバイスをroot化するときは、rootとしてシェルを実行します。次にsuバイナリとsuperuser.apk。インストール後、シェルを通常の権限に戻します。これらのルート専用アプリはすべて、suを呼び出してルートアクセスを要求できるようになりました。

suが実行されると、superuser.apkが呼び出され、特権を昇格するかどうかを尋ねるメッセージが表示されます。 suバイナリとsuperuser.apkは、Androidの通常のサンドボックス化によって保護されています。アプリにroot権限を付与すると、suを独自のバージョンで上書きするなど、アプリがやりたいことを自由に実行できることに注意してください。

6
Amaron