【Linux】Ubuntu 漏洞扫描与修复的吃瘪经历

自从上次“劫持”事情后,项目经理将所有跟安全相关的都推给我了(不算 KPI 又要被白嫖,烦死了)。这次客户又提了一个服务器安全扫描和漏洞修复的“活”,我这边顺手将过程记录一下,就当经验总结跟各位分享一下。

本次扫描的是一台 Ubuntu Server,用的是 22.04 版本操作系统。据说客户一直都是用 CentOS 7 ,但由于今年 6 月 30 日后 CentOS 7 不再提供安全维护了,索性新应用的机器全部换成 Ubuntu Server (额…其实我想说换 openEuler 也挺好的,也符合信创标准)。

1. Ubuntu OVAL 数据扫描

由于用的是 Ubuntu 操作系统,为此本次扫描将使用 Canonical (Ubuntu 母公司)安全小组提供的 Ubuntu OVAL 数据,如下图:
image.png
具体就是使用 oscap 读取 OVAL 数据(USN 和 CVE)进行扫描,为了方便我写了一个 shell 脚本,如下图:

# 先从官网下载最新 OVAL 数据
wget https://security-metadata.canonical.com/oval/com.ubuntu.$(lsb_release -cs).usn.oval.xml.bz2
wget https://security-metadata.canonical.com/oval/com.ubuntu.$(lsb_release -cs).cve.oval.xml.bz2# 通过 bunzip2 对压缩包进行解压
bunzip2 com.ubuntu.$(lsb_release -cs).usn.oval.xml.bz2
bunzip2 com.ubuntu.$(lsb_release -cs).cve.oval.xml.bz2# 使用 oscap 读取 oval 数据并产出 html 报告
oscap oval eval --report report_usn.html com.ubuntu.$(lsb_release -cs).usn.oval.xml
oscap oval eval --report report_cve.html com.ubuntu.$(lsb_release -cs).cve.oval.xml

扫描结果如下图所示:
image.png
上图是 CVE 漏洞统计共有 171 个,而 USN 有 11 个,如下图所示。
image.png

2. 修复处理

2.1 基础修复

面对如此数量的漏洞,第一个想到的办法肯定是直接通过升级批量修复漏洞。如下图:

sudo apt update
sudo apt upgrade
sudo apt dist-upgrade

升级后再进行 oscap 扫描得到以下结果:
image.png
image.png
CVE 减少到 151 个,而 USN 减少到 3 个。

2.2 解除“不更新”标记

以上结果跟我预估有所出入,本以为通过更新能至少解决三分之一的漏洞,但 CVE 只修复了 20 个,有点不太正常。于是我执行了 apt list --upgradable 指令发现仍存在部分可升级内容,如下图:

ubuntu@VM-0-6-ubuntu:~$ apt list --upgradable
Listing... Done
linux-generic/jammy-updates,jammy-security 5.15.0.113.113 amd64 [upgradable from: 5.15.0.107.107]
linux-headers-generic/jammy-updates,jammy-security 5.15.0.113.113 amd64 [upgradable from: 5.15.0.107.107]
linux-image-generic/jammy-updates,jammy-security 5.15.0.113.113 amd64 [upgradable from: 5.15.0.107.107]
python3-update-manager/jammy-updates 1:22.04.20 all [upgradable from: 1:22.04.9]
ubuntu-minimal/jammy-updates 1.481.2 amd64 [upgradable from: 1.481.1]
ubuntu-server/jammy-updates 1.481.2 amd64 [upgradable from: 1.481.1]
ubuntu-standard/jammy-updates 1.481.2 amd64 [upgradable from: 1.481.1]
update-manager-core/jammy-updates 1:22.04.20 all [upgradable from: 1:22.04.9]

嗯…估计是客户方运维将这些组件进行了标记,导致不能自动升级。于是尝试执行 apt-mark showhold 指令来验证一下自己的猜想,如下图:

