征程 6X release版本内核模块安全加载

1.概述

征程 6X 系统在 release 编译时支持内核模块签名验证,仅加载使用正确密钥进行数字签名的内核模块。禁止加载未签名的内核模块或使用错误密钥签名的内核模块,客户需要替换成自己的 key 进行签名。

模块签名启用后,Linux 内核将仅加载使用正确密钥进行数字签名的内核模块。禁止加载未签名的内核模块或使用错误密钥签名的内核模块来进一步强化系统安全。

关于内核模块签名的介绍请看下文:

2.配置

2.1 内核配置选项

在 menuconfig 中选中 CONFIG_MODULE_SIG,对应生成的 config 就被默认选中相关配置来支持模块签名。

img

2.2 配置说明

项目 描述
CONFIG_MODULE_SIG_FORCE 对于严格的方法,必须存在有效的签名
CONFIG_MODULE_SIG_ALL 内核模块不自动签名,该选项自动签名所有模块

用于签名的\ 哈希算法\ :SHA-512

… code:: text

CONFIG_MODULE_SIG_SHA512

CONFIG_MODULE_SIG_HASH=“sha512”

3.密钥签名

执行签名可执行程序,使用密钥对内核模块进行签名。

3.1 Make Module_Install 签名

将内核配置为对模块进行签名,则此签名将在内核编译 make modules_install 时进行签名了。

3.2 手动对 ko 签名

指定需要的证书(包括公钥)和私钥、哈希算法以及内核模块。

通过 sign-file(可执行程序)使用密钥对要安装到内核的模块进行签名,命令格式如下:

sign-file sha512 module_signature.pem module_signature.x509 xx.ko 

手动 ko 签名实例

SDK 整编时有封装好的脚本可以用来自动签名,对于不用 modules_install 进行安装的模块,可以用如下脚本:

sign_ko.sh xxx.ko # 传入驱动 
sign_ko.sh dir # 传入驱动所在目录

只用 AppSDK 时,需要直接使用下面的命令

./sign-file sha512 module_signature.pem module_signature.x509 xx.ko 

3.3 发布版本中的签名

发布版本中会把签名密钥文件放在 AppSDK 中,给发布版本提供 ko 的时候可以直接用这些签名文件:

ls AppSDK/module_sig/

module_signature.pem module_signature.x509 sign-file

发布包里面也有 AppSDK 目录。

3.4 密钥

证书 (含公钥)\ :module_signature.x509

私钥\ :module_signature.pem

3.5 定制修改签名机制

要替换固定 key,将新的 key 替换源码目录中的 build_tools/hobot_tools/keys/下的私钥和证书即可,如下:

build_tools/hobot_tools/keys$ ls module_signature.*

module_signature.pem module_signature.x509

可以通过 openssl 创建自己的密钥对。

openssl req -new -nodes -utf8 -sha512 -days 36500 -batch -x509 -config x509.genkey -outform PEM -out module_signature.pem -keyout module_signature.pem

${OUTPUT_BUILD_DIR}/kernel/certs/extract-cert module_signature.pem module_signature.x509 # 生成证书

其中 x509.genkey 可以用 linux 下 certs/default_x509.genkey;extract-cert 工具是在支持模块签名编译中生成的。

#. 当 key 替换或者修改签名机制的时候,需要对工程目录进行清理:

删除生成目录中的内容,rm out/* -rf。

#. 清理完成后,重新编译系统去烧录验证。

#. 通过 strip 命令去去除内核模块的签名。

aarch64-linux-gnu-strip -g ~/nfs/module_sig_test.ko

3.6 签名结果确认

1.dmesg | grep -i x.*509

使用新配置的内核重新启动。在 dmesg 的输出中,您应该能够确认加载了正确的证书:

root@hobot:~# dmesg | grep -i x.*509

[ 0.333727] Asymmetric key parser ‘x509’ registered

[ 2.068923] Loading compiled-in X.509 certificates

[ 2.152800] Loaded X.509 cert ‘Build time autogenerated kernel key: 4e24f188419c7e1d5305f1d0ae2339286e1835c2’

[ 39.117796] [I|MIPI|hobot_mipi_csi_stl.c+252]:[RX4][STL]: module 509 reg done

2.cat /proc/keys

如果启用了 CONFIG_KEYS_DEBUG_PROC_KEYS,那么 root

用户可以在/proc/keys 文件中查看证书:

root@hobot:~# cat /proc/keys

0c5ec4d5 I------ 1 perm 1f030000 0 0 asymmetri Build time autogenerated kernel key: 4e24f188419c7e1d5305f1d0ae2339286e1835c2: X509.rsa 6e1835c2 []

3.hexdump -C hobot-pcie.ko | tail

内核模块在末尾附加了数字签名。一个简单的 hexdump 可以确认签名是否存在。

root@hobot:/mnt# hexdump -C hobot-pcie.ko |tail
00014d10  58 df 8f 8e fb 98 2a 76  72 b6 44 8c 97 cb 95 81  |X.....*vr.D.....|
00014d20  d7 1e 8b 8c 48 b8 64 54  13 bc d6 63 78 d3 1b 51  |....H.dT...cx..Q|
00014d30  00 2e 0b 3b 84 6b 35 f2  3b 19 b8 d3 3a 27 be bd  |...;.k5.;...:'..|
00014d40  21 08 2c 17 3c e3 3c 76  21 23 fc b4 c0 e7 eb 82  |!.,.<.<v!#......|
00014d50  13 5f 2d 69 b2 f4 45 d8  af 90 34 f2 69 9c fa e2  |._-i..E...4.i...|
00014d60  2e 02 e9 34 ce 46 f1 97  a1 00 00 02 00 00 00 00  |...4.F..........|
00014d70  00 00 00 02 a9 7e 4d 6f  64 75 6c 65 20 73 69 67  |.....~Module sig|
00014d80  6e 61 74 75 72 65 20 61  70 70 65 6e 64 65 64 7e  |nature appended~|
00014d90  0a                                                |.|

在 ko 文件的末尾有 module signature appended 的字样代表签名成功。

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

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

相关文章

有奖活动:pick 你最爱的 AI 项目!拿社区年度大奖!

🎄 R 友们,一年一度的春节又这么水灵灵的快到来了!🙋 陈运营给大家准备了四重好礼,快!往!下!看!⬆️ RTE 开发者社区功能再次升级!新增小助手推荐、私信功能,还有神秘功能马上上线~等你来体验!🎁 更重要的是!我们给大家准备的丰~厚~礼~包~已就位,快来 p…

BIND域名解析服务器搭建

dns介绍: dns域名解析服务,管理和解析域名与ip地址对应关系的技术 正向解析:域名解析为ip地址;反向解析:ip地址解析为域名 dns域名解析服务采用类似目录树层次结构记录域名与ip对应关系,采用分布式数据结构存储三种类型服务器: 主服务器:在特定区域内具有唯一性,负责维…

JS-20 字符串

字符串就是零个或多个排在一起的字符,放在单引号或双引号之中 zifuchan "zifuchuan" 单引号字符串的内部,可以使用双引号。双引号字符串的内部,可以使用单引号 key="value" "Its a long zifuchuan" 如果要在单引号字符串的内部,使用单引号,…

【Leetcode_Hot100】二叉树

二叉树 94. 二叉树的中序遍历 104. 二叉树的最大深度 226. 翻转二叉树 101. 对称二叉树 543. 二叉树的直径 102. 二叉树的层序遍历 108. 将有序数组转换为二叉搜索树 98. 验证二叉搜索树 230. 二叉搜索树中第 K 小的元素 199. 二叉树的右视图 114. 二叉树展开为链表 105. 从前序…

tcp_wrappers模块实现服务访问控制

介绍: 1、对有状态连接的特定服务进行安全检测并实现访问控制,所以只能用于tcp服务 2、判断进程是否接收tcp_wrappers的控制,取决于程序在编译时是否添加了libwrap库 3、类似防火墙的功能,但需要程序支持;对于一些访问控制可简单配置即可实现查询程序是否tcpwrap模块 存放…

linux PAM可插拔认证模块介绍

PAM(Pluggable Authentication Modules ) 介绍 通过提供一些动态链接库和一套统一的API,将系统提供的服务 和该服务的认证方式分开 使得系统管理员可以灵活地根据需要给不同的服务配置不同的认证方式而无需更改服务程序,同时也便于向系统中添加新的认证手段流程图说明:1、…

大三上加分细则

1、做液压项目 2、恋爱成功 3、通过软考中级

Head First 设计模式(中文版)PDF、EPUB免费下载

《Head First设计模式》(中文版)共有14章,每章都介绍了几个设计模式,完整地涵盖了四人组版本全部23个设计模式。前言先介绍这本书的用法;第1章到第11章陆续介绍的设计模式为Strategy、Observer、Decorator、Abstract Factory、Factory Method、Singleton,Command、Adapter、…

Java从入门到精通(第6版)PDF、EPUB免费下载

《Java从入门到精通(第6版)(软件开发视频大讲堂)》从初学者角度出发,通过通俗易懂的语言、丰富多彩的实例,详细讲解了使用Java语言进行程序开发需要掌握的知识。全书分为23章,内容包括初识Java,熟悉Eclipse开发工具,Java语言基础,流程控制,数组,类和对象,继承、多…

rust学习十五.5、引用循环和内存泄露

这个章节主要是为了引出弱引用这个奇怪的概念。 说实在,这个没有什么太好写的,因为内容比较晦涩难懂!在其它语言中,也常常存在所谓循环引用问题,和大部分问题一样,在其它语言中这些基本上都不是问题。但是在rust中,这是一个致命的问题。例如有a,b两个点,a指向b,b指向a…

腾讯云轻量服务器搭建彩虹聚合 DNS 聚合管理系统教程

彩虹聚合 DNS 管理系统具备诸多实用功能,其中包括 SSL 证书申请与自动部署功能,它能够从多个渠道申请 SSL 证书,像 Lets Encrypt 等,并自动将证书部署到各式各样的面板、云服务商以及服务器等环境中,同时还支持 CNAME 代理功能,为域名管理和安全访问提供了有力保障。 一、…

Django 3 Web应用开发实战PDF、EPUB免费下载

以DjangoWeb项目开发为主线,从源码的角度,深入剖析Django3企业级开发技术。适读人群 :适合有一定Python基础的Web开发人员阅读,也可用作培训机构和大中专院校相关专业的教学参考书。 以DjangoWeb项目开发为主线,从源码的角度,深入剖析Django3企业级开发技术。电子版仅供预…