论文相关笔记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上的实施

时间: 2024-10-06 17:25:11

论文相关笔记5的相关文章

论文相关笔记2

二.Android安全机制分析(2011<第26次全国计算机安全学术交流会论文集>) 1.综述 2007年11月5日,Google牵头的开放手机联盟(Open Handset Alliance)发布第一款完全开源的移动设备综合平台——Android. 2008年9月22日,T-Mobile USA发布第一款基于Android平台的智能手机——T-Mobile G1. 2010年11月,业界首次公开了一种针对Android自带浏览器的攻击代码. 2.Android系统架构 (1)Android为

论文相关笔记4

四.Android安全机制分析及解决策略(2013<科技论坛>) 1.Android概况 (1)Android平台框架 Android是一种电子平台,用来给移动设备里的软件程序提供运行环境.由5部分构成Android的环境内容: 基于Linux2.6内核,主要提供进程管理.驱动.网络协议栈.内存管理.安全等核心系统服务: Android本地库,存在于Linux内核之上,是一套C/C++库,能够被上层各式的软件系统调用,通过Android应用程序内的Java本地调用(JNI),来合并这些库: D

论文相关笔记1

一.Android安全机制分析(2012<探索与观察>) 1.Android的安全设计原则 (1)默认情况下,在Android平台下运行的应用程序没有权限执行对其他应用程序.操作系统有害的操作. (2)Android应用程序的进程是运行在一个安全“沙箱”环境中.它不能干扰其他应用程序,除非它明确声明权限. 2.Android数据安全机制 (1)数据完整性的实现.根据Android的安全原则可知,Android中的数据在默认情况下(除系统授权外)不会被其他程序破坏.读取.修改.删除或丢失. (2

Google File System 论文阅读笔记

核心目标:Google File System是一个面向密集应用的,可伸缩的大规模分布式文件系统.GFS运行在廉价的设备上,提供给了灾难冗余的能力,为大量客户机提供了高性能的服务. 1.一系列前提 GFS的系统构建针对其自身使用的特点在传统的分布式系统的基础上又进行了一些创新,基于的前提假设主要包括以下方面: 1.由于系统由廉价的商用机构成,组件失效被认为是一种常态,系统必须可以持续监控自身的状态. 2.系统存储以大文件为主,小文件也支持,但是没有进行特别的优化处理. 3.系统的工作负载主要包含

Android在线升级相关笔记一(解析服务器版本与当前版本比较)

大概流程:Android客户端去访问服务器上的封装了版本号等信息的xml文件,对服务器上的版本和当前版本进行比较, 如果低于服务器的版本,则下载服务器上的新版软件,进行安装替换,完成升级. 一.首先用tomcat搭建服务器,用于开发测试. 下载tomcat请参考:http://blog.csdn.net/only_tan/article/details/25110625 1.在tomcat中新建自己的项目: \apache-tomcat-6.0.39\webapps 目录下新建自己的项目文件夹,

Linux 下面java编译环境相关笔记

1.如果自己编写的java文件依赖于很多第三方库(比如adir1和dir2下面都有很多jar包),加入自己的文件名叫foo.java那么可以用如下指令编译 javac -Djava.ext.dirs=dir1;dir2 foo.java 2.打包一个可执行的jar包的过程 a.写一个完整的java文件HelloWorld.java b.执行命令:javac HelloWorld.java生成HelloWorld.class c.执行命令 jar cvf HelloWorld.jar HelloW

软件安装相关笔记

程序的安装 rpm :redhat packagemanager早期 rpm is package manager现在 rpm:/var/lib/rpm数据库 rpm命名规则: 主包:bind-version-el5.i386.rpm 子包:bind-libs-version-el5.i386.rpm 格式: name-version-release.arch.rpm bind-major.minor.release.arch.rpm 主版本号:重大改进 次版本好:某个子功能发生重大改变 发行号

shell脚本相关笔记

书写一个shell脚本并使之执行的步骤: 1. 打开一个文件,以 #! bin/bash作为开头 2.在文件中写入一些正确可执行的shell语句 3.保存文件 4.更改文件权限,执行文件 一些小技巧: 如果想在系统中添加自己的命令,比如执行自己建好的shell脚本语句这样一条命令 实例: 1.创建文件cd.sh 内容为: #! bin/bash cd xxx/yyy/zzz 2.保存文件 3.执行文件./cd.sh 现在发现并没有能够打开我们想要打开的目录并进去. 原因是shell还有分父she

论文相关

MATLAB绘制函数的图形.pdf http://gc.nuaa.edu.cn/math/data/%E6%95%B0%E5%AD%A6%E5%AE%9E%E9%AA%8C/MATLAB/2-MATLAB%E7%BB%98%E5%88%B6%E5%87%BD%E6%95%B0%E7%9A%84%E5%9B%BE%E5%BD%A2.pdf 论文相关,布布扣,bubuko.com