zoukankan      html  css  js  c++  java
  • 虚拟化安全 sandbox 技术分析

    原文链接:https://cloud.tencent.com/developer/news/215218

    前言:

    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等比较有限的范围内。

  • 相关阅读:
    我们的CPU遭到攻击[LOJ558]
    历史[ZJOI2018]
    字符串[LOJ6517]
    奥运公交[LOJ3255]
    BLO-Blockade[POI2008]
    压力[BJOI2013]
    Earthquake[USACO01OPEN]
    暴力写挂[CTSC2018]
    极简教程:数据结构与算法(二)
    DllRegisterServer的调用失败的问题解决方法
  • 原文地址:https://www.cnblogs.com/wangjq19920210/p/9289321.html
Copyright © 2011-2022 走看看