シュレディンガヌの信頌のブヌツ。 むンテルブヌトガヌド

シュレディンガヌの信頌のブヌツ。 むンテルブヌトガヌド
私たちは、もう䞀床䜎レベルに戻っお、ファヌムりェア x86 互換コンピュヌタヌ プラットフォヌムのセキュリティに぀いお話すこずを提案したす。 今回の研究の䞻な芁玠は、むンテル ブヌト ガヌド (むンテル BIOS ガヌドず混同しないでください!) です。これは、コンピュヌタヌ システム ベンダヌが補造段階で氞続的にオンたたはオフにできる、ハヌドりェアでサポヌトされる BIOS トラステッド ブヌト テクノロゞです。 そうですね、私たちはすでに研究のレシピを知っおいたす。リバヌス ゚ンゞニアリングによっおこのテクノロゞヌの実装を现かく切り出し、そのアヌキテクチャを説明し、文曞化されおいない詳现を埋め蟌み、攻撃ベクトルで味付けしお混ぜ合わせたす。 数幎にわたっお耇数のベンダヌの補品にクロヌン化されたバグが原因で、朜圚的な攻撃者がこのテクノロゞを䜿甚しお、システム内に (プログラマであっおも) 削陀できない隠しルヌトキットを䜜成できるようになったずいう話で、さらに火を付けおみたしょう。

ちなみにこの蚘事はカンファレンス「On Guard for Rootkits: Intel BootGuard」のレポヌトを基にしおいたす。 れロナむツ 2016 そしお29回目の䌚合 デフコンロシア (どちらのプレれンテヌションも ここで).

Intel 64 アヌキテクチャを備えたコンピュヌタ プラットフォヌム甚のファヌムりェア

たず、「Intel 64 アヌキテクチャを備えた最新のコンピュヌタヌ プラットフォヌムのファヌムりェアは䜕ですか?」ずいう質問に答えたしょう。 もちろんUEFI BIOS。 しかし、この答えは正確ではありたせん。 このアヌキテクチャのデスクトップ (ラップトップ) バヌゞョンを瀺す図を芋おみたしょう。

シュレディンガヌの信頌のブヌツ。 むンテルブヌトガヌド
リンクが基瀎です:

  • プロセッサヌ (CPU、䞭倮凊理装眮)。メむンコアに加えお、グラフィックスコア (すべおのモデルにあるわけではありたせん) ずメモリヌコントロヌラヌ (IMC、統合メモリヌコントロヌラヌ) が組み蟌たれおいたす。
  • チップセット (PCH、プラットフォヌム コントロヌラヌ ハブ)。呚蟺デバむスず察話し、サブシステムを管理するためのさたざたなコントロヌラヌが含たれおいたす。 その䞭には、悪名高いむンテル マネゞメント ゚ンゞン (ME) もあり、これにもファヌムりェア (むンテル ME ファヌムりェア) がありたす。

ラップトップには、䞊蚘に加えお、電源サブシステム、タッチパッド、キヌボヌド、Fn キヌ (画面の明るさ、音量、キヌボヌド) の操䜜を担圓する統合コントロヌラヌ (ACPI EC、アドバンスト コントロヌルおよび電源むンタヌフェむス組み蟌みコントロヌラヌ) が必芁です。バックラむトなど。など。 そしお圌は独自のファヌムりェアも持っおいたす。

したがっお、䞊蚘のファヌムりェアを組み合わせたものがコンピュヌタ プラットフォヌムのファヌムりェア (システム ファヌムりェア) ずなり、䞀般的な SPI フラッシュ メモリに保存されたす。 このメモリのナヌザヌがどこに誰かが暪たわっおいるのか混乱しないように、このメモリの内容は次の領域に分割されおいたす (図に瀺すように)。

  • UEFI BIOS;
  • ACPI EC ファヌムりェア (Skylake プロセッサ マむクロアヌキテクチャ (2015) では別の領域が登堎したしたが、実際にはその䜿甚䟋がただ確認されおいないため、組み蟌みコントロヌラヌ ファヌムりェアは䟝然ずしお UEFI BIOS の䞀郚です)。
  • むンテル ME ファヌムりェア。
  • 内蔵 GbE (ギガビット むヌサネット) ネットワヌク アダプタヌの蚭定 (MAC アドレスなど)。
  • フラッシュ蚘述子 - フラッシュ メモリのメむン領域。他の領域ぞのポむンタず、それらぞのアクセス蚱可が含たれたす。

シュレディンガヌの信頌のブヌツ。 むンテルブヌトガヌド
領域ぞのアクセスの区別 (指定された蚱可に埓っお) は、SPI バス マスタヌ (チップセットに組み蟌たれた SPI コントロヌラヌ) によっお凊理され、これを通じおこのメモリにアクセスしたす。 アクセス蚱可が Intel によっお掚奚される倀 (セキュリティ䞊の理由) に蚭定されおいる堎合、各 SPI フラッシュ ナヌザヌは自分のリヌゞョンに察しおのみフル アクセス (読み取り/曞き蟌み) を持ちたす。 残りは読み取り専甚であるかアクセスできたせん。 既知の事実: 倚くのシステムでは、CPU は UEFI BIOS および GbE ぞの完党なアクセス暩を持ち、フラッシュ蚘述子ぞの読み取りアクセスのみがあり、Intel ME 領域にはたったくアクセスできたせん。 なぜ党員ではなく倚くの人がいるのですか 掚奚されるものはオプションです。 詳现に぀いおは、蚘事の埌半で説明したす。

コンピュヌタ プラットフォヌムのファヌムりェアを倉曎から保護するメカニズム

明らかに、コンピュヌタ プラットフォヌムのファヌムりェアは、朜圚的な攻撃者がそこに足堎を築きOS の曎新や再むンストヌルに耐える、最も特暩モヌドでコヌドを実行するなどの可胜性がある䟵害から保護される必芁がありたす。 もちろん、SPI フラッシュ メモリ領域ぞのアクセスを制限するだけでは十分ではありたせん。 したがっお、ファヌムりェアを倉曎から保護するために、各実行環境に固有のさたざたなメカニズムが䜿甚されたす。

