注意:
- 本教程需要访问 Oracle Cloud。要注册免费账户,请参阅开始使用 Oracle Cloud Infrastructure 免费套餐。
- 它对 Oracle Cloud Infrastructure 身份证明、租户和区间使用示例值。完成实验室后,请使用特定于云环境的那些值替换这些值。
验证 OCI 计算受防护实例上的安全引导功能
简介
安全引导是统一可扩展固件接口 (Extensible Firmware Interface,UEFI) 功能,用于防止未授权的引导加载程序和操作系统引导。在引导之前,安全引导将验证已签名固件的签名是否正确,以防止在加载操作系统之前运行 rootkit、bootkit 和未经授权的软件。不允许运行未正确签名的引导组件,从而阻止系统引导。本教程将指导您完成在 Oracle Cloud Infrastructure (OCI) Compute 受保护实例上验证安全引导功能的任务。
目标
-
验证 OCI 计算受防护实例上的安全引导状态。
-
构建并尝试装入无符号内核模块。
-
了解安全引导如何对无符号模块实施限制。
先决条件
-
具有创建和管理实例权限的 OCI 账户。
-
具备 Oracle Linux 命令和内核模块的基本知识。
-
运行 Oracle Linux 8 的 OCI Compute 防护实例。要创建受防护实例以及查看支持启用受防护实例的配置和平台映像,请参阅受防护实例。
任务 1:验证受防护实例中的安全引导状态
运行以下命令以检查安全引导状态。
sudo mokutil --sb-state
您可以看到安全引导已启用。
SecureBoot enabled
任务 2:在受防护实例中设置环境
-
为内核模块创建目录。
mkdir ~/secureboot cd ~/secureboot
-
使用以下内容创建名为
unauthorised_module.c
的内核模块源文件。#include <linux/module.h> #include <linux/kernel.h> static int __init unauthorised_module_init(void) { printk(KERN_INFO "Unauthorised module loaded\n"); return 0; } static void __exit unauthorised_module_exit(void) { printk(KERN_INFO "Unauthorised module unloaded\n"); } module_init(unauthorised_module_init); module_exit(unauthorised_module_exit); MODULE_LICENSE("GPL"); MODULE_DESCRIPTION("Unauthorised module"); MODULE_AUTHOR("Vishak");
-
使用以下内容创建名为
Makefile
的 Makefile。obj-m += unauthorised_module.o all: make -C /lib/modules/$(shell uname -r)/build M=$(PWD) modules clean: make -C /lib/modules/$(shell uname -r)/build M=$(PWD) clean
注:请确保
all:
和clean:
下的行以制表符缩进,而不是以空格缩进。
任务 3:构建内核模块
运行以下命令以安装 GCC 工具集。
make
这将编译 unauthorised_module.c
文件并生成 unauthorised_module.ko
。
(可选)处理编译器兼容性问题:
如果遇到 GCC 工具集版本不匹配错误,请使用以下步骤解决。
-
安装 GCC 工具集。
sudo yum install gcc-toolset-11
-
启用 GCC 工具集。
scl enable gcc-toolset-11 bash
任务 4:装入未签名的内核模块
-
运行以下命令以装入内核模块。
sudo insmod unauthorised_module.ko
如果安全引导已启用且正常运行,您应该会看到以下错误。
insmod: ERROR: could not insert module test_module.ko: Key was rejected by service
-
检查内核消息以实现安全引导。
(dmesg -T | grep -i "secure boot"; dmesg -T | tail -5) | less
查找指示安全引导阻止装入模块的消息。
[Wed Jul 10 14:00:41 2024] secureboot: Secure boot enabled [Wed Jul 10 14:00:41 2024] Kernel is locked down from EFI Secure Boot mode; see man kernel_lockdown.7 [Wed Jul 24 14:34:51 2024] Loading of unsigned module is rejected
后续步骤
在本教程中,我们通过尝试加载未签名的内核模块并观察系统响应,成功验证了 Oracle Linux 屏蔽实例上安全引导的功能。这可以确认安全引导处于活动状态并按预期运行,从而增强云环境的安全性。安全引导的优点是,它确保仅在引导过程中加载可信和签名的软件,保护您的实例免受恶意或未经授权的代码,从而保持系统的完整性。
在本系列的下一个教程中,我们将探讨 OCI 实例的其他安全功能和测试方法。
确认
- 作者 — Vishak Chittuvalapil(高级云工程师)
更多学习资源
浏览 docs.oracle.com/learn 上的其他实验室,或者访问 Oracle Learning YouTube 渠道上的更多免费学习内容。此外,请访问 education.oracle.com/learning-explorer 成为 Oracle Learning Explorer。
有关产品文档,请访问 Oracle 帮助中心。
Verify Secure Boot Feature on OCI Compute Shielded Instances
G12347-01
August 2024