Android Security Model
4829 ワード
前言
Android security modelベース:
UIDとGID
UID(User IDs)
UIDはandroid frameworkで以下のように定義されています.
#define AID_ROOT 0 /* traditional unix root user */
#define AID_SYSTEM 1000 /* system server */
#define AID_RADIO 1001 /* telephony subsystem, RIL */
...
#define AID_APP 10000 /* first app user */
...
static const struct android_id_info android_ids[] = {
{ "root", AID_ROOT, },
{ "system", AID_SYSTEM, },
{ "radio", AID_RADIO, },
GID
GIDは1つまたは複数のuserを含む一意の表示である
Androidは、SD card、networkなど、UIDとGIDでリソースに異なる特権を割り当てます.UIDとGIDマッピングがLinux権限の下でデフォルトである場合、システムはAPPのためにUIDを生成し、Android Manifestでも使用できます.xmlでは、2つのプロセスが同じUIDを望む場合、同じ証明書で署名する必要があることを指定します.例:system UIDは1000で、APPがこのUIDを使用する場合、APPはplatformで署名し、UIDを設定する必要があります.
android:sharedUserId="android.id.system"
各ユーザは少なくとも1つのグループの一員であり、デフォルトではGIDとUIDは同じである.1人のユーザも複数のグループにリストされる可能性があります.アプリがGID保護の権限を要求すると、対応するグループにアプリが追加されます.以下のファイルのそれはLinuxグループに関連するすべての権限を持っています.framework/base/data/etc/platform.xml
<permission name="android.permission.BLUETOOTH_ADMIN" >
<group gid="net_bt_admin" />
permission>
<permission name="android.permission.BLUETOOTH" >
<group gid="net_bt" />
permission>
プロセスのUID、GIDの検索方法
アプリを起動する時にlogをチェックします.もしアプリが実行したいならGIDを検索して、使用します.
mContext.getPackageManger().getPackageGids("PACKAGE_NAME");
各GIDは、1006がCamera、3003 network socketなどの特権に関連しています.
APK signing
Androidはsigningを著者として表示する方式であり、アプリ間で信頼関係を確立するsigningは暗号化に等しくなく、証明書を暗号化していないのはアプリを表示するための著者の例であり、証明書にはplatform,shared,mediaがAndroid.mkでsignを定義する証明書
LOCAL_PACKAGE_NAME := Bluetooth
LOCAL_CERTIFICATE := platform
すべてのアプリは証明書signingを経なければなりません.signingのアプリがないとインストールできません.SDKで開発する際には、SDKコンパイルツールsigningとしてSDKビルドtoolsで生成されたdebug keyを使用します.このようなsigningのアプリは、自分の額keyを生成することができず、signメソッド1:key tool+jarsigner(available in JDK)メソッド2:openssl+signapk
証明書
証明書はすべて「/build/target/product/security」プライベート証明書のタイプplatform-a key for packages that are part of the core platform shared-a key for things that are shared in the home/contacts process media-a key for packages that are part of the media/download system releasekey(testacy)-a generic key for packages that do noe otherwise specify a key release key商業用ROM、testacy debug ROMアプリがAndroidにない場合mkでLOCAL_を定義するCERTIFICATE:=、デフォルトはreleasekey sign
Use Permission
アプリがシステム特権を使用するにはAndroid Manifestが必要です.xmlで権限APPがリソースを申請していないことを宣言し、アクセスが制限されている西苑はまたSecurityException Protection Level