そのため、むンテル ME ファヌムりェアは完党性ず信頌性の制埡のために眲名されおおり、ME UMA メモリにロヌドされるたびに ME コントロヌラヌによっおチェックされたす。 この怜蚌プロセスに぀いおは、次のいずれかの蚘事ですでに説明したした。 物品むンテル ME サブシステム専甚。

たた、ACPI EC ファヌムりェアは、原則ずしお、敎合性のみがチェックされたす。 ただし、このバむナリは UEFI BIOS に含たれおいるため、ほずんどの堎合、UEFI BIOS が䜿甚するのず同じ保護メカニズムの察象になりたす。 それらに぀いお話したしょう。

これらのメカニズムは XNUMX ぀のカテゎリに分類できたす。

UEFI BIOS 領域ぞの曞き蟌み保護

  1. 曞き蟌み保護ゞャンパによる SPI フラッシュ メモリの内容の物理的保護。
  2. チップセットの PRx レゞスタを䜿甚した、CPU アドレス空間内の UEFI BIOS 領域の投圱の保護。
  3. ブロックでは、チップセット レゞスタの BIOS_WE / BLE および SMM_BWP ビットを蚭定しお、察応する SMI 割り蟌みを生成および凊理するこずにより、UEFI BIOS 領域ぞの曞き蟌みを詊行したす。
  4. この保護のより高床なバヌゞョンは、Intel BIOS Guard (PFAT) です。

これらのメカニズムに加えお、ベンダヌは独自のセキュリティ察策を開発および実装できたす (たずえば、UEFI BIOS アップデヌトによるカプセルぞの眲名)。

特定のシステム (ベンダヌによっお異なりたす) では、䞊蚘の保護メカニズムのすべおが適甚されるわけではない、たったく適甚されない、たたは脆匱な方法で実装されおいる可胜性があるこずに泚意するこずが重芁です。 これらのメカニズムずその実装状況に぀いお詳しくは、「 この蚘事。 興味のある方は、UEFI BIOS セキュリティに関する䞀連の蚘事をすべお読むこずをお勧めしたす。 コヌドラッシュ.

UEFI BIOS 認蚌の怜蚌

トラステッド ブヌト テクノロゞに぀いお話すずき、最初に思い浮かぶのはセキュア ブヌトです。 ただし、アヌキテクチャ的には、ファヌムりェア自䜓ではなく、UEFI BIOS の倖郚のコンポヌネント (ドラむバヌ、ロヌダヌなど) を認蚌するように蚭蚈されおいたす。

したがっお、Intel は、Bay Trail マむクロアヌキテクチャ (2012) を備えた SoC に、ハヌドりェアの切り替え䞍可胜なセキュア ブヌト (怜蚌枈みブヌト) を実装したした。これは、前述のセキュア ブヌト テクノロゞずは䜕の関係もありたせん。 その埌 (2013 幎)、このメカニズムは改良され、Intel Boot Guard ずいう名前で、Haswell マむクロアヌキテクチャを備えたデスクトップ甚にリリヌスされたした。

Intel Boot Guard に぀いお説明する前に、Intel 64 アヌキテクチャの実行環境を芋おみたしょう。これらの組み合わせが、このトラステッド ブヌト テクノロゞの信頌のルヌトずなりたす。

むンテルのCPU

Cap 氏は、プロセッサヌが Intel 64 アヌキテクチャヌの䞻芁な実行環境であるず瀺唆しおいたすが、なぜそれが信頌のルヌトでもあるのでしょうか? その理由は、次の芁玠を備えおいるためであるこずがわかりたした。

  • マむクロコヌド ROM は、マむクロコヌドを保存するための䞍揮発性で曞き換え䞍可胜なメモリです。 マむクロコヌドは、最も単玔な呜什に察するプロセッサ呜什システムの実装であるず考えられおいたす。 マむクロコヌドでも発生したす バグ。 そのため、BIOS では、マむクロコヌド曎新を含むバむナリを芋぀けるこずができたす (ROM は䞊曞きできないため、バむナリは起動時に重ねお衚瀺されたす)。 これらのバむナリの内容は暗号化されおいるため、分析が非垞に耇雑になり (したがっお、マむクロコヌドの具䜓的な内容は開発者のみに知られたす)、完党性ず信頌性を制埡するために眲名されたす。
  • マむクロコヌド曎新の内容を埩号化するための AES キヌ。
  • マむクロコヌド曎新の眲名を怜蚌する RSA 公開キヌのハッシュ。
  • RSA 公開キヌ ハッシュ。Intel が開発した ACM (Authenticated Code Module) コヌド モゞュヌルの眲名をチェックしたす。このコヌド モゞュヌルは、BIOS の開始前 (Hello マむクロコヌド) たたは BIOS の動䜜䞭に、䜕らかのむベントが発生したずきに CPU が実行できたす。

むンテル ME

私たちのブログのこのサブシステムは、 Ўве 蚘事。 この実行可胜環境は、チップセットに組み蟌たれたマむクロコントロヌラヌに基づいおおり、システム内で最も隠蔜され、特暩が䞎えられおいるずいうこずを思い出しおください。

ステルス性にもかかわらず、むンテル ME は以䞋の機胜を備えおいるため、信頌のルヌトでもありたす。

  • ME ROM - 開始コヌドずむンテル ME ファヌムりェアの眲名をチェックする RSA 公開キヌの SHA256 ハッシュを含む䞍揮発性、曞き換え䞍可胜なメモリ (曎新方法は提䟛されおいたせん)。
  • 秘密情報を保存するための AES キヌ。
  • コンピュヌタ システム ベンダヌによっお指定された情報を含む、䞀郚の情報を氞続的に保存するためにチップセットに統合された䞀連のヒュヌズ (FPF、フィヌルド プログラマブル ヒュヌズ) ぞのアクセス。

むンテル ブヌト ガヌド 1.x

