Xen热修复技术

Xen热修复技术

内容介绍:Xen 是一个开放源代码虚拟机监视器,由剑桥大学开发。

它打算在单个计算机上运行多达100个满特征的操作系统。操作系统必须进行显式地修改(“移植”)以在Xen上运行(但是提供对用户应用的兼容性)。

这使得Xen无需特殊硬件支持,就能达到高性能虚拟化

一、Xen 安全漏洞概要

1、总共发布125安全漏洞

http://xenbits.xen.org/xsa

其中xsa-108xsa-123是高危漏洞

2、XSA-108

2014年101日公布

可导致Hypervisor内存泄露给客户机

3、XSA-123

2015年310日公布

可导致客户机指令提权

二、Xen 安全漏洞的修护方式

1、冷不丁方式

(1)打补丁后重启服务器生效

(2)全部客户 VM 必须 Shutdown

(3)所有 VM 会被中断10-30分钟

(4)多半 Xen 的运营商在使用

2、热补丁方式

(1)动态应用补丁修复漏洞

(2)客户 VM 不用重启或关闭

(3)客户 VM 对修复过程无感知

(4)阿里云掌握热补丁技术

三、Linux 内核 Hotfix

1、业内较成熟的 Hotfix方案

Ksplice by Oracle

Ksplice by Suse

Ksplice by Redhat

Ksplice by Alibaba

2、内核技术的实现方式

1)预留 Pre-Defined 接口

2)允许插入内核 Module

3)有权访问内核内存

4)函数级别的替换

与内核Hotfix 相比,Xen hyperviso Hotfix 技术挑战极大

四、Xen Hypervisor底层架构

Xen热修复技术

五、Xen 热修复的挑战

1、Xen 是 Type-1 Hypervisor 内存被严格隔离;

2、Xen Hypervisor被装载的的地址是动态的;

3、Xen Hypervisor 不支持楼莫块插入。

六、如何访问 Hpypervisor 内存

Xen热修复技术

1、通过 DMA 访问Xen 内存

(1)构造 DMA 请求的能力

利用内核Hotfix 替换 Dom0 内核的这两个函数

在新的map_sg/unmap_sg 中加入过滤逻辑

筛选出特定的DMA 请求,修改 DMA 目的地址

2、正常的文件读操作流程

Xen热修复技术

3、热修复时文件读流程

Xen热修复技术

4、计算修复代码的地址

1)设备 DMA 只能使用物理地址

2Hypervisor 加载过程

3Hypervisor Hotfix 物理地址计算公式加载

4XSA-123

     2月28日,安全团队发布给Pre-disclosure List 成员

(5)修复前后汇编代码对比

     修复后机器码被编译器优化严重

(6)分析、解决过程

通过分析汇编修复相关逻辑

18000多条指令,复杂性较高

(7)修复前后对比

(8)机器码补丁注入流程

确定要注入代码的物理地址

Hypervisor 读出相关代码的机器码(4K)

和期待的 Pattern 比较是否一致

如一致,把机器码 Patch 和读出代码 N Merge, 生成新的 Patch

暂停所有 VM 运行

把新的 Patch 通过 DMA 写回到Hypervisor

回复所有VM 运行

VM 被暂停的时间越短越好

(9)漏洞修复应急过程

2月28日收到 Xen 安全团队通知

3月2日上午漏洞评估完成:高危

3月2日下午确定重启和热修复的方案

3月5日晚第一版热修复方案 Ready36日晚第二版热修复方案Ready

3月6日晚发布到部分机器中

3月9日发布挂出公告开始发全集群310日漏洞公开前发布完成

六、小结

1、云计算业务中安全是头等大事

2、完善的安全问题处理预案

3、热修复技术对安全运营至关重要

4、多团队协作尤为重要

七、课程总结

1、弹性计算虚拟化技术的典型引用

2、虚拟化技术包括以下三点

  CPU 虚拟化 内存虚拟化  IO 虚拟化

3、Xen 和KVM 是当今最流行的开源虚拟化系统

  支撑全球70%以上的云计算业务

4、Xen 安全漏洞热修复技术决定一个公司的运营能力

   阿里云有全球首创的 Hypervisor 热修复技术

   安全修复 xsa-108xsa-123,毒液等恶性安全漏洞

八、参考资料

Intel SDM:Intel 64 and IA-32 Architectures Software Developer

Manuals

弹性计算:https://ecs-buy.aliyun.com

Xen:http://www.xen.org

Xen安全漏洞:http://xenbits.xen.org/xsa/

KVM:www.linux-kvm.org