一、沙盒模型原理介绍现实中的沙盒(SandBox)是一种儿童玩具,类似于肯德基里装满小球的容器,孩子们可以在其中play随意玩耍,扮演保护孩子的角色。(也可以理解为安全环境。)近年来,随着网络安全问题的日益突出,人们更多地将沙盒技术应用到上网中。从技术实现上看,正在从阻止可疑程序访问系统转变为将可疑程序对磁盘、注册表等的访问重定向到指定文件夹,从而杜绝对系统的危害。例如,GreenBorder为IE和FireFox构建了一个安全的虚拟执行环境。用户通过浏览器进行的任何磁盘写入操作都将被重定向到特定的临时文件夹。这样,即使网页中包含病毒、木马、广告等恶意程序,在被强制安装后,也只是安装在一个临时文件夹中,不会对用户的电脑造成危害。对于程序开发中的Java技术,沙箱还具有非常重要的安全意义。沙箱无论何时从远程网站加载代码并在本地执行,安全性都是一个关键问题。单击链接将启动JavaWebStart应用程序。当访问一个网页时,其中的所有Applet也会自动启动。再次单击或访问网页可能会在用户的机器上安装任意代码,使犯罪分子能够窃听机密信息、读取财务数据或接管用户的机器以投放广告。为了保证Java技术不被恶意利用,SUN在设计Java时设计了一套完善的安全模型;也就是说,安全管理器(SecurityManager)会检查所有授权使用的系统资源。默认情况下,只允许无害的操作。为了允许其他操作,代码需要进行数字签名并且用户必须经过数字身份验证。特别是,沙箱中的程序有以下限制:不能运行任何本机可执行文件。无法从本地计算机文件系统读取或写入任何信息。除了Java版本信息和一些无害的操作系统详细信息外,无法查看有关本地计算机的任何信息。特别是,沙箱中的代码无法查看用户名、电子邮件地址等信息。远程加载的程序无法与下载程序的服务器(称为原始主机)以外的任何主机通信。这个规则通常被称为“Remotecodecanonlytalktofamilymembers”这个规则将确保用户不能被代码探测到内部网络资源(在JavaSE6中,JavaWebStart应用程序可以连接到其他网络,但是用户必须征得同意)。因此,近年来沙盒技术非常流行,比如360浏览器等,都声称使用沙盒技术来保证互联网安全,而对于Android系统,也是有意识地引入了这样的概念。2.Android中的沙箱模型在Linux中,用户ID标识给定的用户;在Android上,用户ID标识应用程序。应用程序在安装时会分配一个用户ID,并且用户ID在应用程序在设备上的生命周期内保持不变。权限是关于允许或限制应用程序(而非用户)对设备资源的访问。本质上,Android通过使用沙箱的概念来允许或拒绝应用程序访问设备资源(例如文件和目录、网络、传感器和API),从而实现应用程序之间的分离和权限。为此,Android使用一些Linux实用程序(例如进程级安全性、与应用程序关联的用户和组ID以及权限)来实现允许应用程序执行的操作。从概念上讲,沙箱可以如图1所示表示。您可以清楚地看到两个Android应用程序,每个应用程序都在自己的基础沙箱或进程上。图1Android应用程序在自己的Linux进程中运行,并被分配了一个唯一的用户ID。默认情况下,运行在基本沙箱进程中的应用程序不会被分配权限,从而阻止此类应用程序访问系统或资源。但是Android应用程序可以通过应用程序的清单文件请求权限。Android应用程序可以通过以下方式允许其他应用程序访问它们的资源:1)声明适当的清单权限2)与其他受信任的应用程序运行在同一进程中,从而共享对其数据和代码的访问权限(如图2所示)。图2不同的应用程序可以运行在同一个进程中。对于此方法,首先必须使用相同的私钥对这些应用程序进行签名,然后必须使用清单文件为它们分配相同的Linux用户ID,这可以通过定义具有相同值/名称的清单属性android:sharedUserId来完成。具体的私钥签名和权限相关内容可以参考安卓安全专栏相关文章,这里不再赘述。