小さな免責事項。 この蚘事で䜿甚するむンテル ブヌト ガヌド テクノロゞのバヌゞョン番号は任意であり、むンテルの内郚ドキュメントで䜿甚されおいる番号ずは関係がない堎合がありたす。 さらに、ここに蚘茉されおいるこのテクノロゞヌの実装に関する情報は、リバヌス ゚ンゞニアリング䞭に取埗されたものであり、公開される可胜性が䜎いむンテル ブヌト ガヌドの仕様ず比范しお䞍正確な郚分が含たれおいる可胜性がありたす。

぀たり、Intel Boot Guard (BG) は、ハヌドりェアでサポヌトされる UEFI BIOS 認蚌テクノロゞです。 曞籍 [Platform Embedded Security Technology Revealed, Chapter Boot with Integrity, or Not Boot] の短い説明から刀断するず、これは信頌できるブヌト チェヌンずしお機胜したす。 その最初のリンクは CPU 内のブヌト コヌド (マむクロコヌド) で、RESET むベントによっおトリガヌされたす (BIOS の RESET ベクタヌず混同しないでください)。 CPU は、SPI フラッシュ メモリ䞊でむンテルによっお開発および眲名されたコヌド モゞュヌル (むンテル BG スタヌトアップ ACM) を芋぀け、それをキャッシュにロヌドしお怜蚌したす (CPU が ACM 眲名を怜蚌する公開キヌ ハッシュを持っおいるこずは䞊ですでに述べたした) そしお始たりたす。

シュレディンガヌの信頌のブヌツ。 むンテルブヌトガヌド

このコヌド モゞュヌルは、UEFI BIOS の小さな開始郚分である初期ブヌト ブロック (IBB) を怜蚌する圹割を果たしたす。これには、UEFI BIOS の䞻芁郚分を怜蚌するための機胜が含たれおいたす。 したがっお、Intel BG を䜿甚するず、OS を起動する前に BIOS の信頌性を怜蚌できたす (これはセキュア ブヌト テクノロゞの監芖䞋で実行できたす)。

むンテル BG テクノロゞヌは XNUMX ぀の動䜜モヌドを提䟛したす (䞀方は他方ず干枉したせん。぀たり、システム䞊で䞡方のモヌドを有効にするこずも、䞡方を無効にするこずもできたす)。

メゞャヌブヌツ

メゞャヌド ブヌト (MB) モヌドでは、各ブヌト コンポヌネント (CPU ブヌト ROM から始たる) は、トラステッド プラットフォヌム モゞュヌル (TPM) の機胜を䜿甚しお次のコンポヌネントを「枬定」したす。 知らない人のために説明したしょう。

TPM には PCR (プラットフォヌム構成レゞスタ) があり、次の匏に埓っおハッシュ操䜜の結果を蚘録したす。

シュレディンガヌの信頌のブヌツ。 むンテルブヌトガヌド

それらの。 珟圚の PCR 倀は前の倀に䟝存し、これらのレゞスタはシステムがリセットされた堎合にのみリセットされたす。

したがっお、MB モヌドでは、ある時点で、PCR は「枬定」されたコヌドたたはデヌタの䞀意の (ハッシュ操䜜の機胜内で) 識別子を反映したす。 PCR 倀は、䞀郚のデヌタの暗号化 (TPM_Seal) 操䜜に䜿甚できたす。 その埌、ロヌドの結果ずしお PCR 倀が倉曎されおいない堎合 (぀たり、「枬定された」コンポヌネントが XNUMX ぀も倉曎されおいない堎合) にのみ、それらの埩号化 (TPM_Unseal) が可胜になりたす。

確認枈みの起動

UEFI BIOS を倉曎したい人にずっお最も怖いのは、各ブヌト コンポヌネントが次のブヌト コンポヌネントの敎合性ず信頌性を暗号的に怜蚌する怜蚌ブヌト (VB) モヌドです。 怜蚌゚ラヌが発生した堎合、(次のいずれか) が発生したす。

  • 1 分から 30 分のタむムアりトによっおシャットダりンしたす (ナヌザヌが自分のコンピュヌタが起動しない理由を理解する時間を確保し、可胜であれば BIOS の埩元を詊みたす)。
  • 即時シャットダりンナヌザヌが理解する時間がなく、さらに実行する時間がないため。
  • 真顔で䜜業を継続する他にやるべきこずがあり、安党を確保する時間がない堎合。

アクションの遞択は、指定されたむンテル BG 構成 (぀たり、いわゆる匷制ポリシヌ) によっお決たりたす。この構成は、コンピュヌタヌ プラットフォヌム ベンダヌによっお特別に蚭蚈されたストレヌゞであるチップセット ヒュヌズ (FPF) に氞続的に蚘録されたす。 この点に぀いおは埌ほど詳しく説明したす。

構成に加えお、ベンダヌは 2048 ぀の RSA XNUMX キヌを生成し、XNUMX ぀のデヌタ構造を䜜成したす (図を参照)。

  1. ベンダヌ ルヌト キヌ マニフェスト (KEYM、OEM ルヌト キヌ マニフェスト)。このマニフェストの SVN (セキュリティ バヌゞョン番号)、次のマニフェストの公開キヌの SHA256 ハッシュ、RSA 公開キヌ (぀たり、ベンダヌ ルヌト キヌ) を䜿甚しお、このマニフェストの眲名ず眲名自䜓を怜蚌したす。
  2. IBB マニフェスト (IBBM、初期ブヌト ブロック マニフェスト)。このマニフェストの SVN、IBB の SHA256 ハッシュ、このマニフェストの眲名を怜蚌するための公開キヌ、および眲名自䜓が含たれたす。

OEM ルヌト キヌの SHA256 ハッシュは、Intel BG 構成ず同様に、チップセット ヒュヌズ (FPF) に氞続的に曞き蟌たれたす。 Intel BG 構成にこのテクノロゞを含めるこずができる堎合、今埌、このシステムでは、OEM ルヌト キヌのプラむベヌト郚分の所有者のみが BIOS を曎新できたす (぀たり、これらのマニフェストを再蚈算できたす)。 ベンダヌ。

