Android 隐私保护系统的设计与实现
2019-03-13杨中皇
杨中皇, 赵 月, 郑 东
(1.西安邮电大学 无线网络安全技术国家工程实验室, 陕西 西安 710121;2. 高雄师范大学 软件工程与管理学系,台湾 高雄 82444)
随着移动技术的快速发展,移动设备已经成为人们生活工作中必不可少的组成部分[1]。Android设备因其系统开源性和兼容性等特点已成为最受欢迎的操作系统之一[2]。根据eMarKete统计数据显示[3],2017年Android操作系统的市场份额达到86%。随着Android设备计算能力和存储容量的提高,移动办公[4]也已经成为企业办公的趋势。但是,Android 操作系统常会因用户使用不当而产生系统漏洞,导致系统不安全[5]。为了提供完整的定制化和个性化服务,应用程序必须完全接受权限要求才能被安装。例如,要求用户赋予应用位置、联系人、通话记录、读取与写入SD 卡等权限[6]。因此,任意获取权限不但让恶意应用程序有机可趁,也让用户的隐私暴露于风险当中。
目前,针对Android系统组态设置不当造成的系统漏洞和应用程序后台行为监控等问题,已有的移动设备隐私保护主要采用对网络访问以及内存卡读写设置权限方法,对特定权限对应的监控行为内容较少,不能满足日益增多的权限漏洞检测,而多数移动设备安全漏洞的产生是由于使用设备不当导致的[7]。因此,管理和修正错误的状态设置,监控应用程序后台活动,消除因其产生的系统漏洞,降低恶意攻击者窃取隐私资料的风险显得尤为重要[8]。
本文拟设计一种基于Android 的移动设备隐私保护系统。通过应用程序接口(application programming interface,API)管理移动设备组态,减少产生的系统漏洞。调用Intent和logcat获取移应用程序的后台活动,对设备进行监控,并且通过Package Manager[9]获取应用程序的权限内容并进行检测,以期降低恶意攻击者窃取隐私资料的风险,从而提高设备的安全性。
1 基础原理概述
1.1 Android 系统构架
Android 系统架构[10-12]主要包括Linux内核层、系统库层、应用程序框架层和应用程序层,如图1 所示。
图1 Android系统架构
Linux内核为底层管理,包括驱动管理、硬件驱动和安全管理等。在安全方面,Linux内核为Android 提供简单的安全模型,可进行安全的进程间通信和进程隔离,减小了受攻击的范围。在内核中,应用程序独立运行,没有读取其他应用和系统资源的权限。通过内核编译ANDROID_PARANOID_NETWORK,可实现调用进程的群组ID对蓝牙和网络模块的限制性访问。
系统库层主要使用C/C++语言实现,并对系统硬件进行代码优化。Android 应用可通过调用本地接口(java native interface,JNI) 实现系统库提供的函数功能,如安全套接层(secure sockets layer,SSL)和SQLite数据库等。
应用程序框架层提供了管理服务组件,主要包括内容管理器、位置管理器、消息管理器和活动管理器等。其主要功能是为 Android 开发提供API,已经封装好的API有众多系统功能,通过对API的合理调用,且不需要弄清楚Android中的全部代码,就可以开发个性化的Android应用程序。
应用程序层主要包括电话、短信和日历等系统应用程序和微信、微博及娱乐软件等第三方应用程序,所有应用程序都在独自的沙箱内运行,未被授权相互之间不能进行访问。
1.2 Android 权限机制
在Android应用开发中,通过AndroidManifest.xml文件中的
一般权限由系统自动授予,说明应用程序访问系统时本身风险较低。
危险权限以某些方式控制设备或者允许访问数据,获取隐私资料和设置重要数据,具有较高风险,安装应用时需要经过同意。
签名权限只能赋予声明权限使用相同密钥签名的应用程序,需要持有开发者管理的签名密钥,而密钥是由应用程序或平台的所有者控制。
签名或系统权限可被赋予系统镜像的部分应用,或与声明权限具有相同密钥的应用程序,允许设备制造商在没有共享签名密钥的情况下,能够预先安装应用共享所需的权限特定功能。在Android 4.4系统之后,只有安装在 /system/priv-app/ 目录下的应用才能赋予 signatureOrSystem 级别的权限。
1.3 Android 安全组态标准
Android 安全组态标准由网络安全中心 (center for internet security,CIS)[14]提出,规定了Android系统中的组态设置在何种状态下较为安全,如设备设置锁屏、禁用相机等。根据Android 安全组态标准设定Android 系统组态,可提升设备的安全性。Android 系统组态的安全设置如表1所示。
表1 Android 系统组态的安全设置项目与内容
2 隐私保护系统架构与设计
2.1 系统架构
基于Android的隐私保护系统主要由权限分析、应用监控、组态设定和风险评估等4部分组成。通过Package Manager提供的相关API分析每个应用程序所定义的权限内容,将权限内容解析分类,分析其风险系数;利用Intent工具获取应用程序的后台活动,通过应用监控了解设备隐私状态及安全动态;根据软体开发套件(software development kit,SDK)提供的相关API,设定系统重要组件,管理移动设备组态;对设备所有应用的权限及组态进行整体风险评估,及时更改系统相关功能设置,保护设备信息及用户隐私资料。系统架构如图2 所示。
图2 系统架构
2.2 系统设计与实现
系统由Java语言和SDK搭配Logger 机制设计而成,可直接运行于8.0 版本以上的Android应用程序安装包(android application package,APK)。开发与测试环境如表2所示。
表2 系统开发与测试环境
2.2.1 权限分析
应用程序必须在AndroidManifest.xml文档里使用
2.2.2 应用行为监控
为了监控应用程序运行时后台的活动,针对应用程序之间主要的联系桥梁Intent对设备进行扫描。直接通过Shell对设备使用logcat命令,同时使用grep指令筛选与Intent活动相关的关键字,根据检测出来的log信息监控应用程序活动。
2.2.3 组态设定
为了避免使用不当的系统组态设定而造成的隐私风险,依据Android 安全组态标准进行系统设定隐私检测,通过ContentResolver、Cookie Manager、Device Policy Manager和WiFi Manager等SDK提供的相关API实现。
2.2.4 风险评估
依据Google所定义的权限保护等级与权限风险层级前20名排名名单计算隐私风险系数。保护层等级为“Normal”与“Dangerous”的权限,隐私风险系数分别为2与8;保护层级为“Signature”或“Signature Or System”的权限,隐私风险系数为5。若系统的组态设定没有符合标准,其隐私风险系数为8;若符合标准,其隐私风险系数为0。最后计算权限以及组态设定的平均风险系数,系数越高,说明系统危险程度越高;若平均风险系数为蓝色,则表示设备风险系数低。
3 系统功能验证
权限分析是以获取谷歌浏览器的权限列表为例,如图3所示,应用程序可读取系统设定、发送广播和管理账号权限android.permission.MANGE_ACCOUNTS()等。虽然可在设备“应用管理”中查看权限详情,但此功能所检测的权限更加详细,且可以获得AndroidManifest.xml中对权限的定义的描述。
以应用程序QQ为例,通过QQ发送文件,并将发送记录删除。如图4所示,应用程序活动监控能够成功检测到QQ传输了文件,字段“act=android.intent.action.SEND”代表该应用程序有传输资料的行为。
将Android设备的系统版本升级到最新版,应用程序的安装方式设置为允许未知来源安装、未禁用相机和未设置锁屏密码等,如图5所示,系统组态设置检测可以检测出设备没有设置锁屏和密码以及相机没有禁止等,点击“修改”按键对Fail的设置进行修改。
对安装在设备的所有应用程序和系统组态检测,可计算得出设置危险风险系数为4.999,如图6所示。该危险风险系数低,说明设备安全性高。
图3 权限分析
图4 应用行为监控 图5 系统组态检测 图6 风险评估
4 结语
通过分析应用程序的权限等级,根据Android安全组态标准,设计了一种符合移动设备安全标准的 Android隐私保护系统。将应用行为的检测转变为权限的动态检测,同时将应用行为与permission 相关联,完成了对应用行为的动态检测,帮助管理与修改因不当设定而产生的系统漏洞。验证结果表明,该系统通过监控应用程序活动,掌握了设备潜在的危险因素;通过风险评估分析每个应用程序的权限等级,避免了权限过高导致设备安全性降低的问题;最后根据合理的组态设定,降低了恶意软件攻击风险,提高了 Android 移动设备安全性。