システム管理モード(SMM、保護リングにちなんでリング-2と呼ばれることもある)[1] [2]は、 x86中央処理装置(CPU)の動作モードであり、オペレーティングシステムを含むすべての通常の実行が一時停止されます。通常、コンピュータのファームウェア内に存在する代替ソフトウェアシステム、またはハードウェア支援デバッガが、高い権限で実行されます。
これは最初にIntel 386SLでリリースされました。[3] [4]当初SMMには特別なSLバージョンが必要でしたが、Intelは1993年にメインラインの486およびPentiumプロセッサにSMMを組み込みました。AMDは1991年にIntelのSMMをAm386プロセッサに実装しました。 [5]これはx86アーキテクチャのそれ以降のすべてのマイクロプロセッサで利用可能です。[要出典]
ARMアーキテクチャでは、例外レベル3(EL3)モードはセキュアモニターモードまたはシステム管理モードとも呼ばれます。[6]
手術
SMM は、電源管理、システム ハードウェア制御、独自の OEM 設計コードなどのシステム全体の機能を処理するために提供される特別なオペレーティング モードです。これは、アプリケーション ソフトウェアや汎用システム ソフトウェアではなく、システム ファームウェア ( BIOSまたはUEFI ) でのみ使用することを目的としています。SMM の主な利点は、オペレーティング システムや実行およびソフトウェア アプリケーションに対して透過的に動作する、明確で簡単に分離できるプロセッサ環境を提供することです。[引用が必要]
透明性を実現するために、SMMは特定のルールを課しています。SMMにはSMI(システム管理割り込み)を介してのみ入ることができます。プロセッサは、ファームウェアによってCPUの他の動作モードからアクセスできないようにする必要がある別のアドレス空間(SMRAM)でSMMコードを実行します。[7]
システム管理モードは、巨大なリアルモードとして最大4GBのメモリをアドレス指定できます。x86-64プロセッサでは、 SMMは4GBを超えるメモリをリアルアドレスモードとしてアドレス指定できます。[8]
使用法
当初、システム管理モードは、 Advanced Power Management (APM)などの電源管理およびハードウェア制御機能を実装するために使用されていました。しかし、BIOS メーカーと OEM は、Advanced Configuration and Power Interface (ACPI)などの新しい機能に SMM を採用しました。 [9] [10]
システム管理モードの用途は次のとおりです。
- メモリやチップセットのエラーなどのシステムイベントを処理する
- CPU温度上昇時のシャットダウンなどのシステム安全機能を管理する
- システム管理 BIOS (SMBIOS)
- 高度な構成と電源インターフェース
- 電圧レギュレータモジュールやLPCIO(スーパーI/Oまたは組み込みコントローラ)の管理などの電源管理操作を制御します。
- USBマウス/キーボードをPS/2マウス/キーボードとしてエミュレートする( USBレガシーサポートと呼ばれることが多い)[11]
- 東芝やIBM/Lenovoのノートパソコンなどのシステム構成を一元管理する
- トラステッドプラットフォームモジュール(TPM)の管理[12]
- BIOS固有のハードウェア制御プログラム(オペレーティングシステムランタイムでのUSBホットスワップやThunderboltホットスワップを含む)[13]
システム管理モードは、 Black Hat 2008 [14]および2015 [15]で実証されたように、高権限のルートキットを実行するために悪用される可能性もあります。
SMMへの参入
SMM は、次の方法で呼び出される SMI (システム管理割り込み) を介して開始されます。
- マザーボードのハードウェアまたはチップセットは、プロセッサチップの指定されたピンSMI#を介して信号を送信します。 [16] この信号は独立したイベントになることがあります。
- ソフトウェアSMIは、マザーボードロジックによって特別とみなされる場所(ポート0B2hが一般的)へのI/Oアクセスを介してシステムソフトウェアによってトリガーされます。[17]
- ファームウェアがプロセッサ チップに動作を要求した場所への I/O 書き込み。
SMM に入ると、プロセッサはレジスタ CS = 3000h および EIP = 8000h を使用して、アドレス SMBASE (SMBASE レジスタの内容) + 8000h (デフォルトでは 38000h) にある最初の命令を探します。CS レジスタの値 (3000h) は、SMM のときにプロセッサがリアルモード メモリ アドレスを使用するためです。この場合、CS の右端に内部的に 0h が追加されます。
問題点
設計上、オペレーティングシステムはSMIを上書きしたり無効にしたりすることはできません。このため、SMIは悪意のあるルートキットの常駐の標的となり、[18] [19] NSAの「インプラント」[20]もその1つで、特定のハードウェアに個別のコード名が付けられています。たとえば、 Juniper Networksのファイアウォールの場合はSOUFFLETROUGH、[21] 同社のJシリーズルーターの場合はSCHOOLMONTANA 、 [22] DELLの場合はDEITYBOUNCE、[23] HP Proliantサーバーの場合はIRONCHEFです。 [24]
不適切に設計され、十分にテストされていないSMM BIOSコードは誤った仮定を行い、PAEや64ビットロングモードなどの他のx86動作モードを中断したときに正常に動作しない可能性があります。[25] Linuxカーネルのドキュメントによると、2004年頃、USBレガシーサポート機能のこのようなバグのある実装は、たとえばIntel E7505チップセットをベースにしたマザーボードでのクラッシュの一般的な原因でした。[11]
SMM コード (SMI ハンドラー) はシステム ファームウェア ( BIOS ) によってインストールされるため、OS と SMM コードでは、 Advanced Programmable Interrupt Controller (APIC) の設定 方法に関する異なる考え方など、互換性のないハードウェア設定が想定される場合があります。
SMM の操作は、アプリケーション、オペレーティング システム カーネル、ハイパーバイザーから CPU 時間を奪います。マルチコア プロセッサでは、各 SMI によってすべてのコアのモードが切り替わるため、その影響はさらに大きくなります。[26]また、SMM のオン/オフの切り替えには、CPU の状態をメモリ (SMRAM) に保存し、ライトバック キャッシュをフラッシュする必要があるため、いくらかのオーバーヘッドも発生します。これにより、リアルタイムの動作が損なわれ、クロック ティックが失われる可能性があります。Windows カーネルと Linux カーネルは、「SMI タイムアウト」設定を定義します。これは、SMM ハンドラーがオペレーティング システムに制御を返さなければならない期間であり、この期間内に返さなければ、システムは「ハング」または「クラッシュ」します。
SMM は、タイミング要件が制約されているリアルタイムアプリケーションの動作を妨げる可能性があります。
CPUがSMMに入っているかどうかを判断するには、ロジックアナライザが必要になる場合があります(CPUのSMIACT#ピンの状態をチェックします)。[16] SMIハンドラコードを復元してバグ、脆弱性、秘密を分析するには、ロジックアナライザまたはシステムファームウェアの逆アセンブリが必要です。
参照
- Coreboot – 一部のチップセット用のオープンソースのSMM/SMIハンドラー実装が含まれています
- インテル 80486SL
- ロードオール
- MediaGX – SMMを介して存在しないハードウェアをエミュレートするプロセッサ
- リング −3
- 統合拡張ファームウェア インターフェース(UEFI)
- 基本入出力システム(BIOS)
- 投機的実行CPUの脆弱性
参考文献
- ^ Domas, Christopher (2015-07-20). 「メモリシンクホール」(PDF) . Black Hat . 2015-08-22閲覧。
- ^ Tereshkin, Alexander; Wojtczuk, Rafal (2009-07-29). 「Ring -3 ルートキットの紹介」(PDF) . Invisible Things Lab、Black Hat USA . p. 4 . 2015-08-22に閲覧。
- ^ “SMI は EEEEVIL (パート 1)”. msdn.com。マイクロソフト。 2020年7月17日。
- ^ Ellis, Simson C.、「ノートブック PC の 386 SL マイクロプロセッサ」、Intel Corporation、Microcomputer Solutions、1991 年 3 月/4 月、20 ページ
- ^ 「AMD Am386SX/SXL/SXLV データシート」(PDF) . AMD.
- ^ 「ARM® 管理モード インターフェース仕様」. document-service.arm.com . 2016 年。
- ^ 「Intel 64 および IA-32 アーキテクチャ開発者マニュアル: Vol. 3B」(PDF)。Intel。
- ^ Intel 64 および IA-32 ソフトウェア開発マニュアル、第 3 巻、システム管理モード。
- ^ “SMI は EEEEVIL (パート 2)”. msdn.com。マイクロソフト。
- ^ 「システム管理モード - OSDev Wiki」。wiki.osdev.org 。 2020年9月12日閲覧。
- ^ ab Vojtech Pavlik (2004 年 1 月). 「Linux カーネル ドキュメント: USB レガシー サポート」. kernel.org . 2013 年 10 月 6 日閲覧。
- ^ Google テックトーク – Coreboot – 00:34:30。
- ^ UEFI プラットフォーム初期化仕様。
- ^ Robert McMillan (2008-05-10). 「ハッカーがルートキットを隠す新しい場所を発見」InfoWorld。
- ^ Rob Williams (2015-08-07). 「研究者らが Intel プロセッサーで 1997 年に遡るルートキットエクスプロイトを発見」HotHardware.com。
- ^ ab Intel のシステム管理モード、Robert R. Collins 著
- ^ US 5963738、「I/O命令を使用してシステム構成を読み書きするためのコンピュータシステム」。
- ^ Shawn Embleton、Sherri Sparks、Cliff Zou (2008 年 9 月)。「SMM ルートキット: OS に依存しないマルウェアの新種」(PDF)。ACM。2013年 10 月 6 日閲覧。
- ^ 「ハッカーがルートキットを隠す新たな場所を発見」 PC World. 2008-05-09 . 2013-10-06閲覧。
- ^ 世界一のリーク情報源! (2013-12-30)。「NSA の ANT 部門によるほぼすべての主要ソフトウェア/ハードウェア/ファームウェアのエクスプロイトカタログ | LeakSource」。Leaksource.wordpress.com。2014-01-02 にオリジナルからアーカイブ。2014-01-13に取得。
{{cite web}}: CS1 maint: numeric names: authors list (link) - ^ 「Schneier on Security: SOUFFLETROUGH: NSA Exploit of the Day」Schneier.com。2013 年 12 月 30 日。2014 年 1 月 13 日閲覧。
- ^ 「Schneier on Security: SCHOOLMONTANA: NSA Exploit of the Day」Schneier.com。2008 年 5 月 30 日。2014年 1 月 16 日閲覧。
- ^ 「Schneier on Security」schneier.com。
- ^ 「Schneier on Security: IRONCHEF: NSA Exploit of the Day」Schneier.com。2014 年 1 月 3 日。2014年 1 月 13 日閲覧。
- ^ 「プロセッサの動作モード間の遷移」( JPG) 。images0.cnitblog.com。
- ^ Brian Delgado および Karen L. Karavanic、「システム管理モードのパフォーマンスへの影響」、2013 IEEE 国際ワークロード特性評価シンポジウム、9 月 22 ~ 24 日、オレゴン州ポートランド。
さらに読む
- 米国特許 5175853、James Kardach、Gregory Mathews および Cau Nguyen 他、「透過的システム割り込み」、1992 年 12 月 29 日公開、1992 年 12 月 29 日発行、Intel Corporationに譲渡
- AMD Hammer BIOS およびカーネル開発者ガイド、第 6 章 (2008 年 12 月 7 日のオリジナルからアーカイブ)
- Intel 64 および IA-32 アーキテクチャ開発者マニュアル、第 3C 巻、第 34 章