シュレディンガヌの信頌のブヌツ。 むンテルブヌトガヌド

この図を芋るず、これほど長い怜蚌チェヌンの必芁性に぀いおすぐに疑問が生じたす。マニフェストを XNUMX ぀䜿甚するこずもできたはずです。 なぜ耇雑になるのでしょうか

実際、むンテルは、ベンダヌに察し、異なる補品ラむンに異なる IBB キヌを䜿甚し、XNUMX ぀をルヌトずしお䜿甚する機䌚を提䟛したす。 IBB キヌのプラむベヌト郚分 (XNUMX 番目のマニフェストに眲名する) が挏掩した堎合、そのむンシデントは XNUMX ぀の補品ラむンにのみ圱響し、ベンダヌが新しいペアを生成し、次回の BIOS アップデヌトで再蚈算されたマニフェストを有効にするたでのみ圱響したす。

ただし、ルヌト キヌ (最初のマニフェストの眲名に䜿甚されたキヌ) が䟵害された堎合、それを眮き換えるこずはできず、倱効手順は提䟛されたせん。 このキヌの公開郚分のハッシュは、FPF に完党にプログラムされたす。

むンテル ブヌト ガヌドの構成

ここで、Intel BG の構成ずその䜜成プロセスを詳しく芋おみたしょう。 むンテル システム ツヌル キット (STK) のフラッシュ むメヌゞ ツヌルの GUI の察応するタブを芋るず、むンテル BG 構成にベンダヌ ルヌト キヌの公開郚分のハッシュが含たれおいるこずがわかりたす。䟡倀芳など。 むンテル BG プロファむル。

シュレディンガヌの信頌のブヌツ。 むンテルブヌトガヌド

このプロファむルの構造は次のずおりです。

typedef struct BG_PROFILE
{
	unsigned long Force_Boot_Guard_ACM : 1;
	unsigned long Verified_Boot : 1;
	unsigned long Measured_Boot : 1;
	unsigned long Protect_BIOS_Environment : 1;
	unsigned long Enforcement_Policy : 2; // 00b – do nothing
                                              // 01b – shutdown with timeout
                                              // 11b – immediate shutdown
	unsigned long : 26;
};

䞀般に、Intel BG 構成は非垞に柔軟な゚ンティティです。 たずえば、Force_Boot_Guard_ACM フラグを考えおみたしょう。 これをクリアするず、SPI フラッシュ䞊で BG 起動 ACM モゞュヌルが芋぀からない堎合、トラステッド ブヌトは実行されたせん。 それは信頌できなくなりたす。

怜蚌が倱敗した堎合に再び信頌できないダりンロヌドが発生するように、VB モヌドの匷制ポリシヌを構成できるこずは䞊ですでに曞きたした。

こういう事は業者さんに任せおしたいたしょう 

このナヌティリティの GUI には、次の「既補の」プロファむルが甚意されおいたす。

いいえ。
政暩
説明

0
いいえ_FVME
むンテル BG テクノロゞヌが無効になっおいたす

1
VE
VB モヌド有効、タむムアりトによるシャットダりン

2
VME
䞡方のモヌド (VB ず MB) が有効になっおおり、タむムアりトによっおシャットダりンされたす。

3
VM
システムをオフにするこずなく、䞡方のモヌドが有効になりたす

4
FVE
VB モヌド有効、即時シャットダりン

5
FVME
䞡方のモヌドが有効、即時シャットダりン

すでに述べたように、Intel BG 構成は、システム ベンダヌによっおチップセット ヒュヌズ (FPF) に䞀床だけ曞き蟌たれる必芁がありたす。FPF は、チップセット内の小さな (未怜蚌の情報によるず、わずか 256 バむト) ハヌドりェア情報ストレヌゞであり、倖郚でプログラムするこずができたす。むンテルの生産斜蚭の フィヌルドプログラマブル ヒュヌズ。

次の理由から、構成を保存するのに最適です。

  • ワンタむムプログラム可胜なデヌタストレヌゞ領域 (Intel BG 構成が曞き蟌たれる堎所) を備えおいたす。
  • Intel ME だけがそれを読み取っおプログラムするこずができたす。

したがっお、特定のシステム䞊でむンテル BG テクノロゞヌの構成を蚭定するために、ベンダヌは運甚䞭に次のこずを行いたす。

  1. Flash Image Tool ナヌティリティ (Intel STK の) を䜿甚しお、Intel ME 領域 (FPF のいわゆる䞀時ミラヌ) 内の倉数ずしお、特定の Intel BG 構成を持぀ファヌムりェア むメヌゞを䜜成したす。
  2. フラッシュ プログラミング ツヌル (Intel STK 補) を䜿甚しお、このむメヌゞをシステムの SPI フラッシュ メモリに曞き蟌み、いわゆるファむルを閉じたす。 補造モヌド (この堎合、察応するコマンドがむンテル ME に送信されたす)。

これらの操䜜の結果、むンテル ME は、ME 領域の FPF のミラヌから指定された倀を FPF にコミットし、SPI フラッシュ蚘述子のアクセス蚱可をむンテルが掚奚する倀に蚭定したす (本曞の冒頭で説明)蚘事) を実行し、システム リセットを実行したす。

Intel Boot Guard 実装の分析

特定の䟋でのこのテクノロゞヌの実装を分析するために、次のシステムでむンテル BG テクノロゞヌの痕跡を確認したした。

システム
泚意

ギガバむトGA-H170-D3H
Skylake、サポヌトがありたす

ギガバむト GA-Q170-D3H
Skylake、サポヌトがありたす

ギガバむト GA-B150-HD3
Skylake、サポヌトがありたす

MSI H170A ゲヌミング プロ
Skylake、サポヌトなし

Lenovo ThinkPad 460
Skylake、サポヌトが利甚可胜、テクノロゞヌが有効

レノボペガ2プロ
ハスりェル、サポヌトなし

レノボU330p
ハスりェル、サポヌトなし

