Android Security Model
2015-11-07 12:16
661 查看
前言
Android security model 基于:Linux 基于用户的保护 Linux user-based protection
保证APP对系统中其他进程的绝缘,APP不应该被其他APP或者进程直接读写数据或内存
root 和系统进程是最常受到恶意攻击,所以保持最小数量的root和系统进程对于安全设备是至关重要的
APK签名 APK Signing
用户权限 User Permissions
UID 和 GID
UID(User IDs)
每一个安装在系统的程序和资源都会获取一个UID,例如“u0_a15”默认时,进程只能够访问同一个UID下的资源。也就是说,android为UID下的资源启动保护机制,禁止不同UID的进程访问
每一个APP都是在自己的sandbox中执行
UID 在android framework定义如下:
root:0
system:1000
reserved for system use: >1000 and <10000
Users applications (u0_a*): >= 10000
更多信息在
system/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是一个包含一个或者多个user的唯一标示Android用UID和GID为资源分配不同的特权,比如SD card、network。UID和GID映射在Linux权限下
默认时,系统为APP生成UID,你也可以在AndroidManifest.xml中指定
如果两个进程想要同一个UID,他们必须用同一个证书进行签名。
举例:system UID是1000,如果APP想使用这个UID,APP必须用platform签名并且设置UID
android:sharedUserId="android.id.system"
每一个用户至少是一个group的一员,默认时,GID和UID一样。一个用户也可能被列在多个group里。
当APP请求具有GID保护的权限时,APP将被加入到相应的group中。
以下文件的那个一了所有和Linux group相关的权限。
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
启动APP的时候检查log如果APP想要运行是查询GID,使用:
mContext.getPackageManger().getPackageGids("PACKAGE_NAME");
每一个GID都和一个特权相关,比如1006是Camera, 3003 network socket
APK signing
Android用signing作为一个作者标示的方式,并且在APP之间建立信任关系signing并不等同加密,也并没有加密任何东西
证书是为了标示APP的作者
举例来说,证书分为:platform,shared, media
可以在Android.mk中定义sign的证书
LOCAL_PACKAGE_NAME := Bluetooth LOCAL_CERTIFICATE := platform
所有的APP都必须经过证书signing。没有signing的APP是不能被安装的。
用SDK开发的时候,APP会被会SDK编译工具signing,用的是SDK build tools生成的debug key。这样signing的APP是没有办法发布的
生成自己的额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
如果APP没有在Android.mk中定义 LOCAL_CERTIFICATE :=, 那么默认会被releasekey sign
Use Permission
如果一个APP想要使用系统特权,需要在AndroidManifest.xml中声明权限APP 没有申请资源,访问受限的西苑会又SecurityException
Protection Level
相关文章推荐
- Android SDK Manager
- 使用html写一个android关于界面,事情原来可以如此简单
- 【Android】Fragment真正意义上的onResume和onPause
- Android内的生命周期整理
- Android数据库(八)之使用LitePal聚合函数
- Eclipse Android项目 为控件添加了Id,但是在Java代码中提示xxx cannot be resolved or is not a field
- Android数据库(七)之LitePal查询艺术
- Android Studio创建项目
- Android数据库(六)之LitePal的修改和删除
- Android数据库(五)之LitePal的存储操作
- Android数据库(四)之使用LitePal建立关联表
- Android的Style的使用
- Android数据库(三)之使用LitePal升级表
- Android之自定义标题
- Android数据库(二)之创建表和LitePal的基本用法
- Android数据库(一)之SQLite命令
- Android应用性能优化实践
- 【Android实战】播放assets或者raw文件夹下的视频文件
- AndroidSweetSheet
- 这里列出Android Studio的所有版本,最新的是1.5 Beta。