DOITAPP
DOIT数据智能产业媒体与服务平台
立即打开
DOITAPP
DOIT数据智能产业媒体与服务平台
立即打开

安全沙箱程序:深度防御还是分层漏洞?

童年的时候,我们许多人都玩过沙箱:可控制的玩耍环境,使我们能安全地建立城堡,而不用挖空后院。在计算机领域,沙箱的功能与此类似。只是在这个沙箱中,研究人员和IT技术人员玩的是比特流,而不是一堆沙子。在这篇文章中,我们会讨论应用程序沙箱、或者安全程序沙箱的概念,包括这些程序到底是什么、它们如何工作以及它们带来的漏洞是否比阻止的漏洞更多。

沙箱提供独立或者密闭的空间,能像实际的网络——但并不与实际网络相连接——一样工作。在这个孤立空间中,程序应用也可以被下载、解压和测试,然后再移植到实际的服务器上,从而(希望)能够防止恶意软件致使网络发生紊乱。

图1:运行沙箱和不运行沙箱的计算机示例

沙箱最初是为开发和测试程序而设计,现在已经演变为一个安全工具,能够将活动的程序或进程与宿主系统或本地桌面分隔开。因此,安全沙箱已成为保护系统安全的有效方法,能防止未认证或不受信的程序在网络上肆意破坏。

普通的计算机用户每天都可能会遇到多个沙箱。Google公司的Chrome浏览器使用沙箱隔离JavaScript的执行、HTML的解析以及插件的运行。这是通过让每个标签都独立运行在自己的沙箱中来完成的,从而使得Web应用程序与用户的机器隔离开。然而,在2011年二月初,Google修补了Chrome中的九个错误,包括一个沙箱逃逸漏洞。虽然其他漏洞的细节都公布了,但是Google却没有完全透露关于沙箱漏洞的全部信息。信息的不透明使人们对该款浏览器的安全性产生怀疑。如果这个漏洞允许程序突破沙箱进入到宿主系统,那么宿主系统就可能被安装恶意软件,敏感数据就存在危险。

流行的Web服务贝宝(PayPal)也利用沙箱技术为商户提供测试环境。该沙箱能在实际接受顾客的网络交易服务之前为用户提供产生和管理模拟账户的机会。但这样仍然存在问题——特别是跨站脚本(cross-site-scripting,XSS)漏洞。

Adobe系统公司在其最近发行的Flash版本中加入了沙箱安全功能,防止从本地文件系统加载的Flash文件向远端发送数据。尽管恶意黑客们已经尽力打破了Adobe的沙箱,但是沙箱功能还是是一种潜在有用的威胁防御策略。

计算机和网络取证侦查员也能从沙箱技术中获益。通过让观察员检查恶意执行程序在“自然”环境中解压和执行的情况,沙箱能限制可能的外部因素——如其他的程序或者服务——影响证据。理论上,这听起来很惊人,但实际上,沙箱可能会带来更多的漏洞。

沙箱:技术和用户实例

诸如Adobe和PayPal之类的公司引入沙箱程序,这会使他们的软件更安全吗?还是只是带来了一个潜在的受攻击层?在IT安全领域,深度防御(defense-in-depth)的目标在于分层次使用不同的安全防护方法,努力提高整体的安全现状。然而,在这种情况下,增加一个应用层意味着加入了另一个可渗透的层,可能导致恶意软件和黑客穿透沙箱并进入宿主计算机系统。

在部署沙箱之前安全管理员应问自己如下四个问题:

  • 沙箱技术阻止哪一类威胁最有效?
  • 对公司来说,要最佳的实现和集成沙箱技术,了解沙箱的能力和局限是必要的。不切实际的期望只会导致公司组织更加的自满,也更加脆弱。
  • 沙箱技术不能检测的威胁是什么?
  • 沙箱沙箱不能检测加密的病毒或其他恶意代码,迫使网络管理员不得不增加进一步的安全保护措施,结果是由于增加层次而带来了复杂性。
  • 沙箱会带来什么风险?
  • 沙箱会给系统带入新的安全漏洞,如潜在的堆栈溢出、访问主机系统的本地库以及其他因使用Java和C#编程继承而来的固有缺陷。进一步的风险包括安全措施或数字沙箱本身。
  • 是否有沙箱的替代品可以达到相同的结果?
  • 沙箱技术有助于程序员测试他们所写的代码,但依靠沙箱测试未知代码是有风险的。通常情况下简单地忽略额外的软件层会更加安全。

例如,当Adobe的沙箱运行在保护模式时,一些威胁——如键盘监视——就可能会被避免,但其他的风险——如对受限区域的访问,如注册表——可能会升高。

沙箱的潜在漏洞

沙箱可主要分成三个部分:核心语音解释器、标准函数库以及不受信任的应用程序代码。在这三部分中,标准函数库包含了执行路径——如网络通信和密码系统的路径——是最容易受到攻击的部分。这是使用Java或C#编写这些库直接导致的,使得标准库继承了这些语言的固有缺陷,如堆栈溢出漏洞。实际上,C#将部分代码标记为不安全的不仅会弱化系统的安全性,还会轻易允许对主机系统本地库的访问。

许多人会把沙箱和虚拟机(VM)混淆,这可能是因为许多公司将虚拟机当做沙箱来使用。在典型的家用计算机上,这么做可能是适宜的,可以增加Web浏览时的安全性;但不建议在保存有敏感数据的系统上测试可疑程序。

由于在个人电脑上使用越来越广泛,虚拟机常被用于产生蜜罐或被当做常用的网络安全手段,黑帽黑客们正在编写新的恶意代码。这种恶意代码可通过寻找虚拟机在系统内存、正在运行的进程、注册表和文件系统中留下的典型特征来检测是否有虚拟机正在运行。它甚至会寻找虚拟机硬件和处理指令。因此,使用虚拟机作为沙箱(或其他安全用途)要冒极大的风险,只能吓走低级的——或机会主义的——黑客。这些黑客往往不具备相应的能力或工具来检测是否有虚拟机在运行。

最后,安全沙箱程序不是万能的。沙箱的设计目的在于分隔代码和主机系统;然而,如上所述,沙箱会在无意中带来各种安全漏洞和问题。因此,正如对待其他安全措施那样,在决定使用何种安全功能时,风险评估和风险减低是至关重要的。沙箱技术的发展不仅能寻找到新的应用场景和提供多种多样的好处,也可能导致自满和系统已经完全安全的错觉。尽管深度防御是个好的策略,但同时我们需要谨记,每增加一个应用层,可利用的漏洞也会增加。

各种新式的安全措施都有意想不到的后果,沙箱也一样。因此,单独依靠沙箱来保证程序的完整性将是一个严重的错误。正确的应用程序安全措施要求多层次的安全防护,这些措施一起工作才能提供坚固的、多方面的应用程序防御体系。正确地使用沙箱能带来好处,但是要意识到危险的存在,否则,那些有效的应用程序,可能会像昔日童年的沙砾那样,从你的指尖滑落到地。

未经允许不得转载:DOIT » 安全沙箱程序:深度防御还是分层漏洞?