セキュリティ研究者のMark Ermolov、Dmitry Sklyarov、Maxim Goryachy3氏が、CPUマイクロコードの修正に使用可能な、文書化されていない2つのx86インストラクションを発見した。これらのインストラクションは、ただし、CPUがデバッグモードで動作している場合にのみ実行可能なので、簡単に悪用できるものではない。
CPUのマイクロコードが修正可能であるというのは、CPUのインストラクションを望むように再プログラミングできる、という意味である。一般的に、CPUのマイクロコードの変更が必要になるのは、脆弱性やその他のバグを修正するためだが、CPUのアーキテクチャがそのためのメカニズムを用意しておかなくてはならない。CPUのマイクロコード更新は暗号化された形式で提供され、復号に必要な秘密鍵はCPU自体の内部に配置されている。今回の2つのインストラクションにアクセスすることで、攻撃者はこのバリアを迂回することが可能になる、とGoryachy氏は言う。
私見ですが、これらのインストラクションで実行可能なおもな機能のひとつは、マイクロコードアップデート時の検証をバイパスすることです。そう、そのとおり — 外部デバッガがなくても、永続的なマイクロコードパッチを作ることができるのです。
Ermolov氏によると、2つのインストラクションはユーザモードを含むすべてのプロセッサモードでデコードされるが、CPUがいわゆる"レッドステート"で動作中でない場合は、未定義インストラクション例外が発生する。レッドステートはIntelのSoC(System on a Chip)がサポートする4つのDFxステートのひとつで、その他はグリーン、オレンジ、DAMである。通常のCPU動作で使用されるのはグリーンステートで、レッドとオレンジではそれぞれ、CPU IPの全部および一部へのデバッグアクセスが可能になっている。
幸いなのは、Intel CPUをレッドステートにするのは簡単ではないことだ。現実的に、これはIntel Management Engine(ME)に脆弱性でもない限り、起こるはずのないことなのだ。Intel MEは2008年以降のすべてのIntel CPUに存在するサブシステムで、資料はほとんど公開されていないが、フルパフォーマンスを提供する上で必要なものだとIntelは説明している。セキュリティ研究者たちは、いくつかのケースにおいてセキュリティ上の脅威であるため、ユーザはこれを無効にする必要があると主張している。
実際にIntel MEには、これまでにいくつかの脆弱性が見つかっている。Ermolov、Sklyarov、Goryachy3氏が特に取り上げているのは、マイクロコードのアップデートを復号化するためにCPU内部で使用される秘密鍵を取得する方法だ。これにより、独自のマイクロコードを実行したり、Intelのマイクロコードが読み出される可能性が生じる。
3名の研究者は、2つのインストラクションにアクセスする方法を解説したビデオを投稿している。この方法は、root/admin権限でのみ実行が可能である。これを実行するには、独自のUEFIをSPIフラッシュにアップロードした上でシステムをリブートする必要があるため、システムに物理的アクセスが可能であることが必須になる。
Emolov、Sklyarov、Goryachy3氏は現在、論文とPoC全体の公開に向けて準備中である。現時点でのIntelは、2つの非公開インストラクションに対するアクセスの可能性について、これが脆弱性であるという見解を否定している。InfoQでは今後も、新たな情報が公開された場合、この件について詳細に報告する予定である。