Android Security Model

4829 ワード

前言


Android security modelベース:
  • Linuxユーザーの保護Linux user-based protectionに基づく
  • APPはシステム内の他のプロセスに対する絶縁を保証し、APPは他のAPPまたはプロセスによって直接データまたはメモリ
  • を読み書きされるべきではない.
  • rootとシステムプロセスは最も悪意のある攻撃を受けることが多いため、最小数のrootとシステムプロセスを維持することはセキュリティデバイスにとって極めて重要な
  • である.
  • APK署名APK Signing
  • ユーザー権限User Permissions
  • UIDとGID


    UID(User IDs)

  • システムにインストールされているプログラムおよびリソースごとに、「u 0_a 15」などのUIDが取得される
  • デフォルトでは、プロセスは同じUIDの下のリソースにのみアクセスできます.すなわち、androidは、UID下のリソースの保護メカニズムを起動する、異なるUIDのプロセスアクセスを禁止する
  • である.
  • 各APPは、自分のsandboxで
  • を実行します.

    UIDはandroid frameworkで以下のように定義されています.
  • root:0
  • system:1000
  • reserved for system use: >1000 and <10000
  • Usersアプリケーション(u 0_a*):>=10000詳細システム/core/include/private/android_filesystem_config.h
  • #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