开发者学堂课程【虚拟化技术入门:Xen热修复技术】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/374/detail/4700
Xen热修复技术
内容介绍:
Xen 是一个开放源代码虚拟机监视器,由剑桥大学开发。
它打算在单个计算机上运行多达100个满特征的操作系统。操作系统必须进行显式地修改(“移植”)以在 Xen 上运行(但是提供对用户应用的兼容性)。
这使得 Xen 无需特殊硬件支持,就能达到高性能的虚拟化。
一、Xen 安全漏洞概要
1、总共发布125个安全漏洞
http://xenbits.xen.org/xsa
其中 xsa-108 和 xsa-123 是高危漏洞
2、XSA-108
2014年10月1日公布
可导致 Hypervisor 内存泄露给客户机
3、XSA-123
2015年3月10日公布
可导致客户机指令提权
二、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 热修复的挑战
1、Xen 是 Type-1 Hypervisor 内存被严格隔离;
2、Xen Hypervisor 被装载的的地址是动态的;
3、Xen Hypervisor 不支持楼莫块插入。
六、如何访问 Hpypervisor 内存
1、通过 DMA 访问 Xen 内存
(1)构造 DMA 请求的能力
利用内核 Hotfix 替换 Dom0 内核的这两个函数
在新的 map_sg/unmap_sg 中加入过滤逻辑
筛选出特定的 DMA 请求,修改 DMA 目的地址
2、正常的文件读操作流程
3、热修复时文件读流程
4、计算修复代码的地址
(1)设备 DMA 只能使用物理地址
(2)Hypervisor 加载过程
(3)Hypervisor Hotfix 物理地址计算公式加载
(4)XSA-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日晚第一版热修复方案 Ready3月6日晚第二版热修复方案 Ready
3月6日晚发布到部分机器中
3月9日发布挂出公告开始发全集群3月10日漏洞公开前发布完成
六、小结
1、云计算业务中安全是头等大事
2、 完善的安全问题处理预案
3、热修复技术对安全运营至关重要
4、多团队协作尤为重要
七、课程总结
1、弹性计算是虚拟化技术的典型引用
2、虚拟化技术包括以下三点
CPU 虚拟化 内存虚拟化 IO 虚拟化
3、Xen 和 KVM 是当今最流行的开源虚拟化系统
支撑全球70%以上的云计算业务
4、Xen 安全漏洞热修复技术决定一个公司的运营能力
阿里云有全球首创的 Hypervisor 热修复技术
安全修复 xsa-108,xsa-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