「サポヌト」ずは、むンテル BG スタヌトアップ ACM モゞュヌル、䞊蚘のマニフェスト、および BIOS 内の察応するコヌドの存圚を意味したす。 分析甚の実装。

䟋ずしお、オフィスからダりンロヌドしたものを芋おみたしょう。 Gigabyte GA-H170-D3H (バヌゞョン F4) の SPI フラッシュ メモリのベンダヌ サむトのむメヌゞ。

むンテルCPUブヌトROM

たず最初に、むンテル BG テクノロゞヌが有効になっおいる堎合のプロセッサヌの動䜜に぀いお説明したす。

埩号化されたマむクロコヌドのサンプルを芋぀けるこずはできたせんでした。したがっお、以䞋で説明するアクションがどのように (マむクロコヌドたたはハヌドりェアで) 実装されるかは未解決の問題です。 それにもかかわらず、最新の Intel プロセッサがこれらのアクションを「実行できる」ずいう事実は事実です。

RESET 状態を終了した埌、プロセッサ (そのアドレス空間にはフラッシュ メモリの内容がすでにマップされおいたす) は FIT (ファヌムりェア むンタヌフェむス テヌブル) を芋぀けたす。 それを芋぀けるのは簡単です。それぞのポむンタはアドレス FFFF FFC0h に曞き蟌たれたす。

シュレディンガヌの信頌のブヌツ。 むンテルブヌトガヌド
この䟋では、このアドレスには倀 FFD6 9500h が含たれおいたす。 このアドレスに目を向けるず、プロセッサは FIT テヌブルを参照したす。その内容はレコヌドに分割されおいたす。 最初の゚ントリは、次の構造の芋出しです。

typedef struct FIT_HEADER
{
	char           Tag[8];     // ‘_FIT_   ’
	unsigned long  NumEntries; // including FIT header entry
	unsigned short Version;    // 1.0
	unsigned char  EntryType;  // 0
	unsigned char  Checksum;
};

シュレディンガヌの信頌のブヌツ。 むンテルブヌトガヌド
䜕らかの理由で、これらのテヌブルではチェックサムが垞に蚈算されるわけではありたせん (フィヌルドは null のたたです)。

残りの゚ントリは、BIOS が実行される前に解析/実行する必芁があるさたざたなバむナリを指したす。 埓来の RESET ベクトル (FFFF FFF0h) に切り替える前に。 このような各゚ントリの構造は次のずおりです。

typedef struct FIT_ENTRY
{
	unsigned long  BaseAddress;
	unsigned long  : 32;
	unsigned long  Size;
	unsigned short Version;     // 1.0
	unsigned char  EntryType;
	unsigned char  Checksum;
};

シュレディンガヌの信頌のブヌツ。 むンテルブヌトガヌド
EntryType フィヌルドは、この゚ントリが指すブロックのタむプを瀺したす。 私たちはいく぀かのタむプを知っおいたす:

enum FIT_ENTRY_TYPES
{
	FIT_HEADER = 0,
	MICROCODE_UPDATE,
	BG_ACM,
	BIOS_INIT = 7,
	TPM_POLICY,
	BIOS_POLICY,
	TXT_POLICY,
	BG_KEYM,
	BG_IBBM
};

これで、゚ントリの XNUMX ぀がむンテル BG スタヌトアップ ACM バむナリの堎所を指しおいるこずは明らかです。 このバむナリのヘッダヌ構造は、むンテルが開発したコヌド モゞュヌル (ACM、マむクロコヌド アップデヌト、むンテル ME コヌド セクションなど) に兞型的なものです。

typedef struct BG_ACM_HEADER
{
	unsigned short ModuleType;     // 2
	unsigned short ModuleSubType;  // 3
	unsigned long  HeaderLength;   // in dwords
	unsigned long  : 32;
	unsigned long  : 32;
	unsigned long  ModuleVendor;   // 8086h
	unsigned long  Date;           // in BCD format
	unsigned long  TotalSize;      // in dwords
	unsigned long  unknown1[6];
	unsigned long  EntryPoint;
	unsigned long  unknown2[16];
	unsigned long  RsaKeySize;     // in dwords
	unsigned long  ScratchSize;    // in dwords
	unsigned char  RsaPubMod[256];
	unsigned long  RsaPubExp;
	unsigned char  RsaSig[256];
};

シュレディンガヌの信頌のブヌツ。 むンテルブヌトガヌド
プロセッサはこのバむナリをキャッシュにロヌドし、怜蚌しお起動したす。

むンテル BG スタヌトアップ ACM

この ACM の動䜜を分析した結果、次のこずを行うこずが明らかになりたした。

  • チップセット ヒュヌズ (FPF) に曞き蟌たれたむンテル BG 構成をむンテル ME から受信したす。
  • KEYM および IBM マニフェストを怜玢し、怜蚌したす。

これらのマニフェストを芋぀けるために、ACM は FIT テヌブルも䜿甚したす。このテヌブルには、これらの構造を指す XNUMX 皮類の゚ントリがありたす (䞊蚘の FIT_ENTRY_TYPES を参照)。

マニフェストを詳しく芋おみたしょう。 最初のマニフェストの構造には、いく぀かの䞍明瞭な定数、XNUMX 番目のマニフェストの公開キヌのハッシュ、およびネストされた構造ずしお眲名された公開 OEM ルヌト キヌが衚瀺されたす。

typedef struct KEY_MANIFEST
{
	char           Tag[8];          // ‘__KEYM__’
	unsigned char  : 8;             // 10h
	unsigned char  : 8;             // 10h
	unsigned char  : 8;             // 0
	unsigned char  : 8;             // 1
	unsigned short : 16;            // 0Bh
	unsigned short : 16;            // 20h == hash size?
	unsigned char  IbbmKeyHash[32]; // SHA256 of an IBBM public key
	BG_RSA_ENTRY   OemRootKey;
};

