0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

什么是热补丁技术

openEuler 来源:openEuler 作者:openEuler 2022-07-08 11:22 次阅读

LibcarePlus 用户态热补丁作为 openEuler 社区关键技术,受到了广大开发者的关注和讨论。openEuler 社区与天翼云基础架构技术团队通力合作,共同打造了全面支持 aarch64 及 x86 平台的 LibcarePlus 热补丁功能,可以应用于 CVE 漏洞修复,也可应用于不中断应用服务的紧急 bug 修复。下面我们就来聊聊什么是热补丁技术。

热补丁技术背景

当运行的程序存在漏洞的时候,我们一般有以下几种解决办法:

替换最新的包含修复补丁的 OS 版本,在有主备倒换能力的组网环境上,可以先将当前运行的程序迁移到备区,待主区升级完后,再将程序迁移到主区;

替换程序的 rpm 包,然后重新运行程序(注意此时需要考虑依赖包的兼容性),对于具备热替换能力的程序,则可以利用热替换能力,实现程序运行内容的替换;

直接给运行的程序内容打补丁,替换有问题的代码,实现程序漏洞的修复;

从补丁粒度上来说,上述技术漏洞修复粒度是从大到小变化的:第一个是系统级的,主要涉及的技术有热迁移技术;第二个是 rpm 包级的,主要涉及的技术有热替换;第三个是运行程序级的,主要涉及的技术有热补丁。从业务中断时长来说,上述技术的业务中断时长也是从大到小变化的:第一种技术业务中断时间一般在分钟级,且一般涉及整个系统业务的主备倒换,升级周期最长,一般需要几个月的升级窗口;第二种技术业务中断时间一般在百毫秒级,且该技术一般不通用,需要侵入式修改和适配大量业务代码,升级周期相对比较短,一般仅需要一个月的升级窗口;第三种技术业务中断时间则一般在毫秒级,该技术比较通用,不需要侵入式修改和适配业务代码,仅需要适配一些通用代码,适配工作量较小,升级周期相对比较短,一般仅需要一个月的升级窗口。

通过上述分析,我们大概能总结出热补丁的如下几个优点:一是热补丁能够在不影响现网业务的情况下,完成程序漏洞的修复;二是热补丁适用于需要快速响应的市场环境,将验证工作从版本验证简化为补丁验证。总结一句话:热补丁短小精悍,适合使用在需要快速响应的场景中。

今天,我们就来简单介绍一下,集万千宠爱于一身的 LibcarePlus 热补丁技术。

LibcarePlus 热补丁技术的基本原理

LibcarePlus 热补丁技术是基于上游社区 libcare 独立发展的分支,当前由 openEuler 社区进行自主孵化。相比于上游社区的 libcare,LibcarePlus 支持主流的 x86_64 架构和 aarch64 架构,全面支持 openEuler Qemu 组件,支持函数级过滤,支持增量补丁,支持补丁文件解析等。

我们以 LibcarePlus Qemu 热补丁技术为例,进行相关介绍。热补丁的整体架构如下:

c00289be-fde5-11ec-ba43-dac502259ad0.png

LibcarePlus 热补丁技术主要包括:热补丁制作、补丁管理和补丁加/卸载。

热补丁制作

LibcarePlus 制作热补丁的基本原理是基于汇编级指令比较技术。LibcarePlus 通过比较基线代码生成的汇编中间文件和打了补丁的基线代码生成的汇编中间文件,找到两者之间的差异部分;再基于差异部分,去除冗余段和修复重定位信息,最终得到热补丁 kpatch 文件。在分析汇编差异的前,LibcarePlus 会基于一些关键信息将汇编内容分成函数块和变量块,然后通过比较函数块和变量块之间的差异,找到差异的函数和变量。补丁制作的大概流程如下图所示:

c034497c-fde5-11ec-ba43-dac502259ad0.png

Qemu 热补丁管理

依托于 libvirt 组件对 Qemu 的管理,openEuler 同样将 Qemu 热补丁的管理集成到 libvirt 中。通过与虚拟机的生命周期交互,libvirt 能够更完美地寻找到 Qemu 补丁加载的最佳时机,完成对 Qemu 组件热补丁的管理。

热补丁加载/卸载

热补丁加/卸载的基本原理如下图所示:

c0551076-fde5-11ec-ba43-dac502259ad0.png

LibcarePlus 热补丁加/卸载基于内核提供的 ptrace 能力。通过 ptrace 目标进程,将目标进程短暂冻结,随后进行补丁加载环境的安全校验,在确保补丁加载环境安全的情况下,以 mmap 映射的方式,将适配好的补丁文件插入到目标进程的内存空洞中。在执行完上述步骤后,通过修改缺陷函数的前面五个字节的代码,让缺陷函数在被调用时跳转到新函数的地址中,从而使热补丁生效。最后,解冻目标进程,完成热补丁的加载。

在热补丁加载过程中,缺陷函数被替换的前五个字节代码会保存在目标进程的热补丁的管理结构中,将这五个字节代码重新写回原地址处,可使热补丁回滚到原来状态,从而实现了热补丁卸载。

原文标题:LibcarePlus 用户态热补丁技术那些事

文章出处:【微信公众号:openEuler】欢迎添加关注!文章转载请注明出处。

