Skip to content
KitploitKITPLOIT
ツールブログ
提出
ツールブログ
提出

ハッキング、侵入テスト、サイバーセキュリティツールをあなたのセキュリティアーセナルに!

Kitploitはハッキング、サイバーセキュリティ、ペネトレーションテストのツールディレクトリです。最新のプロジェクトアップデートを見つけて、脆弱性の発見、システム分析、テストの自動化、セキュリティの強化を行いましょう。

··フィード·お問い合わせ·プライバシー·© 2026 Kitploit

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
IntelTXE-PoC — インテル マネジメント・エンジン JTAG 概念実証 | Kitploit
ツール/GitHubGitHub/ptresearch/inteltxe-poc
組み込みシステムセキュリティペイロード生成脆弱性分析リバースエンジニアリングデバッガハードウェアハッキングハードウェアセキュリティファームウェア解析バイナリエクスプロイトArchived
GitHubptresearch/inteltxe-poc

IntelTXE-PoC

インテル マネジメント・エンジン JTAG 概念実証

54910676年前Kitploit レビュー済み

人気

すべて見る →

コミュニティで最も使われているツールを見つけましょう。

すべてのツールを探索

ツールコレクションを閲覧

すべてのツールを見る →
共有
リポジトリを見る

免責事項

すべての情報は教育目的のみで提供されています。これらの手順は自己責任で実行してください。著者およびその雇用者は、このページに含まれる情報に基づいて行動した、または行動しなかった個人または組織から生じる直接的または結果的な損害または損失について、一切責任を負いません。

目次

はじめに
必要なソフトウェア
ペイロードの生成
アンロックトークンの生成
SPIフラッシュイメージの準備
ファームウェアイメージへのファイルの統合
OEM署名の無効化
ファームウェアイメージの構築
メインCPUの起動
SPIフラッシュへのイメージ書き込み
USBデバッグケーブルの準備
OpenIPC設定ファイルのパッチ適用
OpenIPC設定ファイルの復号
設定へのLMTコアの追加
IPC_PATH環境変数の設定
JTAG動作確認の初期チェック
CPU MEスレッドの表示
コアの停止
MEデバッグ:クイックスタート
任意メモリの読み取り
ROMの読み取り
なぜTXEなのか?
テスト済みプラットフォーム一覧
著者
ライセンス

はじめに

脆弱性 INTEL-SA-00086 により、Intel Management Engine コアの JTAG を有効化できます。私たちは Gigabyte Brix GP-BPCE-3350C プラットフォーム向けに JTAG PoC を開発しました。将来の研究者には同じプラットフォームを使用することをお勧めしますが、Intel Apollo Lake チップセットを搭載した他メーカーのプラットフォームでも(TXEバージョン 3.0.1.1107 で)PoC が動作するはずです。

必要なソフトウェア

Intel System Tools

脆弱性 INTEL-SA-00086 は、MFS(内部MEファイルシステム)に格納されたファイルを処理する際のバッファオーバーフローに関係します。完全なファイルパスは /home/bup/ct です。これを、Intel PCH チップセットをベースにしたハードウェアの OEM に Intel が提供する Intel システムツールの1つである Intel Flash Image Tool (FIT) を使用して、ME ファームウェアに統合する必要があります。 Intel System Tools パッケージのルートディレクトリの構造は次のとおりです:

screenshot

Intel ME (TXE, SPS) System Tools ユーティリティはエンドユーザー向けではありません。そのため、公式 Intel Web サイトにはありません。ただし、一部の OEM はデバイスドライバとともにソフトウェアアップデートの一部として公開しています。したがって、PoC を統合するには、オンラインで入手できる Intel TXE System Tools バージョン 3.x が必要です。

Intel System Studio

Intel System Studio をインストールする必要があります。試用版は Intel のサイトからダウンロードできます。私たちの実験では、Intel System Studio 2018 を使用しました。

Intel TXE ファームウェア

PoC は Intel TXE ファームウェアバージョン 3.0.1.1107 を対象としています。Gigabyte GB-BPCE-3350C バージョン F5 の SPI フラッシュイメージには、必要なファームウェアバージョンが含まれています。

Python

私たちのスクリプトはすべて Python で書かれています。Python 2.7 を使用することをお勧めします。 また、スクリプトには pycrypto パッケージが必要です。pycrypto をインストールするには、次のコマンドを実行します:

root@kitploit:~
pip install pycrypto

AMIBCP

このユーティリティは、CPU を起動する必要がある場合にのみ必要です。

