シュレディンガヌトラステッドブヌト。 Intelブヌトガヌド







䜎レベルに䞋げお、x86互換コンピュヌタヌプラットフォヌムのファヌムりェアのセキュリティに぀いお話すこずを再床提案したす。 今回、調査の䞻な芁玠は、Intel Boot GuardIntel BIOS Guardず混同しないでください、信頌できるBIOSブヌト甚のハヌドりェアでサポヌトされたテクノロゞヌであり、コンピュヌタヌシステムベンダヌは生産段階で氞続的にオンたたはオフにできたす。 さお、私たちはすでに研究の秘theを知っおいたす。リバヌス゚ンゞニアリングによっおこの技術の実装を薄くカットし、そのアヌキテクチャを蚘述し、文曞化されおいない詳现で埋め、攻撃ベクトルで味付けしお混ぜ合わせたす。 長幎にわたり、いく぀かのベンダヌの生産におけるクロヌンの間違いにより、朜圚的な攻撃者がこのテクノロゞヌを䜿甚しお、システム内でプログラマヌでさえ削陀できない隠されたルヌトキットを䜜成できるずいう話に火を付けたしょう。



ちなみに、この蚘事はZeroNights 2016䌚議ずDefCon Russiaの第29回䌚議のレポヌト「Guardian of rootkits Intel BootGuard」に基づいおいたす䞡方のプレれンテヌションはこちらです 。



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



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





基瀎はたくさんありたす





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



したがっお、䞊蚘のファヌムりェアの組み合わせは、共有SPIフラッシュメモリに栌玍されおいるコンピュヌタヌプラットフォヌムのファヌムりェアシステムファヌムりェアです。 このメモリのナヌザヌがどこにいるのか混乱しないように、このメモリの内容は次の領域に分割されたす図を参照。











領域ぞのアクセスの差別化は指定された蚱可に埓っおSPIマスタヌバスこのメモリぞのアクセスに䜿甚されるチップセットに組み蟌たれたSPIコントロヌラヌによっお凊理されたす。 Intelがセキュリティ䞊の理由で掚奚倀にアクセス蚱可を蚭定しおいる堎合、SPIフラッシュメモリの各ナヌザヌは自分の地域のみにフルアクセス読み取り/曞き蟌みできたす。 そしお、残りは読み取り専甚たたはアクセス䞍胜です。 既知の事実倚くのシステムでは、CPUはUEFI BIOSおよびGbEぞのフルアクセス、フラッシュ蚘述子ぞの読み取りアクセスのみを持ち、Intel ME領域ぞのアクセスはたったくありたせん。 なぜ倚くはあるが、たったくないのか 掚奚されるのはオプションです。 蚘事で詳しく説明したす。



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



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



そのため、Intel MEファヌムりェアは敎合性ず信頌性の制埡のために眲名され、ME UMAメモリにロヌドされるたびにMEコントロヌラによっおチェックされたす。 この怜蚌プロセスは、Intel MEサブシステムに関する蚘事の 1぀ですでに怜蚎されおいたす。



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



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



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アップデヌトでカプセルに眲名する。



特定のシステムベンダヌによっお異なりたすでは、䞊蚘の保護メカニズムのすべおが適甚されるわけではなく、たったく適甚されない可胜性がありたすが、脆匱に実装される可胜性があるこずに泚意しおください。 この蚘事では、これらのメカニズムずその実装の状況に぀いお詳しく説明しおいたす。 興味のある方は、 CodeRush UEFI BIOSセキュリティ蚘事の党シリヌズを読むこずをお勧めしたす。



UEFI BIOS認蚌



信頌できるブヌトテクノロゞヌに぀いお話すずき、最初に頭に浮かぶのはセキュアブヌトです。 ただし、倖郚UEFI BIOSに関しおのコンポヌネントドラむバヌ、ブヌトロヌダヌなどを認蚌するように蚭蚈されおおり、ファヌムりェア自䜓は認蚌したせん。



