0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Ubuntu 24.04 のカーネルにパッチを当てて脆弱性対策

0
Last updated at Posted at 2026-10-22

CVE-2026-74455 の対策をしたい。
NIST 見ると、
https://nvd.nist.gov/vuln/detail/cve-2026-74455
kerne.org ではパッチが既に公開されている。

しかしながら Ubuntu ディストリビューションのパッケージが降りてくるのはまだ時間がかかりそうなのでセルフビルド。

カーネルビルドの方針

今どきのカーネルビルドはどうなっているのかな?

「第333回 カーネルパッケージをビルドしよう | gihyo.jp」
https://gihyo.jp/admin/serial/01/ubuntu-recipe/0333
によると以下の選択肢がある。

  1. より新しいUbuntuカーネルがリリースされるのをおとなしく待つ
  2. Ubuntuカーネルにパッチを当ててビルドし直す
  3. Ubuntuのメインラインビルドを使う
  4. Upstreamのソースコードをそのままビルドする

今回は、

Ubuntuカーネルにパッチを当ててビルドし直す

のやりかたでやっていきます。

事前準備

カレントディレクトリに6GBytes 弱の容量が必要となります。

ビルドに必要なパッケージをインストールします

$ sudo apt install build-essential  libssl-dev libncurses-dev git dpkg-dev flex bison dwarves libelf-dev gawk

ソースレポジトリを有効にします。

$ sudo vim /etc/apt/sources.list.d/ubuntu.sources

として、以下のようになっているものをコピーし、そのまま貼り付けて

Types: deb
URIs: http://archive.ubuntu.com/ubuntu/
Suites: noble noble-updates noble-backports
Components: main restricted universe multiverse
Signed-By: /usr/share/keyrings/ubuntu-archive-keyring.gpg

Types: deb
URIs: http://security.ubuntu.com/ubuntu/
Suites: noble-security
Components: main restricted universe multiverse
Signed-By: /usr/share/keyrings/ubuntu-archive-keyring.gpg

あたらしく増えたエントリを以下のように書き換えます。

Types: deb

を

Types: deb deb-src
反映しておきます。

結果このようになります。

Types: deb
URIs: http://archive.ubuntu.com/ubuntu/
Suites: noble noble-updates noble-backports
Components: main restricted universe multiverse
Signed-By: /usr/share/keyrings/ubuntu-archive-keyring.gpg

Types: deb
URIs: http://security.ubuntu.com/ubuntu/
Suites: noble-security
Components: main restricted universe multiverse
Signed-By: /usr/share/keyrings/ubuntu-archive-keyring.gpg

Types: deb-src
URIs: http://archive.ubuntu.com/ubuntu/
Suites: noble noble-updates noble-backports
Components: main restricted universe multiverse
Signed-By: /usr/share/keyrings/ubuntu-archive-keyring.gpg

Types: deb-src
URIs: http://security.ubuntu.com/ubuntu/
Suites: noble-security
Components: main restricted universe multiverse
Signed-By: /usr/share/keyrings/ubuntu-archive-keyring.gpg

$ sudo apt update

カーネルソースのダウンロード

以下のように実行すると、自分のカレントディレクトリにソースがダウンロードされます。ローカルにダウンロードするので sudo する必要はありません。

$ apt source linux-image-unsigned-$(uname -r)
$ cd linux-hwe-7.0-7.0.0/

証明書関係の処理

モジュール署名に関するテンプレートをコピーします。

$ cp certs/default_x509.genkey certs/x509.genkey 

内容を編集

$ vim certs/x509.genkey

以下のようになっている箇所


[ req_distinguished_name ]
#O = Unspecified company
CN = Build time autogenerated kernel key
#emailAddress = unspecified.user@unspecified.company

を以下のように変更します。


[ req_distinguished_name ]
#O = Unspecified company
CN = Modules
#emailAddress = unspecified.user@unspecified.company

pem ファイルを作成します。

$ cd certs
$ sudo openssl req -new -nodes -utf8 -sha512 -days 36500 -batch -x509 -config x509.genkey -outform PEM -out signing_key.pem -keyout signing_key.priv
$ sudo chown "$USER":"$USER" signing_key.pem
$ cd ..

config の設定

$ cp /boot/config-$(uname -r) ./.config
$ vim .config

以下のように編集します。

CONFIG_SYSTEM_TRUSTED_KEYS=”debian/canonical-certs.pem”
↓
CONFIG_SYSTEM_TRUSTED_KEYS=””

