
Intel Management Engine JTAG 概念実証 - 2022 手順
すべての情報は教育目的でのみ提供されています。これらの手順は自己責任で実行してください。著者およびその雇用主は、このページに含まれる情報に基づいて行動した、または行動しなかった個人または組織から生じる直接的または結果的な損害または損失について一切責任を負いません。
はじめに
必要なソフトウェア
ペイロードの生成
ロック解除トークンの生成
SPIフラッシュイメージの準備
ファームウェアイメージへのファイル統合
OEM署名の無効化
ファームウェアイメージの構築
メインCPUの立ち上げ
SPIフラッシュへのイメージ書き込み
USBデバッグケーブルの準備
OpenIPC設定ファイルのパッチ適用
OpenIPC設定ファイルの復号化
設定へのLMT Coreの追加
IPC_PATH環境変数の設定
JTAG動作確認の初期チェック
CPU MEスレッドの表示
コアの停止
MEデバッグ: クイックスタート
任意メモリの読み出し
ROMの読み出し
TXEとは?
テスト済みプラットフォーム一覧
著者
ライセンス
脆弱性 INTEL-SA-00086 により、Intel Management Engine コアの JTAG を有効化できます。私たちは Gigabyte Brix GP-BPCE-3350C プラットフォーム向けに [JTAG PoC][8] を開発しました。同じプラットフォームの使用を研究者志望者に推奨しますが、Intel Apollo Lake チップセットを搭載した他メーカーのプラットフォームでも(TXEバージョン 3.0.1.1107 で)PoCをサポートしているはずです。
Gigabyte Brix GP-BPCE-3350Cは広く市販されなくなったため、本手順は代わりにAAEON UP Squared SKU UPS-APLX7-A20-0864(Intel Atom® x7-E3950)を対象とするよう更新されました。このボードを購入する場合は、電源、シリアルアダプタ、および任意のUSB-シリアルアダプタも必ず入手してください。さらに、UP SquaredではDCIデバッグを実行するために基本的なUSBデバッグケーブルのみが必要です。USBデバッグケーブルは、ここに示されている黄色いUSBケーブルのポートに接続する必要があります。
脆弱性 INTEL-SA-00086 は、MFS([内部MEファイルシステム][6])に格納されたファイルを処理する際にバッファオーバーフローを発生させます。完全なファイルパスは /home/bup/ct です。この脆弱性を悪用したバージョンのファイルを、Intel PCHチップセットを搭載したハードウェアのOEMにIntelが提供するIntel System Toolsの1つである Intel Flash Image Tool (FIT) を使ってMEファームウェアに統合する必要があります。
Intel ME (TXE, SPS) System Toolsユーティリティはエンドユーザー向けではないため、Intelの公式Webサイトでは見つけることができません。ただし、一部のOEMはデバイスドライバとともにソフトウェア更新の一部として公開しています。したがって、PoCを統合するには "CSTXE System Tools v3" が必要です。これはここにあります。
JTAGデバッグを実行するにはIntel System Studioをインストールする必要があります。当初の実験では Intel System Studio 2018 を使用しました。本手順はIntel System Studio 2020向けに更新されており、ここから入手できます。
PoCはIntel TXEファームウェアバージョン3.0.1.1107を対象としています。Win-Raidフォーラムの "CSTXE 3.0" イメージリポジトリには、必要なTXEファームウェアバージョンが含まれています。
私たちのスクリプトはすべてPythonで書かれています。Python 2.7の使用を推奨します。また、スクリプトにはpycryptoパッケージが必要です。pycryptoをインストールするには、次のコマンドを実行してください:``` pip install pycrypto
## DCI経由でのベースラインx86デバッグの実行
このガイドの目的は、エクスプロイトを介してME内でJTAGデバッグを可能にすることですが、まずは正常性確認として、DCI経由でUP Squaredボードの通常のJTAGデバッグを実行できることを確認しておくのが良い習慣です。AAEONは、フォーラムで不安定性の原因となると述べたため、同社のBIOSにはDCIを有効化した状態ではもう出荷していません。(また、DCIが有効だったv5.0より前のBIOSバージョンは、DRAMベンダーのハードウェア変更により、新しいハードウェアでは動作しなくなります。) そのため、UP SquaredでDCI JTAGを有効にするには、次の3つの手順を実行する必要があります:
1) Satoshi Tanda が [ここ](https://forum.up-community.org/discussion/comment/12877#Comment_12877) で説明しているバイナリパッチを実行します (ただし、UEFITool 0.28 を使用すべきであり、2.8 ではないことに注意してください)。
2) 起動時にF7を押してBIOS設定メニューに入り、デフォルトのUPパスワード (*upassw0rd*) を入力し、メインメニューから "CRB Setup" -> "CSB Chipset" -> "South Cluster Configuration" -> "Miscellaneous Configuration" -> "DCI Enable (HDCIEN)" まで移動して、これを有効に設定することで、BIOS設定メニューからDCIを有効にします。その後、BIOSセットアップメニューを終了し、設定変更を保存して、システムを再起動します。
3) "C:\IntelSWTools\system_studio_2020\system_debugger_2020\target_indicator\bin\TargetIndicator.exe" を開き、デバッグケーブルを介してそのシステムをUP Squaredに接続したときに、以下のようにDCIが可能であることを示す青色のインジケータが表示されることを確認します:

その後、":\Program Files (x86)\IntelSWTools\sw_dev_tools\system_debugger_2020\system_debug_legacy\xdb.bat" を起動し、ターゲットに接続してブレークし、シングルステップ実行して、ベースラインデバッグ機能があることを確認できます。
(また、Alan Sguigna による [こちらのブログシリーズ](https://www.asset-intertech.com/resources/blog/2020/05/open-source-firmware-explorations-using-dci-on-the-aaeon-up-squared-board/) に従って、このプラットフォーム用のオープンソースコードのDebugビルドを構築する方法もあります。このビルドは、リセットベクタからDCIデバッグが可能です。ただし、DRAMのハードウェア変更により、このソースから構築されたコードは新しいハードウェアでは完全には起動せず、 [ここ](https://forum.up-community.org/discussion/comment/12877) に記載されているように起動時にハングすることに注意してください。Intel TianoCoreのメンテナはこれを修正することを拒否しています。)
# ペイロードの生成
スクリプト **me_exp_bxtp.py** を実行します:```
me_exp_bxtp.py -f <file_name>
このスクリプトは必要なデータを生成し、指定したファイルにエクスポートします(完全なファイルパス、またはカレントディレクトリ内であれば単に名前を指定します。既定値は ct.bin です)。このファイルは後で FIT によって使用されます。
スクリプト utock_gen.py を実行します:``` utock_gen.py -f <file_name>
スクリプトは必要なデータを生成し、指定されたファイルにエクスポートします(完全なファイルパス、または現在のディレクトリ内の場合は単に名前を指定します。デフォルトは *utok.bin*)。このファイルは後で *FIT* によって使用されます。
# SPI Flash イメージの準備
## ペイロードの統合
*ct.bin* ファイルと *utok.bin* ファイルを統合するには、*CSTXE System Tools v3* から取得した *FIT* ユーティリティ(*fit.exe*)を実行します。まず、それを使用して DCI が有効になっている UP Squared BIOS イメージ(例: "UPA1AM61_DCI_Enabled.bin")を開きます。

*FIT* は、イメージを開くと、SPI イメージ全体のさまざまなセクション(SPI ディスクリプタ、UEFI/BIOS ファームウェア、Intel ME ファームウェア、Unlock Token)を抽出し、FIT と同じローカルディレクトリのフォルダ *"image_name"/Decomp* に保存します。

この操作を行ったら、構成 XML を保存し(例: "UPA1AM61_DCI_Enabled.xml")、fit.exe を終了します。
Intel TXE ファームウェアを脆弱性のあるバージョン **3.0.1.1107** にダウングレードするには、<image name>/Decomp/TXE Region.bin ファイルを "3.0.1.1107_B_PRD_RGN.bin" ファイルで置き換える必要があります。これは、元のファイルの名前を "TXE Region.bin.orig" に変更し、次に "3.0.1.1107_B_PRD_RGN.bin" の名前を "TXE Region.bin" に変更することで行います。
fit.exe を再度開き、保存した XML ファイルから構成を再読み込みします。ファイルシステム上のファイルを正しく置き換えた場合は、Flash Layout タブの "Intel(R) TXE Binary File" に、元々表示されていたバージョンの代わりに 3.0.1.1107 と表示されるはずです。

# エクスプロイトファイルのファームウェアイメージへの統合
次に、*/home/bup/ct* 用に生成したファイル(**ct.bin**)と *Unlock Token* 用に生成したファイル(**utok.bin**)を *FIT* で指定する必要があります。*FIT* の *Debug* タブでは、ファームウェアに統合する Trace Hub Binary と Unlock Token を指定できます。これらは、すでに生成したファイルである必要があります。

# OEM 署名の無効化
Platform Protection タブには OEM Public key hash があります。32 個のゼロを入力して削除します:```
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

「Build Settings」を選択