开发人员信#23-工人安全:什么是沙盒,为什么我们需要它?

iExec使用英特尔®SGX技术来保护应用程序免受工作人员的侵害,但是什么保护了工作人员免受应用程序的侵害? 隔离Docker容器是否足够? 当前可用于iExec的沙盒解决方案是什么,以及如何安装它们?

“沙箱”是一种安全机制,用于隔离正在运行的程序并在安全的环境中执行它们。 此机制允许执行从不受信任方发出的不受信任的应用程序,而不会给主机带来任何风险。

当前,iExec通过将作业或任务打包到“ Docker容器”中来启动它们。 Docker容器允许对应用程序执行环境进行某种隔离,但是我们认为这种隔离是不够的。 我们仍然面临着所有Docker容器与主机共享同一内核的问题。 每年都会发现许多内核漏洞(仅在2017年就有400多个!)。 问题是第三方有机会利用内核漏洞并损害主机的操作系统。

在iExec的分布式云环境中,当主机的操作系统受到威胁时,最严重的攻击之一就是窃取员工的钱包。 因此,我们需要其他保护机制来保护工人免受潜在危险的应用。

已经研究并考虑了许多解决方案来保护iExec网络中的工作人员。

Docker强化

最初的想法是使用现成的Linux安全模块来增强Docker容器的安全性。 为了防止容器违规影响主机操作系统,我们对SELinux,AppArmor和Seccomp进行了试验。 该解决方案允许为Docker容器指定细粒度的安全策略。

但是,此解决方案的主要缺点是几乎不可能定义解决所有情况的相关策略,尤其是未知应用程序的执行。 因此,该解决方案不能在iExec生态系统内应用。

gVisor

由Google开发的“ gVisor”是容器的用户空间内核。 gVisor拦截应用程序系统调用并充当来宾内核。 它实现了大多数内核原语,并在这些原语之上构建了系统调用处理程序。 使用此解决方案,执行的应用程序使用与主机内核分离的用户空间内核。

为了提供“深度防御”,gVisor采用了基于规则的执行。 结果,它提供了比简单的Docker执行更多的安全性。 但是,gVisor用户空间内核并未实现所有内核原语,而是使用“ ptrace”来控制应用程序的执行。 结果,它降低了应用程序兼容性,并增加了每个系统的调用开销。 由于iExec旨在提供任何类型的应用程序的有效执行,因此该解决方案也被放弃。

硬件虚拟化

如今,硬件虚拟化是最安全的应用程序分离机制之一。 虚拟化在软件和硬件之间创建了一个抽象层。 虚拟化的计算资源被供应到隔离的实例中。 每个实例在逻辑上都是隔离的。 这意味着实例的恶意软件攻击不会影响主机或其他实例。 该实例简称为虚拟机或“ VM”。

使用VM进行硬件虚拟化的问题在于,您必须事先为特定应用程序准备执行环境。 因此,如果您的应用程序有一些特殊的库要求,则需要准备一个特殊的VM映像并将其打包到其中。 此外,传统的VM占用空间大且启动时间长。 因此,纯硬件虚拟化不适用于iExec。 iExec需要在容器和硬件虚拟化技术之间混合使用。

卡塔集装箱

Kata Containers是一个新的开源项目,它构建了极其轻巧的虚拟机,可以无缝地插入到容器的生态系统中。 它既提供了VM的安全性,又提供了容器的速度。 该解决方案结合了Intel Clear ContainersHyper runV的技术 。 它的设计与硬件无关,并且与开放容器倡议(OCI)和容器运行时接口(CRI)兼容。 这意味着它可以与Docker和Kubernetes一起使用。

Kata容器解决了传统VM占用空间大的问题,并提供了与容器可比的启动时间。 在Kata Containers中,每个容器都有自己的轻量级VM,通过硬件虚拟化提供隔离。 因此,Kata Containers同时为我们提供了硬件虚拟化的安全性以及使用容器的便利性。

硬件虚拟化需要虚拟机管理程序,以在软件和基础硬件之间提供抽象层。 Kata容器旨在支持多个虚拟机管理程序,现在可与QEMU / KVM一起使用。

如今,QEMU / KVM与其他开源虚拟化解决方案相比,具有对GPU虚拟化的更好支持,并具有英特尔®SGX兼容性。

尽管事实上Kata容器与已经虚拟化的环境的兼容性有限,但是如果您想成为iExec工作者并且对机器感到安全,则值得考虑使用此解决方案。

硬件

  • 裸机(Intel VTX,ARM Hyp模式,IBM Power Systems)
  • 启用了嵌套虚拟化的虚拟化环境

操作系统

  • CentOS的
  • 软呢帽
  • 红色的帽子
  • OpenSUSE
  • 的Ubuntu
  • SLES

我们准备了一个脚本,它将为您完成所有安装工作。 我们称它为iExec Kata worker安装脚本 。 它将安装所有必需的软件包并配置环境以启动iExec Kata worker。

首先,如果需要,将安装我们的脚本:

  • Docker引擎
  • 卡塔集装箱
  • iExec工作者

然后,它将准备一个Docker环境以执行Kata容器中的工作程序任务。

您还可以配置将用于每个任务执行的vCPU编号和RAM数量。

要安装iExec Kata worker环境,只需运行我们的脚本:

须藤bash ./install-kata-worker.sh

警告! 安装iExec Kata worker之后,所有docker容器都将在Kata容器内执行。

要删除Kata容器并还原docker环境:

须藤bash ./remove-kata-worker.sh

目前,可以在任何Ubuntu和某些Debian操作系统上启动准备好的脚本。 如果您对在其他操作系统上安装iExec Kata worker感兴趣,则有两种选择:

  • 您可以询问我们,我们将发布此脚本的下一个版本,它将与Kata容器支持的所有操作系统一起使用
  • 您可以使用官方的Kata容器文档并自行完成。

可以在我们的GitHub上找到iExec Kata worker脚本:

  • iExec Kata工人

iExec worker是使用默认docker运行时启动的,而不是在Kata容器中启动的。 我们正在考虑可以在主机上以普通docker容器启动工作程序,而没有任何风险。

另一方面,必须将工作人员执行的所有任务沙盒化。 因此,它们将由Kata Containers中的工作人员自动启动。

要为Workerdrop启动iExec Kata Worker:

docker run —始终重新启动\
-运行时runc
—主机名kata-worker- $ HOST \
— env SCHEDULER_DOMAIN = api-workerdrop-pool.iex.ec \
— env SCHEDULER_IP = 52.52.233.12 \
— env LOGIN = worker \
— env PASSWORD = K2ovTKF6mfHbDx5kDsyi \
— env LOGGERLEVEL = INFO \
— env SHAREDPACKAGES = \
— env SANDBOXENABLED = true \
— env BLOCKCHAINETHENABLED = true \
— env SHAREDAPPS = docker \
— env TMPDIR = / tmp / iexec-worker-drop \
— env WALLETPASSWORD = WALLET_PASSWORD \
-v /PATH/TO/WALLET/wallet.json:/iexec/wallet/wallet_worker.json \
-v /var/run/docker.sock:/var/run/docker.sock \
-v / tmp / iexec-worker-drop:/ tmp / iexec-worker-drop \
iexechub / worker:latest

可以在以下位置找到更多信息:https://docs.iex.ec/

网站•博客•松弛•电报•Reddit•Twitter•Facebook•LinkedIn•Youtube•Github•Kakao•Instagram•Steemit•Katacoda•文档