写点什么

Lars Kurth 谈开源安全流程之二:容器 vs 虚拟机管理程序

2015 年 12 月 27 日

【编者的话】随着云平台的日渐流行,其面对的安全问题也越来越严重。近日, Xen 项目顾问委员会主席 Lars Kurth 分享了其对开源安全流程的理解和看法。作为该系列文章四部分的第二篇,本文介绍了Lars 对于容器和虚拟机管理程序的不同安全漏洞的理解。

在这一系列的第一部分,Lars 介绍了他对于云安全背后的理论和这些理论与《行尸走肉》(The Walking Dead 2)电视剧的关系。阅读第1 部分:云安全介绍

随着虚拟化软件的发展,每一个接口中的每一个要素都有机会犯错误,接口调用每一段代码都可能会引入漏洞,接口的每一个角落都可能给攻击者提供突破的机会。这就是所谓的“受攻击面”,信息技术需要考虑由虚拟化软件本身的接口中的漏洞所带来的风险,以及当接口被调用的时候需要执行的代码量。

通过给定不同的功能,让我们介绍“受攻击面”是如何形成的,以及在流行的云技术中它们有什么关联和差异。

首要攻击媒介:操作系统功能

虚拟化和容器的基本构建模块是调度和内存管理。在Xen 的环境下,虚拟机管理程序整个从头到尾重新实现了这个功能。Linux 内核展示的KVM 功能,由KVM 内核模块进行增强,被调度虚拟机重用,并用来管理它的内存。在这种模式下,每一个虚拟机都是一个Linux 进程,这个进程通过Linux 调度器调度,同时它的内存是由Linux 的内存分配器分配。相同的复用的概念也适用于容器。

KVM 和容器之间的主要区别是:KVM 在每个虚拟机(要么是 Linux 的不同版本,要么是完全不同的操作系统内核,如 Windows)中运行一个单独的内核实例,并使用一个内核模块和 QEMU 来实现额外的条块分割。容器使用相同的内核实例,并通过内核的系统调用接口的单个实例来管理容器以及容器中运行的应用程序。

尽管容器中的 Linux 内核的重用有许多优点,但需要在经由系统接口的可用功能的广度与它背后的代码之间进行平衡。这增加了代码中出现错误的风险,以及相比 Xen 更容易出现漏洞,Xen 仅实现必要的部分,另外,KVM 重新使用 KVM 内的内核功能,而不直接将其暴露给客户虚拟机。

如果你将 Linux 内核系统调用接口与 Xen 的调用接口进行比较,Linux 的外部接口中的幅度差大于 300,而 Xen 的外部接口中的幅度差仅仅为 40。内核给你提供文件系统,其中包括了文件、目录、查找、FSTAT、阅读、MMIO 和 AIO。你可以创建多少种不同的 sockets 呢?存在多少种不同的 IPC 机制呢?所有带有内部状态的事情都必须正确处理,如 Futexes、共享内存、读写控制、TTY。在 Linux 系统调用接口,还有更多的机会可能会犯错。如下表 1 所示,在一个更加规则的基础上,会出现了更多的错误。这给问题增加了复杂性和受攻击面的数量。

第二攻击媒介:设备仿真

虚拟机管理程序,如 Xen 和 KVM,使用 QEMU 作为设备模型仿真器来仿真服务器硬件部件,如主板,定时器,内核中的外部中断和 I/O。 Xen 在某些情况下(例如,x86 的 HVM,但不适用于 x86 的 PV,以及 ARM 架构)只使用仿真,而 KVM 完全依赖于 QEMU(或提供类似功能的替代方案)。

设备仿真很复杂,其原因有两个。首先,硬件接口需要权衡硬件实现与软件执行之间的关系,其次,在此过程中需要仿真大量设备。这就是为什么我们最近在 QEMU 中常常看到漏洞增加的原因。

表 1:该表显示了关于显著的漏洞的一个调查结果,该结果发表于 FOSDEM 2015。 m 相应的 2015 年的调查还没有执行,还需要花费更多的努力。要注意的是,Xen HVM 的图有一些类似于带 QEMU 的 KVM。

第三攻击媒介:I / O 和设备驱动程序

如前所述,系统的 I / O 是恶意的有效载荷进入云系统的主要途径。攻击通常试图利用设备驱动程序的漏洞,这给攻击者提供了访问系统中所有内容的路径,因为设备驱动程序运行在 Linux 内核模式下。在虚拟化环境中,设备驱动程序漏洞可能赋予攻击者单个虚拟机的控制权限,但为了攻击主机上的其他虚拟机,就需要利用额外的漏洞来获得对主机的控制。

由于仿真在本质上是非常缓慢的,Xen 和 KVM 为磁盘和网络访问采用半虚拟化 I / O 驱动程序,因此二者不需要仿真。半虚拟化 I / O 驱动程序往往是非常简单的,将其与容器相比,半虚拟化 I / O 驱动程序采用单内核实例的系统调用接口,并能够实现与设备驱动程序的交互。正如前面指出的,系统调用接口的工作量是非常大的,远远超过 PV I / O,以及组合的仿真 I / O。因为设备驱动程序是运行在内核模式下,因此相比虚拟机管理程序的部署,容器部署带来的风险会高得多。

