Ubuntu下漏洞的修复流程

2023-11-05

最近需要修复cve漏洞,研究了如何在源码上修复漏洞,在这里记录一下。

目录

I. 介绍

漏洞和补丁

CVE漏洞

普通漏洞和CVE漏洞的区别

II. 获取补丁

III. 应用补丁

常见的打补丁工具

打补丁的步骤

patch的用法


I. 介绍

首先介绍一下相关的概念

漏洞和补丁

漏洞是计算机软件中存在的错误或者缺陷。

攻击者可以利用漏洞在未经授权的情况下访问和修改文件,以此破坏系统或收集敏感数据。

严重的漏洞可能导致数据泄露,系统崩溃或者系统被控制。

为了解决漏洞带来的问题,软件开发商会发布一个或多个“补丁”来修复漏洞。

 一旦补丁安装成功,相应的漏洞将被消除,系统将变得更加安全和稳定。

CVE漏洞

CVE(Common Vulnerabilities and Exposures)漏洞是指由于软件或硬件产品中存在的安全漏洞所引发的安全问题。

漏洞编号格式为“CVE-年份-序号”,例如“CVE-2022-1234”,每个漏洞都会被分配一个唯一的CVE编号。

普通漏洞和CVE漏洞的区别

CVE漏洞和普通漏洞的区别在于是否有CVE编号。

CVE编号由MITRE公司负责分配,MITRE公司是一家非盈利性的研究机构。

MITRE公司根据一定的标准来选择哪些漏洞应该被分配CVE编号。这个标准主要包括漏洞的严重性、漏洞的公开情况、漏洞的重要性和影响范围等方面。一般来说,只有那些被认为有严重影响和公开的漏洞才会被分配CVE编号。

需要注意的是,CVE漏洞并不一定是最严重的漏洞。

II. 获取补丁

要获取补丁之前首先要确定改漏洞是否被修复(有些漏洞没有被修复),在以下网站查询。

Enterprise Open Source and Linux | Ubuntu

举个例子,假如我要在ubuntu2004上修复CVE-2020-14928,先在网站上查一下。

 2004对应的名称是focal,对应的状态是Released。

说明这个问题在2004上已经修复了,修复的版本是3.36.3-0ubuntu1.1。

为了简单,你可以直接将软件升级到这个版本。

出于项目需要,要使用旧版本的软件,就需要把对应的补丁应用在旧版本上。

在对应漏洞的网页上会附上使用的patch的网址,像是修复这个漏洞的有两个patch。

我们进入gitlab,选择Plain Diff将改动(patch)下载下来,改个名字。

  

III. 应用补丁

常见的打补丁工具

patch

一般使用patch指令来打patch。(好像是废话)

patch指令是Linux系统中最基本的打补丁工具。

quilt

quilt是一个比patch更高级的打补丁工具,可以用来管理多个补丁,并对其进行排序、组合和卸载等操作。

这种方法没学明白,先不详细写

diff和patch组合

这是一种手动打补丁的方法,需要手动使用diff命令生成补丁文件,然后使用patch命令应用补丁。

打补丁的步骤

这里以patch指令为例,介绍打补丁的步骤。

将刚刚的两个diff文件改名,效果如下:

 我们将项目的源码下载到本地,效果如下:

 

patch --verbose --dry-run --ignore-whitespace --fuzz 3 -p1 < patch的相对路径

用这条指令来打补丁,在解释为什么可以这样打补丁之前先插播一下patch的用法

patch的用法

patch的作用则是将diff记录的结果(即补丁)应用到相应文件(夹)上。最常见的用法为:

patch -pNUM <patchfile>

-p Num

忽略几层文件夹,随后详解。

-E

选项说明如果发现了空文件,那么就删除它

-R

取消打过的补丁。

-l or --ignore-whitespace  

忽略修补数据与输入数据的跳格,空格字符

--verbose  

详细显示指令的执行过程

--dry-run

尝试patch软件,并不真正改动软件

-F<行数> or -fuzz<行数>  

非精确匹配的行数目

为了解释 -p 参数,需要看看如下patch文件片段:

--- old/modules/pcitable       Mon Sep 27 11:03:56 1999
+++ new/modules/pcitable       Tue Dec 19 20:05:41 2000

如果使用参数 -p0,那就表示从当前目录找一个叫做old的文件夹,再在它下面寻找 modules/pcitable 文件来执行patch操作。
而如果使用参数 -p1,那就表示忽略第一层目录(即不管old),从当前目录寻找 modules 的文件夹,再在它下面找pcitable。


