写点什么

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:23760
用户头像

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

关注

评论

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

anyRTC与京东智联云市场达成战略合作,携手音视频平台

anyRTC开发者

ios 音视频 WebRTC RTC 安卓

USDT支付入金系统开发搭建,跨境USDT支付系统开发

135深圳3055源中瑞8032

分布式文件存储QoS硬核黑科技,真香

焱融科技

高性能 存储 HPC 分布式文件存储 QoS

最近程序员频繁被抓,如何避免面向监狱编程!?

Java架构师迁哥

uni-app支持PC宽屏适配

崔红保

uni-app 前端框架

合约一键智能跟单软件,跟单平台开发

135深圳3055源中瑞8032

云原生时代 容器持久化存储的最佳方式是什么?

京东智联云开发者

数据库 云存储

WebSocket-技术专题-服务器端消息推送

李浩宇/Alex

「深度解析」告诉你如何选择容器存储

焱融科技

Kubernetes 云原生 焱融科技 容器存储 分布式文件存储

我服了,难倒无数程序员的源码面试,就这样被轻轻松松讲透彻

小Q

Java 学习 源码 架构 面试

程序员不愿意说的秘密!Java进阶架构师必看:架构完美设计+程序员三门课+架构修炼之道

Java架构追梦

API生态的发展与机遇:从5000组数据看中国API生态与开发者现状

华为云开发者社区

华为 API

数字货币钱包开发,去中心化钱包源码搭建

135深圳3055源中瑞8032

MySql从青铜到王者晋级之路,阿里大牛经验总结让牛少走弯路!

Java架构之路

Java 程序员 架构 面试 编程语言

java安全编码指南之:文件IO操作

程序那些事

java安全编码 java安全 java安全编码指南 java代码规范

币币交易所开发,区块链交易系统源码

135深圳3055源中瑞8032

爬虫“学前班”,记住这些不踩坑!

华为云开发者社区

爬虫 数据 搜索

以A.I.之力打破方言沟通障碍 科大讯飞重磅发布智慧翻译系统

Talk A.I.

小程序云开发实战:从0搭建科技爱好者周刊小程序

薛定喵君

微信小程序 小程序云开发 云开发

大企程序员亲身经历告诉你,CRM系统,自己的才是最好的

Learun

敏捷开发

来自朋友最近阿里、腾讯、美团等P7岗位面试题

艾小仙

Java 阿里巴巴 程序员 腾讯 面试

搜狗搜索或成为企鹅号流量入口:腾讯欲实现自己的流量闭环

石头IT视角

基于阿里云容器的CI/CD落地实践

LorraineLiu

阿里云 k8s Helm jenkins CI/CD

openEuler开源下一代全场景虚拟化平台StratoVirt

openEuler

开源 虚拟化 openEuler stratovirt

个人计算机、工作站、服务器的主要区别

德胜网络-阳

如何生成 Flink 作业的交互式火焰图?

Apache Flink

flink

架构师训练营第六周作业

Geek_4c1353

数字货币交易所开发,去中心化交易所平台搭建

WX13823153201

数字货币交易所开发

接口测试工具

测试人生路

接口文档 接口测试

你用过宏##粘贴函数,然后用函数指针查找执行吗?今天就给你说道说道

良知犹存

c c++

云开发·多次订阅一次性订阅消息后定时发送

Yukun

微信小程序 小程序云开发 消息推送 订阅消息

InfoQ 极客传媒开发者生态共创计划线上发布会

InfoQ 极客传媒开发者生态共创计划线上发布会

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