首页 > 其他分享 >SysCare:为您的操作系统保驾护航

SysCare:为您的操作系统保驾护航

时间:2023-04-27 11:39:32浏览次数:40  
标签:操作系统 补丁 态热 保驾护航 func openEuler uprobe SysCare

最近,openEuler 社区推出了一个创新项目:Linux 操作系统统一热补丁服务 SysCare。本文将带您探索 SysCare 的奥秘。

认识 SysCare

「SysCare: I take care of your systems.」

顾名思义,SysCare 是一款操作系统运维工具,解决系统运行过程中的各类故障和风险,为 Linux 操作系统提供全方位保护。

SysCare 提供一套简洁的命令,实现了内核热补丁 (kpatch) 和用户态热补丁 (upatch) 的制作及补丁管理能力。用户不需要关心技术细节和系统组件差异,也无需进行业务迁移,通过简单的命令就能在线修复系统漏洞。

如下 SysCare 系统示意图可知,支持如下三层热补丁:

  • 底层内核热补丁 (Kernel):包含所有组件和驱动的热补丁
  • 中间层系统库热补丁(Libs):包含 glibc、OpenSSL、Protobuf 等
  • 上层应用热补丁(Apps):支持 QEMU、Redis、MySQL 等应用

图片

为什么开发 SysCare

在 Linux 世界,有一个困扰大家已久的难题:如何在不影响业务的情况下,快速可靠地修复漏洞、解决故障。

当前常见的方法是采用**「热补丁」**:在业务运行过程中,对问题组件直接进行代码级修复,业务无感知。然而,当前热补丁制作方式复杂,补丁需要代码级匹配,且管理困难,特别是用户态组件形式多样,还没有简便统一的补丁机制。

为了解决热补丁制作和管理的问题,SysCare 应运而生。

SysCare 补丁制作

内核热补丁已经有相对成熟的 kpatch、livepatch 等方案,并且已经有相对广泛的应用,此处对技术方案不再赘述。下文将重点介绍 SysCare 用户态热补丁的实现方法。

用户态热补丁的难题

正如大家所知,用户态热补丁面临许多困难:

  • 「编程语言多种多样」:现有从汇编代码生成补丁的方式难以支持多种语言,代码改动的影响范围,不同语言也不尽相同。
  • 「单个程序文件会有多个运行实例」:打补丁操作需要找到具体进程再执行,但程序可能已经在运行,也可能尚未运行,通过监控程序文件是否被执行的方式,代价较大,操作困难。
  • 「动态库」:在进程运行过程中加载,无法提前确定被加载进程、位置和时机,现有技术无法对动态库制作热补丁。
  • 「编译方式、程序形态等多种多样」:每个程序的编译和链接过程都不相同,需要跟踪每个进程各自的编译过程,才能制作出相应的热补丁,补丁制作难度急剧上升。

SysCare 新方案

针对用户态热补丁问题,SysCare 提出了新的用户态热补丁解决方案,解决用户态热补丁的难题。

「对比二进制编译目标文件,生成热补丁」

通过对比修改前后的代码生成的.o 目标文件的不同,找到差异点,将差异点取出,生成热补丁。如下图所示:分别编译修改前后的代码,比较生成的 .o 文件 ( source file 和 after patched ),找到变化的部分:新增 (data_e, func_6),修改 ( func_4, func_3 ),删除 ( data_b, data_d, func_2 ) 的部分,将这些差一点提取到一个 .o 文件中 ( real patch ) 。

图片

「劫持编译器,跟踪编译过程」

通过 uprobe 技术,向 GCC 等编译器注入代码,跟踪程序的整个编译过程,在编译过程中获取制作热补丁所需的信息和 .o 目标文件。

图片

「针对 ELF 文件(程序可执行文件)的热补丁」

使用 uprobe 技术,将热补丁与 ELF 文件绑定。在 ELF 文件运行时,通过 uprobe 触发补丁生效,这样就不需要监控进程,无论进程是否已经运行,都可以在打补丁后或新进程运行时使补丁生效;同时该技术也可以给动态库打热补丁,解决了动态库热补丁的难题。如下图所示,补丁生效流程为:

  1. 执行 uprobe 系统调用,在待修改函数 func 处增加 uprobe 断点
  2. 注册 uprobe handler
  3. 进行运行到 func 时调用 uprobe handler
  4. 将 patch 映射到当前进程地址空间
  5. 进行安全检查,如果可以打补丁,将 func 的第一条指令修改为 jump 指令,指向 patch 地址
  6. 跳转到 patch 地址执行

图片

图片

SysCare 补丁管理

由于当前的热补丁管理方案比较复杂,SysCare 通过屏蔽内核热补丁和用户态热补丁的差异,简化了补丁管理。通过 SysCare build 命令,即可制作指定组件的热补丁。

另外,SysCare 也提供了 apply、active、deactive、remove、status、info、list 等补丁管理命令,用于应用、激活、去激活、移除、查询状态、查询信息、查询补丁列表等。

具体使用方法可参见官网文档:https://docs.openeuler.org/zh/docs/22.03_LTS_SP1/docs/SysCare/使用SysCare.html