typedef struct BG_RSA_ENTRY
{
	unsigned char  : 8;             // 10h
	unsigned short : 16;            // 1
	unsigned char  : 8;             // 10h
	unsigned short RsaPubKeySize;   // 800h
	unsigned long  RsaPubExp;
	unsigned char  RsaPubKey[256];
	unsigned short : 16;            // 14
	unsigned char  : 8;             // 10h
	unsigned short RsaSigSize;      // 800h
	unsigned short : 16;            // 0Bh
	unsigned char  RsaSig[256];
};

シュレディンガヌの信頌のブヌツ。 むンテルブヌトガヌド
OEM ルヌト キヌの公開キヌを怜蚌するには、ヒュヌズからの SHA256 ハッシュが䜿甚されるこずを思い出しおください。このハッシュは、珟時点ではすでに Intel ME から受信されおいたす。

第二のマニフェストに移りたしょう。 これは XNUMX ぀の構造で構成されたす。

typedef struct IBB_MANIFEST
{
	ACBP Acbp;         // Boot policies
	IBBS Ibbs;         // IBB description
	IBB_DESCRIPTORS[];
	PMSG Pmsg;         // IBBM signature
};

最初のものにはいく぀かの定数が含たれおいたす。

typedef struct ACBP
{
	char           Tag[8];          // ‘__ACBP__’
	unsigned char  : 8;             // 10h
	unsigned char  : 8;             // 1
	unsigned char  : 8;             // 10h
	unsigned char  : 8;             // 0
	unsigned short : 16;            // x & F0h = 0
	unsigned short : 16;            // 0 < x <= 400h
};

256 番目には、IBB の SHAXNUMX ハッシュず、IBB の内容 (぀たり、ハッシュの蚈算元) を蚘述する蚘述子の数が含たれおいたす。

typedef struct IBBS
{
	char           Tag[8];            // ‘__IBBS__’
	unsigned char  : 8;               // 10h
	unsigned char  : 8;               // 0
	unsigned char  : 8;               // 0
	unsigned char  : 8;               // x <= 0Fh
	unsigned long  : 32;              // x & FFFFFFF8h = 0
	unsigned long  Unknown[20];
	unsigned short : 16;              // 0Bh
	unsigned short : 16;              // 20h == hash size ?
	unsigned char  IbbHash[32];       // SHA256 of an IBB
	unsigned char  NumIbbDescriptors;
};

IBB 蚘述子はこの構造に埓いたす。 コンテンツの圢匏は次のずおりです。

typedef struct IBB_DESCRIPTOR
{
	unsigned long  : 32;
	unsigned long  BaseAddress;
	unsigned long  Size;
};

それは簡単です。各蚘述子には IBB チャンクのアドレス/サむズが含たれおいたす。 したがっお、これらの蚘述子によっお指定されるブロックを (蚘述子自䜓の順序で) 連結したものが IBB です。 たた、原則ずしお、IBB は SEC フェヌズず PEI フェヌズのすべおのモゞュヌルを組み合わせたものです。

256 番目のマニフェストは、IBB 公開キヌ (最初のマニフェストの SHAXNUMX ハッシュによっお怜蚌される) ずこのマニフェストの眲名を含む構造で終わりたす。

typedef struct PMSG
{
	char           Tag[8];            // ‘__PMSG__’
	unsigned char  : 8;               // 10h
	BG_RSA_ENTRY   IbbKey;
};

シュレディンガヌの信頌のブヌツ。 むンテルブヌトガヌド
そのため、UEFI BIOS の実行が開始される前であっおも、プロセッサは ACM を起動し、SEC および PEI フェヌズ コヌドを䜿甚しおセクションの内容の信頌性を怜蚌したす。 次に、プロセッサは ACM を終了し、RESET ベクトルに沿っお移動し、BIOS の実行を開始したす。

PEI 怜蚌枈みパヌティションには、BIOS の残りの郚分 (DXE コヌド) をチェックするモゞュヌルが含たれおいる必芁がありたす。 このモゞュヌルは、IBV (Independent BIOS Vendor) たたはシステム ベンダヌ自䜓によっおすでに開発されおいたす。 なぜならLenovo ず Gigabyte システムのみが自由に䜿甚でき、Intel BG をサポヌトしおいるこずが刀明したした。これらのシステムから抜出されたコヌドを考えおみたしょう。

UEFI BIOS モゞュヌル LenovoVerifiedBootPei

Lenovo の堎合、Lenovo が開発した LenovoVerifiedBootPei {B9F2AC77-54C7-4075-B42E-C36325A9468D} モゞュヌルであるこずが刀明したした。

その仕事は、(GUID によっお) DXE のハッシュ テヌブルを怜玢し、DXE を怜蚌するこずです。

if (EFI_PEI_SERVICES->GetBootMode() != BOOT_ON_S3_RESUME)
{
	if (!FindHashTable())
		return EFI_NOT_FOUND;
	if (!VerifyDxe())
		return EFI_SECURITY_VIOLATION;
}

Хеш таблОца {389CC6F2-1EA8-467B-AB8A-78E769AE2A15} ОЌеет слеЎующОй фПрЌат:

typedef struct HASH_TABLE
{
	char          Tag[8];            // ‘$HASHTBL’
	unsigned long NumDxeDescriptors;
	DXE_DESCRIPTORS[];
};

typedef struct DXE_DESCRIPTOR
{
	unsigned char BlockHash[32];     // SHA256
	unsigned long Offset;
	unsigned long Size;
};

UEFI BIOS モゞュヌル BootGuardPei

Gigabyte の堎合、これは AMI によっお開発された BootGuardPei {B41956E1-7CA2-42DB-9562-168389F0F066} モゞュヌルであるこずが刀明したため、Intel BG をサポヌトするすべおの AMI BIOS に存圚したす。

動䜜アルゎリズムは倚少異なりたすが、芁するに同じです。

int bootMode = EFI_PEI_SERVICES->GetBootMode();

if (bootMode != BOOT_ON_S3_RESUME &&
    bootMode != BOOT_ON_FLASH_UPDATE &&
    bootMode != BOOT_IN_RECOVERY_MODE)
{
	HOB* h = CreateHob();
	if (!FindHashTable())
		return EFI_NOT_FOUND;
	WriteHob(&h, VerifyDxe());
	return h;
}

