【Android源码 栏目提醒】:文章导读:在新的一年中,各位网友都进入紧张的学习或是工作阶段。
网学会员整理了Android源码 -ANDROID操作系统的安全性分析 - 公共安全的相关内容供大家参考,祝大家在新的一年里工作和学习顺利!
Android操作系统的安全性分析 本文由shock0901贡献 技 术 研 究 2012年第03期 doi 10.3969/j.issn.1671-1122.2012.03.008
Android 操作系统的安全性分析 丁丽萍 中国科学院软件研究所北京 100190
Android 操作系统是一个比较流行的移动终端操作系统目前
Android 4.0 版本已经发布。
为了 摘 要 说明问题文章基于 2.6.25 内核版本对
Android 的安全性进行了分析。
文章的分析从
Android 与 Linux 的主 要不同之处入手指出了其面临的主要安全威胁进而从
Android 安全模型、安全体系结构、系统实现和安 全策略等方面提出了对其进行深入安全分析的方法。
Android 操作系统 安全性 分析 关键词 中图分类号 TP393.08 文献标识码 A 文章编号 1671-1122201203-0028-04 Analysis the Security of
Android DING Li-ping National Engineering Research Center of Fundamental SoftwareInstitute of Software Chinese Academy of Sciences Beijing 100190 China Abstract:
Android is one of the most popular mobile OS and
Android 4.0 version has been released resently. In this paper the security of
Android 2.6.25 is analyzed .By comparing the differences of
Android and Linux the main threads of
Android are pointed out and the security analysis methods based on
Android security model secrity architectureenplementation and security policies are proposed. Key words:
android OS security analysis 0 引言 作为一个运行于实际应用环境中的终端操作系统
Android 操作系统从设计之初就将系统的安全性设计融入到其体系结构设计 和功能模块设计之中。
同时它又是在原有的 Linux 内核及 Java 虚拟机的基础上进行了改造开发。
在这种前提下
Android 操作系统 在利用系统安全机制方面就会与原系统安全机制的设计初衷有所不同。
因此本文对
Android 操作系统的分析从其与 Linux 的主要 不同之处入手总结了其面临的主要安全威胁提出了基于体系结构、安全模型、系统实现和安全策略的全面的安全分析方法 1-8。
本文其他部分组织如下 第一部分分析了
Android 与 Linux 的主要不同之处第二部分列出了
Android 面临的主要安全威胁第 三部分从
Android 安全模型、安全体系结构、系统实现和安全策略等层面指出了相应的分析方法并进行了简要分析。
第四部分对本 文做了总结。
1
Android 与 Linux 的主要区别 从体系结构上看
Android 虽然运行在 Linux kernel 之上但不同于 GNU/LinuxAndroid 以 Bionic 取代 Glibc Skia 取代 以 Cairo Opencore 取代 Ffmpeg等等 以
Android 的 Linux kernel 实现了包括安全、存储器管理、程序管理、网络堆栈、驱动程序 模型在内的模块。
从进程问通信机制来看
Android 增加了一种进程间的通信机制即 IPC Binder。
在内核源代码中驱动程序文件为 coredroid/ include/linux/binder.h 和 coredroid/drivers/
android/binder.c。
Binder 通过守护进程 Service Manager 管理系统中的服务负责进程问 的数据交换。
各进程通过 Binder 访问同一块共享内存以实现数据通信。
从应用层的角度看进程通过访问数据守护进程获取 用于数据交换的程序框架接口调用并通过接口共享数据。
其他进程要访问数据只需与程序框架接口进行交互方便了程序 员开发需要交互数据的应用程序。
从内存管理看在内存管理模块中
Android 内核采用了一种不用于标准 Linux 内核的低内存管理策略。
在标准 Linux 内核当 中使用一种叫做 OOMOut of Memory 的低内存管理策略即当内存不足时系统检查所有的进程并对进程进行限制评分获 得最高分的进程将被关闭 内核进程除外 。
Android 系统采用的则是一种叫作 LMKLow Memory Killer 的机制这种机制将进程 收稿时间 2012-02-10 作者简介 丁丽萍1965- 女山东博士生导师研究员博士主要研究方向为 系统安全、可信计算、电子取证。
28 2012年第03期 技 术 研 究 按照重要性进行分级、分组。
内存不足时将处于最低级别 组的进程关闭。
例如 在移动设备当中 界面处于最高级别。
UI 所以该进程永远不会被中止这样在终端用户看来 系统 是稳定运行的。
与此同时
Android 新增加了一种内存共享的 处理方式 AshmemAnonymous Shared Memory 匿名共享内存 。
通过 Ashmem进程间可以匿名自由共享具名的内存块 这种 共享方式在标准 Linux 当中不被支持 9-18 多问题。
这些问题包括 1恶意代码植入。
目前针对
Android 平台的恶意软件采 用 SPService Provider服务提供者吸费的模式非法获利的 情形屡见不鲜。
被植入的扣费软件代码在安装后或立即发 作或定时发作私自向 SP 号发送业务定制信息屏蔽 10086 等扣费确认短信并自动回复完成扣费后自动删除短信记录 整个过程完全暗箱操作用户无法看出任何痕迹。
Android 平台的开源策略使得开发者能够自行制作并深度 修改系统 ROM。
木马作者正是利用了
Android 平台这一特性 一方面制作含有恶意程序的系统 ROM通过一条灰色产业链 将这些 ROM 刷写进手机再卖给毫不知情消费者 另一方面 基于
Android 软件的封装形式木马开发者可以比较容易地将 大量时下流行的软件和游戏进行反编译植入扣费代码再重 新封装软件包并散布在各大论坛和国内第三方
Android 市场。
此方式成本极低能够轻易地批量生产。
木马作者因此疯狂 修改知名软件让广大用户和软件原作者深受其害。
2应用商店带来的威胁 。
由于目前国内众多
Android 应用 商店缺乏软件上传安全审核以及监管等机制应用商店已经成 为
Android 安全隐患的高发区。
3针对权限许可和访问控制的安全威胁。
由于
Android 2.3 之前版本没有对系统属性空间的访问进行正确限制。
本地应 用程序可以利用该漏洞绕过应用程序沙箱并获取特权。
。
从采用的安全措施看
Android 的主要安全措施包括 1访问限制。
访问限制对于任何操作系统的安全性而言 都是核心要素。
在
Android 中任何程序都没有权限来执行可 能有害于操作系统的操作。
这些操作包括读 / 写用户的隐私 数据 例如联系方式或 E-mail、读 / 写其他应用程序的文件 等等。
该结构同样避免了可能会运行有害的或是影响到用户 的程序。
据此保证了用户一些 “敏感”数据不被某些未经授 权的程序所困扰。
2应用程序签名。
所有的
Android 应用程序 .apk 文件 必须通过一个证书的签名此证书的私钥必须被开发者所掌 握这个证书的标识是应用程序的作者。
这个证书不需要通 过证书组织的签署
Android 应用程序对于使用自签署的证书 是完全允许的。
3Dalvik 虚拟机防护。
Android 采用了进程隔离策略来保 障应用软件及其数据文件的完整性和机密性。
4权限命名机制。
一个权限主要包含三个方面的信息 权 限的名称、属于的权限组、保护级别。
一个权限组是指把权限 按照功能分成的不同的集合。
每一个权限组包含若干具体权限 例如在 COST_MONEY 组中包含
android.permission.SEND_SMS
android.permission.CALL_PHONE 等和费用相关的权限。
每个权限通过 ProtectionLevel 来标识保护级别 Normal Dangerous Signature Signatureorsystem。
不同的保护级别代表 了程序要使用此权限时的认证方式。
Normal 的权限只要申请 了就可以使用 Dangerous 的权限在安装时需要用户确认才可 以使用 Signature 和 Signatureorsystem 的权限需要使用者的 app 和系统使用同一个数字证书。
Package 的权限信息主要通过在 AndroidManifest.xml 中通过 一些标签来指定。
如 ltpermissiongt 标签ltpermission-groupgt 标 签 ltpermission-treegt 等标签。
如果 Package 需要申请使用某个权 限那么需要使用 ltuse-permissiongt 标签来指定。
5数据安全机制 UID。
安装在
Android 手机中的每个程 序都会被分配给一个属于自己的统一的 Linux 用户 ID并且为 它创建一个 Sandbox 以防止影响其他程序。
在程序安装到手 机中时被分配用户 ID并且在这个设备中保持它的永久性。
3
Android 安全模型、安全体系结构和安全策略分析
Android 操作系统是基于 Linux 内核构建的所以
Android 安全系统也是基于 Linux 的安全架构建立的。
通过分析 对比
Android 操作系统和 Linux 操作系统安全模型、安全策略和安 全体系结构上的差异 能够找出
Android 操作系统在安全模型、 安全策略和安全体系结构层面上的安全问题从而进一步 认识
Android 操作系统的安全性。
具体方法如图 1 所示。
图 1 分析方法示意图 我们对
Android 操作系统 内核版本 2.6.25的内核
源码 中安全相关的部分做了初步分析 并和 Linux 做了对比如图 2 和图 3 所示。
Android 与 Linux 相比没有 apparmor、integrity、tomoyo 模 块 第一层目录
Android 缺少的
源码文件有 device_cgroup.c、 lsm_audit.c、 min_addr.c 新增了以下
源码文件 dummy.c、 root_plug.c。
29 2 针对
Android 平台特有的安全威胁 像众多的操作系统一样
Android 也面临着安全方面的诸 技 术 研 究 2012年第03期 See http://www.linuxjournal.com/article.phpsid6279 for more information about this code. This program is free software you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation version 2 of the License. /
Android selinux 目录下减少了netport.c
源码 Linux下 neitport.c 文件解释如下 / Network port table SELinux must keep a mapping of network ports to labels/SIDs. This mapping is maintained as part of the normal policy but a fast cache is needed to reduce the lookup overhead. Author: Paul Moore ltpaul.moorehp.comgt This code is heavily based on the quotnetifquot concept originally developed by James Morris ltjmorrisredhat.comgt see security/selinux/netif.c for more information / / c Copyright Hewlett-Packard Development Company L.P. 2008 This program is free software: you can redistribute it and/or modify it under the terms of version 2 of the GNU General Public License as published by the Free Software Foundation. This program is distributed in the hope that it will be useful but WITHOUT ANY WARRANTY without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. / device_cgroup.c 注释如下 / device_cgroup.c - device cgroup subsystem Copyright 2007 IBM Corp / lsm_audit.c 注释如下 / common LSM auditing functions Based on code written for SELinux by : Stephen Smalley ltsdsepoch.ncsc.milgt James Morris ltjmorrisredhat.comgt Author : Etienne Basset ltetienne.bassetensta.orggt This program is free software you can redistribute it and/or modify it under the terms of the GNU General Public License version 2 as published by the Free Software Foundation. /
Android key 目录减少了encrypted.c encrypted.h 等文件。
上 述分析表明
Android 的内 核 代 码 中 有 SELinux 和 Smack、Capability 等。
Android 采用所 谓的特 权 隔离 模 型 Privilege Se paration 为每个进程赋予一个用户 ID这个身份 在软件包的生命周期中一直保持。
在不同的机器上同一个 软件包可能有不同的 UID。
同一个设备商每个软件包都有 不同的 UID。
Android 系统的 Manifest 配置设定的程序权限与 Linux 内核、Dalvik 虚拟机一起构成一个沙盒 Sandbox。
通过 内核为应用程序提供的 Sandbox 一个软件包是不能访问其它 软件包的资源的。
而软件包之间的信息共享是通过许可来实 现的。
每个软件通过 AndroidManifest.xml 文件定义一个或者多 个 ltuses-permissiongt 标记来声明应用程序需要的许可例如 ltmanifest xmlns:androidquothttp://schemas.
android.com/apk/res/androidquot packagequotcom.
android.app.myappquot gt ltuses-permission
android:namequotandroid.permission.RECEIVE_SMSquot /gt ... lt/manifestgt dummy.c 注释如下 / Stub functions for the default security function pointers in case no security model is loaded. Copyright C 2001 WireX Communications Inc ltchriswirex.comgt Copyright C 2001-2002 Greg Kroah-Hartman ltgregkroah.comgt Copyright C 2001 Networks Associates Technology Inc ltssmalleynai.comgt This program is free software you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation either version 2 of the License or at your option any later version. / root_plug.c 注释如下 / Root Plug sample LSM module Originally written for a Linux Journal. Copyright C 2002 Greg Kroah-Hartman ltgregkroah.comgt Prevents any programs running with egid 0 if a specific USB device is not present in the system. Yes it can be gotten around but is a nice starting point for people to play with and learn the LSM interface. If you want to turn this into something with a semblance of security you need to hook the task_ functions also. 声明了应用 Myapp 需要监控收到的 SMS 消息。
由于沙盒 的特征每个应用必须声明自己所需的全部许可这些许可在 安装的时候就完全确定不能够在此后的生命周期中修改。
从上述分析来看
Android 的策略可以粗略分成两个层面 沙盒策略和许可策略。
从模型上看
Android 的上述两个策略 30 2012年第03期 技 术 研 究 可以抽象为两个模型 隔离模型和基于访问控制矩阵的能力 模型。
但是
Android 对上述模型都有一定的修正比如传统的 能力模型允许在生命周期中动态地进行授权、权限回收、权 利传递等
Android 系统限制了动态权限变动、 而 权限传递等。
Android 的隔离模型仅仅是以特权操作为基础的初始化模型 对传统的隔离模型也做了一定的修改。
因此为了分析
Android 的安全模型我们选择与它们近 似的安全模型作为基础对比模型的变动。
对
Android 能力 模型我们 以访问控制矩阵或者能力模型为基础结合源代 码整理出相应的模型表达。
可以参照传统的隔离模型分析
Android 的 Sandbox 模型的隔离特性
Android 隔离进行建模 对 以能力模型为基础利用能力模型所能应对的威胁场景对比 分析
Android 的 Permission 的表达能力
Android 系统的威胁 模型构建方法与 Linux 威胁模型构建的方法和过程相同。
特权操作对系统的安全性威胁较大对它们的分析势在 必行。
操作系统特权操作与特权开关的判定和分析需要新的 工具和方法。
而操作系统中未知恶意代码和后门的查找和判 定需要在理论和方法上突破。
Android 操作系统内核存在类似 Linux 的特权而
Android 用户态 Dalvik 需要进一步的分析。
对于
Android 的安全策略提取我们将从
Android 的源代码 和每个应用程序的 AndroidManifest.xml 文件出发整理出典型 应用的安全策略并参照模块的分析方法分析安全策略方 面存在的漏洞。
对于
Android 操作系统在设计实现层面上产生的安全漏洞 的分析采用的具体方法包括 1采用静态方法进行
Android 操作系统安全性分析。
静 态检测技术是指利用对源代码、二进制代码的静态分析 / 静态审查来查找程序缺陷的一种检测方法。
由于检测目标程 序时不需要运行测试用例减轻了构建测试平台的开销 如计 算能力要求存储空间要求等 。
动态运行的测试用例由于运 行环境的限制很多程序流程难以到达和运行 如 I/O 设备错 误的处理 而由于静态分析直接在代码层面上进行分析可 以在任意位置对程序流程进行判断可以对系统实施比较全 面的检查和分析。
静态分析的问题在于自动化程度较低导致 了效率低下 误报率较高。
在以漏洞产生机理划分的类别中输入验证错误、缓存 区错误、边界条件错误、访问验 证错误、意外情况处置错 误、条件竞争和设计错误在系统源代码层次能够抽象和体 现。
因此可采用的静态检测技术包括 编译器检查、文本 搜索、词法分析、范围检查、状态机检测、注释检查、形式 化验证等。
2采用动态方法进行
Android 操作系统安全分析。
动态 检测技术是通过运行测试用例、动态检测工具、动态检测方 法来保证程序功能正确的一种测试方法。
包括错误注入、动 态的测试用例生成在生成测试用例时除了常规的黑盒测 试和手动编写白盒测试之外还可以通过自动化的方式进行 动态检测工具作为系统内核的补丁 在系统运行过程中遍历 内核相关资源的使用情况动态检测内核中实际存在的问题 这类检测常用于内存泄漏检测、渗透测试等。
在以漏洞产生机理划分的 类别中环境错误、配置错误 导致的漏洞只能在系统运行过程中才能够体现出来因此可 以采用动态检测的方案包括错误注入、动态的测试用例生 成等技术。
典型的动态检测方案是 错误注入是指在任意的测试 点将指定的待测试数据输入程序的一种方法。
与普通的白盒 自动化测试不同错误注入点不局限于单元测试的入口因 此被广泛使用于基于硬件的测试也可应用于二进制程序或 者有源代码的测试。
代表是 SOFIT Software Object-oriented Fault Injection Tool、FIRE Fault Injection using a REflective architecture、FIESTA Fault Injection for Embedded System Target Application。
错误注入一般采用硬件模拟器或者软件调试器的方式来 实现包含 1启动器 Activator启动目标测试系统使系统开始 正常运行 注射器 Inejector对目标测试系统进行错误 2 注入 监视器 Monitor监视目标测试系统确保操作 3 预期完成 控制器 Controller控制启动器、注射器、监 4 视器三者协同操作 用户接口 User Interface由用户输 5 入执行时需要的参数并将结果进行反馈。
相对普通分析来说错误注入运行较慢。
而且需要用户 指定停止点、输入参数、错误结果表示等等因此多作为静 态分析的一个补充。
4 结束语 本文对
Android 操作系统的分析从其与 Linux 的主要不同 之处入手总结了其面临的主要安全威胁提出了基于体系结 构、 安全模型、 系统实现和安全策略的全面的安全性分析方法。
我们将不断跟踪
Android 操作系统在安全性方面的改进提出 更加行之有效的分析方法发现其安全缺陷和弥补这些安全 缺陷的方法。
责编 程斌 参考文献 1 Davi L. Dmitrienko A. Sadeghi A.R. and Winandy M.Privilege escalation attacks on androidJ. Information Security. 346-360. 2 Shabtai A. Fledel Y. Kanonov U. Elovici Y. and Dolev S. Google
Android: A state-of-the-art review of security mechanismsJ. Arxiv preprint arXiv:0912.5101. 3 ENCK W. ONGTANG M. AND MCDANIEL P. 2009b. Understanding
Android SecurityJ. IEEE Security and Privacy 701:50-57. 4 Shabtai A. Fledel Y. Kanonov U. Elovici Y. Dolev S. and Glezer C. 下转第 41 页 31 2012年第03期 技 术 研 究 安全存储同时也没有对存储的效率造成太大影响。
密钥是 随机产生的 而且是和用户端分开存放的 具备较好的安全性。
我们设计并实现了一个基于云存储的安全增强系统保证数 据文件在云存储上的存储安全。
该系统以亚马逊 S3 的接口为 基础设计了用户端和管理端用户的请求都是由管理端来处 理的 管理端随机产生密钥 使得文件可以安全的存储于 S3 上 。
有效地防止了数据的泄露可以使用户更加便捷、安全地使 用云存储.
上一篇:
Android应用的恶意代码注入
下一篇:
实现高校教育体制创新与区域经济发展双赢的思考