msidumpMSI Dump - 悪意のあるMSIインストールパッケージを解析し、ファイル、ストリーム、バイナリデータを抽出し、YARAスキャナを組み込んだツールです。
マクロ対応のOffice文書では、oletools mraptorを使って文書が悪意があるかどうかを迅速に判断できます。さらに詳しく解析したい場合は、oletools olevbaやoledumpを使用できます。
悪意のあるMSIファイルを解析するには、これまで信頼できる唯一のツールとしてlessmsiがありました。
しかし、lessmsiには私が求めていた機能が実装されていませんでした:
そこで登場するのがmsidumpです。
このツールは、悪意のあるMSIコーパスの迅速なトリアージと詳細な調査の両方に役立ちます。 次のことが可能です:
file/MIMEタイプの推定を使用して内部データの種類を判別これは、私が公開したブログ記事に付随するツールとして作成されました:
WindowsInstaller.Installerインターフェースに大きく依存しているため、現時点ではネイティブなLinuxプラットフォームをサポートできません。wine python msidump.pyで動作する可能性はありますが、未検証です。cmd> python msidump.py evil.msi -y rules.yara

ここでは、入力されたMSIに疑わしいVBScriptが注入されており、多数の実行可能ファイルが含まれていることがわかります。
トリアージテーブルから、それがBinaryテーブルに存在することがわかります。抽出します:
python msidump.py putty-backdoored.msi -l binary -i UBXtHArj
レコードのダンプは、名前/IDまたはインデックス番号(この場合7)で指定できます。

別の例を見てみましょう。今回は、インストール中に実行される実行可能ファイルがBinaryテーブルに格納されています:

そのファイルを抽出するには、次のコマンドを使用します
python msidump.py evil2.msi -x binary -i lmskBju -O extracted
-x binaryはBinaryテーブルの内容を抽出することを指示-i lmskBjuは抽出するレコードを指定-O extractedは出力ディレクトリを設定
最良の出力体験を得るには、最大化したコンソールウィンドウでツールを実行するか、出力をファイルにリダイレクトしてください:
python msidump.py [...] -o analysis.log
PS D:\> python .\msidump.py --help
options:
-h, --help show this help message and exit
Required arguments:
infile Input MSI file (or directory) for analysis.
Options:
-q, --quiet Surpress banner and unnecessary information. In triage mode, will display only verdict.
-v, --verbose Verbose mode.
-d, --debug Debug mode.
-N, --nocolor Dont use colors in text output.
-n PRINT_LEN, --print-len PRINT_LEN
When previewing data - how many bytes to include in preview/hexdump. Default: 128
-f {text,json,csv}, --format {text,json,csv}
Output format: text, json, csv. Default: text
-o path, --outfile path
Redirect program output to this file.
-m, --mime When sniffing inner data type, report MIME types
Analysis Modes:
-l what, --list what List specific table contents. See help message to learn what can be listed.
-x what, --extract what
Extract data from MSI. For what can be extracted, refer to help message.
Analysis Specific options:
-i number|name, --record number|name
Can be a number or name. In --list mode, specifies which record to dump/display entirely. In --extract mode dumps only this particular record to --outdir
-O path, --outdir path
When --extract mode is used, specifies output location where to extract data.
-y path, --yara path Path to YARA rule/directory with rules. YARA will be matched against Binary data, streams and inner files
------------------------------------------------------
- What can be listed:
--list CustomAction - 特定のテーブル
--list Registry,File - 複数のテーブルをリスト
--list stats - MSIデータベースの統計を表示
--list all - すべてのテーブルとその内容
--list olestream - すべてのOLEストリームとストレージを表示
MSIに埋め込まれたCABを表示するには: --list _Streams
--list cabs - 埋め込まれたCABファイルをリスト
--list binary - MSI自身の目的で埋め込まれたバイナリデータをリスト
通常はEXE、DLL、VBS/JSスクリプトなどが含まれます
- What can be extracted:
--extract all - バイナリデータ、CAB内の全ファイル、CustomActionからのスクリプトを抽出
--extract binary - バイナリデータを抽出
--extract files - ファイルを抽出
--extract cabs - キャビネットを抽出
--extract scripts - スクリプトを抽出
------------------------------------------------------
CustomAction Typeを数値に基づいて評価しており、回避されやすいです。
どうやらツールに名前を付ける際、既に使われていないか確認するのを忘れていたようです。
msidumpという名前の別のツールがmsitools GNUパッケージの一部として存在します:
このプロジェクトやその他のプロジェクトは、寝ずの努力と多くのハードワークの成果です。私の活動を気に入り、常にコミュニティに還元していることを評価してくださるなら、コーヒーをご馳走してください (またはビールの方が更好みです) 感謝の気持ちを込めて! 💪
Mariusz Banach / mgeeky, (@mariuszbit)
<mb [at] binary-offensive.com>