EFI Human Interface Infrastructure (HII) は、UEFI でユーザーインターフェースを作成し、ユーザー入力を処理・管理するための特別なメカニズムです。EFI HII は、非表示のオプションを含むすべてのオプションのデフォルト値を特定します。DCI に関連するオプションが見つかれば、それをデフォルト設定用に有効化でき、BIOS の工場出荷時設定を復元することで DCI を有効にできます。メイン CPU を起動するには、オンラインでも入手できる AMI BIOS Configuration Program バージョン 5.xx が必要です。

ペイロードの生成

スクリプト me_exp_bxtp.py を実行します:

root@kitploit:~
me_exp_bxtp.py -f <file_name>

このスクリプトは必要なデータを生成し、指定したファイルにエクスポートします(完全なファイルパス、またはカレントディレクトリ内であれば単に名前を指定します。デフォルトは ct.bin です)。このファイルは後で FIT によって使用されます。

アンロックトークンの生成

スクリプト me_utok_bxtp.py を実行します:

root@kitploit:~
me_utok_bxtp.py -f <file_name>

このスクリプトは必要なデータを生成し、指定したファイルにエクスポートします(完全なファイルパス、またはカレントディレクトリ内であれば単に名前を指定します。デフォルトは utok.bin です)。このファイルは後で FIT によって使用されます。

SPIフラッシュイメージの準備

DCIオプションの有効化

CPU を起動する必要がない場合は、この手順をスキップしてください。

DCI Enable オプションを有効にするには、AMIBCP ユーティリティを実行し、プラットフォームに付属の SPI ファームウェアイメージを開きます。Gigabyte Brix GP-BPCE-3350C の場合、上記の Gigabyte リンクからダウンロードしたファイルを開きます(アーカイブ内のイメージファイルのパス: F5/image.bin)。

screenshot

次に、Setup Configuration タブで HDCIEN オプションを有効にする必要があります。

ペイロードの統合

ct.bin ファイルと utok.bin ファイルを統合するには、FIT ユーティリティ(fit.exe)を実行し、SPI ファームウェアイメージを開きます。

screenshot

他のハードウェアプラットフォーム

他のハードウェアプラットフォームを使用していて TXE 3.0.1.1107 を利用できない場合は、Gigabyte GB-BPCE-3350C バージョン F5 の SPI Flash イメージをダウンロードし、FIT を使用して TXE セクションを抽出できます。FIT は、イメージを開くと SPI イメージ全体のさまざまなセクション(SPI デスクリプタ、UEFI/BIOS ファームウェア、Intel ME ファームウェア、アンロックトークン)を抽出し、*"image_name"/Decomp * フォルダに保存します。

screenshot

これにより、必要な Intel TXE ファームウェアを含むファイルを /Decomp/TXE Region.bin で見つけることができます。 次に、FIT で特定のプラットフォーム用の SPI イメージを開き、Intel TXE ファームウェアを含むファイルを GB Brix 3350c イメージから取得したバージョンに置き換えます(Flash Layout タブの "Intel(R) TXE Binary File")。

screenshot

ファームウェアイメージへのファイルの統合

次に、FIT で、/home/bup/ct と Unlock Token 用に生成したファイルを指定する必要があります。FIT の Debug タブで、ファームウェアに統合する Trace Hub Binary と Unlock Token を指定できます。これらは、すでに生成したファイルである必要があります。

screenshot

OEM署名の無効化

FIT から OEM Public Key Hash フィールドを削除するだけです:

screenshot

ファームウェアイメージの構築

Build メニューの Build Image を選択してイメージを構築します。

screenshot

BootGuard 設定に関するメッセージは無視します("Yes" をクリック):

screenshot

ここまでの手順がすべて正しく行われていれば、ビルドプロセスは成功し、FIT は次のようなコンソールメッセージを出力します:

screenshot

メインCPUの起動

CPU を起動する必要がない場合は、この手順をスキップしてください。

CPU を起動するには HAP モードを有効にする必要があります。オフセット +0x102 のバイトの 0 ビットをセットする必要があります:

screenshot

SPIフラッシュへのイメージ書き込み

SPIフラッシュにイメージを書き込むには、SPIプログラマの使用を強くお勧めします。
何か問題が発生した場合に復元できるよう、必ず元のファームウェアをバックアップしてください!

USBデバッグケーブルの準備