审核编辑:彭静
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 代码
    +关注

    关注

    30

    文章

    4741

    浏览量

    68324
  • BUG
    BUG
    +关注

    关注

    0

    文章

    155

    浏览量

    15649
  • 补丁
    +关注

    关注

    0

    文章

    27

    浏览量

    8520
  • openEuler
    +关注

    关注

    2

    文章

    308

    浏览量

    5825

原文标题:LibcarePlus 用户态热补丁技术那些事

文章出处:【微信号:openEulercommunity,微信公众号:openEuler】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    求助大佬们,装了补丁的pads9.5,页面还是有这种问题怎么办?

    求助,装了补丁的pads9.5,页面还是有这种问题怎么办?
    发表于 11-01 16:30

    TVP5150AM1补丁代码下载指南

    电子发烧友网站提供《TVP5150AM1补丁代码下载指南.pdf》资料免费下载
    发表于 09-30 14:11 0次下载
    TVP5150AM1<b class='flag-5'>补丁</b>代码下载指南

    TVP5147M1补丁代码下载指南

    电子发烧友网站提供《TVP5147M1补丁代码下载指南.pdf》资料免费下载
    发表于 09-30 11:27 0次下载
    TVP5147M1<b class='flag-5'>补丁</b>代码下载指南

    TVP5160补丁代码下载指南

    电子发烧友网站提供《TVP5160补丁代码下载指南.pdf》资料免费下载
    发表于 09-30 11:01 0次下载
    TVP5160<b class='flag-5'>补丁</b>代码下载指南

    TVP5158补丁代码下载指南

    电子发烧友网站提供《TVP5158补丁代码下载指南.pdf》资料免费下载
    发表于 09-30 10:48 0次下载
    TVP5158<b class='flag-5'>补丁</b>代码下载指南

    TVP5151补丁代码下载指南

    电子发烧友网站提供《TVP5151补丁代码下载指南.pdf》资料免费下载
    发表于 09-30 09:37 0次下载
    TVP5151<b class='flag-5'>补丁</b>代码下载指南

    Intel:13/14代酷睿补丁几乎无损性能!未来所有产品都安全

    快科技8月9日消息,Intel官方宣布,正在向各大OEM、ODM厂商发放0x129版本的微代码补丁,解决在13/14代酷睿台式机处理器平台微代码发送错误请求导致电压升高继而不稳定的问题,可显著改善K
    的头像 发表于 08-12 10:37 391次阅读
    Intel:13/14代酷睿<b class='flag-5'>补丁</b>几乎无损性能!未来所有产品都安全

    新手工程师必看:如何正确使用Android SDK补丁包?

    开源鸿蒙硬件方案领跑者触觉智能本文内容适用于触觉智能多数开发板的SDK补丁包的使用。这次给大家介绍的是触觉智能的PurplePiOH鸿蒙开源主板,是华为Laval官方社区主荐的一款鸿蒙开发主板。该
    的头像 发表于 07-23 18:00 319次阅读
    新手工程师必看:如何正确使用Android SDK<b class='flag-5'>补丁</b>包?

    NONOS_SDK 1.5.4.1导致致命错误的补丁怎么处理?

    将 1.5.4.1 补丁文件应用到我的稳定 1.5.4 代码库后,闪烁我的eagle.flash.bin和eagle.irom0text.bin时,我的ESP8266模块(ESP-12 或
    发表于 07-11 07:57

    微软五月补丁修复61个安全漏洞,含3个零日漏洞

    值得注意的是,此次修复并不包含5月2日修复的2个微软Edge漏洞以及5月10日修复的4个漏洞。此外,本月的“补丁星期二”活动还修复了3个零日漏洞,其中2个已被证实被黑客利用进行攻击,另一个则是公开披露的。
    的头像 发表于 05-15 14:45 644次阅读

    微软发布Linux内核Rust模块优化补丁

    在此之前,Linux 内核中要想实现模块初始化,必须先创建一个实例,再将其移至特定内存空间。然而,经过新补丁调整后,各模块可直接在预设定好的内存地址上完成初始化工作。
    的头像 发表于 04-02 15:11 435次阅读

    请问如何给STM32MP157上Linux5.4.31打实时内核补丁

    我这边想给STM32MP157芯片A7上面的Linux打实时内核补丁,从而运行一些对实时性要求较高的应用程序。我看到我的Linux内核版本是5.4.31的。然而,Linux内核官方网站上面找不到这个
    发表于 03-11 06:09

    LineageOS 18.1停更在即,后续更新将不再提供

    谷歌每年定期提供最新Android安全补丁,至2024年2月已发布适配安卓11的终极安全补丁。鉴于此种情况,基于安卓11的LineageOS 18.1版本不得不停更。
    的头像 发表于 03-08 14:18 1181次阅读

    索尼新型掌机与PS5游戏兼容性:18个CU单元或&quot;补丁&quot;支持

    它兼容PlayStation 4和PS5平台,为兼顾PS4游戏的兼容性,可能内置18个CU单元。开发者需准备相关补丁以确保PS5游戏在掌机上顺畅运行。
    的头像 发表于 02-02 11:39 723次阅读

    兆芯正引入Linux首选内核调度技术,优化性能

    近期,兆芯工程团队亦在致力于将首选内核调度技术引进Linux系统中。他们试图通过提议的Linux内核补丁,利用已有的ACPI功能来辨别每个核心的特性。这项补丁将在ACPI CPUFreq驱动程序中体现。这意味着调度程序能自动在首
    的头像 发表于 12-29 14:30 522次阅读
    兆芯正引入Linux首选内核调度<b class='flag-5'>技术</b>,优化性能