
UEFIベースのプラットフォーム向けに、初のオープンソースかつ一般公開されたSystem Management Modeバックドアです。さまざまなSMM実験のための汎用プレイグラウンドとして最適です。
UEFIベースのプラットフォーム向けSMMバックドア
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
これはレガシーで放棄されたプロジェクトです。現在のバージョンの バックドアについては、SMM Backdoor Next Genプロジェクトページとその ドキュメントを確認してください:
https://github.com/Cr4sh/SmmBackdoorNg
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
このプロジェクトの詳細については、次の記事をお読みください:
http://blog.cr4.sh/2015/07/building-reliable-smm-backdoor-for-uefi.html
リポジトリの内容:
SmmBackdoor.py -- UEFI DXEドライバのPEイメージにバックドアコードを注入し、インストールされたバックドアと通信してSMRAMを読み取ったり、その他の便利なことを行えるPythonプログラム。
SmmBackdoor/ -- System Management Modeで実行されるUEFI部分のソースコード。
SmmBackdoor.efi, SmmBackdoor.pdb -- UEFI部分のバイナリとそのデバッグシンボル。
smm_call/ -- インストールされたバックドアと対話し、そのプロセスのroot権限を取得する概念実証のLinuxプログラム。
SmmBackdoorプロジェクトをビルドするには、Visual Studio 2008とEDK2ソースコード (https://github.com/tianocore/edk2) を備えたWindowsマシンが必要です。
ステップバイステップの手順:
SmmBackdoorサブディレクトリをEDK2ソースコードディレクトリにコピーします。
Conf/target.txtファイルを編集し、ACTIVE_PLATFORMプロパティの値をOvmfPkg/OvmfPkgX64.dscに設定します。
OvmfPkg/OvmfPkgX64.dscを編集し、ファイルの末尾に次の行を追加します:
#
# 3-rd party drivers
#
SmmBackdoor/SmmBackdoor.inf {
<LibraryClasses>
DebugLib|OvmfPkg/Library/PlatformDebugLibIoPort/PlatformDebugLibIoPort.inf
MemoryAllocationLib|MdePkg/Library/UefiMemoryAllocationLib/UefiMemoryAllocationLib.inf
}
4. Visual Studio 2008のコマンドプロンプトを実行し、EDK2ディレクトリにcdします。
Edk2Setup.bat --pullを実行して、ビルド環境を構成し、必要なバイナリをダウンロードします。
cd SmmBackdoor && build
コンパイル後、結果のPEイメージファイルはBuild/OvmfX64/DEBUG_VS2008x86/X64/SmmBackdoor/SmmBackdoor/OUTPUT/SmmBackdoor.efiに作成されます。
SmmBackdoor.efiをインフェクタペイロードとしてIntel DQ77KBマザーボードの例で実行するには:
ハードウェアSPIプログラマを使用してマザーボードファームウェアをダンプします。
ダンプしたフラッシュイメージをUEFIToolで開きます。
GUID = 26A2481E-4424-46A2-9943-CC4039EAD8F8のFFSファイルのPEイメージを抽出し、extracted.binファイルに保存します。
SmmBackdoor.pyを使用して、抽出したイメージにSmmBackdoor.efiを注入します:
$ python SmmBackdoor.py --infect extracted.bin --output infected.bin --payload SmmBackdoor.efi
UEFIToolで元のPEイメージをinfected.binに置き換えます。
変更したフラッシュイメージをファイルに保存し、プログラマを使用してマザーボードのROMに書き込みます。
バックドアにはデバッグ出力機能もあり、DXEフェーズのデバッグメッセージを画面に表示し、ランタイムフェーズのデバッグメッセージをCOMポート経由で受信できます。
SmmBackdoor.pyを使用するには、pefile Pythonライブラリ (https://pypi.python.org/pypi/pefile) と、Pythonバインディングを含むCHIPSECフレームワーク (https://github.com/chipsec/chipsec) をインストールする必要があります。
サポートされているコマンド:
SmmBackdoor.py --infect <source_path> --output <dest_path> --payload <payload_path> - 指定されたバックドアコードでDXEドライバのPEイメージに感染させます。
SmmBackdoor.py --test - バックドアの存在を確認し、BACKDOOR_INFO構造体からステータス情報を出力します。
SmmBackdoor.py --dump-smram - 利用可能なすべてのSMRAMリージョンをファイルにダンプします。
SmmBackdoor.py --read-phys
- 指定されたアドレスの物理メモリページの16進ダンプを出力します。SmmBackdoor.py --read-virt
- 指定されたアドレスの仮想メモリページの16進ダンプを出力します。SmmBackdoor.py --timer-enable - smm_callに必要な定期的なタイマーSMIを有効にします (デフォルトで有効)。
SmmBackdoor.py --timer-disable - 定期的なタイマーSMIを無効にします。
smm_callの使用法:
smm_call [<arg_1> [<arg_2>]] - 指定された制御コードと引数をSMMバックドアに送信します。
-
smm_call --privesc - バックドアに呼び出し元プロセスのroot権限を与えさせ、コマンドシェルを実行します。
このコードはIntel DQ77KBマザーボードでのみテストされていることに注意してください。他のUEFI互換ハードウェアでも実行できる可能性がありますが、一部のバックドア機能は動作しない可能性があります。
作者:
Dmytro Oleksiuk (aka Cr4sh)