テクノロジー

Ubuntu 26.04がRust sudoをデフォルトに採用――46年続いたC言語の脆弱性クラスを終わらせる

Adrian Kessler

Ubuntu 26.04 LTSは、sudo-rsをデフォルト実装として採用した。sudoは、Linuxにおいてシステムレベルのアクセスを制御するツールであり、ユーザーやプロセスが特権を必要とする際——ソフトウェアのインストール、システムファイルの変更、rootとしてのサービス実行など——のゲートキーパーとして機能する。オリジナルはCで書かれていた。sudo-rsはRustによる完全な再実装であり、世界で最も広く使われているLinuxディストリビューションでデフォルトとして出荷されるようになった。

オリジナルのsudoは1980年に書かれた。その間、Cコードベースは機能とともに別のものを蓄積してきた。すなわち、Rustがコンパイラレベルで排除するメモリ管理の脆弱性のクラスである。最も重大なものはCVE-2021-3156、通称Baron Sameditであった。この脆弱性は約10年間検出されず、主要なLinuxディストリビューションすべてでローカル権限昇格を許した。ローカルの攻撃者が非rootのシェルアカウントでrootになれる可能性があった。Canonicalは開示から24時間以内にパッチを適用した。それを可能にしたアーキテクチャ上の条件——Cの手動メモリ管理——はパッチされなかった。

Rustが変えるのは、コードの書き方ではなく、どのようなバグが存在し得るかという点だ。バッファオーバーフロー、use-after-freeエラー、NULLポインタ参照は、Rustがコンパイル時に排除する脆弱性のカテゴリーである——コンパイラは、これらのパターンを含むコードを実行前に拒否する。特権昇格を扱うソフトウェアにとって、これは脅威モデルから取り除くべき重要な制約である。

sudo-rsは2023年に完全な独立セキュリティ監査を完了した。このプロジェクトはC実装と同等のパフォーマンスを達成した。Canonicalは、より初期のUbuntuバージョンでオプションとして出荷を開始し、26.04でデフォルトとした。この段階的アプローチは、もし失敗した場合、ユーザーをシステムアクセスから締め出すか、攻撃者をrootに昇格させる可能性があるツールを置き換える際の慎重さを反映している。

Ubuntu 26.04にはuutils coreutilsも含まれている——ls、cat、mvなどの基本ツールのRust再実装である。ただし、cp、mv、rmはこのリリースではGNU C実装のままである。Canonicalの理由:これらのRust実装におけるTOCTOU競合状態は、データ破壊のリスクを伴い、LTSリリースにはリスクが高すぎるとチームが判断したためである。段階的な展開は、「単にRustで書き直せ」というアプローチについて正直なことを明らかにしている。ツールは存在するが、移行にはケースバイケースの安全性分析が必要であり、一律の切り替えはできないということだ。

Linuxカーネルは2022年にRustドライバコードの受け入れを開始した。Androidチームは2021年から新しいシステムコードにRustを使用している。Microsoftはメモリに敏感なWindowsコンポーネントをRustで書き直した。Ubuntuがsudo-rsをデフォルトにしたことは意義深いマイルストーンである。なぜなら、それは新しいドライバやオプションコンポーネントの実験ではなく、システムアクセスの認証レイヤーであり、すべての新規Ubuntuインストールにデフォルトで出荷されるからである。

この構成により、Baron Sameditを生み出したCVEパターンはUbuntuユーザーにとって終了する。他の主要ディストリビューション——Debian、Red Hat、Fedora、Arch——がUbuntuに追随してsudo-rsをデフォルトにするかどうかが、変化の規模を決める問いである。sudo-rsはこれらすべてで利用可能である。Canonicalは監査結果が十分であると判断した。次の決断は他のメンテナに委ねられている。

タグ: , , , , ,

ディスカッション

0件のコメントがあります。