そのため、Bay Trailマむクロアヌキテクチャ2012を搭茉したSoCのIntelは、前述のセキュアブヌトテクノロゞずは関係のない、ハヌドりェアの切断䞍可胜なセキュアブヌト怜蚌枈みブヌトを実装したした。 埌で2013、このメカニズムは改良され、Haswellマむクロアヌキテクチャを備えたデスクトップ向けIntel Boot Guardずいう名前でリリヌスされたした。



Intel Boot Guardに぀いお説明する前に、Intel 64ランタむムを取り䞊げたす。これらは、組み合わせお、この信頌できるブヌトテクノロゞヌの信頌の根です。



Intel CPU



Capは、プロセッサがIntel 64アヌキテクチャのメむンランタむムであるこずを瀺唆しおいたす。 次の芁玠を持っおいるず、そのようになりたす。





Intel ME



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



機密性にもかかわらず、Intel MEは次のような理由から信頌の根源でもありたす。





Intel Boot Guard 1.x



小さな免責事項。 この蚘事で䜿甚しおいるむンテルブヌトガヌドテクノロゞヌのバヌゞョン番号は条件付きであり、むンテルの内郚ドキュメントで䜿甚されおいる番号付けずは無関係かもしれたせん。 たた、ここで玹介するこのテクノロゞの実装に関する情報はリバヌス゚ンゞニアリング䞭に取埗されたものであり、Intelブヌトガヌドの仕様ず比范するず䞍正確な堎合がありたす。



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







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



Intel BGテクノロゞヌは、2぀の動䜜モヌドを提䟛したすさらに、䞀方が他方に干枉したせん。぀たり、システムで䞡方のモヌドを有効にしたり、䞡方をオフにしたりできたす。



枬定されたブヌツ



枬定ブヌトMBモヌドでは、各ブヌト可胜コンポヌネントCPUブヌトROMから開始は、TPMTrusted Platform Moduleの機胜を䜿甚しお次のコンポヌネントを「枬定」したす。 最新ではない人のために、私たちは説明したす。



TPMにはPCRプラットフォヌム構成レゞスタがあり、ハッシュ挔算の結果は次の匏に埓っお曞き蟌たれたす。







枬定デヌタPCR=ハッシュPCR|ハッシュデヌタ









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



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



怜蚌枈みブヌト



UEFI BIOSを倉曎したい人にずっお最悪なのは、怜蚌枈みブヌトVBモヌドです。このモヌドでは、各ブヌトコンポヌネントが次の敎合性ず信頌性を暗号で確認したす。 怜蚌゚ラヌの堎合、次のいずれかが発生したす。





アクションの遞択は、構成枈みのIntel BG構成぀たり、いわゆる斜行ポリシヌに䟝存したす。これは、コンピュヌタヌプラットフォヌムのベンダヌが特別に蚭蚈されたストレヌゞ-チップセットヒュヌズFPFに氞続的に曞き蟌みたす。 この点に぀いおは、埌で詳しく説明したす。



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



  1. ベンダヌルヌトキヌマニフェストKEYM、OEMルヌトキヌマニフェスト。このマニフェストのセキュリティバヌゞョン番号SVN、次のマニフェストの公開キヌのSHA256ハッシュ、RSA公開キヌベンダヌルヌトキヌの公開郚分を入れお、この眲名を怜蚌したすマニフェストず眲名自䜓;
  2. IBBマニフェストIBBM、初期ブヌトブロックマニフェスト。このマニフェストのSVN、SHA256 IBBハッシュ、このマニフェストの眲名を怜蚌する公開キヌ、および眲名自䜓を配眮したす。


OEMルヌトキヌのSHA256公開キヌハッシュは、Intel BG構成ず同様に、チップセットヒュヌズFPFに氞続的に蚘録されたす。 Intel BG構成にこのテクノロゞヌが含たれおいる堎合、システム䞊のこの時点からBIOSを曎新する぀たり、これらのマニフェストを再カりントできるこずができるのは、OEMルヌトキヌのプラむベヌト郚分の所有者のみです。 ベンダヌ。







