在这里会陆续更新一下syscare的使用、demo、原理等相关内容,后续也会整理一些FAQ
使用说明
Readme README.md · openEuler/syscare - Gitee.com
Demo测试指导
自验环境信息
X86虚拟机一台:
硬件配置:32CPU 16G内存(非独占)
操作系统:openEuler-22.03-LTS 执行yum update更新到最新版本
软件信息:依赖rust >= 1.60.0 (使用openEuler-22.03-LTS-SP1的rust版本即可)
Kernel = 5.10.0-60.66.0.91.oe2203.x86_64 (例子,实际使用openEuler-22.03-LTS-SP1版本即可)
安装syscare
Syscare 版本:可以使用openEuler-22.03-LTS-SP1版本自带syscare,或者由源码编译
1. git clone https://gitee.com/openeuler/syscare.git
2. cd syscare
3. mkdir tmp
4. cd tmp
5. cmake ..
6. make
7. sudo make install
编译依赖ko
注意:如使用非openEuler-22.03-LTS-SP1版本,需要手动重编kernel,合入一个内核修改
- kernel 修改
a) yumdown yumdownloader --source kernel
b) rpm -I kernel-xxxxx.src.rpm
c) 到rpmbuild/SPEC目录下执行 rpmbuild -bp –nodeps kernel.spec
d) 到rpmbuild/BUILD/kernel-5.10/linux-xxxxx目录下
e) patch -p1 < syscare源码目录/upatch/kmod/kernel-patch/0001-uprobe-add-UPROBE_ALTER_PC-flag-for-uprobe-handlers.patch
f) make openeuler_defconfig
g) make -j16 KERNELRELEASE=`uname -r`
h) make modules_install KERNELRELEASE=`uname -r`
i) make install KERNELRELEASE=`uname -r`
j) reboot
- 编译ko
a) 到syscare源码目录/upatch/kmod/ 执行 make kernel=~/ rpmbuild/BUILD/kernel-5.10.0/linux-xxxxxxx.x86_64/
- 插入ko
insmod upatch.ko
测试内核热补丁
补丁制作
下载内核src和debuginfo包
yumdownloader --source kernel
yumdownloader --debuginfo kernel
准备patch文件:version.patch 修改了/proc/version的显示
制作内核热补丁:
syscare build --name kernel-1 --source ./kernel-5.10.0-60.66.0.91.oe2203.src.rpm --debuginfo kernel-debuginfo-5.10.0-60.66.0.91.oe2203.x86_64.rpm version1.patch
执行成功
生成文件:
kernel-5.10.0-60.66.0.91.oe2203.patched.kernel_1.1.c15c1a6a.src.rpm
patch-kernel-5.10.0-60.66.0.91.oe2203-kernel-1-1-c15c1a6a.x86_64.rpm
测试功能:
1、 安装补丁
sudo rpm -ivh patch-kernel-5.10.0-60.66.0.91.oe2203-kernel-1-1-c15c1a6a.x86_64.rpm
2、 应用并激活补丁
sudo syscare apply kernel-1
3、 反激活补丁
测试用户态热补丁
所需rpm、patch、conf等文件可从 文件服务器 (renoseven.net)获取
以CVE-2021-32675为例,使用CVE-2021-32675修复之前的版本作为基线,制作出rpm
redis-6.2.5-1.x86_64.rpm
redis-6.2.5-1.src.rpm
redis-debuginfo-6.2.5-1.x86_64.rpm
补丁制作
syscare build --name redis-1 --source redis-6.2.5-1.src.rpm --debuginfo redis-debuginfo-6.2.5-1.x86_64.rpm --target-elfname redis-server 0001-Prevent-unauthenticated-client-from-easily-consuming.patch
生成patch-redis-6.2.5-1-redis-1-1-31fc7544.x86_64.rpm redis-6.2.5-1.patched.redis_1.1.31fc7544.src.rpm
测试功能
安装补丁
sudo rpm -ivh patch-redis-6.2.5-1-redis-1-1-31fc7544.x86_64.rpm
启动redis-server
sudo redis-server ./redis.conf &
激活前测试功能:
激活补丁
测试功能
CVE漏洞已修复
反激活补丁
SysCare是一个系统级热修复软件,为操作系统提供单机级与集群级安全补丁和系统错误热修复,主机无需重新启动即可修复该系统问题。 当前仅融合统一内核态/用户态热补丁技术,用户需聚焦在自己核心业务中,系统修复问题交予SysCare进行处理。后期计划根据修复组件的不同,提供系统热升级技术,进一步解放运维用户提升运维效率。
不错的
用户态补丁只支持redis和nginx,不跟硬件,交互的一些项目是不是只能打用户态补丁。还有那种二进制文件可以打补丁吗