论文地址:https://www.usenix.org/system/files/osdi22-vant-hof.pdf

这篇论文使用了硬件虚拟化对容器进行隔离,从而实现了轻量化的容器隔离与安全加强。文章的核心想法并不新奇,有很多类似的工作采用了虚拟化以及VMFUNC做内存隔离。其核心的贡献点,在于能够支持未经修改Docker应用,以及对syscall的支持较为完整。由此可见,Solid的工作也是会受到PC们的青睐。

背景

容器作为共享计算的基础设施,被广泛地运用在应用程序的部署,打包与应用隔离中。相较于虚拟机的方式,容器所需要的资源更加少,有更好的启动性能与IO的性能。但是,容器以来与特权OS作为安全的保障,然后以Linux为代表的商用OS代码量大,复杂存在很多攻击的漏洞。攻击者可以通过攻击OS从而实现对容器中数据和内容的攻击。

近几年也有不少的工作,通过不同的软硬件机制,对容器的安全进行加强。例如,基于硬件Enclave的方式对容器中的代码和数据进行强隔离,但是需要应用开发者重写代码,并且会引入较高的CPU计算的开销。而基于虚拟化的方式,也会增加虚拟化的开销同时引入guest OS的代码扩大的TCB。因此当前缺少一种轻量化的安全容器方案。

设计

为了实现轻量级安全容器,作者提出了BlackBox的设计,它能够提供细粒度的内存隔离,同时保护容器的完整性和机密性,并且不需要相信OS。如上图所示,在BlackBox中引入了一个新的安全监视器:container security monitor (CSM), 它负责提供一个受保护的内存空间protected physical address space(PPASes),保证所有外部的代码无法访问受保护的内存地址中的数据,同时内部的代码也无法访问其他的PPASes空间。

BlackBox重用了虚拟化技术,只用于对内存的隔离,而不需要做任何虚拟化相关的工作,从而极大减少了TCB的大小(不需要GuestOS的介入)。BlackBox不需要修改容器中运行的应用程序。应用程序和OS之间的交互会受到CSM的检查(例如系统调用,中断和异常),如果一个受保护的容器需要切换到OS中运行,CSM会将所有与容器相关的寄存器保存并清零;反之,CSM会恢复容器的上下文,并且给予其访问对应PPAse的权限。其中syscall的参数是唯一一个容器内的内容需要被OS访问。CSM会将syscal的参数拷贝到OS的内存中,同时对IO的数据进行端到端的加密。为了保证没有恶意的代码运行在容器中,所有加载到容器中的代码,都需要容器的提供者签名并且加密,由CSM负责解密并加载。

内存隔离

CSM保证OS无法直接访问容器中的内存,为了减少CSM的TCB,CSM允许OS进行内存分配。但是与此同时,需要防止OS发起基于内存的Iago攻击。例如用户希望通过mmap得到一块没有被使用过的内存,但是OS可能返回一个栈地址空间,导致栈上的数据被覆盖重写。

为了解决这个问题,BlackBox不允许OS直接修改容器的页表,而需要CSM介入。CSM会对页表修改的操作做两个检查:

(1)所有映射的虚拟地址是一个合法的地址;

(2)映射的物理地址不在容器所有的PPAS中。

除此之外,BlackBox还提供额外的接口允许OS以CoW的方式获得container中内存数据,但是需要经过CSM的额外的安全检查;同时BlackBox也支持动态的内存回收。

很多系统调用会需要传递内存数据,在BlackBox中采用了和OS共享的缓存,作为系统调用源内存地址。CSM会将需要传递的内存数据拷贝到该缓存区中。对于系统调用的返回值,CSM也会做检查,保证所有的返回值落在预定义的返回值区间内。

进程间通信