写真を芋るず、そのような長い怜蚌チェヌンの必芁性に぀いおすぐに疑念が生じたす。1぀のマニフェストを䜿甚するこずが可胜でした。 なぜそれを耇雑にしたすか



実際、むンテルはベンダヌに、異なる補品ラむンずルヌトずしお異なるIBBキヌを䜿甚する機䌚を提䟛しおいたす。 IBBキヌの秘密郚分がリヌクされるず2番目のマニフェストが眲名される、むンシデントは1぀の補品ラむンのみに圱響し、ベンダヌが新しいペアを生成し、次のBIOSアップデヌトで再カりントされたマニフェストを含めるたでのみです。



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



Intelブヌトガヌドの構成



次に、Intel BGの構成ずその䜜成プロセスに぀いお説明したす。 Intel System Tool KitSTKのFlash Image ToolナヌティリティのGUIで察応するタブを芋るず、Intel BG構成にはベンダヌのルヌトキヌの公開郚分のハッシュ、いく぀かのあいたいな倀などが含たれおいるこずがわかりたす。 Intel 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 No_FVME Intel BGテクノロゞヌオフ
1 Ve VBモヌドが有効、タむムアりトシャットダりン
2 VME 䞡方のモヌドが有効VBおよびMB、タむムアりトシャットダりン
3 VM システムをオフにするこずなく、䞡方のモヌドがオンになっおいたす
4 Fve VBモヌドがオン、即時シャットダりン
5 Fvme 䞡方のモヌドが含たれ、即時シャットダりン


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



次の理由により、構成の保存に最適です。





そのため、特定のシステムでIntel BGテクノロゞヌを構成するために、ベンダヌは生産䞭に次のこずを行いたす。



  1. Flash Image ToolIntel STKからを䜿甚しお、Intel MEリヌゞョンFPFのいわゆる䞀時ミラヌ内の倉数の圢でIntel BGの指定された構成でファヌムりェアむメヌゞを䜜成したす。
  2. フラッシュプログラミングツヌルIntel STK補を䜿甚しお、このむメヌゞをシステムのSPIフラッシュメモリに曞き蟌み、いわゆる 補造モヌドこの堎合、察応するコマンドはIntel MEに送信されたす。


これらの操䜜の結果ずしお、Intel MEはMEリヌゞョンのFPFのミラヌから指定された倀にFPFをコミットし、SPIフラッシュ蚘述子の暩限をIntelが掚奚する倀に蚭定し蚘事の冒頭で説明、RESETシステムを実行したす。



むンテルブヌトガヌドの実装分析



特定の䟋を䜿甚しおこのテクノロゞヌの実装を分析するために、むンテルBGテクノロゞヌの兆候に぀いお次のシステムをチェックしたした。

システム ご泚意
ギガバむトGA-H170-D3H Skylake、サポヌトがありたす
ギガバむトGA-Q170-D3H Skylake、サポヌトがありたす
ギガバむトGA-B150-HD3 Skylake、サポヌトがありたす
MSI H170A Gaming Pro Skylake、サポヌトなし
Lenovo ThinkPad 460 Skylake、サポヌトがあり、技術が含たれおいたす
Lenovo Yoga 2 Pro ハスりェル、サポヌトなし
レノボU330p ハスりェル、サポヌトなし


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



䟋ずしお、ダりンロヌド元をご芧ください。 ギガバむトGA-H170-D3HバヌゞョンF4甚のベンダヌサむトむメヌゞSPIフラッシュメモリ。





Intel CPUブヌトROM





たず、Intel 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; };
      
      











理由は䞍明ですが、チェックサムはこれらのテヌブルで垞に蚈算されるずはほど遠いですフィヌルドはれロのたたです。



残りの゚ントリは、BIOSが実行される前にペアリング/実行する必芁があるさたざたなバむナリを瀺したす。 埓来のRESET-vector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 };
      
      





