戻る2021 年 8 月には、Intel による Linux カーネルの「FineIBT」の最初のパッチが見られました。これは、カーネルのセキュリティ保護を効率的に強化するために、Control-flow Enforcement Technology (CET) と Control Flow Integrity の長所を組み合わせることを目的としています。
昨年、FineIBT パッチが更新され、今週、Intel エンジニアの Peter Zijlstra が Linux 用の最新の FineIBT パッチを送信しました。 Linux 向けのこの FineIBT 制御フローの整合性作業に関する彼の最新の要約は次のとおりです。 IBT が提供するハードウェア CFI。
対照的に:
kCFI は純粋なソフトウェア CFI スキームであり、テキストを読み取ることができることに依存しています。具体的には、ターゲット シンボルの *前* の命令であり、実行の *前* にハッシュ検証を行います。呼び出します (そうしないと、制御フローは既に侵害されています)。
FineIBT は、ソフトウェアとハードウェアのハイブリッド スキームです。すべてのブランチ ターゲットがハッシュ検証で開始されるようにすることで、ブランチの後にハッシュ検証を配置できます。これにはいくつかの利点があります。
(ハッシュ) ロードが回避されます。メモなし; RX 要件はありません。
o IBT WAIT-FOR-ENDBR 状態は投機停止です。分岐ターゲットの直後の命令にハッシュ検証を配置することにより、投機ウィンドウが最小限になり、全体が SpectreBHB に対する実行可能な防御になります。
明らかに、このパッチは kCFI (アップストリーム) に依存していますが、さらに、呼び出し深度追跡パッチ (tip/x86/core) からのパディングにも依存しています。このパディングを使用してハッシュ検証を配置し、呼び出しサイトを書き換えて間接ターゲットを元のターゲットの前の 16 バイトになるように変更し、この新しいプリアンブルをヒットします。
特に、コール深度トラッキング (Skylake) を必要とし、IBT (Tigerlake 以降) をサポートするハードウェアはありません。
このコードは、最新の Call から構築されています。深度追跡は、メインラインの Linux (おそらく 6.2) に向けて機能します。 FineIBT に関する最新の議論については、このパッチ シリーズを参照してください。考慮すべき追加のセキュリティへの影響について。この FineIBT の作業がどこにつながるか、またメインライン カーネルに取り込まれるかどうか、またいつ取り込まれるかを確認します。