类似于pipe以及Unix socket这类system cal允许实现进程间通信。当container想要和外部通信前,会将需要传递的数据加密并拷贝到syscall的共享内存中。数据的加密传输同样应用在read/recvmsg这类调用时。在实现IPC的时候,需要使用futex进行同步保护,因为futex需要OS和container共享同一个futex的标记,所以CSM提供了一个新的CSM call允许OS通过该接口读取在container中存储的futex标记。同时,还需要实现通知的机制,BlackBox采用了signal的机制,但是由于OS需要创建一个signal的栈,所以在创建的时候,OS将signal的栈建立在PPAS之外,当处理signal的时候,CSM会将signal的栈移到PPAS之中。当signal执行结束之后,再将signal的栈移到PPAS之外。

容器的文件系统

为了减少TCB,BlackBox让应用加密保护敏感的数据,并且允许OS加载加密的二进制文件并且正常执行。

实验

作者在两个Arm的平台:Raspberry Pi 4 Model B with a 4-core Cortex-A72以及AMD Seattle Rev.B0 server with an 8-core Cortex-A57 64-bit ARMv8-A 2 GHz AMD Opteron A1100 SoC进行的测试。比较了BlackBox和docker之间的性能。作者选择了四个比较的对象(以native没有采用容器隔离作为baseline):

(1)Docker以及未经修改了Linux容器;

(2)BlackBox以及未经修改的Linux容器,但使能了NPT;

(3)BlackBox使用CSM对容器进行管理,但是没有使能加密IPC;

(4)BlackBox采用了CSM以及加密的IPC等。

测试结果:

null syscall上BlackBox虽然会导致一定的overhead,但是主要的开销在seccomp做的syscall过滤。而CSM call在Arm的架构上因为有独自的EL2的寄存器,所以开销只在于存储与恢复通用寄存器,因此不是主要的开销。

读和写会造成小于两倍的开销,因为需要将读写的内容先拷贝到共享的syscall缓存中。Fork会造成小于三倍的开销,因为在exec的时候会调用mmap需要进行额外的检查,同时加载的binary需要经过解密。

加密的IPC在大多数的场景中的开销都比较小,但是在pipe, UNIX socket等IPC机制中的开销非常的明显。当然,这部分开销也是显而易见的,因为需要对传输的数据进行加解密保护。

作者在memcached, MySQL, and Nginx这些应用上测试结果表明,在真实应用上BlackBox的开销小于15%

总结

该论文采用的方法:NPT对内存进行隔离,以及一个安全monitor对容器和OS之间的交互进行保护,都是非常成熟的技术。同时在测试部分,也只是和docker进行了比较,没有和其他安全容器的技术进行比较,在部分benchmark上的性能相较于其他方式,并没有明显的提高。

Q&A

Q1:因为BlackBox假设OS是不可信,如何保证运行在OS之下的CSM是可信的呢?

A1:我们认为系统的启动是可信的,我们通过安全启动的方式验证CSM代码的完整性

Q2:有提供运行时验证的机制吗?开发者如何知道,应用程序被安全并完整地加载到了BlackBox之中?

A2:应用程序会被开发者加密,在加载的时候有CSM解密,并且检验其完整性。

推荐

中间件的过去、现在和未来

论如何解决学习通被拖库导致的数据泄漏问题


随手关注或者”在看“,诚挚感谢!

