linux secure boot(安全启动)下为内核模块签名

news2024/12/23 1:38:07

文章目录

  • linux secure boot(安全启动)下为内核模块签名
    • 背景
    • Secure Boot安全启动开启关闭方法
    • 内核驱动签名
      • 生成签名证书和私钥
      • 导入签名证书
      • BIOS(UEFI)导入证书(重要)
      • 制作带签名的驱动
    • 参考

linux secure boot(安全启动)下为内核模块签名

背景

随着计算机性能和存储空间的提升,为了替代 BIOS,Intel 在 2000 年开发了了 EFI ,全称:Extensible Firmware Interface,即「可扩展固件接口」。随后,由业界多家著名公司共同成立统一可扩展固件接口论坛;将 EFI 统一化便形成了 「UEFI」:全称 Unified Extensible Firmware Interface,即「统一的可扩展固件接口」。它拥有图形化的界面、多样的操作方式以及允许植入硬件驱动等 BIOS 没有的特性,这些特性让 UEFI 相比于传统 BIOS 更加易用、更加多功能、更加方便。现在大部分的电脑默认都是使用 UEFI 的。

在 UEFI 的规范中定义了一项名为「Secure Boot」的协议,Secure Boot 只允许载入有数字签名的 EFI 驱动和启动程序。

现在很多 OS 都是通过 UEFI 引导的,如果 UEFI 里使能了 secure boot,那么需要 Signed kernel image 才能加载,对应的 kernel module 也需要是签过名的。

SecureBoot 在你系统启动前会对内核等底层的东西进行签名验证。验证通过则继续启动,验证失败无法进去系统并弹出提示。

第三方内核模块,一般是后面才编译的,编译的时候不可能拿到ubuntu官方的私钥来做签名。这些不签名的驱动,在 secure boot 模式下,就会被内核拒绝加载了(当BIOS启用Secure Boot模式后,不带签名的驱动无法加载。)

思路:解决此问题的最简单方法是在UEFI(BIOS)设置中禁用安全启动,这样内核也不检查模块的签名了,要么就把自己使用的私钥对应的公钥加到UEFI的数据库里面去。bios可以自己配置或者MOK相关的工具可以修改UEFI的公钥数据库。

即便 UEFI 里没有使能 secure boot,但如果内核是按照 CONFIG_MODULE_SIG_FORCE 配置的(也可通过内核启动参数*”module.sig_enforce=1″* 打开),那么也只有签过名的驱动能加载。

如果内核只是设置了 CONFIG_MODULE_SIG,那么未签名的驱动虽可被加载,但会被标记为 taint。

Secure Boot安全启动开启关闭方法

Secure Boot的中文名叫安全启动,它的作用就是利用预置的公钥密码,验证主板上加载的操作系统或者驱动程序,是否受信任。也就是说只有通过公钥对应的私钥签名过的系统、软件才能够通过验证并正常启动,而未通过验证的程序则无法加载。在Win8发布时微软规定硬件厂商主板中必须开启Secure Boot,并内置其公钥文件,所以Win7和一些Linux版本只能通过关闭Secure Boot才能安装启动。

1、开机界面按del键进入BIOS,一般在"Security 安全”或者“Boot 启动"中找到“Secure Boot 安全启动”。

2、将“Secure Boot”选项切换成"Enabled"表示开启,"Disabled"则是关闭。

注意:大部分主板会同时兼容两种BIOS,分别是传统Legacy BIOS和新型UEFI BIOS,只有切换到仅有UEFI模式或关闭CSM双模式自动兼容功能才能正常使用Secure Boot功能。

内核驱动签名

从内核版本4.4.0-20开始,强制要求在启用安全启动的情况下不允许运行未签名的内核模块。 如果您想要保持安全启动并运行这些模块,那么下一个逻辑步骤是签署这些模块。

生成签名证书和私钥

做驱动签名首先依赖mokutil和shim-signed

sudo apt install mokutil
sudo apt install shim-signed
sudo update-secureboot-policy --new-key

生成的证书(MOK.der)和私钥(MOK.priv)位于 /var/lib/shim-signed/mok/ 目录下。

openssl req -new -x509 -newkey rsa:2048 -keyout MOK.priv -outform DER -out MOK.der -nodes -days 36500 -subj "/CN=Descriptive name/"

导入签名证书

导入签名证书:

sudo mokutil --import /var/lib/shim-signed/mok/MOK.der

导入时会提示输入password,随便指定就行,后面在BIOS导入的时候要用到。

BIOS(UEFI)导入证书(重要)

从 UEFI 到 OS,再从 OS 到 driver,这是一条信任链,只有被已经在 UEFI 里注册过的 key 签名的驱动,才是可信的。除了 UEFI 出厂时由 vendor 设置的 key,我们还可以在后续的使用过程中自行添加(称为 “enroll”),其依据的原理大致是:既然都能够操作 UEFI 了,那该用户添加的 key 应该是可被信赖的。

