ノート:
- このチュートリアルでは、Oracle Cloudへのアクセスが必要です。無料アカウントにサインアップするには、Oracle Cloud Infrastructure Free Tierの開始を参照してください。
- Oracle Cloud Infrastructureの資格証明、テナンシおよびコンパートメントの値の例を使用します。演習を完了するときに、これらの値をクラウド環境に固有の値に置き換えます。
OCI Compute保護インスタンスでのセキュア・ブート機能の検証
イントロダクション
セキュア・ブートは、認可されていないブート・ローダーやオペレーティング・システムのブートを阻止するUnified Extensible Firmware Interface (UEFI)の機能です。セキュア・ブートでは、ブート前に署名されたファームウェアの署名が正しいことを検証して、オペレーティング・システムのロード前にルートキット、ブートキット、および未承認ソフトウェアが実行されないようにします。正しく署名されていないブートコンポーネントは実行できず、システムのブートが妨げられます。このチュートリアルでは、Oracle Cloud Infrastructure (OCI) Computeの保護インスタンスでセキュア・ブート機能を確認するタスクについて説明します。
目的
-
OCI Compute保護インスタンスでのセキュア・ブートのステータスを確認します。
-
符号なしカーネルモジュールを構築してロードしようとします。
-
セキュア・ブートによって、署名されていないモジュールに対する制限が適用される方法を理解します。
前提条件
-
インスタンスを作成および管理する権限を持つ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 Help Centerを参照してください。
Verify Secure Boot Feature on OCI Compute Shielded Instances
G12344-01
August 2024