MyException - 我的异常网
当前位置:我的异常网» 计算机图书 » 论文相干笔记5

论文相干笔记5

www.MyException.Cn  网友分享于:2015-01-25  浏览:0次
论文相关笔记5

五、Android安全机制分析与解决方案初探(2011《科学技术与工程》)

 

1.Android简介

(1)Android平台框架

Android是在移动设备上执行应用程序的环境。

Android平台框架公由5部分组成:

Android软件栈的基础是Linux2.6内核,它主要提供安全、驱动、内存管理、网络协议栈等核心系统服务。

Linux内核上面是Android本地库,是一套C/C++库,被上层各种各样的系统组件调用。

在Android程序内通过Java本地调用(JNI)实现合并这些库。

Android运行环境包括Dalvik虚拟机核心库。Dalvik运行.dex(Dalvik-executable)文件,一种被认为比Java类文件更加简洁和节省内存的文件;核心库由Java语言编写,提供了大量的Java5 SE包的子类和一些Android特有的库。

应用程序框架仍然都是由Java语言编写,它是开发者进行Android开发的基础。该层主要由View、通知管理器、活动管理器等由开发人员直接调用的组件组成。

应用程序由Java语言编写,运行在虚拟机上。

Android平台框架图如下:

(2)Android应用构成

Android应用程序的常规发布格式是一个经过数字签名的.apk文件包,类似于Java jar,包含程序所有的代码和非代码文件。

其中一个XML文件即Android Manifest文件,该布局文件包含应用程序的基本信息,如包名、组件描述、权限声明。

一个Android应用程序包含4种类型的组件:activity、service、content provider和broadcast receiver。Activity工作在手机屏幕前台与用户进行通信;Service工作在后台没有用户界面;Content provider为应用程序提供数据存储;Broadcast-receiver帮助程序组件之间相互通信。每个组件独立地被实例化和执行的同时也相互作用其他的组件,必要时可以被其他程序启动。

 

2.Android安全机制

(1)Linux机制

Android Linux内核层包含两个基本的安全机制:可移植操作系统接口(POSIX)用户和文件访问控制。这些机制的基本元素是用户(表现为一个整数号码或者一个ID),用户拥有对象(如进程和文件),用户再进一步分配到用户组。

(a)POSIX用户:每个安装在移动设备上的Android包(.apk)文件都会分配一个唯一Linux(POSIX)用户ID。所以,两个不同包的代码不能再同一个进程里运行。这就创造了沙箱,阻止拥有程序对其他程序或系统其他部分施加恶意影响。一个Android应用程序主要运行在一个安全的沙箱内,因此,它不允许访问其他资源,除非明确地授权允许访问。当然,可以通过设置每个Android包的Android Manifest.xml文件的manifest标签内的sharedUserId属性,给它们分配同一个用户ID。这样,两个包被认为是同一个程序,拥有同样的用户ID和文件存取权限。注意:为了保证安全,只有具有相同签名的应用程序(且请求相同的sharedUserId属性),才能分配相同的用户ID。

(b)文件访问控制:Android文件(包括应用程序文件和系统文件)管理属于Linux权限机制。每个文件与用户ID和用户组ID以及三组Read/Write/Execute(RWX)权限密切相关。通常,“system”或“root”用户拥有Android系统文件,而特定应用程序的用户拥有应用程序的文件。

(2)Android特有的安全机制

Google为Android引进了以下特有的安全机制:

(a)应用程序权限机制:Android通过在每台设备上实施了基于权限的安全策略来处理安全问题,采用权限来限制安装应用程序的能力。权限是一段唯一的各不相同的字符串。当某个权限与某个操作和资源对象绑定在一起,我们必须获得这个权限才能在对象上执行操作。Android框架提供一套默认的权限存储在android.anifest.permission类中,同时也允许定义新的权限。写应用程序时声明权限,程序安装时新权限被引入系统。权限授权在应用程序安装时执行。

权限策略

每个权限被定义成一个字符串,用来传达权限以执行某个特殊的操作。所有权限可以分为两个类别:一种是执行程序时被应用程序所请求的权限,一种是应用程序的组件之间通信时被其他组件请求的权限。

开发者在XML manifest文件中编写权限标签来定义以上两种类别的权限策略。XML元素<application>由一系列代表组件的子元素构成,如<activity>、<service>、<provider>和<receiver>。应用程序可以用一个<permission>元素来声明权限,用于限制访问特定组件或应用程序。应用程序列出所有需要用来完成任务的权限,分别用<use-permission>元素标识,即权限请求。ICC(inter-component communication),<application>元素和组件元素都有android:permission的属性,这里,我们称这个属性分别为应用程序和组件的权限标签;应用程序内的组件可以继承应用程序元素设置的权限标签。

防护等级

防护等级是权限的一个属性,它决定了权限怎样被授权。现今的Android安全架构支持四种防护等级:normal、dangerous、signature和signatureOrSystem。

Android自身缺陷

应用程序可以自由命名一个新权限,无须遵循一定命名规则和限制。

权限一经授权给应用程序,在程序的声明周期间,它不会被移除,即使声明此权限的源程序被删除。

一个系统内两个不同的权限可以共用相同的名字,以至于他们中的一个权限可以在未声明的前提下正常使用。

(b)组件包装

