首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

虚拟化安全sandbox技术分析

前言:

libvirt-4.3搭配qemu-2.12使用,如果使用默认的编译选项,可能会让qemu无法正常启动虚拟机。会报出来“qemu-system-x86_64: -sandbox on,obsolete=deny,elevateprivileges=deny,spawn=deny,resourcecontrol=deny: seccomp support is disabled”的错误。

好吧,老习惯,分析代码。

分析:

1, seccomp support is disabled

在编译的时候,没有打开CONFIG_SECCOMP编译选项。

从configure文件上来看,如果安装了libseccomp就是默认打开的;再或者就是--enable-seccomp和--disable-seccomp来控制。

2,libvirt

/etc/libvirt/qemu.conf中通过seccomp_sandbox来控制。

0是关闭,1是打开,-1是自动检测。注意,如果这里没有配置,libvirt则会自动检测。

那么就会出现上文的状况,libvirt的检测逻辑中,没有发现当前版本的qemu不支持sandbox,启动参数中带有了sandbox配置,导致qemu报错。

解决办法就是安装libseccomp,执行congfigure时添加--enable-seccomp,清空/var/cache/libvirt/qemu/capabilities重启libvirtd即可。

3,libseccomp

下载代码https://github.com/seccomp/libseccomp

libseccomp的代码量比较小,大约有几部分:

a,本地的db。用来保存seccomp的规则。

b,bpf生成。用来生成bpf代码。

c,使用syscall加载到kernel。prctl(PR_SET_SECCOMP, SECCOMP_MODE_FILTER, program);

4, PR_SET_SECCOMP

看一段man page,大意是说通过prctl的 PR_SET_SECCOMP可以限制进程使用syscall。更多的话,需要参考内存文档。

5,gvisor

Google搞了一个大新闻,开源了gvisor,地址https://github.com/google/gvisor

套路复杂很多,主要是为了容器使用的。

容器是直接运行在host os上的,可以访问host上的所有syscall,安全性上确实还不够。gvisor可以在一定程度上弥补这一点。

相比之下,虚拟机则不是,qemu使用到syscall集中于epoll,pread,pwrite,ioctl等比较有限的范围内。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180518G1NHW900?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券