重新启动后,UEFI将询问您是否要更改安全设置。选择”Yes”。
在这里插入图片描述在这里插入图片描述在这里插入图片描述
输入密码重启系统。

制作带签名的驱动

sudo /usr/src/linux-headers-$(uname -r)/scripts/sign-file sha256 /var/lib/shim-signed/mok/MOK.priv /var/lib/shim-signed/mok/MOK.der /path/to/module

/path/to/module 为你的驱动文件路径
例如:

sudo /usr/src/linux-headers-$(uname -r)/scripts/sign-file sha256 ./MOK.priv ./MOK.der $(modinfo -n xxx)

modinfo命令用于显示kernel模块的信息。
modinfo -n 为驱动的文件路径。

参考

Linux安全启动内核签名(UEFI Linux Secure Boot Kernel Signing and Verification demo)
参考URL: https://www.bilibili.com/video/av838517397/

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Mybatis对象关联数据库表【对多关联AND对一关联】

一对多分成两部分&#xff1a;对一、对多 1. 准备两张表oder、customer 2. 对多关联实现 对多关联&#xff1a;Customer类下创建一个List集合OrderBean类 public class Customer {private Integer id;private String name;//对多关联private List<OrderBean> orderBeanL…

结构型设计模式 Structural Patterns :适配器 Adapter(Python 实现)

文章大纲 python 代码实现实现1实现2实现3解决实际问题的例子参考文献与学习路径使用示例: 适配器模式在 Python 代码中很常见。 基于一些遗留代码的系统常常会使用该模式。 在这种情况下, 适配器让遗留代码与现代的类得以相互合作。 识别方法: 适配器可以通过以不同抽象或…

visual studio2019 定位内存泄漏的方法

1、首先下载一个好用的工具&#xff0c;哈哈&#xff0c;链接在下方https://kinddragon.github.io/vld/下载完后&#xff0c;进行安装&#xff0c;安装完后&#xff0c;文件夹如下所示&#xff1a;2、下面就是打开visual studio进行配置&#xff0c;将include配置好&#xff0c…

关于MAC zsh: command not found: bee 处理方案

最近在玩GO语言&#xff0c;接触到GoBee 这个框架&#xff0c;安装完成后检查beego版本时发现了这个错误“zsh: command not found: bee”。 原因:GO环境配置出问题。 此博文跳过GO的安装过程&#xff0c;直接进入正题。前提是&#xff1a;已经装好了GO。MAC 环境&#xff0c…

六氟磷酸锂洗桶废水除氟树脂吸附工艺

在六氟磷酸锂过程中&#xff0c;主要排放合成氟化锂生产废水和产品六氟磷酸锂桶清洗废水&#xff0c;主要含有氟、磷酸盐及锂&#xff0c;这是一种高氟、高浓度磷酸盐无机化工废水。 针对这类高氟、高浓度磷酸盐无机化工废水&#xff0c;常用于这类生产废水的处理技术有化学沉淀…

力扣刷题|513.找树左下角的值、112. 路径总和、113.路径总和 ii、106.从中序与后序遍历序列构造二叉树、105.从前序与中序遍历序列构造二叉树

文章表一LeetCode 513.找树左下角的值题目链接&#x1f517;思路LeetCode 112. 路径总和题目链接&#x1f517;思路LeetCode 113.路径总和 ii题目链接&#x1f517;思路LeetCode 106.从中序与后序遍历序列构造二叉树题目链接&#x1f517;思路LeetCode 105.从前序与中序遍历序列…

Java-基础-5.多线程

一&#xff1a;为什么出现多线程&#xff1f; 1. 线程是指&#xff0c;一段代码的运行&#xff08;cpu&#xff0c;代码&#xff0c;数据&#xff09;。但是&#xff0c;生产中&#xff0c;我们真实情况&#xff0c;数据都是并发传送的&#xff0c;所以&#xff0c;我们仅仅使用…

城市交通应急广播系统方案

恒星科通发布于2023-2-2 一、城市交通指挥与疏导广播系统概述 城市交通指挥与疏导广播即“GSM 无线智能广播”&#xff0c;是利用 GSM 无线接入设备与扩音广播系统组合形成的一款 GSM 无线智能广播系统&#xff0c;该系统用在交通指挥与疏导等智能交通项目有不可替代的优势。系…

C语言之深入解析如何理解指针和结构体指针、指针函数、函数指针

一、指针变量 首先要明白指针就是一个变量&#xff0c;可以使用如下代码来验证&#xff1a; #include "stdio.h"int main(int argc, char **argv) {unsigned int a 10;unsigned int *p NULL;p &a;printf("&a %d\n",a);printf("&a …

