Fedora 45、x86_64 Shadow Stackをデフォルトで有効化へ
Fedora Linux 45で、ハードウェア強制のShadow Stack保護をデフォルトで有効化する提案が審議されている。Intel CETの一部でROP攻撃を防止する。
Fedora Linux 45に向けて、x86_64アーキテクチャにおけるShadow Stackのデフォルト有効化が提案されている。Phoronixの報道によれば、この変更提案はGCC、LLVM Clang、Rustcでコンパイルされたアプリケーションとライブラリに対して、ハードウェア強制のリターンアドレス保護を自動的に適用するものだ。現代のIntelおよびAMD CPUが備えるセキュリティ機能を活用し、Return-Oriented Programming(ROP)攻撃への防御を大幅に強化する狙いがある。
提案の概要
この変更提案の核心は、Fedora 45の動的リンカまたはスタティックスタートアップルーチンが、バイナリとそのすべての共有ライブラリ依存関係がShadow Stack対応としてビルドされている場合に限り、Shadow Stackを有効化するという仕組みにある。2018年以降、Fedoraではredhat-rpm-configにおいてコンパイルフラグ-fcf-protectionがデフォルトで有効化されており、既存の大多数のバイナリはすでに適切なマークアップを保持している。そのため、今回の変更は大部分のアプリケーションに対して後方互換性を維持しながら、透過的にセキュリティ強化をもたらす。
技術的背景
Shadow Stackは、Intel Control-flow Enforcement Technology(CET)の2つの主要機能のうちの1つである。もう1つはIndirect Branch Tracking(IBT)で、こちらは今回の提案の対象外とされている。Shadow Stackはハードウェアレベルでリターンアドレスを保護し、ROP攻撃やJump-Oriented Programming(JOP)攻撃を無力化する。ROP攻撃は、スタック上のリターンアドレスを書き換えて任意のコード列を実行させる古典的かつ強力な exploits手法であり、近年のセキュリティ対策においても依然として脅威となっている。
実装の詳細
提案では、動的リンカがプロセスの起動時に、ロードされるバイナリと全共有ライブラリがShadow Stack対応かどうかをチェックする。すべてのコンポーネントが対応していればShadow Stackを有効化し、一つでも非対応のオブジェクトが含まれていればShadow Stackは無効のまま動作する。これにより、互換性を損なわずに段階的な移行が可能となる。
一方、新たな障害モードも存在する。Shadow Stackが有効化されたプロセスが、実行時に非対応の共有オブジェクトをdlopenで動的に読み込もうとした場合、dlopenはエラーを返す。エラーメッセージはerror: dlopen: /path/to/library.so: rebuild shared object with SHSTK support enabledのような形式となり、開発者は該当ライブラリの再ビルドを促される。
パフォーマンスと将来計画
Shadow Stackの有効化によるパフォーマンスへの影響は、極めて小さいかほとんど無視できる範囲にとどまるとされている。ハードウェアによる制御フロー保護はソフトウェアベースの代替手段と比較してオーバーヘッドが少なく、実用的なセキュリティ向上を低コストで実現できる。
Fedoraプロジェクトは、今回のShadow Stackデフォルト有効化を足がかりに、将来のリリースではIndirect Branch Trackingのデフォルト有効化も視野に入れている。IBTが加わることで、CETの完全な保護が実現し、制御フロー整合性の全体的な強化が達成される。
編集部の見解
短期的には、Fedora 45でこの提案が承認されれば、他の主要Linuxディストリビューションへの波及が予想される。特にエンタープライズ向けディストリビューションでは、セキュリティ強化のベンチマークとして採用が検討される可能性が高い。ただし、dlopenの新しいエラーパターンはプラグイン型アーキテクチャのアプリケーションで問題を引き起こす恐れがあり、開発者コミュニティの対応が短期間で求められる。 長期的視点では、CETの完全実装(IBTを含む)が進めば、ROPやJOPといった制御フロー乗っ取り攻撃の実質的な無効化につながる。これはOSとハードウェアの連携によるセキュリティ向上の好例と言える。一方で、Shadow Stackをサポートしない古いCPUではこの保護が機能しないため、ユーザーセグメントの分断やレガシーシステムの運用リスクが残る。IntelとAMDのCPUロードマップにおけるCET対応の普及状況が、Fedoraの取り組みの実効性を左右する。 編集部としては、今回の提案がもたらす互換性問題の実態に関心がある。
参考
- Fedora 45 Considering x86_64 Shadow Stack Usage By Default — Phoronix — 2026-07-02公開
- Fedora Wiki: Changes/ShadowStackDefault — 提案詳細(未確認URLですが元記事で言及)
よくある質問
- Shadow Stackとは何ですか
- Intel CETの一部で、ハードウェアがリターンアドレスを別のスタック(シャドウスタック)に保持し、元のスタックと比較することでROP攻撃を検出・防止する機能です。現代のIntelとAMD CPUでサポートされています。
- Fedora 45でこの変更が採用されると、既存のアプリケーションはすべて保護されますか
- 2018年以降にビルドされたアプリケーションはすでに-fcf-protectionフラグが有効であり、依存ライブラリも同様に対応していれば透過的に保護されます。ただし、非対応のライブラリを含むプロセスや、動的ロード(dlopen)を使うケースでは保護が無効になるかエラーが発生します。
- パフォーマンスへの影響はどの程度ですか
- Shadow Stackの有効化によるパフォーマンスコストは極めて小さいか、ほとんど無視できるとされています。ハードウェアによる処理であるため、ソフトウェアベースの保護と比較してオーバーヘッドが少ないのが利点です。
コメント