在谈论沙箱和软件容器之间的区别前,你需要先了解一些事情。现在,大多数企业已经将应用程序容器和虚拟化用于很多不同目的,其中很多与安全性息息相关,其中包括:
- 他们使用VM在虚拟数据中心或IaaS中运行安全工具。
- 他们使用虚拟机管理程序功能(例如快照)来帮助支持配置管理和修复。
- 他们使用容器来支持微服务和服务网格架构。
- 他们同时使用VM和容器来支持DevOps工具链中安全活动的自动化。
不过,在这篇文章中,我们将探讨如何使用这些工具来专门支持沙箱。几年前,沙箱开始流行,当时大家意识到恶意软件仍然可能绕过防病毒软件并感染网络。防病毒的问题在于,所有系统都需要在计算机上安装基于签名的代理,并且必须定期更新它们,为端点提供机会来抵御恶意软件。由于防病毒并不能捕获所有内容-即使保持其更新并安装在工作站,于是沙箱的使用开始增加。
VM沙箱安全模型
从本质上讲,沙箱是关于创建隔离的独立环境,你可将其用于特定安全目的,例如FreeBSD。例如,对于反恶意软件,你可以使用隔离的沙箱引爆恶意软件样本以查看其行为。通过运行可疑恶意软件样本并观察其行为,你可以观察攻击方法,以了解你为何成为攻击目标。在未知软件的情况下,你可以使用此方法来确定文件是否可以安全地在托管端点运行。如果该软件不执行任何恶意操作,则可以将其中继给最终用户。同样,对于可疑的恶意软件样本,你可以使用此技术来进一步研究恶意软件。这可以让你知道你是否是复杂攻击活动(例如民族国家)的目标,还是只是被机器人或脚本小子随机地作为目标。
虚拟机管理程序提供两个功能,使此技术更安全。首先,它们以无孔方式执行分段。在现代环境中,我们使用虚拟化,这意味着分段边界至关重要。考虑到现在很多企业使用多租户IaaS,我们很可能看到数据被窃取或者尝试跨VM分段边界的攻击,例如企业可以从同一虚拟机管理程序上窃取数据、破坏或以其他方式攻击其他VM。其次,虚拟机监控程序让我们有选择地限制或阻止VM可以执行的操作。例如,它可以防止工作负载在网络上发送或接收数据,或者可以使用快照将损坏的VM恢复到已知可靠状态。
在这种方式下,基于虚拟机的沙箱依赖于多个虚拟机来捕获流量,使其进入和流出网络,并充当恶意活动检测的检查点。这种沙箱的目的是获取未知文件,并在其中一个VM中引爆它们,以确定该文件是否可安全安装。由于恶意软件作者可以使用多种逃避技术来使文件看起来安全,因此这并不总是万无一失的解决方案,但确实可提供额外的防御层。
容器沙箱安全模型
我们可以使用的另一种方法是软件容器。现在有多种不同的部署模式。Docker和Rocket等工具可创建隔离的应用程序环境;分段是在OS级别执行-在这种情况下,使用Linux名称空间和cgroup。某些操作系统中还内置了基于容器的配置,例如Linux中的chroot jails或Windows的Windows Sandbox。
从使用的角度来看,你可以将容器中的所有内容指定为始终不受信任,从而使你能够创建单独的隔离环境,该环境不会影响基础主机。在这种使用情况下,该容器中的所有东西都被认为具有潜在风险。而且容器不会尝试确定文件是否损坏;它只是阻止恶意软件活动传播或破坏基础主机。例如,考虑这种情况,你担心用户容易受到偷渡式下载攻击或其他虚假活动攻击。一种方法是在应用程序沙箱中运行浏览器,并在用户的浏览会话完成后清除沙箱。用户收集的任何潜在恶意软件都会与沙箱一起清除。
当采用这种方式时,软件容器不会使用防病毒产品之类的签名。它们不会阻止攻击,只是限制攻击所影响的范围受,因为容器是围绕特定应用程序而构建(上述示例中是浏览器),以隔离攻击,防止攻击扩散到操作系统的其他部分。
在很多时候,这种方法会让容器将沙箱带到端点。你不必担心下载的文件的内容,只需要让用户使用完应用程序后将其重置为良好状态。
沙箱与容器的使用注意事项
究竟是使用沙箱还是容器,这很难选择,最好在可能的情况下同时使用两者。你的用法将在很大程度上决定方法。典型的基于VM的沙箱方法可能涉及系统挑选可疑文件-在其通过沙箱时。与传统的防病毒软件相比,这很吸引人,因为它不需要安装代理即可查找签名。反过来,这意味着它有可能找到并正确标记没有先兆的恶意软件样本。
另一方面,另一个用例是使用软件容器在高风险应用程序(例如用户的浏览器)周围创建隔离墙。这种方法通常比较繁琐,并且依赖于端点和/或应用程序的配置。
为了确定哪种工具最适合你,请尝试确定当前哪个区域对你的环境构成最大的风险,并确定这些选项中的哪一个将为你提供最大的前期保护。你希望加强对电子邮件恶意软件的抵御?在这种情况下,集成到电子邮件网关中的基于VM的方法可能是不错的选择。你是想减少偷渡式下载等攻击?在这种情况下,软件沙箱可能更适合你。
哪种架构最适合你的环境取决于你的架构,但是了解容器和沙箱之间的区别无疑是第一步。