怜玢するハッシュ テヌブル {389CC6F2-1EA8-467B-AB8A-78E769AE2A15} の圢匏は次のずおりです。

typedef HASH_TABLE DXE_DESCRIPTORS[];

typedef struct DXE_DESCRIPTOR
{
	unsigned char BlockHash[32];     // SHA256
	unsigned long BaseAddress;
	unsigned long Size;
};

むンテル ブヌト ガヌド 2.x

Intel Boot Guard の別の実装に぀いお簡単に説明したす。これは、Apollo Lake マむクロアヌキテクチャを備えた Intel SoC に基づく新しいシステム、ASRock J4205-IT に組み蟌たれおいたす。

このバヌゞョンは SoC でのみ䜿甚されたすが (Kaby Lake プロセッサ マむクロアヌキテクチャを備えた新しいシステムは匕き続き Intel Boot Guard 1.x を䜿甚したす)、Intel SoC に基づくプラットフォヌムの新しいアヌキテクチャ オプションを怜蚎する䞊で非垞に興味深いものであり、これは具䜓的なものずなっおいたす。倉曎䟋:

  • BIOS および Intel ME 領域 (Intel SoC の甚語によれば、むしろ Intel TXE) は、XNUMX ぀の IFWI 領域になりたした。
  • Intel BG はプラットフォヌムで有効になっおいたしたが、FIT、KEYM、IBBM などの構造がフラッシュ メモリ内に芋぀かりたせんでした。
  • TXE および ISH コア (x86) に加えお、電源サブシステムの操䜜性の確保ずパフォヌマンス監芖に関連する XNUMX 番目のコア (ちなみに、これも ARC) がチップセットに远加されたした - PMC (電源管理コントロヌラヌ)。

シュレディンガヌの信頌のブヌツ。 むンテルブヌトガヌド
新しい IFWI リヌゞョンのコンテンツは、次のモゞュヌルのセットです。

オフセット
名前
説明

0000時間
SMIP
ベンダヌによっお眲名された䞀郚のプラットフォヌム構成

0000時間
RBEP
Intel TXE ファヌムりェア コヌド セクション (x86、Intel によっお眲名)

0001時間
PMCP
ファヌムりェア コヌド セクション Intel PMC、ARC、Intel による眲名

0002時間
FTPR
Intel TXE ファヌムりェア コヌド セクション (x86、Intel によっお眲名)

0007B000h
ナヌコッド
Intel によっお眲名された CPU マむクロコヌドの曎新

0008時間
IBBP
UEFI BIOS、SEC/PEI フェヌズ、x86、ベンダヌ眲名枈み

0021時間
ISC
ベンダヌによっお眲名されたむンテル ISH ファヌムりェア x86 のコヌド セクション

0025時間
FTP
Intel TXE ファヌムりェア コヌド セクション (x86、Intel によっお眲名)

0036時間
IUNP
未知数

0038時間
OBBP
UEFI BIOS、DXE フェヌズ、x86、未眲名

TXE ファヌムりェアの分析䞭に、RESET 埌、CPU のアドレス空間の基本的な内容 (FIT、ACM、RESET ベクトルなど) を準備するたで、TXE がプロセッサをこの状態に維持するこずが明らかになりたした。 さらに、TXE はこのデヌタを SRAM に配眮し、その埌䞀時的にプロセッサにそこぞのアクセスを提䟛し、RESET から「解攟」したす。

ルヌトキットを譊戒する

さお、次は「ホット」に移りたしょう。 私たちはか぀お、倚くのシステムで SPI フラッシュ蚘述子が SPI フラッシュ メモリの領域にアクセスする暩限を持っおいるこずを発芋したした。そのため、このメモリのすべおのナヌザヌは任意の領域に曞き蟌みず読み取りの䞡方を行うこずができたす。 それらの。 ずんでもない。

MEinfo ナヌティリティ (Intel STK 補) で確認したずころ、これらのシステムの補造モヌドが閉じられおいないため、チップセット ヒュヌズ (FPF) が䞍定の状態のたたになっおいるこずがわかりたした。 はい、そのような堎合、Intel BG は有効にも無効にもなりたせん。

ここでは次のシステムに぀いお説明したす (Intel BG ずこの蚘事で埌述する内容に぀いおは、Haswell プロセッサ マむクロアヌキテクチャ以䞊のシステムに぀いお説明したす)。

  • すべおのギガバむト補品。
  • すべおの MSI 補品。
  • 21 台の Lenovo ラップトップ モデルず 4 台の Lenovo サヌバヌ モデル。

もちろん、私たちはこの発芋をむンテルだけでなくこれらのベンダヌにも報告したした。

からのみ適切な察応が行われたす。 レノボ誰が問題を認めたのか、そしお パッチをリリヌスしたした.

ギガバむト 脆匱性に関する情報は受け入れたようだが、特にコメントはしなかった。

ずのコミュニケヌション MSI (暗号化されたセキュリティ勧告を送信するため) PGP 公開キヌを送信するずいう私たちの芁求により、完党に停止しおしたいたした。 圌らは「自瀟はハヌドりェアメヌカヌであり、PGP キヌを補造しおいるわけではない」ず述べおいたす。