结论

针对容器技术,最近不少厂商也开发了许多安全功能,如每个容器的 ulimit、容量消减、设备访问限制、Linux 安全模块(SELinux、AppArmor)的改进处理、用户命名空间的提高,以及所有的深度防御(多重保护层)的例子

尽管有了这些努力,以及尽量用最小的 Linux 发行版,与虚拟机管理程序相比,容器的根本问题仍然存在,因为它们有一个非常大的“受攻击面”,使得它们本质上非常脆弱。这就是为什么我们需要尝试将虚拟化技术与容器进行结合,比如超清晰容器和 Xen 容器,现在都已经开始在制造声势。

编后语

《他山之石》是 InfoQ 中文站新推出的一个专栏,精选来自国内外技术社区和个人博客上的技术文章,让更多的读者朋友受益,本栏目转载的内容都经过原作者授权。文章推荐可以发送邮件到 editors@cn.infoq.com。


感谢董志南对本文的审校。

给InfoQ 中文站投稿或者参与内容翻译工作,请邮件至 editors@cn.infoq.com 。也欢迎大家通过新浪微博( @InfoQ @丁晓昀),微信(微信号: InfoQChina )关注我们,并与我们的编辑和其他读者朋友交流(欢迎加入 InfoQ 读者交流群(已满),InfoQ 读者交流群(#2))。

2015 年 12 月 27 日 16:23773
用户头像

发布了 268 篇内容, 共 100.3 次阅读, 收获喜欢 16 次。

关注

评论

发布
暂无评论
发现更多内容

架构2期-大作业(一)

浮生一梦

大作业 2组 架构师训练营第2期

机器学习·笔记之:Inverse and Transpose

Nydia

话题讨论 | 新年将至, 程序员如何以代码送出新春祝福

孙叫兽

Java 程序员 前端 话题讨论 新春祝福

Arthas 使用的各类方式

阿里巴巴云原生

Java 微服务 云原生 中间件 Arthas

从0到1实现一个简单计算器

codevald

Java 项目 计算器 动手实践

Serverless 场景下 Pod 创建效率优化

阿里巴巴云原生

Docker Serverless 容器 云原生 k8s

停车、投票、领证,区块链如何在「智慧城市」建设中大显身手?

CECBC区块链专委会

区块链

逼疯UE设计师,不可不知的提升产品用户体验的10个测试方法

华为云开发者社区

产品 测试 UI 用户体验

无意间发现 Google 代码模板,分享给大家!

C语言与CPP编程

c++ JavaScript objective-c 代码规范 Python 编码格式

产品经理训练营笔记-业务流程与产品文档(一)

.nil?

产品经理训练营

架构师训练营第十一周作业

zamkai

架构2期-大作业(二)

浮生一梦

大作业 2组 架构师训练营第2期

2 期架构师训练营 - 第三周学习总结

Vicente

架构师训练营第2期

前端开发:Node版本引起的报错问题

三掌柜

vue.js 前端

搜索引擎简述

跳蚤

架构师训练营第六周作业

跳蚤

执行、管理、领导做不好,都有懒的因素

刘华Kenneth

领导力 管理 软件开发

Spring Boot 微服务性能下降九成!使用 Arthas 定位根因

阿里巴巴云原生

Java 微服务 云原生 中间件 Arthas

几幅图拿下 ARP 协议

飞天小牛肉

Java 程序员 计算机网络 网络协议 2月春节不断更

面试官:高并发下HashMap的死循环是怎么形成的?

Crud的程序员

Java hashmap

字节跳动面试必问:从外包月薪5K到阿里月薪15K,学习路线+知识点梳理

欢喜学安卓

android 程序员 面试 移动开发

杜绝“萝卜章”风险,区块链电子签章助力企业降本“保真”

CECBC区块链专委会

电子签名

最好的IDEA debug长文?看完我佛了

YourBatman

eclipse debug IntelliJ IDEA 远程调试

区块链还可以这么玩?“点亮莫高窟”背后的腾讯云区块链

CECBC区块链专委会

区块链

大作业(一)

bing5tui3

极客时间架构师二期

排查指南 | 当 mPaaS 小程序真机扫码时提示 "应用更新错误(50002)"

蚂蚁集团移动开发平台 mPaaS

小程序 问题排查 mPaaS

字节跳动架构师讲解Android开发!2021年展望Android原生开发的现状,分享一点面试小经验

欢喜学安卓

android 程序员 面试 移动开发

欢度春节|新用户专属福利

InfoQ写作平台官方

活动专区

公安可视化指挥调度系统开发,大数据分析平台搭建

WX13823153201

大作业(二)

bing5tui3

架构师训练营第2期

kafka的实现原理

八两

kafka Kafka知识点 kafka实现原理 kafka架构

微服务架构下如何保证事务的一致性

微服务架构下如何保证事务的一致性

Lars Kurth谈开源安全流程之二:容器vs虚拟机管理程序-InfoQ