理解了patch的用法再来看我们的指令。

打开diff文件,默认找a/src/camel/camel-stream-buffer.c文件(对应---那行的文件)

我们解压源码之后发现没有a目录,只有src目录(源码下载到本地效果图里有),所以p对应的num数为1。

所以切换到src上一级所在的目录,执行patch --verbose --dry-run --ignore-whitespace --fuzz 3 -p1 < patch的相对路径 即可。

当然,当前使用了--dry-run参数,如果patch成功应用,就可以把这个参数去掉了。

出现succeed即为成功。


为了深入理解patch的p参数,我们来换个目录试一下。

p参数代表忽略的目录层数,我们之前是忽略了一层,我们能不能忽略两层呢?

当然是可以的!

光看文字可能有点乱,我在这里加了个表格。

忽略层数 对应目录
0层 a/src/camel/camel-stream-buffer.c
1层 src/camel/camel-stream-buffer.c
2层 camel/camel-stream-buffer.c

忽略两层的话,就要找camel目录了。

camel目录在哪里呢?src目录下,所以我们进入src目录下,执行atch --verbose --dry-run --ignore-whitespace --fuzz 3 -p2 < patch,即可成功应用补丁!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Ubuntu下漏洞的修复流程 的相关文章

  • windows cmd下用命令创建和删除文件、文件夹

    新建文件夹和文件 cd 返回上一级 md test 新建test文件夹 md d test my d盘下新建文件夹 cd test 进入test文件夹 cd gt cc txt 新建cc txt文件 dir 列出文件夹下所有文件及文件夹 删
  • Scratch2舞台各个部分及积木的介绍

    软件界面分为舞台区 背景角色区和工作区 其中 工作区包含脚本 造型和声音是哪个选项卡功能 积木部分需要着重介绍 这也是接下来 小朋友要格外关注的部分 积木区主要指 脚本选项卡下的内容 包括 1 运动类积木 2 外观类积木 3 声音类积木 4
  • XStream配置XML节点既有属性又有内容

    例如XML节点为这样的 如何通过XStream来映射JavaBean呢
  • 湖北文理学院工程能力实训开班!

    为深化校企合作 产教融合助力新工科建设 提升学生工程实践能力 电巢工程能力实训班按照不同岗位类别 匹配对应的企业岗位任职能力要求对学生开展分级培养 以产业需求为导向 培养创新型 应用型人才 7月3日中午12时 深圳电巢联合湖北文理学院物理与

