其他
Anolis商密OS最佳实践之内核模块签名商密化 | 龙蜥技术
商密软件栈SIG :基于 Anolis OS,在整个系统软件层面(包括硬件,固件,bootloader,内核以及 OS)实现以国密算法为主的全栈国密操作系统,结束一直以来国密算法生态碎片化的状况,在技术方面打造社区和生态,在资质合规方面致力于为行业提供基于国密的信息安全标准。
作者:李艺林(伯纪),商密软件栈SIG核心成员。欢迎更多开发者加入商密软件栈SIG:
网址:https://openanolis.cn/sig/crypto
邮件列表:tc@lists.openanolis.cn
内核模块签名简介
编译内核
下载Anolis OS的ANCK内核源码
devel-4.19
git clone git@codeup.openanolis.cn:codeup/kernel/cloud-kernel.git -b devel-4.19
编译内核
# 安装编译依赖
yum install -y bison flex elfutils-libelf-devel bc make gcc
# 用上一步生成好的ca.crt作为sm2_cert.pem,使用默认配置编译内核
cp -f ca.crt <kernel_src>/certs/sm2_cert.pem
# 进入内核源码目录,使用默认配置编译内核
cd <kernel_src>
# 如果您是arm的镜像,请将arch/arm64/configs/anolis_defconfig作为.config;
# 如果是x86的,请将arch/x86/configs/anolis_defconfig作为.config。以x86为例
cp -f arch/x86/configs/anolis_defconfig .config
# 配置系统的可信跟证书为/certs/sm2_cert.pem
sed -i 's/CONFIG_SYSTEM_TRUSTED_KEYS=\"\"/CONFIG_SYSTEM_TRUSTED_KEYS=\"certs\/sm2_cert.pem\"/' .config
make
# 安装modules
make modules_install
# 安装内核,这一步也会自动生成initramfs并更新grub.cfg
make install
# 查看vmlinuz
ls -l /boot/vmlinuz*
# 将新内核(比如vmlinuz-4.19.91+ )设置为缺省的启动内核
grubby --set-default /boot/vmlinuz-4.19.91+
reboot
内核模块签名商密实践
签名
sign-file
工具,给一个内核模块ko文件加上商密签名,命令如下:${kernel_src}/scripts/sign-file sm3 ca.key ca.crt ${kmod}.ko ${kmod}.ko.signed
验证签名
tail ${kmod}.ko.signed
看到~Module signature appended~
字样说明模块已经有了签名。cat /proc/modules
来查看加载的内核模块是否签名。O: Out-of-tree module has been loaded
E: Unsigned module has been loaded
cat /proc/modules
可以看到对应的模块没有E
标记,以 Out-of-tree 的 hello 为例,正确签名后是这样的:# cat /proc/modules
hello 262144 0 - Live 0xffff000003520000 (O)
cat /proc/modules
可以看到E
标记,比如:# cat /proc/modules
nft_fib_inet 262144 1 - Live 0xffff0000034a0000 (E)
dmesg
查看对应的失败原因,比如PKCS#7
signature not
signed with a trusted key
等。SIG是开放的,并争取让交付成果成为社区发行的一部分,由组内核心成员主导治理,可通过邮件列表和组内的成员进行交流。龙蜥社区SIG目前已超20个,包括硬件兼容性测试 SIG、商密软件栈、高性能存储技术 SIG、Java语言与虚拟机SIG、Cloud Kernel、OceanBase SIG等。
SIG网址:https://openanolis.cn/sig
加入微信群:添加社区助理-龙蜥社区小龙(微信:openanolis_assis),备注【龙蜥】拉你入群;加入钉钉群:扫描下方钉钉群二维码。欢迎开发者/用户加入龙蜥社区(OpenAnolis)交流,共同推进龙蜥社区的发展,一起打造一个活跃的、健康的开源操作系统生态!