BlackBox:在不受信任的系统上保护容器安全相关推荐

  1. 谷歌浏览器安全证书不受信任_windows7系统下谷歌浏览器提示该网站的安全证书不受信任如何解决...

    最近有windows7系统用户在使用谷歌浏览器访问某些网站的时候,反映说出现了提示该网站的安全证书不受信任的情况,遇到这样的问题该怎么办呢,接下来给大家讲解一下windows7系统下谷歌浏览器提示该网 ...

  2. 谷歌浏览器安全证书不受信任_win7系统谷歌浏览器提示该网站的安全证书不受信任的解决方法...

    很多小伙伴都遇到过win7系统谷歌浏览器提示该网站的安全证书不受信任的困惑吧,一些朋友看过网上零散的win7系统谷歌浏览器提示该网站的安全证书不受信任的处理方法,并没有完完全全明白win7系统谷歌浏览 ...

  3. Airtable无法上传附件/图片;点击附件上传没反应;不安全的地址怎么设置为受信任;解决方法亲测有效

    问题描述 在使用Airtable的时候突然遇到 附件上传不了的情况,就是 或者是 检查的时候刷新页面,点击附件上传反复出现下面这些信息: DevTools 无法加载来源映射:无法加载 net::ERR ...

  4. 如何在Mac电脑上添加或删除受信任的电话号码?

    受信任的电话号码用于在其他设备或浏览器登陆时验证您的身份,获取验证码在另一设备上登陆.那我们如何在Mac电脑上添加或删除受信任的电话号码呢?小编给大家带来了详细的图文教程,需要的朋友欢迎参考操作! 具 ...

  5. mac 不受信任在哪里更改_什么是受信任的,为什么它可以在Mac上运行?

    mac 不受信任在哪里更改 So you found something called trustd running on your Mac, and are now wondering if it ...

  6. 如何在iPhone,iPad,Mac上添加或删除受信任的电话号码?

    如何在iPhone和iPad上添加或删除受信任的电话号码 在继续执行以下过程之前,请确保已 在Apple帐户上启用了双重身份验证.完成后,只需按照以下步骤开始.https://www.macv.com ...

  7. 如何在iPhone和iPad上允许“不受信任的快捷方式”

    Khamosh Pathak Khamosh Pathak Shortcuts is now a stock app in iOS 13, iPadOS 13, and beyond. Thanks ...

  8. Windows安装.net Framework时安装不上,提示已处理证书链,但是在不受信任提供程序信任的根证书中终止

    解决Windows安装.net Framework时安装不上,提示已处理证书链,但是在不受信任提供程序信任的根证书中终止. 通过网上资料查询找到了以一个可以解决此问题的博客,这里把连接放到这.下次在遇 ...

  9. 在此iphone上尚未受信任_来自苹果这样的电话千万别接,不然 iPhone 没了...

    大家使用 iPhone 时遇到问题需要维修的话肯定会首先联系苹果客服,一来是官方的比较专业,二来是官方不会骗你. 嗯,官方不会骗你. 所以当你接到所谓的苹果官方技术人员的来电,你会不会放松警惕呢? 近 ...

最新文章

  1. java文件下载大小限制,完整PDF
  2. tkinter中的canvas的边框问题
  3. 模块隐藏(LDR_MODULE链 与 PE特征)
  4. 读债务危机0812:接管房利美和房地美
  5. att汇编教程 linux,ATT 汇编语法
  6. matplotlib的colorbar设置显示的刻度个数和指定的刻度值
  7. 求有向图的简单路径_2020福建农信社招聘-关键路径
  8. Linux学习笔记-匿名和命名管道读写的相同点及不同点
  9. c语言割线法解非线性方程,用割线法解非线性方程组.doc
  10. 计算机组成原理——数据通路
  11. 「 英雄哪里出来 」算法博客阅读指引
  12. team explorer_Team Explorer 2017独立安装程序的退还
  13. 区块链技术如何赋能公共资源招采管理服务?
  14. 快捷餐饮之店家后台订单管理实现
  15. 线代——余子式和代数余子式
  16. 节税指南|人才引进能节税?速教你掌握精髓!
  17. 【安全】漏洞挖掘之王的传奇人生
  18. 基础知识----Symbian UIQ
  19. conda 离线安装本地python包,channel为 unkown 或 <path/to/file> 的问题 (本人在安装 tensorflow2.2.0 时遇到)
  20. 情感分析方法之nltk情感分析器和SVM分类器(二)

热门文章

  1. Problem O: 显示单月的日历
  2. 前端学习笔记之CSS3新特性3D转换 3.23
  3. 怎么去除视频水印不留痕迹?试试这几个方法吧
  4. 爬取wallheaven壁纸
  5. Python小数向上取整和向下取整
  6. iOS:iOS开发系列–打造自己的“美图秀秀”(下)
  7. 字节跳动面试——C++研发工程师
  8. Spring 和 Spring MVC的区别
  9. 运营点总结思维导图如何绘制?分享运营点总结思维导图模板及绘制技巧
  10. 巴蜀1738 曹冲养猪