Android应用程序把组件包装在程序内容内,阻止其他应用程序访问。主要通过“exported”属性来实现。如果“exported”属性被设置为“false”,该组件只能被拥有它的应用程序(或者其他通过sharedUserId属性共用一个用户ID的应用程序)访问。如果设为“true”,该组件可以被其他外部程序调用。

(c)数字签名

所有应用程序都必须有数字签名,Android系统不会安装没有数字证书的应用程序。数字证书都是有有效期的,Android只在应用程序安装的时候才会检查证书的有效期。如果程序已经安装在系统中,即使证书过期也不会影响程序的正常功能。sharedUesrId机制和权限机制都用到签名方法来执行signature和signatureOrSystem权限。

(3)其他保护

硬件设备,如内存管理单元(MMU)保障每个用户进程都拥有自己的独立的地址空间,减少了特权升级(Privilege Escalation)的可能性。

编程语言,如其类型安全特性能使编写的程序不易受到专制的代码执行(arbitrary code execution)的影响。

手机载体,如电话系统的AAA系统(authentication, authorization和accounting)用于识别用户、监控操作和向客户收取费用等。

 

3.安全解决方案

优先选取SELinux访问控制机制、入侵检测Context-aware访问控制,次要选取数据加密、垃圾邮件过滤、可选择性的Android权限机制、远程管理虚拟专用网络(VPN)和身份验证等。

(1)基于主机的入侵检测框架(HIDS,host-based intrusion-detection system)

机器学习(machine learning)和时序推理(temporal reasoning)方法分析采集的数据,进而推断设备的状态。

(2)SELinux在Android上的实施

文章评论

Java 与 .NET 的平台发展之争
Java 与 .NET 的平台发展之争
旅行,写作,编程
旅行,写作,编程
程序员的鄙视链
程序员的鄙视链
聊聊HTTPS和SSL/TLS协议
聊聊HTTPS和SSL/TLS协议
那些争议最大的编程观点
那些争议最大的编程观点
Google伦敦新总部 犹如星级庄园
Google伦敦新总部 犹如星级庄园
看13位CEO、创始人和高管如何提高工作效率
看13位CEO、创始人和高管如何提高工作效率
2013年美国开发者薪资调查报告
2013年美国开发者薪资调查报告
团队中“技术大拿”并非越多越好
团队中“技术大拿”并非越多越好
程序员必看的十大电影
程序员必看的十大电影
做程序猿的老婆应该注意的一些事情
做程序猿的老婆应该注意的一些事情
2013年中国软件开发者薪资调查报告
2013年中国软件开发者薪资调查报告
“懒”出效率是程序员的美德
“懒”出效率是程序员的美德
老程序员的下场
老程序员的下场
什么才是优秀的用户界面设计
什么才是优秀的用户界面设计
5款最佳正则表达式编辑调试器
5款最佳正则表达式编辑调试器
程序员都该阅读的书
程序员都该阅读的书
Web开发者需具备的8个好习惯
Web开发者需具备的8个好习惯
为什么程序员都是夜猫子
为什么程序员都是夜猫子
10个帮程序员减压放松的网站
10个帮程序员减压放松的网站
如何成为一名黑客
如何成为一名黑客
 程序员的样子
程序员的样子
十大编程算法助程序员走上高手之路
十大编程算法助程序员走上高手之路
为啥Android手机总会越用越慢?
为啥Android手机总会越用越慢?
每天工作4小时的程序员
每天工作4小时的程序员
程序员的一天:一寸光阴一寸金
程序员的一天:一寸光阴一寸金
如何区分一个程序员是“老手“还是“新手“?
如何区分一个程序员是“老手“还是“新手“?
程序猿的崛起——Growth Hacker
程序猿的崛起——Growth Hacker
程序员周末都喜欢做什么?
程序员周末都喜欢做什么?
编程语言是女人
编程语言是女人
写给自己也写给你 自己到底该何去何从
写给自己也写给你 自己到底该何去何从
鲜为人知的编程真相
鲜为人知的编程真相
我是如何打败拖延症的
我是如何打败拖延症的
不懂技术不要对懂技术的人说这很容易实现
不懂技术不要对懂技术的人说这很容易实现
程序员应该关注的一些事儿
程序员应该关注的一些事儿
10个调试和排错的小建议
10个调试和排错的小建议
程序员最害怕的5件事 你中招了吗?
程序员最害怕的5件事 你中招了吗?
漫画:程序员的工作
漫画:程序员的工作
亲爱的项目经理,我恨你
亲爱的项目经理,我恨你
总结2014中国互联网十大段子
总结2014中国互联网十大段子
Web开发人员为什么越来越懒了?
Web开发人员为什么越来越懒了?
老美怎么看待阿里赴美上市
老美怎么看待阿里赴美上市
当下全球最炙手可热的八位少年创业者
当下全球最炙手可热的八位少年创业者
Java程序员必看电影
Java程序员必看电影
我的丈夫是个程序员
我的丈夫是个程序员
代码女神横空出世
代码女神横空出世
科技史上最臭名昭著的13大罪犯
科技史上最臭名昭著的13大罪犯
“肮脏的”IT工作排行榜
“肮脏的”IT工作排行榜
初级 vs 高级开发者 哪个性价比更高?
初级 vs 高级开发者 哪个性价比更高?
软件开发程序错误异常ExceptionCopyright © 2009-2015 MyException 版权所有