2 ポイント 投稿者 GN⁺ 2023-11-15 | 1件のコメント | WhatsAppで共有

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件のコメント

 
GN⁺ 2023-11-15
Hacker Newsの意見
  • Konrad Magnusson のチームが mimalloc に関する問題を発見。

    • Paradox Interactive の Konrad Magnusson が mimalloc に関連する問題を見つけており、これは Google の研究者が発見した新しい CPU 脆弱性に関連している可能性がある。
  • Google 内の複数の研究チームが独立してバグを発見。

    • Google 内の silifuzz チームと Google Information Security Engineering チームを含む複数の研究チームが、同じバグを独立して発見した。
  • プロセッサがマシンチェック例外を報告して停止。

    • プロセッサがマシンチェック例外を報告し、動作を停止する現象について言及している。
  • ハードウェアへの理解不足を痛感。

    • ハードウェアに関する知識が不足していることを認識し、命令の動作を変更するために「プレフィックス」が必要な理由について疑問を呈している。
  • qemu が repz ret 問題に直面した際の診断を思い出す。

    • qemu が repz ret 問題を診断していた状況を回想している。
  • Intel の社員自身と Google の社員が問題を報告。

    • Intel は、自社の社員と Google の社員がこの問題を内部で発見し報告したことに感謝を示している。
  • Google の記事よりはるかに面白い。

    • Google の記事よりこの議論のほうがはるかに興味深いと述べている。
  • 順序実行ではなく投機実行する CPU を、セキュリティ問題なしに設計できるのかという疑問。

    • 順序実行ではなく投機実行する CPU を設計する際に生じうるセキュリティ問題について疑問を呈し、将来的には各 A55 コアが独立して 1 つのアプリケーションを実行する方向に進むのかと問いかけている。
  • Intel のセキュリティ告知に関する説明。

    • Intel のセキュリティ告知では、特定の Intel プロセッサで予期しない動作を引き起こす命令シーケンスが存在し、それによって認証済みユーザーが権限昇格、情報漏えい、サービス拒否を引き起こす可能性があると説明している。