Android中的沙箱模型

简介:
 
 
沙箱模型是业界保证系统安全的关键安全技术,已经在浏览器等领域得到了成功应用。作为优秀的开源移动平台操作系统,Android也有相应的沙箱模型,本文将对其进行介绍。
 
一、沙箱模型原理简介
现实中的沙箱(SandBox),是一种儿童玩具,类如KFC中一个装满小球的容器,儿童可以在其中随意玩耍,起到保护儿童的作用。(也可以理解为一种安全环境。)
近年来,随着网络安全问题的日益突出,人们更多的将沙箱技术应用于网上冲浪方面。从技术实现角度而言,就是从原有的阻止可疑程序对系统访问,转变成将可疑程序对磁盘、注册表等的访问重定向到指定文件夹下,从而消除对系统的危害。
举个例子,GreenBorder为IE和FireFox构建了一个安全的虚拟执行环境。用户通过浏览器所作的任何写磁盘操作,都将重定向到一个特定的临时文件夹中。这样,即使网页中包含病毒,木马,广告等恶意程序,被强行安装后,也只是安装到了临时文件夹中,不会对用户pc造成危害。
对于程序开发中的Java技术来说,沙箱也具有很重要的安全意义。沙箱无论何时加载远程网站上代码并在本地执行,安全都是至关重要的问题。点击一个链接可以启动Java Web Start应用程序。访问一个网页时,其中的所有Applet也会自动地启动。如果再点击一个链接,或者访问一个网页时,在用户的机器上能够安装任意的代码,那么犯罪分子就可能在此时窃听机密信息、读取财务数据或者接管用户机器来发送广告。 为了确保Java技术不会被邪恶目的所利用,SUN公司在设计Java的时候,设计了一套精密的安全模型;即安全管理器(Security Manager)将检查有权使用的所有系统资源。在默认的情况下,只允许那些无害的操作,要想允许执行其他操作,代码需得到数字签名,用户必须得到数字认证。
特别是,在沙箱中的程序有下列限制:
  • 不能运行任何本地可执行程序。
  • 不能从本地计算机文件系统中读取任何信息,也不能往本地计算机文件系统中写入任何信息。
  • 不能查看除Java版本信息和少数几个无害的操作系统详细信息外的任何有关本地计算机的信息。特别是,在沙箱中的代码不能查看用户名、E-mail地址等信息。
  • 远程加载的程序不能与除下载程序所在的服务器之外的任何主机通信,这个服务器被称为源主机(originating host)。这条规则通常称为“远程代码只能与家人通话”这条规则将会确保用户不会被代码探查到内部网络资源(在Java SE 6 中,Java Web Start 应用程序可以与其他网络连接,但必须得到用户的同意)。
因此,近年来,沙箱技术非常盛行,如360浏览器等,都宣称采用了沙箱技术来保证上网安全,而对于Android系统来说,也有意识地引入了这样一个概念。
 
 
二、Android中的沙箱模型
在 Linux 中,一个用户 ID 识别一个给定用户;在 Android 上,一个用户 ID 识别一个应用程序。应用程序在安装时被分配用户 ID,应用程序在设备上的存续期间内,用户 ID 保持不变。权限是关于允许或限制应用程序(而不是用户)访问设备资源。
从本质上来说,Android 通过使用沙箱的概念来实现应用程序之间的分离和权限,以允许或拒绝一个应用程序访问设备的资源,比如说文件和目录、网络、传感器和 API。为此,Android 使用一些 Linux 实用工具(比如说进程级别的安全性、与应用程序相关的用户和组 ID,以及权限),来实现应用程序被允许执行的操作。
概念上讲,沙箱可以表示为 图 1 所示。可以清楚地看到,两个 Android 应用程序,各自在其自己的基本沙箱或进程上。
图1
Android 应用程序运行在它们自己的 Linux 进程上,并被分配一个惟一的用户 ID。默认情况下,运行在基本沙箱进程中的应用程序没有被分配权限,因而防止了此类应用程序访问系统或资源。但是 Android 应用程序可以通过应用程序的 manifest 文件请求权限。
通过做到以下两点,Android 应用程序可以允许其他应用程序访问它们的资源:
1) 声明适当的 manifest 权限
2) 与其他受信任的应用程序运行在同一进程中,从而共享对其数据和代码的访问(如图 2所示)。
图2
不同的应用程序可以运行在相同的进程中。对于此方法,首先必须使用相同的私钥签署这些应用程序,然后必须使用 manifest 文件给它们分配相同的 Linux 用户 ID,这可以通过用相同的值/名定义 manifest 属性 android:sharedUserId 来做到。具体的私钥签署和权限相关的内容,请参看 Android安全专栏中的相关文章,这里不再赘述。