プラットフォームに接続するには、USB 3.0 デバッグケーブル が必要です。専用に作られたものを購入するか、USB 3.0 AM–AM ケーブルから D+、D-、Vcc の各コンタクトを絶縁して自作してください。

screenshot

OpenIPC設定ファイルのパッチ適用

Intel は、プラットフォームとメイン CPU の JTAG デバッグに使用できる 2 つのソフトウェアパッケージ、DAL (DFx Abstraction Layer) と OpenIPC を開発し、ユーザーに提供しています。DAL と OpenIPC はどちらも Intel System Studio の一部です。Intel System Studio 2018 のインストール後、OpenIPC は次のディレクトリにあります:

Windows

root@kitploit:~
C:\Intel\OpenIPC_1.1740.2381.100

Linux

root@kitploit:~
/opt/intel/system_studio_2018/system_debugger_2018/debugger/openipc

OpenIPC の設定は暗号化されており、TXE コアをサポートしていません。したがって、設定を復号し、TXE の説明を追加してください。

OpenIPC設定ファイルの復号

設定ファイルを復号するには、IDA Pro スクリプト openipc_key_extract.py を使用して、OpenIPC/Bin 内の StructuredData ライブラリ(linux: libStructuredData_x64.so、Windows: StructuredData_x64.dll)からキーを抽出します。そのキー(この場合、4504fb02be0a9c4c84df2a89cf508bc3)を、OpenIPC ディレクトリへのパスとともにスクリプト config_decryptor.py に渡します。

root@kitploit:~
config_decryptor.py –k 4504fb02be0a9c4c84df2a89cf508bc3 –p C:\Intel\OpenIPC

設定へのLMTコアの追加

提供されている OpenIPC のバージョンには、TXE コアに関する必要な情報がありません。そのため、復号した OpenIPC 設定ファイルにパッチ(patch.diff)を適用する必要があります。手順は次のとおりです:

root@kitploit:~
patch -p2 < patch.diff

IPC_PATH環境変数の設定

復号とパッチ適用後、ipccli が変更された OpenIPC バージョンを使用するように、IPC_PATH 環境変数を新しい OpenIPC ディレクトリに設定します。例:

Windows

root@kitploit:~
set IPC_PATH=c:\Intel\OpenIPC\Bin

JTAG動作確認の初期チェック

activator は、JTAG が有効化された後、BUP プロセスをループさせ続けることで、その後のロードをブロックします。起動後、プラットフォームは生命反応を示しません(モニタは点灯せず、キーボードのインジケータも点灯せず、BIOS POST サウンドも再生されません)。したがって、DCI デバッグを介して、プラットフォームが BUP モジュールで「スタック」していることを確認する必要があります。

DAL と同様に、OpenIPC ライブラリにはコマンドラインインターフェース (CLI) が含まれています。これは Python で書かれており、Intel System Studio の一部として Python 用ライブラリとして提供され、pip を使用してシステムにインストールできます。 ipccli のインストールパッケージは次のパスにあります:

Windows

root@kitploit:~
<Program Files(x86)>\IntelSWTools\system_debugger_2018\debugger\ipccli\ ipccli-1.1740.544.100-py2.py3-none-any.whl

Linux

root@kitploit:~
/opt/intel/system_studio_2018/system_debugger_2018/debugger/ipccli/ipccli-1.1811.727.100-py2.py3-none-any.whl

ipccli をインストールするには、次のコンソールコマンドを実行します:

root@kitploit:~
pip install ipccli-1.1740.544.100-py2.py3-none-any.whl

インストールが完了すると、ipccli は対応する Python バージョン(pip を呼び出したバージョン)のランタイム内で利用可能になります。 OpenIPC を使い始めるには、Python コンソールで次のコマンドを実行します:

root@kitploit:~
import ipccli
ipc = ipccli.baseaccess()

DCI 経由でターゲットプラットフォームに接続するメカニズムが起動し、次のようなコンソール出力が表示されます:

screenshot

接続が確立されない場合(たとえば、プラットフォームの電源が入っていない、または DCI 経由で物理的に接続されていない場合)、メッセージは次のようになります:

screenshot

DCI 接続が成功したら、DFX_AGGRAGATOR デバイスの PERSONALITY レジスタが 3 になっていることを確認してください。 PERSONALITY レジスタの IR(Instruction Register)コードは 0x54 です。読み取るには、次のコマンドを実行します:

root@kitploit:~
dfx_agg = ipc.devs.mdu_dfx_agg_tap0
ipc.irdrscan(dfx_agg, 0x54, 32)