しかし、もっず重芁なこずです。 ヒュヌズは未定矩の状態のたたであるため、ナヌザヌ (たたは攻撃者) が自分でヒュヌズをプログラムできたす (最も難しいのは むンテル STK を芋぀ける。 これには次の手順が必芁です。

1. Windows OS を起動したす (䞀般に、目的の OS 甚の Intel STK の類䌌物を開発しおいる堎合は、以䞋で説明する手順を Linux からも実行できたす)。 MEinfo ナヌティリティを䜿甚しお、このシステムのヒュヌズがプログラムされおいないこずを確認したす。

シュレディンガヌの信頌のブヌツ。 むンテルブヌトガヌド
2. フラッシュ プログラミング ツヌルを䜿甚しおフラッシュ メモリの内容を読み取りたす。

シュレディンガヌの信頌のブヌツ。 むンテルブヌトガヌド
3. 任意の UEFI BIOS 線集ツヌルを䜿甚しお読み取ったむメヌゞを開き、必芁な倉曎を加え (ルヌトキットの実装など)、ME 領域内の既存の KEYM および IBBM 構造を䜜成/線集したす。

シュレディンガヌの信頌のブヌツ。 むンテルブヌトガヌド
シュレディンガヌの信頌のブヌツ。 むンテルブヌトガヌド
画像では RSA キヌの公開郚分が匷調衚瀺されおおり、そのハッシュはむンテル BG 構成の残りの郚分ずずもにチップセット ヒュヌズにプログラムされたす。

4. Flash Image Tool を䜿甚しお、(Intel BG 構成を蚭定するこずにより) 新しいファヌムりェア むメヌゞを構築したす。

シュレディンガヌの信頌のブヌツ。 むンテルブヌトガヌド
5. フラッシュ プログラミング ツヌルを䜿甚しお新しいむメヌゞをフラッシュに曞き蟌み、MEinfo を䜿甚しお ME 領域にむンテル BG 構成が含たれおいるこずを確認したす。

シュレディンガヌの信頌のブヌツ。 むンテルブヌトガヌド
6. フラッシュ プログラミング ツヌルを䜿甚しお、補造モヌドを閉じたす。

シュレディンガヌの信頌のブヌツ。 むンテルブヌトガヌド
7. システムが再起動した埌、MEinfo を䜿甚しお、FPF がプログラムされたこずを確認できたす。

シュレディンガヌの信頌のブヌツ。 むンテルブヌトガヌド
これらのアクション 氞遠に このシステムでむンテル BG を有効にしたす。 アクションを元に戻すこずは䞍可胜になりたす。これは、次のこずを意味したす。

  • ルヌト キヌのプラむベヌト郚分の所有者 (぀たり、Intel BG を有効にした人) だけが、このシステムの UEFI BIOS を曎新できたす。
  • たずえばプログラマを䜿甚しお元のファヌムりェアをこのシステムに戻しおも、電源が入りたせん (怜蚌゚ラヌが発生した堎合の匷制ポリシヌの結果)。
  • このような UEFI BIOS を削陀するには、プログラムされた FPF を備えたチップセットを「クリヌンな」チップセットず亀換する必芁がありたす (぀たり、車の䟡栌で赀倖線はんだ付けステヌションを利甚できる堎合はチップセットを再はんだ付けするか、マザヌボヌドを亀換するだけです) 。

このようなルヌトキットで䜕ができるかを理解するには、UEFI BIOS 環境でのコヌドの実行を可胜にするものを評䟡する必芁がありたす。 たずえば、プロセッサの最も特暩のあるモヌドである SMM で考えたす。 このようなルヌトキットには次の特性がある堎合がありたす。

  • OS ず䞊行しお実行されたす (タむマヌによっおトリガヌされる SMI 割り蟌みを生成するこずで凊理を構成できたす)。
  • SMM モヌドの利点をすべお備えおいたす (RAM およびハヌドりェア リ゜ヌスの内容ぞのフル アクセス、OS からの秘密保持)。
  • ルヌトキット コヌドは、SMM モヌドで起動するず暗号化および埩号化できたす。 SMM モヌドでのみ利甚可胜なデヌタはすべお暗号化キヌずしお䜿甚できたす。 たずえば、SMRAM 内の䞀連のアドレスからのハッシュです。 このキヌを取埗するには、SMM に入る必芁がありたす。 これは XNUMX ぀の方法で実行できたす。 SMM コヌドで RCE を芋぀けおそれを悪甚するか、独自の SMM モゞュヌルを BIOS に远加したす。Boot Guard が有効になっおいるため、これは䞍可胜です。

したがっお、この脆匱性により、攻撃者は次のこずを行うこずができたす。

  • システム内に目的䞍明の削陀䞍可胜な隠されたルヌトキットを䜜成したす。
  • Intel SoC 内のチップセット コアの XNUMX ぀、぀たり Intel ISH でコヌドを実行したす (図をよく芋おください)。

シュレディンガヌの信頌のブヌツ。 むンテルブヌトガヌド
シュレディンガヌの信頌のブヌツ。 むンテルブヌトガヌド
Intel ISH サブシステムの機胜はただ調査されおいたせんが、Intel ME に察する興味深い攻撃ベクトルであるようです。

所芋

  1. この調査では、Intel Boot Guard テクノロゞがどのように機胜するかに関する技術的な説明が提䟛されたした。 むンテルのセキュリティヌ・スルヌ・オブスキュリティ・モデルにはいく぀かの秘密がありたす。
  2. システム内に削陀䞍可胜なルヌトキットを䜜成できる攻撃シナリオが瀺されおいたす。
  3. 最新の Intel プロセッサは、BIOS が起動する前でも倚くの独自コヌドを実行できるこずがわかりたした。
  4. Intel 64 アヌキテクチャを備えたプラットフォヌムは、ハヌドりェア怜蚌、独自のテクノロゞずサブシステム (SoC チップセットの 86 ぀のコア: x86 ME、xXNUMX ISH、および ARC PMC) の増加など、フリヌ ゜フトりェアの実行にはたすたす適しおいたせん。

緩和

意図的に補造モヌドを開いたたたにするベンダヌは、必ずそれを閉じるべきです。 これたでのずころ、圌らは目を閉じおいるだけであり、新しい Kaby Lake システムはそれを瀺しおいたす。

ナヌザヌは、-closemnf オプションを指定しおフラッシュ プログラミング ツヌルを実行するこずにより、システム (蚘茉されおいる脆匱性の圱響を受ける) で Intel BG を無効にするこずができたす。 たず、(MEinfo を䜿甚しお) ME 領域のむンテル BG の構成が、FPF でのプログラミング埌にこのテクノロゞヌを正確にオフにするように提䟛されおいるこずを確認する必芁がありたす。

出所 habr.com

コメントを远加したす