ubuntu@VM-0-6-ubuntu:~$ sudo apt-mark showhold
containerd.io
docker-buildx-plugin
docker-ce
docker-ce-cli
docker-ce-rootless-extras
docker-compose-plugin
docker-scan-plugin
linux-generic
linux-generic-hwe-20.04
linux-generic-hwe-20.04-edge
linux-generic-hwe-22.04
linux-generic-hwe-22.04-edge
linux-headers-generic
linux-headers-generic-hwe-20.04
linux-headers-generic-hwe-20.04-edge
linux-headers-generic-hwe-22.04
linux-headers-generic-hwe-22.04-edge
linux-image-generic
linux-image-generic-hwe-20.04
linux-image-generic-hwe-20.04-edge
linux-image-generic-hwe-22.04
linux-image-generic-hwe-22.04-edge

如上图所示 linux-generic、linux-headers-generic 和 linux-image-generic 都被标记为“不随系统更新”,这印证了我的想法,但为什么要这样做呢?

先不管了,在做完快照备份后接着将 linux-generic、linux-headers-generic 和 linux-image-generic 解除标记,如下图:

ubuntu@VM-0-6-ubuntu:~$ sudo apt-mark unhold linux-generic* linux-headers-generic* linux-image-generic*
Canceled hold on linux-generic.
Canceled hold on linux-generic-hwe-20.04.
Canceled hold on linux-generic-hwe-22.04.
Canceled hold on linux-generic-hwe-20.04-edge.
Canceled hold on linux-generic-hwe-22.04-edge.
Canceled hold on linux-headers-generic.
Canceled hold on linux-headers-generic-hwe-22.04.
Canceled hold on linux-headers-generic-hwe-22.04-edge.
Canceled hold on linux-headers-generic-hwe-20.04.
Canceled hold on linux-headers-generic-hwe-20.04-edge.
Canceled hold on linux-image-generic.
Canceled hold on linux-image-generic-hwe-22.04.
Canceled hold on linux-image-generic-hwe-22.04-edge.
Canceled hold on linux-image-generic-hwe-20.04.
Canceled hold on linux-image-generic-hwe-20.04-edge.

之后执行分布更新,如下图:

ubuntu@VM-0-6-ubuntu:~$ sudo apt-get dist-upgrade
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
Calculating upgrade... Done
The following NEW packages will be installed:linux-headers-5.15.0-113 linux-headers-5.15.0-113-generic linux-image-5.15.0-113-generic linux-modules-5.15.0-113-genericlinux-modules-extra-5.15.0-113-generic
The following packages have been kept back:python3-update-manager ubuntu-minimal ubuntu-server ubuntu-standard update-manager-core
The following packages will be upgraded:linux-generic linux-headers-generic linux-image-generic
3 upgraded, 5 newly installed, 0 to remove and 5 not upgraded.
Need to get 113 MB of archives.
After this operation, 583 MB of additional disk space will be used.

再重新扫描一次。嗯…问题依然存在(漏洞数没有改变,这里就不再截图展示了)。

2.3 查“漏”补“缺”

因为漏洞数没有改变,于是再次执行 upgrade 命令得到新的发现,如下图:

ubuntu@VM-0-6-ubuntu:~$ sudo apt upgrade
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
Calculating upgrade... Done
The following packages have been kept back:python3-update-manager ubuntu-minimal ubuntu-server ubuntu-standard update-manager-core
0 upgraded, 0 newly installed, 0 to remove and 5 not upgraded.

5 not upgrade?提示中明显标注了 python3-update-manager、ubuntu-minimal、ubuntu-server、ubuntu-standard、update-manager-core 没有更新。既然没有更新那就针对这 5 个组件进行 upgrade 操作,如下图:

ubuntu@VM-0-6-ubuntu:~$ sudo apt upgrade python3-update-manager ubuntu-minimal ubuntu-server ubuntu-standard update-manager-core
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
Calculating upgrade... Done
The following packages will be upgraded:python3-update-manager ubuntu-minimal ubuntu-server ubuntu-standard update-manager-core
5 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
Need to get 59.1 kB of archives.
After this operation, 6,144 B of additional disk space will be used.

再扫描一次,结果如下:
image.png
image.png
CVE 漏洞减少到 127 个,而 USN 漏洞减少到 2 个。还是有 100+ 的 CVE 漏洞没有修复完毕,究竟是为什么呢?带着这些疑问我执行以下语句:

