Fractal を紹介します。マイクロアーキテクチャのリバースエンジニアリング用に作られたOS

CPUがユーザーコードをカーネルコードから隔離する方法を調べるのは面倒な作業です。研究者はカーネルにパッチを当てたり、ドライバーを書いたり、ベアメタルプログラムをブートしたりしますが、これらの選択肢のいずれでも、彼らが一定に保とうとしていた変数が変わります。MIT CSAILの新しいオペレーティングシステムであるFractalは、このような混乱を取り除くために構築されました。その作成者たちはそれを使用して、Apple M1ブランチプレディクターの以前は文書化されていなかった動作を明らかにしました。

Image

MIT CSAILのJoseph RavichandranおよびMengjia Yanは、マイクロアーキテクチャのリバースエンジニアリングに干渉する測定ノイズの原因を除去するためにFractalを開発しました。このシステムはオープンソースとしてリリースされています。

汎用オペレーティングシステムの問題

マイクロアーキテクチャの実験は、ブランチプレディクター、キャッシュ、トランスレーション ルックアサイド バッファなどの共有CPU構造によって引き起こされるかすかなタイミング差を測定します。研究者がハードウェアがユーザーコードをカーネルコードからどのように隔離するかを研究したい場合、通常、特権境界の両側でテスト命令を実行する必要があります。Linuxではこれは通常、カーネルにパッチを当てるか、ドライバーを書くことを意味します。macOSでは、カーネル拡張が非推奨であり、オープンソースのXNUコードが不完全なため、研究者はカーネルへのバイナリパッチを使用しています。

コードをユーザー空間からカーネル拡張に移動すると、アドレス空間レイアウト、ブランチ履歴パス、およびリターンスタックバッファの内容が変わります。これらの変更のいずれでも、実験結果を変える可能性があり、ハードウェア防御が攻撃をブロックしたのか、それとも関係のない変数が変わったのかを判断するのが難しくなります。

Fractalの構造

Fractalは、X86_64、AARCH64、およびRISC-V 64ビットシステムをサポートする、ゼロから書き直された約31,000行のカーネルです。QEMU、Intel および AMD PC、Raspberry Piボード、および複数のApple Silicon Macで実行されます。

カーネルは、作成者がマルチプリビレッジ同時実行と呼ぶモデルを導入します。単一のタスクは、コードとメモリを共有しながら、設定可能な特権レベルで実行されるスレッドをホストできます。これは、同じ物理ページをユーザーおよびカーネルスレッドに異なる権限ビットで提示するシャドウメモリマップ、およびスレッドがランタイムスタックの仮想レイアウトを変更することなく特権レベルを変更できるようにするスタックエイリアシング方式によってサポートされています。

Fractalは協調スケジューラも提供しており、研究者はスレッドが実行される正確な順序を指定できます。割り込みとシステムサービスは、実行中の実験を先制することはありません。gmapと呼ばれるメモリ領域は、単一の2MBヒュージページで支えられた大きな仮想領域を供給し、セクションを特定の物理アドレスを制御するために置き換えることができます。

「Fractalは強力なアーキテクチャ貢献です。なぜなら、しばしば場当たり的なマイクロアーキテクチャ リバースエンジニアリングワークフローを再利用可能な研究インフラストラクチャに変えるからです」と、論文に関与していないカリフォルニア大学南カリフォルニア校のアシスタントプロフェッサーであるMengyuan Li が述べています。「ソフトウェアノイズを減らし、特権境界全体で研究者により厳密な制御を与えることにより、困難なハードウェア実験をはるかに解釈しやすくします。」

Apple M1での調査結果

作成者は、パフォーマンスと効率コア上の条件付きブランチプレディクターと間接ブランチプレディクターをリバースエンジニアリングすることにより、2020年のM1 Mac Miniで Fractalを評価しました。

間接ブランチプレディクターの場合、ユーザートレーニングされたターゲットはカーネルモードで推測的にフェッチされますが、それらのターゲットの推測実行はブロックされます。作成者はこれをパイプラインレースに起因していると述べており、フェッチは特権チェックが完了する前に始まります。同じパターンは異なるASIDで成り立ち、例外レベルとASIDの両方を覆うARM のCSV2仕様と一致しています。

条件付きブランチプレディクターは、どちらのコアタイプでも特権隔離を示しません。ユーザーコードは、受信側がカーネルモードで実行されていた場合を含めて、特権レベルとASID全体でCBPを確実に訓練しました。これはTubyとMorrisonの以前の調査結果と矛盾しており、彼らは効率コアでクロストレーニングが失敗したと報告しました。Fractal作成者は、その以前の結果をmacOSがカーネル拡張コードのコアピニングを尊重していないことに起因していると述べています。

チームはまた、非ブランチ命令が推測的にブランチとしてデコードされるPhantom推測をテストしました。Phantomフェッチは、ユーザーからユーザーへ、ユーザーからカーネルへ、およびクロスASID構成でM1上で発生しました。Phantom駆動の推測実行は発生しませんでした。これはApple Silicon上の
Phantomの動作に関する最初に発表された証拠です。

翻訳元: https://www.helpnetsecurity.com/2026/05/22/fractal-os-microarchitecture-reverse-engineering/

ソース: helpnetsecurity.com