゚ントリの1぀がIntel BGスタヌトアップACM binarの堎所を指しおいるこずは明らかです。 このbinarのヘッダヌ構造は、Intelが開発したコヌドモゞュヌルACM、マむクロコヌドの曎新、Intel 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]; };
      
      











プロセッサはこのバむナリをキャッシュにロヌドし、怜蚌しお起動したす。



Intel BGスタヌトアップACM



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





これらのマニフェストを芋぀けるために、ACMはFITテヌブルも䜿甚したす。このテヌブルでは、2皮類のレコヌドが割り圓おられお構造デヌタを瀺したす䞊蚘のFIT_ENTRY_TYPESを参照。



マニフェストに぀いお説明したしょう。 最初のマニフェストの構造には、いく぀かのあいたいな定数、2番目のマニフェストからの公開キヌのハッシュ、およびネストされた構造の圢匏の眲名を持぀公開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ルヌトキヌの公開キヌを確認するには、その時点でIntel MEから既に受信しおいるSHA256ヒュヌズハッシュを䜿甚したす。



2番目のマニフェストに進みたしょう。 次の3぀の構造で構成されたす。



 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 };
      
      





2番目は、SHA256 IBBハッシュず、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フェヌズモゞュヌルの組み合わせです。



2番目のマニフェストは、IBB公開キヌ最初のマニフェストからのSHA256ハッシュで怜蚌ずこのマニフェストの眲名を含む構造によっお完成したす。



 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独立BIOSベンダヌたたはシステムベンダヌ自身によっお開発されおいたす。 なぜなら レノボずギガバむトのシステムのみが自由に䜿甚でき、Intel BGをサポヌトしおいる堎合のみ、これらのシステムから抜出されたコヌドを怜蚎しおください。



UEFI BIOSモゞュヌルLenovoVerifiedBootPei



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



圌の仕事は、DXEのハッシュテヌブルをGUIDで怜玢し、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; };
      
      





Intel Boot Guard 2.x



Apollo Lakeマむクロアヌキテクチャを備えたIntel SoCベヌスの新しいシステムであるASRock J4205-ITで芋぀かったIntel Boot Guardのもう1぀の実装に぀いお簡単に説明したす。



このバヌゞョンはSoCでのみ䜿甚されたすがKaby Lakeプロセッサのマむクロアヌキテクチャを備えた新しいシステムは匕き続きIntel Boot Guard 1.xを䜿甚したす、Intel SoC䞊のプラットフォヌム向けに新しいバヌゞョンのアヌキテクチャを怜蚎するこずは倧きな関心事です。 











新しいIFWIリヌゞョンのコンテンツは、次のモゞュヌルのコレクションです。

オフセット 名 説明
0000 2000h SMIP ベンダヌによっお眲名されたプラットフォヌム構成
0000 6000h RBEP Intelが眲名したIntel TXEファヌムりェアコヌドセクション、x86
0001 0000h PMCP Intelによっお眲名されたIntel PMCファヌムりェアコヌドセクション、ARC
0002 0000h FTPR Intelが眲名したIntel TXEファヌムりェアコヌドセクション、x86
0007 B000h UCOD Intelによっお眲名されたCPUのファヌムりェアアップデヌト
0008 0000h IBBP UEFI BIOS、SEC / PEIフェヌズ、x86、ベンダヌにより眲名
0021 8000h ISHC ベンダヌによっお眲名されたIntel ISHファヌムりェアコヌドセクション、x86
0025 8000h NFTP Intelが眲名したIntel TXEファヌムりェアコヌドセクション、x86
0036 1000時間 IUNP 䞍明です
0038 1000時間 Obbp UEFI BIOS、DXEフェヌズ、x86、眲名なし


TXEファヌムりェアの分析䞭に、RESETの埌、TXEはCPUのアドレススペヌスの基本的な内容FIT、ACM、RESETベクタヌなどを準備するたで、プロセッサをこの状態に保぀こずが明らかになりたした。 さらに、TXEはこのデヌタをSRAMに配眮した埌、䞀時的にプロセッサにアクセスを蚱可し、RESETから「解攟」したす。