そのコマンドの結果は次のようになります:

screenshot

MEデバッグ:クイックスタート

ipccli ユーティリティにはかなり詳細な HTML ドキュメントが付属しており、ipccli Python パッケージのフォルダにあります:

root@kitploit:~
<Python Dir>\Lib\site-packages\ipccli\html\Index.html

CPU MEスレッドの表示

ここまでの手順が正しく実行されていれば、ipccli を介してプラットフォームに接続すると、TXE コアは CSE Tap 経由でアクセス可能になり、ipccli は次の ipccli パスを適用することでアクセスできるようになります:

root@kitploit:~
ipc.devs.cse_c0.threads[0]

ただし、PoC はメイン CPU が初期化されるまでプラットフォームのロードをブロックするため、そのコアには JTAG 経由でアクセスできず、ME コアには次のコマンドでアクセスできます:

root@kitploit:~
ipc.threads[0]

コアの停止

ME プロセッサの命令を停止するには、次のコマンドを実行します:

root@kitploit:~
me = ipc.devs.cse_c0.threads[0]
me.halt()

CPU プロセッサの命令を停止するには、次のコマンドを実行します:

root@kitploit:~
core = ipc.threads[0]
core.halt()

screenshot

コンソールには、停止が行われた命令の論理アドレスが表示されます。

任意メモリの読み取り

OpenIPC は停止後のメモリ読み取りを可能にします。例:

root@kitploit:~
ipc.threads[0].mem("0xf0080004P", 4)

論理アドレス(sel:offset)、リニアアドレス(L 修飾子)、または物理アドレス(P 修飾子)を指定できます。

ROMの読み取り

ME システムエージェント(MISA)を使用すると、ME リセットベクタを含む ROM 領域の初期物理アドレスを取得できます。ROM アドレスは、オフセット 0xe20 にある MISA MMIO(0xf0000000P)の Hunit ROM Memory Base(HROMMB)レジスタから取得できます:

screenshot

ROM は常に ROMBASE から 0xffffffff までに存在します。 ROM をファイルにコピーするには、次のコマンドを実行します:

root@kitploit:~
ipc.threads[0].memsave("<file path>", "0xfffe0000p", 0x20001)

サイズは 0x20000 ではなく 0x20001 と指定することが重要です(そうしないと、32 ビット ME コアでは不可能な 64 ビットアクセスの問題により、OpenIPC が問題に遭遇します)。ファイルの最後のバイトは ROM の一部ではないため、破棄してかまいません。

なぜTXEなのか?

このプラットフォームは、特別な Intel CCA-SVT アダプタなしでデバッグするためのより多くの機会を提供し、通常の USB デバッグケーブル を介して TXE コアの最も初期の段階をデバッグできます。

関連URL:

Intel ME: 静的解析の道

Intel DCI の秘密

Intel ME: フラッシュファイルシステムの解説

電源が切れたコンピュータをハッキングする方法、または Intel Management Engine で未署名コードを実行する方法

Intel Management Engine の内部

未公開モードによる Intel ME 11 の無効化

テスト済みプラットフォーム一覧

  • Gigabyte Mini-PC Barebone (BRIX) GB-BPCE-3350C (rev:1.1, 1.2)
  • Beelink M1

著者

Mark Ermolov (@_markel___)

Maxim Goryachy (@h0t_max)

研究チーム

Mark Ermolov (@_markel___)

Maxim Goryachy (@h0t_max)

Dmitry Sklyarov (@_Dmit)

ライセンス

Copyright (c) 2018 Mark Ermolov, Maxim Goryachy at Positive Technologies

本ソフトウェアおよび関連文書ファイル(以下「本ソフトウェア」)のコピーを入手したすべての人に対し、本ソフトウェアを無償で使用、複製、変更、結合、公開、配布、サブライセンス、および/または販売する権利、ならびに本ソフトウェアを提供された者にこれらの行為を許可する権利を、以下の条件に従うことを条件として付与します。上記の著作権表示およびこの許可表示は、本ソフトウェアのすべてのコピーまたは主要部分に含めるものとします。

本ソフトウェアは「現状のまま」で提供され、商品性、特定目的への適合性、および非侵害性の保証を含むがこれらに限定されない、明示的または黙示的な保証は一切ありません。著者または著作権保持者は、契約、不法行為、またはその他の理由を問わず、本ソフトウェアに関連して生じたいかなる請求、損害、その他の責任についても、一切の責任を負いません。

ツールをダウンロード