本章では、解析対象のプログラムである DoPClient と DoPDriver の表層解析を行います。
表層解析とは一般に、プログラムのメタデータやファイル内の文字列などの情報から対象ファイルの概要を把握するような解析手法を指します。
Windows 用の実行ファイルの表層解析を行った場合、例えば以下のような情報を特定できます。
- 実行ファイルの種類に関する情報
- 実行ファイルのヘッダに含まれる構成情報
- 実行ファイルがロードする DLL や、使用する Windows API などの情報
- 実行ファイル内で定義されている文字列に関する情報
もくじ
ファイルの種類を調べる
対象のファイルの種類については表層解析で特定できます。
Linux の場合は、多くのディストリビューションにインストールされている file
コマンドなどによって簡単に対象ファイルの種類を特定できます。
一方で、Windows でファイルの種類を調べる場合はサードパーティーのツールを利用することが多いです。
ファイルの種類を調査するツールについては本書では詳しくは紹介しませんが、よく使われるツールとしては TrID 1 などがあります。
TrID はオンラインツールとしても提供されているので、今回のように解析対象のファイルを外部サイトにアップロードしても問題ない場合にはこちらも便利です。
Online TrID File Identifier:
https://mark0.net/onlinetrid.html
本書で解析する実行ファイルを上記のオンラインツールで解析すると、以下の通り 64bit Windows 用の実行ファイルの可能性が高いことを特定できます。
※ 一般に公開されていないファイルをインターネット上の解析サイトへアップロードすることは重大なセキュリティインシデントとなる場合がありますので、使用には十分に注意してください。
PE ファイルの情報を調べる
Windows 用の実行プログラムは通常 PE ファイルフォーマット 2 で作成されています。
PE ファイルのヘッダには実行プログラムに関する様々な情報が含まれます。
本書では PE ファイルのヘッダについて詳しくは解説しませんが、PE ファイルヘッダからは一般に以下のような情報を参照することができます。
- 実行ファイルがエクスポートしている関数やデータに関する情報
- 実行ファイルがインポートしているライブラリ関数やデータに関する情報
- 実行ファイルのデバッグ情報
また、実行ファイル内のデータを解析することで、他にも以下のような情報を参照することができます。
- 実行ファイル内に埋め込まれた文字列などのデータ
- 実行ファイル内の暗号化、または難読化されている可能性のあるデータ
実際に、DoPClient と DoPDriver の表層解析を試してみましょう。
Windows プログラムの表層解析に使用できるツールはいくつかありますが、本書では PEStudio 3 の無料版を使用します。
なお、Windows プログラムの表層解析に有用なツールは PEStudio 以外にも複数あります。
本書では使用しませんが、Explorer Suite 4 に含まれる CFF Explorer や PE Bear なども非常に有用なツールです。
PE Studio で DoPClient と DoPDriver を解析してみると、以下の画像のように様々な情報が一気に表示されました。
ここから、対象ファイルのハッシュやタイムスタンプなどの情報を参照できます。
また、DoPClient の [strings] タブを参照すると、DoPClient 内に埋め込まれている文字列の情報を確認できます。
Password is Wrong
や DoPDriver.sys
、 StartService failed (%d)
などの文字列から、このプログラムがパスワードの検証や DoPDriver.sys のロードや起動を行う可能性があることを推測できます。
さらに、DoPClient の [imports] からは、対象のプログラムが OpenSCManager
や CreateService
などの API 関数をインポートしていることを確認できます。
続いて、DoPDriver の解析結果を見てみます。
DoPDriver では、開発者がデバッグ情報ファイル(pdb ファイル) の情報の削除を失念しているようで、PE ファイルの Data Directory セクション内の debug 領域に C:\Users\kash1064\Documents\DoP\x64\Release\DoPDriver.pdb
というユーザ名を含むファイルパスが記録されてしまっていることを確認できます。
そして、DoPDriver の [strings] タブからは、FLAG{The_important_process_is_
という文字列が定義されていることを確認できます。
これは正解の Flag の前半部分のようですが、解析を進める上で重要なキーワードになりそうです。
2 章のまとめ
本章では、PEStudio を使って解析対象のプログラムである DoPClient と DoPDriver の表層解析を行いました。
本書では登場しませんでしたが、プログラムの表層解析を行うことで、テキストとして埋め込まれている機密情報や、暗号化、または難読化されている可能性のあるデータなど、より多くの情報を特定できる場合もあります。
Windows プログラムの表層解析に関する様々なテクニックは、「リバースエンジニアリングツール Ghidra 実践ガイド」6 や「Practical Malware Analysis」7 などが非常に参考になります。
各章へのリンク
- まえがき
- 1 章 環境構築
- 2 章 DoPClient と DoPDriver の表層解析
- 3 章 DoPClient の静的解析を行う
- 4 章 DoPClient を動的解析する
- 5 章 DoPDriver の静的解析を行う
- 6 章 DoPDriver を動的解析する
-
TrID - File Identifier https://mark0.net/soft-trid-e.html
↩ -
PE 形式 https://learn.microsoft.com/ja-jp/windows/win32/debug/pe-format
↩ -
PEStudio https://www.winitor.com/download
↩ -
Explorer Suite https://ntcore.com/explorer-suite/
↩ -
PE Bear https://github.com/hasherezade/pe-bear
↩ -
リバースエンジニアリングツール Ghidra 実践ガイド セキュリティコンテスト入門からマルウェア解析まで (中島 将太, 小竹 泰一, 原 弘明, 川畑 公平 著 / マイナビ出版 / 2020 年)
↩ -
Practical Malware Analysis: The Hands-On Guide to Dissecting Malicious Software (Michael Sikorski, Andrew Honig 著 / No Starch Press / 2012 年)
↩