Reptar
(lock.cmpxchg8b.com)CPUのミステリーを発見
- 現代のCPU内部で発生しうる不具合に関心があるなら、ぜひ読み進めてほしい。
- x86アセンブリを書いた経験があれば、メモリ移動に使われる
rep movsb命令に馴染みがあるはずだ。 - ソース、宛先、方向、カウントを設定すれば、あとはプロセッサがすべての詳細を処理する。
命令プレフィックスの解釈
- x86の特徴のひとつは、命令デコードが一般に非常に柔軟であることだ。
- 意味がない、あるいは他のプレフィックスと衝突するプレフィックスを使っても、ほとんどは無視される。
- コンパイラは望ましいアラインメント境界に合わせるため、不要なプレフィックスを使うことがある。
REXプレフィックス
- i386には8個の汎用レジスタがあり、レジスタ指定には3ビットで十分だった。
- x86-64ではさらに8個の汎用レジスタが導入され、より多くのビットが必要になった。
- REXプレフィックスは、後続の命令が追加ビットを借りられるようにし、16個の汎用レジスタのエンコーディングを可能にする。
エンコーディング規則
- REXプレフィックスは、オペランドをエンコードするための利用可能な空間を増やす。
- 不要または重複したプレフィックスは、x86ではたいてい無視される。
rex.rxb rep movsb命令にはオペランドがないため、REXビットに意味はなく、プロセッサはREXプレフィックスを無視する。
Fast Short Repeat Move(FSRM)
- FSRMはIce Lakeで導入された新機能で、ERMSの欠点を解消する。
- ERMSでは、バッファを整列させて可能な限り最も広いストアを使うことが、効率的な文字列移動における難しい部分だった。
- FSRMは128バイト以下の短い文字列をより高速に移動することを目指している。
発見
- プロセッサ検証手法であるOracle Serializationを使い、ランダム生成されたプログラムの2つの形が同じ最終状態を持つかどうかを確認した。
- 8月に、検証パイプラインがFSRM最適化された
rep movs操作へ冗長なrex.rプレフィックスを追加すると、予測不能な結果を招く事例を発見した。 - マルチコアで同じバグをトリガーすると、プロセッサがマシンチェック例外を報告して停止することを確認した。
再現
- 研究結果はセキュリティ研究リポジトリで公開した。
- 脆弱性の再現には
icebreakツールを使える。 - 影響を受けないシステムでは何も出力されないはずだが、影響を受けるシステムでは再現に成功するたびに
.が出力される。
分析
- 現代システムでマイクロコードがどのように動作するかは秘匿されているため、観察に基づく理論しか立てられない。
- このバグは、フロントエンドが
movsb命令のサイズを誤って計算し、その結果ROB(再順序化バッファ)の後続エントリが誤ったアドレスに結び付けられることで起きていると推測される。
疑問
- この予期しない「グリッチ」状態で何が可能なのか、という疑問があるかもしれない。
- システム状態を十分に破壊してマシンチェックエラーを引き起こせること、そしてスレッドがSMTの兄弟プロセッサの実行に影響を与えうることは分かっている。
- μop実行をデバッグする手段がないため、権限昇格を達成できるかどうかは不明だ。
解決策
- Intelは、影響を受けるすべてのプロセッサ向けに更新済みマイクロコードを公開した。
- OSまたはBIOSベンダーがすでに更新を提供している可能性もある。
代替策
- 更新が不可能な場合は、IA32_MISC_ENABLEモデル固有レジスタを通じてFast Stringsを無効化できる。
- ただし大幅な性能低下を招くため、本当に必要な場合にのみ使うべきだ。
GN⁺の意見
この記事の最も重要な点は、現代のCPUで発生しうる予期しない「グリッチ」状態を発見し、それによってセキュリティ脆弱性が生じうることを示している点です。これはソフトウェアエンジニアにとって興味深い内容であり、CPUの複雑さとシステムの脆弱性への認識を高めるのに役立ちます。また、このような発見がどのように現実のセキュリティ脅威につながりうるかの理解を助け、更新済みマイクロコードの重要性を強調しています。
1件のコメント
Hacker Newsの意見
Konrad Magnusson のチームが
mimallocに関する問題を発見。mimallocに関連する問題を見つけており、これは Google の研究者が発見した新しい CPU 脆弱性に関連している可能性がある。Google 内の複数の研究チームが独立してバグを発見。
silifuzzチームと Google Information Security Engineering チームを含む複数の研究チームが、同じバグを独立して発見した。プロセッサがマシンチェック例外を報告して停止。
ハードウェアへの理解不足を痛感。
qemu が
repz ret問題に直面した際の診断を思い出す。repz ret問題を診断していた状況を回想している。Intel の社員自身と Google の社員が問題を報告。
Google の記事よりはるかに面白い。
順序実行ではなく投機実行する CPU を、セキュリティ問題なしに設計できるのかという疑問。
Intel のセキュリティ告知に関する説明。