sudo unattended-upgrades --dry-run

本以为还有安全补丁没有更新,结果直接没有返回,看来应该做的一切都已经做了。

3. 进一步排查

这 100+ 的 CVE 漏洞究竟为什么无法修复呢?难道是内核导致的?带着这个疑问我注册了一个 Canonical Livepatch 的账号,想通过 livepatch 检查一下是否跟内核有关,如下图:
image.png
关于 Canonical Livepatch 账号申请我就不多说了(这个不是重点)。注册完成后会得到一个 token,这个 token 将用于服务器与 Canonical Livepatch 进行通讯的。但在此之前还需要使用 snap 安装 canonical-livepatch ,如下图:

ubuntu@VM-0-6-ubuntu:~/openscap$ sudo snap install canonical-livepatch
canonical-livepatch 10.8.3 from Canonical✓ installed
ubuntu@VM-0-6-ubuntu:~/openscap$ sudo canonical-livepatch enable <Your Token>
Successfully enabled device. Using machine-token: xxxxx

接着就可以通过 canonical-livepatch 查看一下系统的状态,如下图:

ubuntu@VM-0-6-ubuntu:~/openscap$ sudo canonical-livepatch status --verbose
last check: 2 minutes ago
kernel:  (unsupported)
server check-in: succeeded
kernel state: ✗ kernel is not covered by Livepatch
patch state: ✓ no livepatches available for kernel  (unsupported)
tier: updates (Free usage; This machine beta tests new patches.)
machine id: e0fd450343fa48d8acc471dc903518d1
client version: 10.8.3
architecture: amd64
cpu model: AMD EPYC 9754 128-Core Processor
boot time: 37 minutes ago

kernel unsupported?kernel is not covered by Livepatch?
呃…我应该没做什么骚操作吧。什么也别说了,我还是先重启一下系统吧(自我安慰一下)。
不过这次重启我特别留意了一下内核版本,如下图:

Welcome to Ubuntu 22.04.4 LTS (GNU/Linux 6.6.16-060616-generic x86_64)* Documentation:  https://help.ubuntu.com* Management:     https://landscape.canonical.com* Support:        https://ubuntu.com/proSystem information as of Wed Jul 10 10:58:45 AM CST 2024...

GNU/Linux 6.6.16-060616-generic x86_64?我印象中 Ubuntu 最新内核应该是 5.15.x 才对(我开发电脑也是使用 22.04 的 Ubuntu Desktop)。后面找了客户方运维了解得知这个 6.6.16 版本是他从 kernel.org 手动下载升级的。原因是他们集团发公告告知需要升级,如下图:
image.png
如公告所示,内核升级主要是为了解决 CVE-2024-1086 漏洞,但如果直接按照公告提示升级,内核就需要升级到 6.6.15 版本以上。但事实真的是这样吗?

通过 Canonical 安全小组发布的公告得知 CVE-2024-1086 漏洞已经在 5.15.0 内核版本中得到修复,如下图:
image.png
公告地址:https://ubuntu.com/security/CVE-2024-1086

如此一来就没有必要升级到 6.6.16 版本的内核。

4. 内核降级(吃瘪开始)

由于现在使用的是 6.6.16 内核,要先切换到 5.15.x 版本,如下图:

ubuntu@VM-0-6-ubuntu:~$ dpkg --list | grep linux-image
rc  linux-image-5.15.0-101-generic             5.15.0-101.111                          amd64        Signed kernel image generic
rc  linux-image-5.15.0-105-generic             5.15.0-105.115                          amd64        Signed kernel image generic
ii  linux-image-5.15.0-107-generic             5.15.0-107.117                          amd64        Signed kernel image generic
ii  linux-image-5.15.0-113-generic             5.15.0-113.123                          amd64        Signed kernel image generic
ii  linux-image-generic                        5.15.0.113.113                          amd64        Generic Linux kernel image
pi  linux-image-unsigned-6.6.16-060616-generic 6.6.16-060616.202402051536              amd64        Linux kernel image for version 6.6.16 on 64 bit x86 SMP

