美文网首页
Android安全三、移动平台安全机制

Android安全三、移动平台安全机制

作者: flynnny | 来源:发表于2020-10-17 00:13 被阅读0次

    一、签名和授权

    1、移动平台中的主流签名作用:自签名的完整性鉴别

    自签名:证书的签名者和证书拥有者是同一实体。
    自签名作用1:作为信任链的根证书。

    1.png

    自签名作用2:完整性鉴别。

    2、移动平台中的主流签名作用:信任模式

    不是自签名证书,采用信任模式。
    可信任:由不同runtime平台决定app是否可信任。
    如何鉴别可信任:通过签名,签名回溯(过期、颁发者位于系统可信任列表里)。
    权利差异:把特权操作给与可信任应用。比如发短信。

    3、移动平台中的主流签名作用:限制安装/运行

    应用安装时:
    是否包含签名?---》没有,矜持安装。
    提取证书进行验证---》证书是有效且可信任的吗?----》不是,禁止安装。
    基于证书的公钥对签名进行验证---》签名正确吗?---》不正确,禁止安装。

    应用运行时:
    是否包含签名?---》没有,禁止运行。
    提取证书进行验证---》证书是有效且可信任的吗?----》不是,禁止运行。
    基于证书的公钥对签名进行验证---》签名正确吗?---》不正确,禁止运行。

    4、权限的作用:细粒度的特权管理

    权限是一个ID或者一个字符串。
    权限用来细分权利(雷瑟Capability)。
    通常一个权限与一个操作绑定。
    权限首先要申请。
    申请后是否批准由平台策略决定。
    比如:读写SDCard、Reset手机

    5、权限的安全性保护:通过签名

    权限的完整性保护:防篡改
    例子(通过认证并获得签名后再加policy权限)

    权限的授权安全策略:防Escalate
    例子(普通应用申请Inject Event权限)需要手机厂家额私钥来签名才有某些特殊权限

    二、Android中的签名

    1、Android的签名作用:完整性鉴别

    支持自签名用于完整性鉴别(无法验证APK是否是可信任的)
    不做信任模式
    不做安装和运行时的限制

    2、Android的签名作用:Signature Permission和ShareUID

    Signature Permission Level Permission
    用于特权Permission
    只有特定签名的Apk才被授权

    2.png

    Share Process UID
    android:shareUserID="xxx(随便起)"
    Process间Share UID的目的是共享资源等
    Android 中两个Apk Share相同的UID必须其签名所用的Private Key一样。

    3、Android的签名作用:身份ID 和升级的匹配

    安卓中的自签名只是代表了身份,但不代表身份是否可信任。

    Android的应用的Identifier是Package Name:
    PAckage Name 不一样,相互不影响,允许同时存在(安装);
    Package Name一样,只能存在一个,允许做升级处理。

    升级的安全性考虑:
    必须签名的证书一致(防假冒。防侵入隐私);
    如果不一致,则哦用户要么放弃新的应用,要么卸载旧的,再安装新的,但这属于安装,不属于升级;
    正常的升级将不擦除应用的工作目录数据,以保证历史数据的持续性。

    4、Android APK 之META INF

    APK 结构:

    3.png

    META INF组成:

    4.png

    签名流程:
    java -jar signapk.jar testkey.x509.pem testkey.pk8 update.apk update-signed.apk

    MANIFEST.MF

    5.png

    CERT.SF
    对MANIFEST.MF加密

    6.png

    CERT.RSA

    7.png

    包含证书信息以及基于私钥的签名信息(CERT.SF)

    三、Android中的权限一

    1、Android的签名作用:细粒度特权管理

    应用需要显示申请权限
    用户对权限可知(不可控)
    对特权权限单独控制

    2、Android的不同权限类别

    Normal(默认)、Dangerous(有提醒)、Signature(自己用)、SignatureOrSystem(系统也可以用)

    3、Android的权限定义方式

    定义在AndroidManifest.xml中:

    8.png

    4、Android的平台权限定义

    在 frameworks/base/core/res/AndroidManifest.xml

    9.png

    四、Android中的权限二

    1、Android 的运行时权限控制方式:通过PM的CheckPermission

    Android独有的Service(底层平台Linux不具有)。所以需要在Android本身Framework中控制。
    主流的Servide一般都基于Binder IPC或者其他IPC提供服务。
    所以在最底层控制(Service所在的Service中)以避免逃逸控制。(绕开Utility Function 直接Invoke Remote Servide)

    2、Android 的运行时权限控制方式:映射为OS的特定属性

    非Androi特有的Service(底层平台已经提供,如FIle访问,TCPIP数据收发等)有多个访问入口访问:Android API ,JAVA API,NDK C API,Shell,etc。
    底层控制准则,汇聚口在底层,所以在底层(OS层面)同一控制。这样可以避免逃逸控制。
    所以复用OS的一些安全控制特性,比如GID。
    所以需要把Android空间的Permission Mapping到OS的GID。

    例子 访问SDCard(把权限mapping到os)

    10.png

    3、Android的permission与UID/GID的mapping

    11.png 12.png

    五、Android中的组件安全机制

    1、Android的4大组件及组件间的通信

    Android是基于组件的复用,组件间的边界透明。
    组件间基于Intent通信。

    2、组件的Public和Private

    概念:public 系统里的其他组件都能和我通信;Private对完不可见,只能被当前组件所在的同一个进程访问,或者被Share同一个UID的访问。
    由andorid:exported字段控制Public和Private。
    Exported的default值:如果没有定义intent-filter则为false。即private。
    Override default值:如果定义了intent-filter,也想exported=false也是可以的(相反也是同理可以的)

    3、组件的Permission Assignment(组件间也不是随便就能通信的)

    Securing Activities:(比如不想让别人启动activity,就定义一个permission)

    13.png

    必须有START_ACTIVITY1 Permission才能启动。

    Securing Service(start or bind)(同理):

    14.png

    只能控制start or bind

    Securing ContentProvider:

    15.png

    Securing BroadcastReceiver:

    16.png

    六、android 中的应用安装(跟安全有关的)

    1、应用安装的安全性考虑和调用方式

    应用安装是一个高特权/风险操作,所以必须可知/可控。
    主流实现方式:客户只能委派而不能直接操作。
    调用安装传统模式:返送Intent给系统的Package Install app。
    特权安装模式:系统的Package Install App内部会调用PackageManagerService的Install Package,该操作与android.permission.INSTALL_PACKAGES绑定,且该permission的protection level是signature|system

    所谓的静默安装方式只存在ROOT手机上,开发者可以选择:基于pm cmd:pm install -r

    17.png

    2、应用安装流程之UID/GID的分配

    18.png 19.png 20.png

    3、应用安装流程之工作目录的创建和权限设置

    21.png 22.png 23.png 24.png

    七、Android中系统Service的安全

    1、Binder的安全

    Binder的作用:实现以IPC的RPC,完成远程业务范围。
    Binder的CheckCallingUid

    1.png 2.png

    2、ServiceManager Add Service 的安全限制

    Service Manager Process的作用:Naming Resolver,用于RPC框架中:AddService、GetService。
    Add Service的安全限制:

    3.png 4.png

    3、Zygote的Process Fork

    启动ApK流程:

    5.png

    进入SystemService,因为是第一个,所以需要创建一个Process:

    6.png

    Zygote 中进程执行:

    7.png 8.png

    4、Zygote的Socket安全检查

    八、Android中的ContentProvider以及基于URI的安全

    1、ContentProvider的作用:软件设计更加优美

    屏蔽内部数据存储操作的差异性
    对外提供一致的数据操作方式
    抽象/共性===》都是数据操作

    2、ContentProvider的作用:进程间数据共享

    9.png

    ContentProvider是运行在Service Process中的。通过Proxy和Binder调用ContentProvider

    3、权限临时继承的需求

    场景:用PDF Viewwe打开Email。
    解决方式:临时委派使得委托者的权限临时提升(类似Root-setUID
    模式)

    4、配置ContentProvider允许临时委派权限

    ContentProvider内部

    10.png

    5、基于URI的权限临时委派:基于API

    在当前Client中:

    11.png

    6、基于URI的权限临时委派:基于Intent

    12.png

    九、Android的policy模式和多设备绑定

    1、Android的Policy模式

    安装时提问:

    13.png

    有以下特点:

    14.png

    2、MR2开始的AppOps

    RunTime Permission Control:可知可控

    15.png 16.png

    3、AppOps对开发者的影响

    17.png

    4、应用于设备绑定的需求背景

    计费应用下载:防导出运行

    5、设备绑定

    18.png

    6、跨设备使用

    19.png

    十、应用内计费和App TO SDCard

    1、什么事应用内计费

    直接在应用内进行Payment以unLock某些功能,或者购买某些道具。

    2、应用内计费的需求

    可支付途径(信用卡,手机卡等)
    安全性 :面向用户 可知、可控
    安全性:面向应用 可信(避免免费使用收费内容)

    3、解决方案

    20.png

    4、Google IAP框图

    21.png 22.png

    5、SD卡上安装应用的安全策略:绑定设备

    23.png 24.png 25.png 26.png

    6、SD卡上安装应用的安全策略:ASEC的不可访问性

    27.png 28.png

    十二、Android中的多用户安全

    1、需求场景

    Android中与Windows/Linux区别:
    UID/GID不跟着User走;
    UID/GID和User的区分和绑定。

    应用的可控共享:
    共享,不存在多份的Code;
    可控,控制谁可见。

    数据的多用户独立:
    工作目录;
    External Storage。

    2、UserManagerService

    作用 :
    管理User的属性信息:设置/获取用户的UserID,Name,Icon,RestrictProfile等;
    管理User:创建,删除等。

    29.png

    3、跟图学习

    30.png 31.png 32.png 33.png 34.png 35.png

    4、对开发者的影响

    36.png

    十三、Android SuperUser机制讲解

    1、ROOT的作用

    Customization
    任何需要特权的操作

    2、ROOT的第一步:寻找漏洞并安装特权文件

    37.png

    3、SU的sUID特性

    38.png

    Android 中的App授权获取Root权限,其实不是App自身的权限提升了,而是通过具有Root权限的sh流来执行shell命令。

    4、MR2后的方案: SU Daemon Service

    39.png 40.png

    十四、SEAndroid

    1、DAC和MAC

    41.png

    2、基于Label的MAC

    42.png 43.png

    3、运行框图(混合模式)

    44.png

    4、Apache的例子(Legacy and SELinux)

    45.png 46.png

    5、推荐读物

    47.png

    6、Permissive和Enforcement

    48.png 49.png

    7、SEPolicy文件结构

    50.png 51.png

    相关文章

      网友评论

          本文标题:Android安全三、移动平台安全机制

          本文链接:https://www.haomeiwen.com/subject/nhbipktx.html