Control-flow Enforcement (CET)
CETとも呼ばれます
CET(Control-flow Enforcement Technology)は、主にシャドウスタックと間接分岐トラッキングという、制御フローを保護するためのハードウェアメカニズムを追加します。ハードウェアサポートと特定のプロセスでのアクティブな保護は異なる状態です。
確認しておくべき要点
CET(Control-flow Enforcement Technology)は、主にシャドウスタックと間接分岐トラッキングという、制御フローを保護するためのハードウェアメカニズムを追加します。ハードウェアサポートと特定のプロセスでのアクティブな保護は異なる状態です。
仕組み
シャドウスタックは保護されたリターンアドレスステートを維持し、間接分岐トラッキングは追跡対象の間接分岐の遷移先を制限します。これらは異なる制御フロー遷移に対処し、個別のエニュメレーションと有効化が行われます。保護された実行環境を機能させるには、OS、ローダー、アプリケーションバイナリ、およびライブラリが関与します。
有用な場面
適切に構築されたアプリケーションは、OSが管理するシャドウスタックを使用して実行できるため、リターンアドレスが一致しない場合、実行が暗黙のうちにリダイレクトされるのではなく、定義された例外が発生します。互換性ポリシーは、レガシーモジュール、ならびにユーザーモード保護とスーパーバイザーモード保護とで異なる場合があります。
サポートと有効化の確認方法
シャドウスタック機能についてはCPUID.07H.00H:ECXビット7を、間接分岐トラッキングについてはEDXビット20をチェックし、OSのドキュメントに記載されているプロセス保護ステータスを検査してください。利用可能なCPUビット単体では、実行中のプログラムに対する保護の強制を確定することはできません。
機能、有効化、強制適用は個別に確認する必要があります。プロセッサが保護をサポートしていても、OS、アプリケーション、または仮想マシンポリシーがそれをアクティブ化しない場合があります。データベースのサポートフィールドは、稼働中のシステムの構成証明ではありません。
この機能が確立しない事項
CETフィールドがあるからといって、両方のサブ機能が存在する、または有効化されているとは限りません。CETはバイナリを信頼できるものにするわけでも、すべてのメモリ破壊バグを防ぐわけでも、アップデートに代わるものでもありません。保護をグローバルに無効化することは、アプリケーションクラッシュに対する日常的な解決策ではありません。
実際の互換性とパフォーマンス
OS、ファームウェア、影響を受けるランタイムを最新の状態に維持してください。保護によって互換性の問題が露見した場合は、まずベンダーの診断機能とサポートされているアップデートを使用してください。広範な保護の切り替えは無関係なアプリケーションに影響を与える可能性があるため、明示的な展開および復旧ポリシーに従う必要があります。
実践的な検証チェックリスト
- 関係する正確なプロセッサまたはプラットフォームのモデル、ならびにアプリケーション、OS、ランタイムのバージョンを記録してください。実際のエラーや要件の文言をそのまま保持してください。
- その正確なモデルの製造元リファレンスを確認し、プログラムが実行される環境で実効的な機能と有効化状態を検査してください。
- 選択したバイナリまたはバックエンドのすべての要件を比較してください。類似した名前の機能、エイリアス、または広範な技術表記だけでは不十分です。
- アプリケーションが意図した実装を選択したことを確認してください。要件が満たされていない場合は、文書化された診断機能とサポートされているフォールバックを使用してください。
- 一度に1つのサポート対象の変更のみを行い、同じワークロードを繰り返してください。元の構成と復旧手順を常に利用可能な状態にしておいてください。
機能が記載されているにもかかわらずソフトウェアで使用できない場合
正確にどのコンポーネントが失敗しているかから調査を開始してください。ハードウェアデータベースに記載されているのは記録された機能です。オペレーティングシステムまたはハイパーバイザーは、異なる実効環境を公開することがあります。破損や無関係な未サポート命令でも同様の症状が発生する可能性があるため、不正命令エラーの場合も実際にフォールトの原因となった命令とバイナリビルドの調査が必要です。
正確なプラットフォーム向けにサポートされているアプリケーション、ドライバ、またはランタイムのバージョンをインストールし、必要に応じてベンダーが文書化しているベースラインまたはフォールバックビルドを使用してください。ソフトウェアアップデートによってプロセッサに欠落している命令を作り出すことはできません。ファームウェアおよびセキュリティポリシーの変更は、一般的な最適化レシピではなく、システム製造元の手順と復旧計画に従う必要があります。
本説明のソースと対象範囲
Intel 64 and IA-32 Architectures Software Developer's Manual · Linuxカーネル: Control-flow Enforcement Technologyシャドウスタック
これらのリファレンスは、アーキテクチャの動作およびソフトウェア要件を規定しています。リンクされたハードウェアモデルページのすべての機能値を個別に検証するものではありません。モデルのサポート状況については、そのページの製造元エビデンスを使用し、実際の実効システム構成を確認してください。この記事はベンチマーク、認定、または独立したレビュー日を提供するものではありません。
出典と検証
エディトリアル所有権: Feex。独立したレビュー日は記録されていません。 調査方法.
- Intel 64 and IA-32 Architectures Software Developer's Manual · 第1巻および第2巻では指定された命令ファミリおよびCPUIDについて説明し、第3巻では状態、ページング、VMX、保護制御について説明しています。アーキテクチャドキュメントは、特定のモデルに対するサポートを確定するものではありません。
- Linuxカーネル: Control-flow Enforcement Technologyシャドウスタック · ハードウェアサポート、バイナリマーカー、ローダーの有効化、およびスレッドごとのアクティブな保護を区別します。IBTとシャドウスタックを別個の機能として説明します。
この記事は役に立ちましたか?
「はい」または「いいえ」を選択するだけで完了します。必要に応じて理由を選択するか、簡単なメモを追加してください。
ご協力ありがとうございます。ページの改善に役立てられます。