项目规划

SysCare 已在 openEuler 22.03 LTS SP1 版本首次发布,并将在 openEuler 22.03 LTS SP2 版本提供了完整的统一热补丁功能,支持 x86 和 ARM 架构,支持用户态和内核态热补丁。

SysCare 的后续规划如下:

  • openEuler 22.03 LTS SP2 版本:集成到 Apollo 服务平台,支持在 openEuler 代码仓基于 PR 直接生成和发布热补丁,支持从 openEuler 官方源获取和应用热补丁。
  • openEuler 23.09 版本:支持 Linux 6.x 内核,支持 C++,完善复杂编译过程的应用支持,可靠性和性能提升。
  • openEuler 24.03 LTS 版本:提供集群补丁管理能力,提供如快速重启等系统热修复能力。

加入我们

更多内容,也欢迎查看项目地址:https://gitee.com/openeuler/syscare

标签:操作系统,补丁,态热,保驾护航,func,openEuler,uprobe,SysCare
From: https://blog.51cto.com/u_14948868/6230082

相关文章

  • 考研408操作系统-磁盘相关知识点
    一、磁盘的结构二、磁盘调度算法先来先服务算法最短寻找时间优先扫描算法(SCAN)LOOK磁盘调度算法循环扫描算法(C-SCAN)C-LOOK磁盘调度算法三、减少磁盘延迟时间的方法交替编号错位命名四、磁盘的管理五、固态硬盘......
  • 考研408操作系统-缓冲区管理
    缓冲技术分类:单缓冲双缓冲循环缓冲缓冲池一、单缓冲单缓冲是操作系统提供的一种最简单的缓冲形式,当用户进程发出一个IO请求时,操作系统便在内存中为它分配一个缓冲区。由于只设置一个缓冲区,设备和处理器交换数据时,应该先把要交换的数据写入缓冲区,然后放入工作区,在工作区的......
  • linux操作系统分析实验五-深入理解进程切换
    Lab5:深入理解进程切换首先找到对应进程调度的代码文件Kernal/sched/core.c  找到context_switch()函数   其中包括rq,为进程的runningqueue;以及进程切换前后的进程描述符prev和next  首先调用一些函数做上下文切换的准备,与最后出现的finish_task_switch()成......
  • 考研408操作系统-设备的分配与回收
    设备分配时应该考虑的因素设备的分配算法:先来先服务、优先级高者优先、短任务优先...静态分配与动态分配设备分配管理中的数据结构设备分配的步骤设备分配步骤的改进方法总结......
  • 创信国产操作系统uos桌面卡死的解决办法
    如果是整个桌面卡死,不要按主机电源键强制关机,重启后有可能会有配置文件缺失的问题。----首先尝试:按Ctrl+Alt+F2,进入tty2输入用户名,回车输入密码,回车输入命令回车:killallkwin_x11按Ctrl+Alt+F1,回到桌面----如果还是没有缓解:按Ctrl+Alt+F2,进入tty2按Ctrl+......
  • 考研408操作系统-SPOOLing技术(假脱机技术)
    什么是脱机技术?在学习假脱机技术前,我们首先要知道什么是脱机技术。在很久以前,我们通过输入设备直接往主机输入数据。但是输入设备输入数据的速度远慢于CPU处理的速度,这就使得CPU资源被浪费。于是人们又找了一个“中介”来处理CPU和I/O设备之间速度不匹配的矛盾。他们把输入输......
  • 信创操作系统--麒麟Kylin桌面版(项目四 文件与目录管理:文件浏览、管理、查找、共享等)
    浏览目录和文件单击任务栏中的【文件管理器图标】即可打开文件管理器,也可单击桌面的【计算机】图标也可进入文件管理器,进入之后即可浏览与查看,如图1-1所示,在【计算机】的页面中,可以单击【本地分区】、【网上邻居】下的相关选项或单击左侧的文件菜单栏,可以进入相对应的文件夹。图1-1......
  • window操作系统安装多个版本nodejs版本-控制工具nvm
    参考:https://blog.csdn.net/m0_38134431/article/details/118388297https://juejin.cn/post/7044890876631318564电脑上已经安装了10.x版本的nodejs,你不想直接更新到12.x,想同时保存10.x和12.x版本,在必要的时候还能随时切换nodejs版本,nvm工具可以实现一、首先要安装nvm下载地......
  • 操作系统基础知识(1)
    什么是管程?当共享资源用共享数据结构表示时,资源管理程序可用对该数据结构进行操作的一组过程来表示,如资源的请求和释放过程request和release。把这样一组相关的数据结构和过程一并归为管程。Hansan为管程所下的定义是:“一个管程定义了一个数据结构和能为并发进程所执行的一组操......
  • 学习《操作系统导论》03
    进程调度:介绍(原书第七章)问题:如何开发调度策略?工作负载假设在具体给出一个目标调度程序之前,先逐步分析,先给出一些列约束,这些约束看上去都非常理想化,不切实际,不过随着后面分析的深入,会逐步放开这些约束,这样最终的方案就是想要的一个比较理想的调度策略了。假设如下:每个工作运......