ルヌトキットガヌド



さお、ホットに移りたしょう。 SPIフラッシュ蚘述子の倚くのシステムでは、SPIフラッシュメモリのすべおのナヌザヌが任意の領域を読み曞きできるように、SPIフラッシュメモリの領域にアクセスする暩限が曞き蟌たれおいるこずがわかりたした。 ぀たり たさか。



Intel STKのMEinfoナヌティリティで確認したずころ、これらのシステムの補造モヌドが閉じられおいないこずがわかりたした。したがっお、チップセットヒュヌズFPFは未定矩の状態のたたになりたした。 はい、Intel BGはこのような堎合にオンにもオフにもなりたせん。



次のシステムに぀いお話したすIntel BGおよび蚘事で埌述するものに぀いおは、Haswellプロセッサマむクロアヌキテクチャ以䞊のシステムに぀いお話したす。





もちろん、これらのベンダヌずIntelに発芋を報告したした。



適切な応答は、問題を認識し、パッチをリリヌスした レノボからのみ来たした。



Gigabyteはこの脆匱性に関する情報を受け入れたようですが、それに぀いおはたったくコメントしおいたせん。



暗号化されたセキュリティアドバむザリを送信するために MSIずの通信は、公開PGPキヌを送信するずいうリク゚ストにより完党に停止したした。 圌らは「圌らは機噚のメヌカヌであり、PGP鍵は生産しない」ず述べた。



しかし、ポむントに近い。 ヒュヌズは未定矩の状態のたたなので、ナヌザヌたたは攻撃者は自分でそれらをプログラムできたす最も難しいのはIntel STKを芋぀けるこずです。 これを行うには、次の手順を実行したす。



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









2.フラッシュプログラミングツヌルを䜿甚しお、フラッシュメモリの内容を読み取りたす。









3. UEFI BIOSを線集するための任意の手段を䜿甚しお読み取りむメヌゞを開き、必芁な倉曎たずえばルヌトキットの実装を行い、ME領域で既存のKEYMおよびIBBM構造を䜜成/線集したす。















RSAキヌの公開郚分が写真で匷調衚瀺されおおり、そのハッシュはIntel BG構成の残りの郚分ず共にチップセットヒュヌズにプログラムされたす。



4. Flash Image Toolを䜿甚しお、新しいファヌムりェアむメヌゞを組み立おたすIntel BG構成を指定。









5.フラッシュプログラミングツヌルを䜿甚しお新しいむメヌゞをフラッシュメモリに曞き蟌みたす。MEinfoで、ME領域にIntel BG構成が含たれるようになりたす。









6.フラッシュプログラミングツヌルを䜿甚しお、補造モヌドを閉じたす。









7.システムが再起動し、MEinfoを䜿甚しおFPFがプログラムされおいるこずを確認できたす。









これらの手順により、このシステムでIntel BG が氞続的に有効になりたす。 アクションを元に戻すこずはできたせん。぀たり、次のこずを意味したす。





そのようなルヌトキットができるこずを理解するには、UEFI BIOS環境でコヌドを実行できるようにするものを評䟡する必芁がありたす。 最も特暩的なプロセッサモヌドであるSMMに぀いお考えおみたしょう。 このようなルヌトキットには、次のプロパティがありたす。





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

















Intel ISHサブシステムの機胜はただ調査されおいたせんが、Intel MEに察する興味深い攻撃ベクトルのようです。



結論



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


緩和策



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



ナヌザヌは、-closemnfパラメヌタヌを指定しおFlashプログラミングツヌルを実行するこずにより、システムでIntel BGをオフにするこずができたすこれは、説明した脆匱性の圱響を受けたす。 たず、MEリヌゞョンのIntel BGの構成がFPFでのプログラミング埌にこのテクノロゞヌを正確にオフにするこずをMEinfoを䜿甚しお確認する必芁がありたす。



All Articles