開発

Fedora 45、x86_64 Shadow Stackをデフォルトで有効化へ

Fedora Linux 45で、ハードウェア強制のShadow Stack保護をデフォルトで有効化する提案が審議されている。Intel CETの一部でROP攻撃を防止する。

6分で読める SINGULISM 編集チームが確認・編集

Fedora 45、x86_64 Shadow Stackをデフォルトで有効化へ
Photo by Brecht Corbeel on Unsplash

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の取り組みの実効性を左右する。 編集部としては、今回の提案がもたらす互換性問題の実態に関心がある。

参考

よくある質問

Shadow Stackとは何ですか
Intel CETの一部で、ハードウェアがリターンアドレスを別のスタック(シャドウスタック)に保持し、元のスタックと比較することでROP攻撃を検出・防止する機能です。現代のIntelとAMD CPUでサポートされています。
Fedora 45でこの変更が採用されると、既存のアプリケーションはすべて保護されますか
2018年以降にビルドされたアプリケーションはすでに-fcf-protectionフラグが有効であり、依存ライブラリも同様に対応していれば透過的に保護されます。ただし、非対応のライブラリを含むプロセスや、動的ロード(dlopen)を使うケースでは保護が無効になるかエラーが発生します。
パフォーマンスへの影響はどの程度ですか
Shadow Stackの有効化によるパフォーマンスコストは極めて小さいか、ほとんど無視できるとされています。ハードウェアによる処理であるため、ソフトウェアベースの保護と比較してオーバーヘッドが少ないのが利点です。
出典: Phoronix

コメント

← トップへ戻る