Docker如何连接至本地私服Harbor中 推送镜像、查看镜像、下载镜像

1.基础环境 win/mac/linux装有Docker私服 Harbor Docker Docker中文站 Docker官方站 下载并安装Docker Harbor Harbor GitHub Harbor 官方地址 下载并安装 Harbor (测试的话 推荐用Docker镜像来启动Harbor 减少环境问题) 2.配置流程 登录Harbor 启动后 访问 Harbor 的…

状态空间模型与卡尔曼滤波

1.状态空间模型 状态空间模型 (State Space Model)&#xff0c;包括两个方程模型&#xff1a; 一是状态方程模型&#xff0c;反映动态系统在输入变量作用下在某时刻所转移到的状态&#xff1b; 二是输出或测量方程模型&#xff0c;它将系统在某时刻的输出和系统的状态及输入变…

1.Echarts的简单使用

目录 1 下载echarts.min.js 2 使用示例 3 其他参数 Echarts是做前端数据可视化的&#xff0c;数据可视化是将数据做成图表&#xff0c;常见的可视化库有D3.js&#xff0c;ECharts.js,Highchart.js,AntV等 ECharts官网地址 Apache ECharts 进入后点击所有示例 示例中有各…

【MySQL】《狂飙》电视剧火了,如果程序一直狂飙,扛不住了,怎么办呢?

程序如果狂飙了怎么办呢&#xff1f;《狂飙》电视剧你看了吗&#xff1f;程序“狂飙”&#xff0c;你担心吗&#xff1f;性能优化步骤适合创建索引的情况不适合创建索引的情况Explain 性能分析id说明select_type 说明type字段说明Extra说明一下《狂飙》电视剧你看了吗&#xff…

PMI开通便捷的人民币付款

人民币付款通道正式开通啦当PMI持证人士通过PMI全球英文网站(www.pmi.org )进行证书更新缴费时&#xff0c;在原有美金支付的基础上&#xff0c;开通了新的人民币付款通道&#xff0c;包含支付宝和多种信用卡支付方式&#xff0c;持证人士可以按需选择<美金USD>或<人民…

基于梯度下降神经网络训练整体流程

文章目录基于梯度下降神经网络训练整体流程梯度下降优化算法一、简介二、梯度下降方法2.1 批量梯度下降法BGD2.2 随机梯度下降法SGD三、传统梯度下降法面临的挑战四、优化器4.1 Momentum4.2 Adagrad4.3 Adam4.4 对比与选择过拟合、拟合和欠拟合一、防止过拟合方法1.1 早停基于梯…

FFMPEG Vcl Player 7.0 For Delphi Crack

FFMPEG Vcl Player For Delphi 7.0【www_flashavconverter_com】是一个基于 directshow 和 ffmpeg 的 vcl 播放器&#xff0c;用于解码和播放视频/音频。 新增&#xff1a;升级到最新的FFMPEG Runtime(5.1.x)并支持Delphi 11.2 支持 Dash 回放 支持播放AES加密网络流 Nvidia 卡…

一文搞懂MD5、SHA-1、SHA-2、SHA-3,哪个算法比较安全

MD5、SHA-1、SHA-2、SHA-3都是比较常见的单向散列函数&#xff0c;这几种单向散列函数都有自己的特性。下面&#xff0c;给大家介绍一下它们的区别&#xff0c;以及MD5、SHA-1、SHA-2、SHA-3的安全性如何&#xff0c;哪种算法比较安全&#xff1f;一、简介单向散列函数是指对不…

JavaWeb:过滤器与监听器

一、过滤器Filter 1.1 过滤器Filter概述 Filter表示过滤器&#xff0c;是JavaWeb三大组件&#xff08;Servlet、Filter、Listener&#xff09;之一。Servlet我们之前都已经介绍过了&#xff0c;Filter和Listener我们今天都会进行介绍。 过滤器可以把对资源的请求 拦截 下来&…

Python的判断语句

进行逻辑判断&#xff0c;是生活中常见的行为。 同样&#xff0c;在程序中&#xff0c;进行逻辑判断也是最为基础的功能。 布尔类型和比较运算符 布尔类型的字面量&#xff1a; true 表示真&#xff08;是、肯定&#xff09;false 表示假&#xff08;否、否定&#xff09; …

【tkinter】用不到50行Python代码,写一个扫雷小游戏

文章目录定制按钮生成雷区主流程基础知识&#xff1a;StringVartkinter布局 定制按钮 学会了布局和绑定事件&#xff0c;就可以开发一些简单的应用&#xff0c;比如扫雷小游戏。从外观来看&#xff0c;扫雷就是一个按钮矩阵&#xff0c;左键点击按钮&#xff0c;如果按钮里埋…