转载

开源安全流程第2部分:容器vx. Hypervisor - 保护攻击面

该系列的第二部分里, Xen Project 咨询委员会主席Lars Kurth探讨了容器和hypervisor不同的安全脆弱性。请看 第1部分:云安全介绍

一旦使用了虚拟软件,每个接口的每个部分都是可能犯错的地方。接口调用的每一段代码,都可能成为安全漏洞。接口的每个地方都可能成为攻击者的攻击入口。这称之为“攻击面”。IT需要考虑到接口里的漏洞可能带给虚拟软件本身的风险,也要考虑到调用接口时会执行的代码数量。

让我们先看看给定的不同功能是如何构成“攻击面”的,以及在流行的云技术里它们如何关联又有哪些不同。

第一个攻击向量:操作系统功能

虚拟化和容器的基本构建块是调度器和内存管理。以Xen为例,hypervisor从头重新实现了这些功能。KVM的该功能则是通过Linux内核实现的 -- 通过KVM Kernel Module扩展 -- 重用其来调度VM并且管理内存。该模型下,每个VM是一个Linux进程,由Linux调度器调度,同时通过Linux内存分配器分配内存。相同的重用理念也用在容器上。

KVM和容器的核心区别是,KVM在每个VM(要么是Linux的不同版本,或者完全不同的操作系统内核,比如Windows)里运行各自的内核实例,并且使用内核模块和QEMU来实现额外的分割。容器则使用相同的内核实例,通过内核syscall接口的单个实例来管理容器,以及容器里运行的应用程序。

虽然容器里的Linux内核的重用有很多优势,关键取舍之一就是通过syscall接口可用的功能广度和背后的代码。这增加了代码出错的风险,和Xen(只实现了必需部分)以及KVM(在KVM里重用了内核功能,没有直接暴露给客户VM)相比,可能暴露的漏洞风险也大大增加。

如果将Linux kernel syscall接口和Xen hypercall接口相比较,暴露的接口有数量级上的区别(Linux上>300,Xen上是40)。内核给出的文件系统包括文件,目录,seek,fstat,read,mmio

和aio。能创建多少种不同的套接字?存在多少种不同的IPC机制?Futexes,共享内存,ioctls,TTY --所有这些都包含很多需要正确处理的内部状态和边缘用例。使用Linux系统调用接口时更容易犯错。如表1所示,更经常得发生更多的错误。这些都增加了层次的复杂度,并且扩大了攻击面。

第二个攻击向量:设备模拟

Hypervisor,比如Xen和KVM,使用QEMU作为设备模型模拟器,来模拟服务器硬件组件,比如主板,计时器,中断和在客户机的内核里暴露给驱动的I/O。Xen在一些场景下只使用了模拟(比如,针对x86上的HVM,但是没有针对x86上的PV,也没有ARM架构),而KVM完全依赖于QEMU(或者类似的提供相近功能的东西)。

设备模拟比较复杂,因为首先,硬件接口在便于软件实现和便于硬件实现之间做权衡,其次,需要模拟的设备数量很大。这可能也是QEMU里的VENOM漏洞引起大家注意之后,QEMU的漏洞大幅增长的原因。

开源安全流程第2部分:容器vx. Hypervisor - 保护攻击面

表1:该表显示了重要漏洞的调查结果,在 FOSDEM 2015 上展示。注意2015年尚未进行类似调查,因为该调查需要花费很多精力。该系列的第三部分,会介绍将不同技术领域的漏洞公平比较所面临的挑战。也要注意Xen HVM的图表和使用QEMU的KVM的图表类似。

第三攻击向量:I/O和设备驱动

如上文所述,系统里写入读出的I/O是恶意负载进入基于云的系统的主要途径。攻击通常会尝试找到设备驱动的漏洞,攻击者利用该漏洞能够访问系统里的任何东西,因为设备驱动运行在Linux内核态。在虚拟化的环境里,设备驱动漏洞可能能让攻击者获得单个VM的控制权,但是还需要其他的漏洞才能获得主机的控制权,从而攻击运行在该主机上的其他VM。

因为模拟天然很慢,Xen和KVM为磁盘和网络访问使用超虚拟化I/O驱动,从而避免模拟。超虚拟化I/O驱动其实非常简单。将其和容器相比,容器使用单个内核实例的syscall接口和设备驱动交互。如上文所述,syscall接口很大——比PV I/O和模拟的I/O加起来还要大很多。设备驱动在内核态运行,和hypervison部署相比,容器部署的风险巨大。

结论

最近开发了很多针对容器的安全特性,比如,基于容器的ulimit,容量减少,设备访问限制,Linux安全模块(SELinux,AppArmor)加强处理,改进的用户命名空间等等,都是深度防御(多层保护)的例子。

除了这些改进,和hypervisor相比,容器的根本性问题仍然存在,即使它们尝试使用最小的Linux发行版,它们还是成为了非常大的“攻击面”,使得它们天然得易受攻击。这也是为什么有些技术尝试结合虚拟化和容器的原因——比如 Hyper , Clear Containers 和Xen Containers——都在稳步发展。

原文链接: Open Source Security Process Part 2: Containers vs. Hypervisors - Protecting Your Attack Surface (翻译:崔婧雯 校对:)

===========================

译者介绍

崔婧雯,现就职于IBM,高级软件工程师,负责IBM WebSphere业务流程管理软件的系统测试工作。曾就职于VMware从事桌面虚拟化产品的质量保证工作。对虚拟化,中间件技术,业务流程管理有浓厚的兴趣。

正文到此结束
Loading...