如上图所示,使用 dpkg --list | grep linux-image 指令查看可用的内核版本。再使用 update-initramfs 更新使用内核版本,如下图:

ubuntu@VM-0-6-ubuntu:~$ sudo update-initramfs -u -k 5.15.0-113-generic
update-initramfs: Generating /boot/initrd.img-5.15.0-113-generic

再之后使用 update-grub 更新引导

ubuntu@VM-0-6-ubuntu:~$ sudo update-grub
Sourcing file `/etc/default/grub'
Sourcing file `/etc/default/grub.d/init-select.cfg'
Sourcing file `/etc/default/grub.d/kdump-tools.cfg'
Generating grub configuration file ...
Found linux image: /boot/vmlinuz-5.15.0-113-generic
Found initrd image: /boot/initrd.img-5.15.0-113-generic
Found linux image: /boot/vmlinuz-5.15.0-107-generic
Found initrd image: /boot/initrd.img-5.15.0-107-generic
Warning: os-prober will not be executed to detect other bootable partitions.
Systems on them will not be added to the GRUB boot configuration.
Check GRUB_DISABLE_OS_PROBER documentation entry.
done

之后就能够使用 dpkg -r 来删除内核

sudo dpkg -r linux-image-unsigned-6.6.16-060616-generic
sudo dpkg --purge linux-image-unsigned-6.6.16-060616-generic

重启之后就能看到内核版本已经恢复到 5.15.x 版本,如下图:

Welcome to Ubuntu 22.04.4 LTS (GNU/Linux 5.15.0-113-generic x86_64)* Documentation:  https://help.ubuntu.com* Management:     https://landscape.canonical.com* Support:        https://ubuntu.com/proSystem information as of Wed Jul 10 11:52:19 AM CST 2024...

再执行 dpkg --list | grep linux-image 会发现原 6.6.16 内核已经删除,如下图:

ubuntu@VM-0-6-ubuntu:~$ dpkg --list | grep linux-image
rc  linux-image-5.15.0-101-generic         5.15.0-101.111                          amd64        Signed kernel image generic
rc  linux-image-5.15.0-105-generic         5.15.0-105.115                          amd64        Signed kernel image generic
ii  linux-image-5.15.0-107-generic         5.15.0-107.117                          amd64        Signed kernel image generic
ii  linux-image-5.15.0-113-generic         5.15.0-113.123                          amd64        Signed kernel image generic
ii  linux-image-generic                    5.15.0.113.113                          amd64        Generic Linux kernel image

5. 吃瘪结果

接下来再重新执行 upgrade 和 dist-upgrade 的更新指令,在更新完成后再进行一次扫描,结果炸裂:
image.png
image.png
这…这…内核降级后漏洞激增,从原来 127 个 CVE 漏洞上升到 1010 个。通过报告中提供的链接得知这些漏洞 Canonical 安全小组也在积极修复中,但大部分漏洞目前还处于 pending 状态。

虽然这样…也不全是坏消息,如下图:

ubuntu@VM-0-6-ubuntu:~$ sudo canonical-livepatch status --verbose
last check: 1 minute ago
kernel: 5.15.0-113.123-generic
server check-in: succeeded
kernel state: ✓ kernel series 5.15 is covered by Livepatch
patch state: ✓ no livepatches available for kernel 5.15.0-113.123-generic
tier: updates (Free usage; This machine beta tests new patches.)
machine id: e0fd450343fa48d8acc471dc903518d1
client version: 10.8.3
architecture: amd64
cpu model: AMD EPYC 9754 128-Core Processor
boot time: 1 minute ago

内核降级后 canonical-livepatch 已经能识别当前内核并提供实时保护。

至此,我也没有办法了,将情况反馈给项目经理。项目经理与客户沟通后决定先暂时使用 5.15.x 内核,主要是基于以下原因:

  1. 目前 5.15.x 内核是受到 canonical-livepatch 保护的,新的安全补丁发布后可以“一键修复”且不用重启,这个大大减少客户方运维的工作量;
  2. 目前扫描出来的漏洞基本都是 low 级别漏洞,对系统使用影响不大;
  3. 最最重要的是客户方运维不想揽活,而我又没有时间了,等有时间再帮他们修复吧;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/377740.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Parallels Desktop 19 for Mac(PD19虚拟机)详细图文安装教程分享

Parallels Desktop 19是一款功能丰富、性能强大且易于使用的虚拟机软件&#xff0c;它可以让您在Mac上同时运行多个操作系统&#xff0c;为您提供更大的灵活性和兼容性。 Parallels Desktop 19 for Mac(PD19虚拟机)下载安装包 Parallels Desktop 19 for Mac(PD19虚拟机)详细图…

【Visual Studio】Visual Studio使用技巧及报错解决合集

目录 目录 一.概述 二.Visual Studio报错问题及解决方法 三.Visual Studio操作过程中遇到的问题及解决方法 四.Visual Studio编译优化选项 五.Visual Studio快捷键 一.概述 持续更新Visual Studio报错及解决方法&#xff0c;包括Visual Studio报错问题及解决方法、Visua…

phenocycler(原CODEX)鉴定三阴乳腺癌不同的治疗反应轨迹

目前临床上需要制定策略来更好地识别哪些患者可以从单独的免疫疗法中受益&#xff0c;或者哪些患者可能需要化疗或放疗等额外疗法来克服耐药性。尽管一些联合放射治疗&#xff08;RT&#xff09;和免疫检查点抑制&#xff08;ICI&#xff09;的临床研究取得了成功&#xff0c;但…

【Linux】常见指令(下)

【Linux】常见指令&#xff08;下&#xff09; 通配符 *man指令cp指令echo指令cat指令&#xff08;简单介绍&#xff09;cp指令 mv指令alias指令which ctrl ccat指令linux下一切皆文件 more指令less指令head指令tail指令管道 通配符 ‘*’ 通配符’ *‘&#xff0c;是可以匹配…

怎样去除视频上的水印和文字,视频水印文本移除教程

在观看和分享视频时&#xff0c;我们经常会遇到带有水印或额外文字的情况。这些标记有时是为了版权保护&#xff0c;有时则是平台的标识&#xff0c;但在某些情况下&#xff0c;它们可能会干扰视频的观赏体验。本文将向你介绍常见的视频水印类型以及如何使用简鹿水印助手去除这…

ARM功耗管理之功耗数据与功耗收益评估

安全之安全(security)博客目录导读 思考&#xff1a;功耗数据如何测试&#xff1f;功耗曲线&#xff1f;功耗收益评估&#xff1f; UPF的全称是Unified Power Format&#xff0c;其作用是把功耗设计意图&#xff08;power intent&#xff09;传递给EDA工具&#xff0c; 从而帮…

05 以物品与用户为基础个性化推荐算法的四大策略

《易经》&#xff1a;“九二&#xff1a;见龙在田&#xff0c;利见大人”。九二是指阳爻在卦中处于第二位&#xff0c;见龙指龙出现在地面上&#xff0c;开始崭露头角&#xff0c;但是仍须努力&#xff0c;应处于安于偏下的位置。 本节是模块二第一节&#xff0c;模块二讲解传…

[Linux+git+Gitee+Jenkins]持续集成实验安装配置详细

首先理解持续集成原理&#xff0c;看懂并理解图 1。 图 1 持续集成原理结构 图 1 中&#xff0c;版本控制服务器指远程代码仓库&#xff0c;本实验使用 GitEE 作为远程代码仓库&#xff1b;Jenkins 自动化部署服务器为虚拟机&#xff0c;操作系统为 Linux &#xff1b…

人工智能与伦理挑战:多维度应对策略

人工智能技术近年来取得了迅猛发展&#xff0c;广泛应用于医疗诊断、金融分析、教育辅助、自动驾驶等各个领域&#xff0c;极大地提升了生产效率和服务质量&#xff0c;推动了科技进步和商业创新。然而&#xff0c;伴随其普及和应用的泛滥&#xff0c;AI也带来了数据隐私侵犯、…

C语言 | Leecode C语言题解之第229题多数元素II

题目&#xff1a; 题解&#xff1a; /*** Note: The returned array must be malloced, assume caller calls free().*//*假定 num1&#xff0c;num2 为出现次数大于 nums.length / 3 的两个数。&#xff08;最多出现两个&#xff09;遍历 nums&#xff0c; 若出现 num1、num2…

2024年高职云计算实验室建设及云计算实训平台整体解决方案

随着云计算技术的飞速发展&#xff0c;高职院校亟需构建一个与行业需求紧密结合的云计算实验室和实训平台。以下是针对2024年高职院校云计算实验室建设的全面解决方案。 1、在高职云计算实验室的建设与规划中&#xff0c;首要任务是立足于云计算学科的精准定位&#xff0c;紧密…

如何通过SSH协议使用WinSCP实现Windows与Linux之间的远程公网文件传输

目录 ⛳️推荐 前言 1. Windows传输文件至Linux 2. WinSCP使用公网TCP地址连接 3. WinSCP使用固定公网TCP地址访问服务器 ⛳️推荐 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到网站 前…

2.5 计算机网络

声明&#xff1a;文章参考的《系统架构设计师教程&#xff08;第二版&#xff09;》&#xff0c;如有侵权&#xff0c;本人将立即修改和删除。 利用通信线路将地理上分散的、具有独立功能的计算机系统和通信设备按不同的形式连接起来&#xff0c;并依靠网络软件以及通信协议实现…

深入Python网络编程:基础、工具和实践

深入Python网络编程&#xff1a;基础、工具和实践 网络编程是Python应用领域中的一个强大且核心的部分&#xff0c;它为开发者提供了与互联网或其他网络设备进行交互的能力。无论是构建Web服务、APIs&#xff0c;还是创建网络客户端&#xff0c;Python都提供了丰富的库来简化这…

【学习笔记】无人机(UAV)在3GPP系统中的增强支持(九)-无人机服务区分离

引言 本文是3GPP TR 22.829 V17.1.0技术报告&#xff0c;专注于无人机&#xff08;UAV&#xff09;在3GPP系统中的增强支持。文章提出了多个无人机应用场景&#xff0c;分析了相应的能力要求&#xff0c;并建议了新的服务级别要求和关键性能指标&#xff08;KPIs&#xff09;。…

Go语言--广播式并发聊天服务器

实现功能 每个客户端上线&#xff0c;服务端可以向其他客户端广播上线信息&#xff1b;发送的消息可以广播给其他在线的客户支持改名支持客户端主动退出支持通过who查找当前在线的用户超时退出 流程 变量 用户结构体 保存用户的管道&#xff0c;用户名以及网络地址信息 typ…

使用mybatis的statementHander拦截器监控表和字段并发送钉钉消息

新建mybatis的statementHander拦截器拦截器 类 面试题&#xff1a; 2.实现 解析Sql时引入JSqlParser JSqlParser 是一个 SQL 语句解析器。 它将 SQL转换为可遍历的 Java 类层次结构。 <dependency><groupId>com.github.jsqlparser</groupId><artifac…

正则表达式怎么控制匹配的字符串更近的一个

http((?!http).)*m3u8 正则表达式怎么控制匹配的字符串更近的一个 正则如何匹配最近的字符 正则如何匹配最近的两个字符 怎么控制只要离字符串b匹配更近一点的字符串a 解释 a.b&#xff0c;它将会匹配最长的以a开始&#xff0c;以b结束的字符串 a.?b匹配最短的&#xff…

7/13 - 7/15

vo.setId(rs.getLong("id"))什么意思&#xff1f; vo.setId(rs.getLong("id")); 这行代码是在Java中使用ResultSet对象&#xff08;通常用于从数据库中检索数据&#xff09;获取一个名为"id"的列&#xff0c;并将其作为long类型设置为一个对象…

【区块链 + 智慧政务】涉税行政事业性收费“e 链通”项目 | FISCO BCOS应用案例

国内很多城市目前划转至税务部门征收的非税收入项目已达 17 项&#xff0c;其征管方式为行政主管部门核定后交由税务 部门征收。涉税行政事业性收费受限于传统的管理模式&#xff0c;缴费人、业务主管部门、税务部门、财政部门四方处于 相对孤立的状态&#xff0c;信息的传递靠…