CONFIG_SYSTEM_REVOCATION_KEYS=”debian/canonical-revoked-certs.pem”
↓
CONFIG_SYSTEM_REVOCATION_KEYS=””

CONFIG_DEBUG_INFO_DWARF5=y
↓
CONFIG_DEBUG_INFO_DWARF5=n

また、オリジナルのバージョンであることがわかりやすいようにローカルバージョン名を設定します。

CONFIG_LOCALVERSION=""
↓
CONFIG_LOCALVERSION="-custom-minus-one"

なお、ここで使用できるキャラクタは deb パッケージ化するときの制限があるらしいです。
アルファベットの大文字を使ったところ、以下のようなエラーが出ました。

 sudo apt install debhelper libdw-dev
dh_listpackages: error: Package-field must be a valid package name, got: "linux-image-7.0.14-custom-CVE-2-26-74455", should match "(?^:^(?^:[a-z0-9][-+\.a-z0-9]+)$)"
dh_listpackages: error: Package-field must be a valid package name, got: "linux-image-7.0.14-custom-CVE-2-26-74455", should match "(?^:^(?^:[a-z0-9][-+\.a-z0-9]+)$)"
dh_listpackages: error: Package-field must be a valid package name, got: 

ビルド

$ time make bzImage modules

途中、1ヶ所対話的に聞いてきます。

Proxy Execution (SCHED_PROXY_EXEC) [N/y/?] (NEW) 

新しいCPUスケジューリング機構だそうで、デフォルトのNを選ぶのが妥当です。

時間がかかります。 i5-8250U だと12時間ぐらい。 Ryzen7 7700 だと 4時間ぐらい? AWS の c8id.large 上で3時間ぐらいかな?

気分的に時間を測りながらビルドします。

インストール

実行権をつけておきます。

$ chmod +x debian/scripts/sign-module

initramfs のサイズを縮小しないと起動しなくなってしまうらしく、以下のコマンドを実行する。

$ sudo make modules_install INSTALL_MOD_STRIP=1

インストール

$ sudo make install

再起動します。

セキュアブート

起動時、bad shim signature というエラーが出る場合はBIOS画面を起動して、セキュアブートを OFF にしておく。

起動後、以下のように確認。

$ uname -r

 7.0.14-custom-minus-one

アンインストール

独自ビルドしたカーネルがうまく動くことがわかったので、アンインストールします。

$ sudo rm -rf /lib/modules/*custom-minus-one*
$ sudo rm -i /boot/*custom-minus-one*
$ sudo update-grub

パッチあてと deb パッケージ作成

カーネルビルドに問題がなかったので、パッチ当てを行います。

drivers/net/can/usb/peak_usb/pcan_usb_fd.c にパッチを当てたあと、debパッケージを作ります。

作成のためのツールをインストールします。

$ sudo apt build-dep .

debパッケージの作成

$ time make bindeb-pkg

とすると


.
.
.
 STRIP   debian/linux-image-7.0.14-custom-cve-2026-74455/lib/modules/7.0.14-custom-cve-2026-74455/kernel/ubuntu/igh-ecat/master/ec_master.ko
 SIGN    debian/linux-image-7.0.14-custom-cve-2026-74455/lib/modules/7.0.14-custom-cve-2026-74455/kernel/ubuntu/igh-ecat/master/ec_master.ko
 DEPMOD  debian/linux-image-7.0.14-custom-cve-2026-74455/lib/modules/7.0.14-custom-cve-2026-74455
dpkg-deb: building package 'linux-image-7.0.14-custom-cve-2026-74455' in '../linux-image-7.0.14-custom-cve-2026-74455_7.0.14-7_amd64.deb'.
dpkg-deb: building package 'linux-headers-7.0.14-custom-cve-2026-74455' in '../linux-headers-7.0.14-custom-cve-2026-74455_7.0.14-7_amd64.deb'.
 INSTALL debian/linux-libc-dev/usr/include
dpkg-deb: building package 'linux-libc-dev' in '../linux-libc-dev_7.0.14-7_amd64.deb'.
dpkg-genbuildinfo --build=binary -O../linux-upstream_7.0.14-7_amd64.buildinfo

となり、deb パッケージが3つできました。

インストールは以下のようにして行います。


 
$ sudo dpkg -i linux-image-7.0.14-custom-cve-2026-74455_7.0.14-7_amd64.deb linux-headers-7.0.14-custom-cve-2026-74455_7.0.14-7_amd64.deb linux-libc-dev_7.0.14-7_amd64.deb 
0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?