1.4 应用的运行
1.4.1 Android 应用的运行
Android是基于Linux内核开发的操作系统,因此也继承了Linux的安全机制。Android系统进一步完善了Linux基于用户的识别和隔离应用资源的保护机制。Android系统中每个应用程序安装时都会被分配唯一的用户编号(UID),只要应用程序不被卸载则UID不会变动。Android会使用应用的UID为每个应用设置一个独立的内核级应用沙盒,所有应用都在的沙盒中独立运行。默认情况下应用之间不能交互,只能访问和使用自己沙盒内的资源。
攻击者要想攻破Android系统必须要突破沙盒的安全限制,Android为了保证应用沙盒机制的安全性,一直在不断的增加各种安全措施。以下是Android各版本新增的安全机制情况:
为了保证应用沙盒的安全,除了上述不断增强的系统层面的防护措施,Android还根据应用的可信度对应用进行了分类,共分为四类不可信应用、特权应用、平台应用和系统应用。
应用程序启动时会根据应用的类型分配不同的访问权限,拥有系统权限的应用在访问系统资源时有很多特权,几乎不受沙盒策略的限制。非系统应用要访问系统资源则会受到严格的限制。
虽然严格的应用隔离策略策能大幅提高应用安全性,但应用之间不可避免的要进行交互通信,严格的应用隔离策略会有诸多不便。为保证运行在不同沙盒间的应用依然可以的正常交互,Android提供了两种应用间数据共享机制:sharedUserId共享机制和基于Binder的IPC通信机制。
sharedUserId共享机制:使用相同签名和相同sharedUserId属性值标的应用会被分配相同的用户编号(UID),拥有相同UID的应用可以彼此访问应用的数据目录下的任意数据,还可以将应用配置到同一个进程中运行。开发者可以在应用的Mainfest文件中添加sharedUserId属性进行设置,具体参考如下:
1
2
3
4
5
|
<manifest xmlns:android
=
"http://schemas.android.com/apk/res/android"
package
=
"com.share.demo"
android:versionCode
=
"1"
android:versionName
=
"1.0"
android:sharedUserId
=
"demo"
>
|
1.4.2 iOS 应用的运行
iOS系统是苹果基于Darwin研发的操作统系,而Darwin是基于FreeBSD研发的操作系统。iOS系统就顺理成章的继承了FreeBSD系统基于TrustedBSD框架的强制访问控制(MAC)机制,iOS以此机制为基础建立了一套严格限制应用访问的安全机制。应用安装时都会分配一个独立的存储空间,该存储空间也就是应用沙盒。沙盒之间时相互独立,不能相互访问,应用只能访问自己空间内的资源。
iOS的应用沙盒是有四个文件目录组成:Documents、Library、tmp和应用的安装目录AppName.app。文件目录所在位置和用处如下表:
安全沙盒机制导致应用与系统文件和资源处于隔离状态,如果应用要访问系统文件和资源,需要取得系统的授权,只有取得相关授权的文件才可以访问。与Android系统有所不同,iOS系统中的大部分系统级应用要访问系统文件和资源也同样需要先获取相关授权。
应用沙盒保证了每个应用程序在设备中都有自己独立的存储位置,确保了应用数据的安全。但有时为了实现某些应用的功能,不可避免就要进行数据共享,在保证应用数据安全的情况下,iOS系统提供了三种数据共享方式:KeyChain、App Group和剪切板。
KeyChain提供了两种访问区,私有区域和公共区域(Keychain Group)。私有区域只能本应用访问,其它应用不可见也无法访问。公共区域可以被同一个证书签名的其它应用访问,可以通过此种方式实现不同应用间的数据共享。
App Groups是苹果在iOS8中加入的功能,同一开发者的应用可以通过注册的同一个App Groups进行数据共享。开发者在苹果的开发者中心注册一个对外共享的App Groups,然后通过Xcode将需要进行数据共享应用都选择配置注册的App Groups。这样同一开发者的应用间就可以通过App Groups共享数据。
剪贴板是应用之间简单高效的数据共享方式,iOS系统提供了generalPasteboard和pasteboardWithName两种剪切板模式。generalPasteboard提供全局的剪切板,系统中所有的应用都可以通过其进行数据共享。pasteboardWithName可以理解为私有的剪切板,只有本应用或者使用同一证书签名的应用间可以共享数据。
更多【移动应用安全与风控——应用的运行】相关视频教程:www.yxfzedu.com