本文转自samsunglinuxl51CTO博客,原文链接:http://blog.51cto.com/patterson/974309  ,如需转载请自行联系原作者




相关文章
|
Android开发 开发者 存储
Android可折叠收缩伸展的Expandable分组RecyclerView:模型抽象和封装(二)
Android可折叠收缩伸展的Expandable分组RecyclerView:模型抽象和封装(二) 如今Android这种可收缩伸展的Expandable RecyclerView是如此常用,在附录1的基础上,我重新把模型进行了抽象和封装,设计了一套新的架构和简洁的使用方式支持这种功能。
4261 0
|
开发者 算法 虚拟化
惊爆!Uno Platform 调试与性能分析终极攻略,从工具运用到代码优化,带你攻克开发难题成就完美应用
【8月更文挑战第31天】在 Uno Platform 中,调试可通过 Visual Studio 设置断点和逐步执行代码实现,同时浏览器开发者工具有助于 Web 版本调试。性能分析则利用 Visual Studio 的性能分析器检查 CPU 和内存使用情况,还可通过记录时间戳进行简单分析。优化性能涉及代码逻辑优化、资源管理和用户界面简化,综合利用平台提供的工具和技术,确保应用高效稳定运行。
352 0
|
安全 API 数据库
【转】Android线程模型(AsyncTask的使用)
【转】Android线程模型(AsyncTask的使用)
108 1
|
机器学习/深度学习 JavaScript Shell
如何部署自己的SSD检测模型到Android TFLite上
TensorFlow Object Detection API 上提供了使用SSD部署到TFLite运行上去的方法, 可是这套API封装太死板, 如果你要自己实现了一套SSD的训练算法,应该怎么才能部署到TFLite上呢?   首先,抛开后处理的部分,你的SSD模型(无论是VGG-SSD和Mobilenet-SSD), 你最终的模型的输出是对class_predictions和bbo
5501 0
|
Android开发 C++
Android OpenGL显示任意3D模型文件
Android OpenGL显示任意3D模型文件
Android OpenGL显示任意3D模型文件
|
机器学习/深度学习 移动开发 TensorFlow
【机器学习模型部署】在 Android App 使用TensorFlow Lite
【机器学习模型部署】在 Android App 使用TensorFlow Lite
【机器学习模型部署】在 Android App 使用TensorFlow Lite
|
网络协议 Linux API
Android C++ 系列:Linux Socket 编程(三)CS 模型示例
服务器调用socket()、bind()、listen()完成初始化后,调用accept()阻塞等待,处于 监听端口的状态,客户端调用socket()初始化后,调用connect()发出SYN段并阻塞等待服 务器应答,服务器应答一个SYN-ACK段,客户端收到后从connect()返回,同时应答一个ACK 段,服务器收到后从accept()返回。
288 0
|
Android开发
【Android 逆向】ARM CPU 架构体系 ( ARM 处理器工作模式 | ARM 架构模型 )
【Android 逆向】ARM CPU 架构体系 ( ARM 处理器工作模式 | ARM 架构模型 )
396 0
【Android 逆向】ARM CPU 架构体系 ( ARM 处理器工作模式 | ARM 架构模型 )
|
缓存 Android开发 异构计算
【Android 逆向】x86 CPU 架构体系 ( CPU 模型 | 内存模型 )
【Android 逆向】x86 CPU 架构体系 ( CPU 模型 | 内存模型 )
321 0
【Android 逆向】x86 CPU 架构体系 ( CPU 模型 | 内存模型 )