SMMのセキュリティを破る「超長い割り込み」—x86の特権モードを1命令で無効化
Exploiting System Management Mode with a very long interrupt

x86 CPUの最も特権的な実行環境であるSystem Management Mode (SMM)は、全コアが同時にSMMに入ることで安全性を保っています。しかし、1秒以上かかる異常に長い機械語命令を使うことで、この同期を破り、SMM実行中に外部からコアを実行させることが可能になります。この研究では、Zen 3 Ryzen 7 5800Hで実証し、SMMのTOCTOU脆弱性がソフトウェアだけで悪用可能になることを示しました。
SMMの唯一の約束、つまりSMMが実行されている間は他の何も実行されないという約束は、1つの途方もなく長い命令によって崩れ去る。
HNでの議論
80- codedokode
技術的には、これは脆弱性ではない。root権限が必要だからだ。むしろ「自分のハードウェアの制御を取り戻す」と呼ぶべきだろう。SMMは邪悪なものだ。なぜならユーザーはそれを制御できず、SMMメモリ領域を覗くこともできないからだ。なぜCPUベンダーは、ユーザーが制御できないモードを実装するのか?明らかに、ユーザーに敵対する目的(ソフトウェアのコピー防止と報告、DRM、政府のアクセスバックドアなど)で使うためだ。他に説明は思いつかない。
- mike_hearn
ファームウェアの設計者たちはこの攻撃を予期しているが、どうやらベンダーに丸投げしているようだ:
//
// Platform implementor should choose a timeout value appropriately:
[snip]
// - The timeout value must be longer than longest possible IO operation in the system
- Hyperlisk
彼らの関連リポジトリで、readmeでも言及されている:https://github.com/xoreaxeaxeax/asm-hall-of-shame
> 命令レイテンシの分析は通常、パフォーマンス最適化、つまりコードをできるだけ速く動かすことに焦点を当てる。Assembly Hall of Shameは逆のアプローチを取る:単一命令のパフォーマンスの絶対的な下限を探すのだ。
面白いね!
- nazgulsenpai
readmeが、これが「超〜〜〜〜〜〜〜〜〜〜〜長い」命令である必要があるという事実を強調するために、不必要に長いコードブロックの例まで使っているのが面白い。話題自体も興味深いけど、それでずっと楽しめる。
- hyperhello
SMMがタイムアウトを要求するのは、形式的にすべてが命令の間に収まってほしいからだ。つまり、あるコア上で非常に長い命令が実行されているが、それが完了した後、コアは停止するのだろう?これを攻撃にするには、SMMが何かをしている最中に、その何かと何らかの形で相互作用する非常に長い命令が必要になるように思える。