随机推荐

  • 【pytorch入门】Anaconda安装+pytorch安装+pycharm安装教程

    前言 Anaconda是一个开源的Python发行版本 其包含了conda Python等180多个科学包及其依赖项 其中包括Conda Python以及一大堆安装好的工具包 比如 numpy pandas等 安上之后 基本就包括后面学习所
  • pm2入坑教程

    PM2入坑教程 一 使用场景 二 使用命令 2 1 安装pm2的命令 2 2 创建启动 2 3 查看命令 2 4 删除命令 2 5 停止命令 2 6 结束进程 一 使用场景 1 普通启动方式 node index js 关闭终端就结束进程
  • Windows下批处理管理Nginx应用程序

    每次更新完配置 通过命令行或者任务管理器来操作Nginx重启 操作起来 显得有点麻烦 下面脚本就是解决这个问题的 cls echo off set NGINX PATH d0 set NGINX DIR cd color 0a title
  • 微软:从“开源是毒瘤”到“我爱Linux”的20年

    整理 彭慧中 责编 屠敏 出品 CSDN ID CSDNnews 英国前首相帕麦斯顿曾说过 没有永远的朋友 也没有永远的敌人 只有永远的利益 这句话用来形容微软对于开源的态度正合适 在21世纪初 曾视开源为 毒瘤 并一度想将其毁灭的微软 现
  • 优化算法选择:SGD、SGDM、NAG、Adam、AdaGrad、RMSProp、Nadam

    目录 优化算法通用框架 SGD 系列 固定学习率的优化算法 SGD SGD with Momentum SGD M SGD with Nesterov Acceleration NAG 自适应学习率的优化算法 AdaGrad AdaDelt
  • 18. TypeScript 扩展全局变量类型

    TypeScript 扩展全局变量类型 1 扩展局部变量 可以直接使用接口对已有类型进行扩展 interface String double string String prototype double function return th
  • css学习——sass(6)

    第一步 全局安装 sass 在命令行工具 npm install g sass 查看版本 sass version 第二步 手动将sass 编译为css 1 创建一个test scss 2 在命令行终端 输入sass test scss t
  • AQS相关工实现类的使用及其原理

    文章目录 1 AQS 1 1 概述 1 2 自定义不可重入锁 2 ReentrantLock 2 1 非公平锁 2 1 1 加锁解锁流程 2 1 1 1 加锁失败 2 1 1 2 解锁竞争 2 2 可重入原理 2 3 可打断原理 2 3 1
  • 虚拟乒乓球连接不上服务器,虚拟乒乓球正版

    虚拟乒乓球正版 游戏画面场景设定的比较小清新 不过其中的内容设定是超级的精彩 极其逼真的玩家操作定能带给各位最为真实的游戏体验 这个过程你需要不断锻炼自己的水平 更得要击败尽可能多的对手 玩法难度可供选择 喜欢的玩家快快点击下载试玩吧 游戏
  • 解决jdbc连接本地mysql数据库时报错Caused by: java.net.UnknownHostException: mysql

    今天在写代码的时候遇到的问题 解决问题后记录下 The last packet sent successfully to the server was 0 milliseconds ago The driver has not receiv
  • Mali GPU OpenGL ES 应用性能优化--测试+定位+优化流程

    1 使用DS 5 Streamline定位瓶颈 DS 5 Streamline要求GPU驱动启用性能测试 在Mali GPU驱动中激活性能测试对性能影响微不足道 1 1 DS 5 Streamline简介 可使用DS 5 Streamlin
  • 解决VS中scanf()函数报错问题的四种方案(详细)

    scanf函数在VS中报错的主要原因是 scanf被认为不安全而被编译器默认设置为禁用 那么如何解决这个问题呢 法一 仅将函数scanf替换为scanf s即可 其他语法不变 但scanf s函数并不是C语言函数库里的标准函数 而是VS编译
  • Android中显示网页的多种方式

    在android中显示页面主要有两种方式 一种是在Activity里面直接显示网页 另一种是调用浏览器显示网页 方式不同 使用的方法也不同 下面我们分别讲解 一 在Activity里面直接显示网页 1 在Manifest xml文件里添加I
  • Ubuntu 安装anaconda后,自动进入base虚拟环境解决

    Ubuntu关闭anaconda自动进入base虚拟环境 在Ubuntu上安装完anaconda后 发现每次打开终端后都会自动进入到base的虚拟环境中去 虽然在这些环境下使用问题不大 但一些软件的安装在虚拟环境下有影响 每次使用conda
  • juc并发包整理

    目录 JUC提供了java并发编程需要的类 主要分几个大模块 1 原子类操作 2 锁 3 阻塞队列 4 并发集合 5 同步器 6 线程池 7组合式异步编程 JUC的作者Doug Lea神一样的人物 其中以上很多类的实现底层实现都是基于AQS
  • QPainter绘图工具的完善

    上一篇 QPainter实现简单的绘图程序 绘图工具 文章目录 前言 撤回功能的理解 拆分的理解 一 重绘函数的写法 二 绘制判断 三 橡皮擦 感谢各位的观看 前言 gitee工程地址 PaintTool 03 学习了简单的绘图工具后 程序
  • qt中菜单栏中添加快捷键

    使用技巧 在编辑好的qt的菜单中添加快捷键 具体添加菜单栏 可以参考博客 qt中菜单栏中实现第一个简单的打开功能 Littlehero 121的博客 CSDN博客 qt菜单栏打开文件 然后就是找到这个 或者是找到这个 双击动作 开始进行编辑
  • 算法提高 彩票 我只是觉得我的代码比较帅

    算法提高 彩票 时间限制 1 0s 内存限制 256 0MB 提交此题 问题描述 为丰富男生节活动 贵系女生设置彩票抽奖环节 规则如下 1 每张彩票上印有7个各不相同的号码 且这些号码的取值范围为 1 33 2 每次在兑奖前都会公布一个由七
  • Java基础-对象序列化

    对象序列化 作用 以内存为基准 把内存中的对象存储到磁盘文件中去 称为对象序列化 使用到的流是对象字节输出流 ObjectOutputStream package per mjn serializable import java io Se
  • Ubuntu下漏洞的修复流程

    最近需要修复cve漏洞 研究了如何在源码上修复漏洞 在这里记录一下 目录 I 介绍 漏洞和补丁 CVE漏洞 普通漏洞和CVE漏洞的区别 II 获取补丁 III 应用补丁 常见的打补丁工具 打补丁的步骤 patch的用法 I 介绍 首先介绍一