最近、 Googleのエンジニアが発表した 重大な脆弱性に関する詳細は、 CVE-2024-56161。 の名で洗礼を受けた エントリーサイン, この失敗 デジタル署名検証メカニズムを回避することができる Zen マイクロアーキテクチャの最初の 4 世代を使用する AMD プロセッサのマイクロコード更新中。
エントリーサイン 広範囲のプロセッサに影響を及ぼします。 攻撃者はマイクロコードの整合性を保証するセキュリティ制御を回避でき、ハードウェアの動作に対する悪意のある変更が可能になる可能性があります。
脆弱性について
この脆弱性の原因はAES-CMACアルゴリズムの使用にある。 デジタル署名の検証中に、信頼できるハッシュ関数の代わりに使用します。 AMD はこのアルゴリズムを使用してマイクロコードに署名し、RSA 秘密キーを使用し、パッチに公開キーを追加しました。
検証プロセス プロセッサは、製造時に埋め込まれた公開キーのハッシュとパッチで指定されたキーのハッシュを比較します。しかし、 CMACが使用されたため、これは実際にはハッシュ関数ではなく認証コードである。 メッセージ送信中にセキュリティ侵害が発生しました。
CMACはAESアルゴリズムに基づいています XOR演算を使用してデータブロックを結合しますしかし、衝突耐性を持つように設計されていないため、暗号化キーを知っている攻撃者が入力の変化を補正する中間値を計算でき、演算の結果は変更されません。
Intel と AMD はどちらも独自の RISC ベースのマイクロコード命令セットを設計しました。どちらも文書化されていませんが、概念的には ARM や RISC-V などの他の RISC 命令セットに似ています。ソフトウェアと同様に、複雑なハードウェアを正しく実装することは困難です。歴史的に、これは 1994 年の Intel の Pentium における FDIV バグなど、複数のよく知られたバグにつながっています。
AMDは単一の暗号化キーを提供する AES-CMACの場合 Zen 1からZen 4までのすべてのプロセッサつまり、誰かが 800 つの CPU からこのキーを抽出した場合、他のすべての CPU に適用できるということです。実際、研究者は、これらのプロセッサが NIST SP 38-XNUMXB ガイドラインの例から取得した既知のキーを使用していることを発見しました。
これにより、理論的には偽のパッチを生成することが可能になった。 パッチの公開鍵を同じハッシュを生成するものに置き換えることで、 デジタル署名の衝突を選択します。 このような衝突は、一見ランダムなデータの追加ブロックをマイクロコードに追加することによって実現され、変更されたパッチは AMD の元のデジタル署名を保持します。

この問題に対処するためにAMDプロセッサのマイクロコードを操作する新しい方法を模索するため、Googleのエンジニアは 彼らはZentoolを開発した限定的な逆アセンブリ、限定的なリバース エンジニアリング アセンブリを使用したマイクロコード パッチの作成など、マイクロコード パッチ検査のための複合ツールのコレクションです。
Zentoolはマイクロコードの分析と変更を容易にするために設計されていますパラメータの編集や命令の置き換えから、変更されたマイクロコードの CPU へのロード、パッチのデジタル署名の修正までを可能にする一連のコマンドを提供します。
たとえば、「zentool edit」コマンドを使用するとマイクロコード ファイル内のパラメータを編集できますが、「zentool print」を使用するとマイクロコードの内部構造に関する詳細情報が表示されます。また、「zentool load」はマイクロコードを CPU にロードし、「zentool resign」は行われた変更を考慮してデジタル署名を再計算します。さらに、このパッケージには、マイクロコードを直接操作するためのアセンブラ機能と逆アセンブラ機能を提供する mcas や mcop などのユーティリティが含まれています。
の機能 Zentoolを使用すると、開発者は独自のパッチを準備して適用できます。 AMD Zen プロセッサ上で、RDRAND 命令のロジックを変更するパッチが例として用意されています。このパッチを適用すると、RDRAND 命令は疑似ランダム シーケンスの生成を停止し、一貫して数値 4 を返すようになります。これにより、マイクロコードを変更してプロセッサの予想される動作を変更する能力が実証されます。
言及する価値があります Zentoolには詳細なガイドが付属しています AMD マイクロコードで使用される RISC86 マイクロアーキテクチャについて、またカスタム マイクロコードの作成方法を説明した説明書です。このガイドでは、新しいプロセッサ命令を設計する方法、既存の命令の動作を変更する方法、およびそれらの変更を CPU に直接ロードする方法などについて説明します。
最後に、それについてもっと知りたい場合は、の詳細を参照してください。 次のリンク。