【セキュリティ研究】超ロング割り込みでシステム管理モード(SMM)を攻略せよ
Exploiting System Management Mode with a very long interrupt
Exploiting System Management Mode with a very long interrupt
システム管理モード(System Management Mode:SMM)を悪用した攻撃手法に関する議論です。極めて長い割り込み(very long interrupt)を利用することで、システムの深部にあるSMMのセキュリティ制限を回避する技術的な試みについて解説されています。
Readmeで「LOOOOOOOOOOOOOOOOOOOONG(長〜い)」命令の必要性を強調するために、わざわざ無駄に長いコードブロックまで使って説明しているのが面白いね。トピック自体も興味深いけど、その演出のおかげでさらに楽しめたよ。
なぜ1秒のタイムアウトが必要なのかよくわからないな。たぶんそのパッチは、タイムアウトを無限大に設定することになるんじゃない?
ファームウェアの設計者はこの攻撃を予期していたみたいだけど、結局ベンダー側に丸投げしてるな。
// プラットフォームの実装者はタイムアウト値を適切に選択すること
[snip]
// - タイムアウト値はシステム内で考えられる最長のI/O操作よりも長くすること
アセンブリの存在やモードの種類くらいしかCPUアーキテクチャの詳細は知らないけど、それでも解説は面白かったし興味深かったよ。smiiiiiiii
SMMがタイムアウトを求めるのは、命令と命令の間にすべてを収めたいっていう形式上の理由があるからだよね。コア上で実行される超長い命令が終わった後、コアは一度停止するはずだし。これを攻撃につなげるには、SMMが動作している最中に、そのSMMの処理となんらかの形で相互作用するような超長い命令を送り込まないといけないんじゃないかな。
Readmeにもあったけど、関連リポジトリはこれだね:https://github.com/xoreaxeaxeax/asm-hall-of-shame
命令のレイテンシ分析は通常、パフォーマンス最適化(コードをいかに速く動かすか)に焦点が当てられる。Assembly Hall of Shameはその逆で、単一命令のパフォーマンスの底辺を探求するものだ。
面白いことやってるね!
SMMっていうアイデアが、誕生した当初と同じくらい今でもひどいものだということがよくわかるよ。
結局のところ、コストをケチるために管理専用の独立したコアを分けるのが面倒だっただけって話だろ。
このGitHubプロフィール、直近4日間までほとんど何も投稿されてなかったよね。
メタ的な視点で見ると何が起きてるんだ?何か見落としてるか?なぜこのプロフィールが急に注目を集めて、こんなに頻繁にフロントページに載るようになったんだ?
タイムアウトのアイデアは面白いね。もしファームウェアでSMMの実行時間を厳密に制限できたら、この種の攻撃は根絶できるのか、それとも単にクラッシュやDoS攻撃に変わるだけなのかな?
厳密にはroot権限が必要だから脆弱性とは言えないよ。むしろ「自分のハードウェアの主導権を取り戻す」と呼ぶべきじゃないかな。SMMはユーザーが制御も確認もできないメモリ領域を持っているから、悪そのものだよ。なぜCPUベンダーはユーザーが制御できないモードを実装するのか?答えは明らかで、ユーザーにとって敵対的な目的(ソフトウェアのコピー防止、DRM、政府用のバックドアなど)に使うためだよ。それ以外の理由は見当たらないね。