- 2023/03/03
- 脅威分析レポート
【脅威分析レポート】Windowsインストーラー(MSIファイル)を装う攻撃
Post by : Cybereason Global SOC Team
Cybereason GSOC(Global Security Operations Center)では、「脅威分析レポート:パープルチームシリーズ」を発行しています。同レポートは、攻撃者が端末をハッキングするために利用するテクノロジーや手法に関する概要や技術的分析を紹介するものです。
今回の脅威分析レポートにおいて、Cybereason GSOCチームは、「MicrosoftのWindowsインストールファイル(.msiファイル)を用いて端末をハッキングする攻撃手法」を分析しています。
本レポートは、次の4つのセクションで構成されています。
- はじめに:MSIのファイル形式について
- レッドチーム:MSIファイルを利用した攻撃手法
- ブルーチーム:防御者の視点から見た、MSIファイルの悪用方法
- パープルチーム:悪意あるMSIファイルの検知方法と解析ツール
重要なポイント
- 正規インストーラーになりすます:悪意あるMSIファイルは、正規のインストーラーと見分けがつきにくいことがあります。攻撃者は、よく知られたソフトウェアの更新プログラムを装い、被害者にソフトウェアを「更新」させようとします。
- 昇格した権限で実行:MSIは、LocalSystemアカウント(NT Authority\System)での実行を許可します。LocalSystem権限を利用した不正アクセスは、システム侵害のみならず、さらなるネットワーク侵害につながる可能性があります。
- MSIの悪用方法が数多く存在:MSIのファイル形式はCOM Structure Storage(構造化ストレージ)になっており、MSIファイル内に悪質なファイルを格納し、カスタムアクションで操作することができます。この技術は、被害者の端末を感染させる実行パターンに関してさまざまな選択肢を攻撃者にもたらします。
はじめに
このセクションでは、Windowsインストーラーパッケージ(MSI)に関する基本的な説明を行います。
■概要
MSIとは、以前はMicrosoft Installerと呼ばれていたものであり、Windowsのインストーラーパッケージ形式のことです。MSIを使うと、エンドユーザーの端末に必要なWindowsアプリケーションやパッケージをインストールおよび展開できます。MSIは、ユーザーによるインストールプロセスを簡素化するための標準化されたインストール方法です。MSIファイルによるインストールは、多くの場合、ユーザーの操作を必要とせず、たとえ何らかの操作が必要だったとしても、インストールプロセスは非常にシンプルです。通常、MSIによるインストールは、実行ファイルを実行することとほぼ同じようなことです。
MSIは、Microsoftの技術であるCOM Structured Storageを利用しており、これによりMSIファイルがファイルシステム構造を持つことが可能となっています。この技術は「OLEドキュメント」とも呼ばれており、Microsoft Officeでよく利用されるコンポーネントです。この技術は、ストレージとストリームという2種類のオブジェクトで構成されており、これらはそれぞれディレクトリおよびファイルの概念に類似したものです。この構造により、MSIコンポーネントは複数のファイルを保存した上で、それらのファイルへの簡単なアクセスを実現できます。
必要なファイルを最小限の操作で保存して展開できるため、この技術は、多くの場合実行ファイル形式で提供される自己解凍型のZIPファイルに類似した技術だとも言えます。
また、このインストール手順では、LocalSystemアカウント(NT AuthoritySystem)での実行も可能となります。MSIは、この権限昇格やCOM構造が理由で、攻撃者にとってマルウェア展開に用いる魅力的な選択肢の1つとなっています。
■構造
MSIには、「データベース」ストリームと呼ばれるメインストリームが含まれています。このセクションでは、データベースストリームとそれに関連するコンポーネントについて説明します。
■データベース
データベースストリームは、リレーショナルデータベースを形成する複数のテーブルにより構成されています。これらのテーブルは、主キーおよび外部キーの値とリンクされています。このような構造により、MSIは、異なるテーブル間の関係を維持しつつ、インストールを実行するために必要となる基本的な情報を格納することが可能となっています。
▲データベースストリームは主キー/外部キーの関係を表す
各テーブルには、ソフトウェアアプリケーションのインストールに関して重要な役割を果たす情報が含まれています。代表的なテーブルとしては次のものがあります。
- File:アプリケーションファイルのインストールに関するメタデータが含まれています。
- Registry:アプリケーションのインストールに使われるレジストリキーの値が含まれています。
- Shortcut:関連するアプリケーションのインストールに使われるショートカットが含まれています。
その他のテーブルには、インストールパッケージ実行と実行シーケンスに関する情報が含まれています。これらのテーブルは、MSIによる実行フローの決定や、インストールに必要なアクションの決定に不可欠です。これらのテーブルを利用することで、開発者はインストールプロセスを操作し、インストールに複雑なロジックを持たせることが可能となります。インストールロジックは、多くの場合、アクションとシーケンスを通じて操作されます。
■アクション
MSIには、インストールを実行するためのサブルーチンの集合が含まれています。これらのルーチンは、次の2つのタイプに分けられます。
●標準アクション:開発者がインストールを実行できるようにするための組み込み型のアクションです。代表的な標準アクションには次のものがあります。
- インストールディレクトリを初期化する
- インストールディレクトリにファイルをドロップする
- ソフトウェアのインストールに使われるレジストリ値を追加する
●カスタムアクション:標準アクションでは、開発者がインストールロジックを実行するのに十分でない場合があります。カスタムアクションを使うと、開発者はインストール時に特定のバイナリやスクリプトを実行することで、標準アクションにはないロジックを埋め込むことができます。代表的なカスタムアクションには次のものがあります。
- MSIファイル内に格納された実行ファイルを実行する
- DLLからエクスポートされた特定の関数を実行する
- JavaScriptまたはVisual Basicスクリプトを実行する
上記のアクションは、環境変数に類似した「プロパティ」を利用することで操作できます。プロパティには、多くの場合、特定のアクションを実行するために必要となる各種のデータや制御パラメータが含まれています。これには次のものが含まれます。
- リブートが必要であるかどうかを示すフラグ
- インストールディレクトリ
- システム情報
- インストールにおける制御情報
データベースストリーム内にはPropertyテーブルが存在していますが、すべてのプロパティがPropertyテーブルに格納されるわけではないことに注意してください。一部のプロパティはインストール時に特定のアクションで設定されるため、動的に設定されるプロパティはPropertyテーブル内には格納されない場合があります。
■シーケンス
開発者は、Sequenceテーブル内で、標準アクションとカスタムアクションの実行順序を設定できます。開発者は、Sequencesテーブル内で、アクションを制御する条件を割り当てることができます。
シーケンスには次の2種類があります。
- インストールUIシーケンス:UIに関するアクションのシーケンスです。ダイアログボックスとのユーザインタラクションを含みます。
- インストール実行シーケンス:ファイルのドロップやレジストリエントリの作成など、実際のインストール実行に関するアクションのシーケンスです。サイレントインストールを行う場合、インストールUIシーケンスは無視され、インストール実行シーケンスのみが使用されます。
このレポートでは、実際のインストール動作に最も関連性のある「インストール実行シーケンス」に焦点を当てます。
■ダイアグラム
▲MSIデータベーステーブルのレイアウトとリレーションの例
レッドチーム
このセクションでは、悪意あるMSIファイルの分析および検知方法を確立すべく、まずは悪意あるMSIファイルのステージングを再現する方法を紹介します。アーカイブファイルと同様に、MSIファイルには、悪意あるアクションを実行するためのバイナリやスクリプトが含まれていることがあります。
今回、マイナーアップデート版のMSFVenomテンプレートをMSIファイルに参照させますが、このセクションではペイロードではなく、MSIファイル形式の内部動作に着目します。
■実行フロー
▲悪意あるMSIの実行フロー
MSIファイルを用いることで、攻撃者は悪意あるバイナリやスクリプトを同ファイルに埋め込み、昇格した権限を通じて端末を乗っ取ることが可能となります。これを実証するために、MSIファイルに、悪意あるステージャーバイナリを埋め込むことにします。MSIファイルが実行されると、このバイナリは、C2サーバーからペイロードを取得および実行します。
実行の全体フローは次の通りです。
- MSIファイルを実行。
- 組み込まれているバイナリを実行。
- ステージャーシェルコードを実行。
- C2サーバーからペイロードを取得および実行。
- インストールを終了。
これにより、ディスクにファイルを書き出すことなく、メモリ内で任意の関連バイナリを実行できるようになります。
■準備
このセクションでは、Windows Installer XML(WiX)Toolsetを使って、MSIファイルを作成する方法を紹介します。WiX Toolsetは、XMLファイルからWindowsインストーラーパッケージを構築するためのフリーソフトです。
▲WXSファイルの内容:StagerとExitInstallationのカスタムアクション
実行ファイルは、実行前にCustomActionエレメントがアクセス可能なテーブル内に格納する必要があります。Binaryテーブルは、アニメーション、ビットマップ、アイコンなどを配置するためによく使用されますが、同テーブルを使うと、MSIがCustomActionに必要となる関連バイナリデータ以外にも、悪意あるPEファイルやスクリプトを格納することが可能となります。
Idは、各エレメントの一意識別子であり、開発者はこれを呼び出し、特定のアクションに利用することが可能です。下図の通り「MyStager」というIdは、悪意ある実行ファイルstager.exeに割り当てられています。この実行ファイルはステージャーであるシェルコードを実行するものです。
▲BinaryエレメントとCustomActionエレメント
Binaryエレメント「MyStager」の後に、「Stager」というIdを持つCustomActionエレメントが続きます。これは、「MyStager」の動作を決定する重要なエレメントです。
CustomActionの設定には次の属性が使用されます。
- BinaryKey:BinaryエレメントのIDを指定する属性です。
- Impersonate:実行したユーザーのコンテキストで実行するかを指定する属性です。この属性がnoの場合、インストーラーは昇格された権限(LocalSystem)で実行されます。
- Execute:CustomActionのスケジューリングを指定する属性です。 パラメータ“deferred”は実行を遅延させ、開発者が特定のCustomActionを制御できるようにします。これは昇格された権限での実行が可能な唯一の値です。
- Return:CustomActionのReturn動作を指定する属性です。値asyncNoWaitを指定すると、インストーラーとは非同期でCustomActionを実行できるようになります。
- ExeCommand:実行ファイルに与える引数を指定する属性です。
CustomAction 「Stager」は、Binaryテーブルに格納された悪意ある実行ファイルを昇格した権限で実行し、インストール終了後も実行を継続するように設定されています。
▲CustomAction ExitInstallation
「MyStager」のセットアップ後、VBScript実行のため、もう1つのCustomActionである「ExitInstallation」が設定されます。ただし、このインストーラーには該当のVBScriptが含まれていないため、VBScript実行自体は意図的に失敗して終了します。このCustomActionにはもう1つの目的がありますが、それについては後述します。
CustomActionの設定が完了すると、Install Execute SequenceテーブルであるInstallExecuteSequenceエレメントが設定されます。その最初のアクションとして、ResolveSourceは、ソースの場所とsourcedirプロパティを設定します。これは、インストールプロセスの初期化に必要となります。初期化が完了すると、CustomAction「Stager」と「ExitInstallation」がそれぞれこの順序で実行されるように設定されます。
「ExitInstallation」は、この実行において、インストールを意図的に失敗させて終了させる、重要な役割を持ちます。これにより、MSIはエラーで強制終了しますが、悪意あるバイナリは非同期で実行されるように設定されているため、実行は継続されます。被害者はこのエラーを無視し、悪意あるアクティビティがバックグラウンドで実行し続けていることに気付かない可能性があります。
■実行
この実行シナリオでは、まず被害者がフィッシングメール経由でMSIファイルを取得します。MSIファイルが端末に配置されると、被害者はファイルをダブルクリックするだけで昇格された権限で実行され、UAC警告が表示されます。UAC警告をユーザーが受け入れると、通常のインストールと同じように進みます。
▲MSIのプロセスツリー
すると下記のメッセージが表示されてインストールは失敗します。
▲CustomAction 「ExitInstallation」により表示されるエラーメッセージ
ここでMSIは自ら終了しますが、「Stager」は非同期で実行するように設定されているため、この悪意あるバイナリの実行は継続されます。
▲MSI実行のアタックツリー
一方、MSIファイルの実行開始時、Custom Actionテーブルの悪意ある実行ファイル(今回のケースではmsia8a.tmp)も並行して実行します。
msia8a.tmp(検体によってファイル名は異なる)は、C2サーバーからペイロードを取得し、それを被害者の端末に配置します。ペイロードの配置に成功すると、続いて「Stager」は同ペイロードを実行します。このペイロード実行の成功はC2サーバーへの通信成功へと繋がり、これが昇格された権限を持つアカウントで実行されていることは明らかです。
▲Metasploitのリスナーとなる攻撃者の端末
この時点で、攻撃者はこの端末を遠隔操作できるようになります。
■ダイアグラム
▲実行フローチャート
ブルーチーム
このセクションでは、過去にMSIファイルを悪用したマルウェアの分析に焦点を当てます。「技術的分析」では、既に出回っている3つのマルウェアファミリーを取り上げ、最後に各マルウェアサンプルによるMSIファイル実行の「比較表」で締めくくります。
■技術的分析
このセクションでは、3つの異なるマルウェアファミリーを分析します。この分析では、下記SHA-256を持つ検体を取り上げます。
マルウェアファミリー | SHA-256 |
---|---|
Magniberランサムウェア | 0e65657740d7f06acda53b7d3190f9728801b984d5bd6ccb0b865d218ae71f66 |
MatanBuchusローダー | face46e6593206867da39e47001f134a00385898a36b8142a21ad54954682666 |
Qbot / Qakbot | c0beb47f629a5debe0e99790d16a4d04afe786d6fb42c5ab6dfcaed84d86e7ad |
■Magniberランサムウェア
Magniberランサムウェアは、脆弱性を悪用することや、正規のソフトウェアアップデートを装って端末を感染させることで知られています。過去に確認された既知の感染方法としては次のものがあります。
- PrintNightmareの脆弱性を悪用
- Windowsアプリケーションパッケージ(.appx)ファイルを悪用し、正規のGoogle ChromeやMicrosoft Edgeアップデートを装う
- MSIを悪用し、正規のWindows 10アップグレードを装う
■MSIの分析
ファイルのメタデータによると、このMSIファイルはWiX Toolsetを使ってビルドされています。
▲MSIファイルのメタデータ
これがどのような悪意ある振る舞いをする可能性があるか知るため、CustomActionテーブルを調べます。
▲サンプルのCustomActionテーブル(Orcaツールでの表示)
CustomActionテーブルには、次の2つのアクションが設定されています。
- SetProgramFilesFolder:Program Filesフォルダをユーザープロファイル中のappdataフォルダ(C:\Users\UserName\AppData\Local)に設定
- h54pstl1:バイナリ「m21iivix0ds」をフェッチする。
カスタムアクション「SetProgramFilesFolder」はType 51を持っており、プロパティの値を設定するためのアクションであることが推測できます。カスタムアクション「SetProgramFilesFolder」は、SourceにProgram Filesフォルダのプレースホルダである ProgramFilesFolderプロパティを設定します。ProgramFilesFolderにはTargetで指定された LocalAppDataFolderプロパティ(ユーザープロファイル中の appdataフォルダ(例:C:\Users\UserName\AppData\Local))が設定されます。
▲サンプルのDirectoryテーブル(Orcaツールでの表示)
Directoryテーブルには、インストールディレクトリの場所に関する情報が含まれています。上記の画像に示すように、ProgramFilesFolderはTARGETDIRプロパティ(rootのインストールディレクトリ)をDirectory_Parentとして持っています。DirectoryテーブルとCustomActionテーブルに基づいて、インストールディレクトリはユーザープロファイル中のappdataディレクトリ下に配置されます。
カスタムアクションh54pstl1はType 65を持ちます。これは、次のようなタイプと関連するオプションの組み合わせを意味します。
- Type 1:Binaryテーブル内に格納されているDLLファイルであることを意味する。
- Optional Constant +64:CustomActionの失敗にかかわらず、実行が継続されることを意味する。
カスタムアクションのタイプによると、m21iivix0dsはBinaryテーブルに格納されているDLLファイルであり、エクスポートされた関数t5thamkuを実行することが予測されます。
▲サンプルのBinaryテーブル(Orcaツールでの表示)
インストールプロセスのどの時点でカスタムアクションが実行されるかを特定するには、InstallExecuteSequenceテーブルを分析する必要があります。
▲サンプルのInstallExecuteSequenceテーブル(Orcaツールでの表示)
シーケンス番号800から1000までのアクションは、インストールのコスト計算に関するものであり、これらは、関連するファイルをインストールまたは削除するディスク領域の量を計算するアクションです。インストールファイルのコストは、インストールディレクトリにも関係するため、関連するディレクトリを設定する必要があります。その結果、SetProgramFilesFolder(シーケンス番号999)アクションがコスト計算プロセス内に含められ、Directoryテーブルに設定されたディレクトリの解決がCostFinalizeアクションに設定されます。
カスタムアクションh54pstl1は、実際のインストール実行のためのシーケンスであるInstallInitializeの直後に実行されます。InstallInitializeからInstallFinalizeに至るまでの間にあるすべてのアクションは、ターゲットシステムの更新や変更を行うインストールアクティビティの一部です。カスタムアクションh54pstl1は、この時点でエクスポートされた関数t5thamkuを昇格された権限で実行します。
InstallFilesアクションは、関連するファイルを宛先ロケーションに配置するアクションであり、この場合、同ロケーションはカスタムアクションSetProgramFilesFolderで設定した宛先になります。多くの場合、このファイル情報は、Mediaテーブル、Fileテーブル、Componentテーブルに格納されます。
▲サンプルのFileテーブル(Orcaツールでの表示)
Mediaテーブルを確認すると、MSIにはキャビネットファイルであるProduct.cabが含まれています。これは、キャビネットファイルが存在するものの、同ファイルはインストール時にいかなるファイルもドロップしないことを意味します。CustomActionテーブルとDirectoryテーブルを介してディレクトリを設定した場合であっても、ファイルがドロップされないため、インストールディレクトリは無関係なものとなります。
▲MSIファイルMagniberの実行ログの一部(Cybereasonプラットフォームでの表示)
■ダイアグラム
▲MSIファイルMagniberの感染フロー
■MatanBuchusローダー
●MSIの分析
MatanBuchusは、攻撃者BelialDemonが開発したMaaS(Malware-as-a-Service)プラットフォームであり、2021年初頭にロシアのサイバー犯罪フォーラムでその存在が特定されたものです。セカンドステージのマルウェアローダーとして動作するMatanBuchusは、悪意あるペイロードをダウンロードし実行する機能をはじめ、任意のPowerShellコマンドを実行する機能、およびステルス的なC2サーバー通信を行う機能を含んでいます。
このマルウェア自体は、フィッシングメールに含まれるZIPファイルとして拡散されることが観測されています。このファイルには、アクセスされた時点で別のZIPファイルをドロップするHTMLファイルが含まれています。この2つ目のZIPファイルには、MatanBuchusのペイロードをロードし、C2サーバーからのダウンロードを開始させるMSIファイルが含まれています。
MatanBuchusペイロードのローダーは、ファイルメタデータの分析により、WiXを使用して作成されたMSIファイルであることが確認されています。このファイル自体には、「Adobe Font Pack 3.0.12.9」というサブジェクトが付いており、「Westeast Tech Consulting, Corp.」により電子署名されています。このファイルは、正規のAdobeファイルを装っていますが、当該証明書は無効になっています。
▲MSIファイルMatanBuchusのメタデータ(Unixユーティリティーコマンドfileの実行結果)
▲MSIファイルMatanBuchusのデジタル署名情報
Magniberと同様に、ファイルのCustomActionの値を調べることで、ファイルの実行方法についてより深く理解することができます。CustomActionテーブルには、値226を持つ2つのアクションが含まれています。これはTypeが34でオプションが192です。カスタムアクションのType 34は、同アクションがコマンドラインで実行可能なファイルを実行することを意味し、オプション192はこの実行が非同期に実行されることを意味します。これは、MSIインストーラー自体が失敗した場合でも、ファイルを実行できることを示します。この場合、次のアクションが実施されます。
- regsvr32.exeはmain_dllをインストールする
- wscript.exeはnotify_vbsを実行する
▲MSIファイルMatanBuchusの デジタル署名情報(Orcaツールでの表示)
ソースはINSTALLLOCATIONと定義されており、Directoryテーブルを調査した結果、それはLocalAppDataFolderであることが確認されました。
▲ディレクトリ情報(Orcaツールでの表示)
Fileテーブルによると、2つのファイルmain.dllとnotify.vbsがINSTALLLOCATIONディレクトリにドロップされることになります。CustomActionテーブルに示されているように、コマンドラインはこれらのファイルのそれぞれを実行し、フォーマットされたデータタイプ [#main_dll]および[#notify_vbs]を、実際のファイルパスに置き換えます。
▲ファイルのメタデータ情報(Orcaツールでの表示)
CostInitialize、FileCost、CostFinalizeの順にカスタムアクションを実行しないと、[#main_dll]と[#notify_vbs]は実際のファイルパスに置き換わらないため、カスタムアクションを実行する前にこれらのファイルをダンプする必要があります。また、CustomActionを実行する前に、ファイルをディレクトリにダンプする必要があります。したがって、InstallInitialize、InstallFiles、およびInstallFinalizeアクションの後に、これらのアクションを実行する必要があります。このため、RunApplicationQQQとRunApplicationNotifyVBSの両方がInstallExecuteSequenceの一番最後に配置されることになります。
▲InstallExecuteSequenceが一番最後に配置されるカスタムアクション(Orcaツールでの表示)
MSIファイルはCOM Structured Storageの構成要素であるため、OLE経由でファイルのデータストリームをダンプすることにより、同ファイルをさらに詳しく調査できます。初期分析のための出力は人間には解読できないものの、かなりの量のデータを含むいくつかのデータストリームを観測できます。
▲MSIファイルMatanbuchusのOLEストリーム
4つ目のデータストリームを調べると、それがASCII文字である「MSCF」で始まっていることから、このストリームはキャビネットアーカイブ(CAB)ファイルであることがわかります。
▲4つ目のOLEストリームデータ
このストリームをダンプしてアーカイブを開くと、main.dllおよびnotify.vbsというファイルがドロップされます。notify.vbsは、Adobe Acrobatに関連すると思われるエラーメッセージを含んでおり、これはユーザーを騙して「正規のAdobe Acrobatファイルが実行されなかった」と思わせようとするものです。
実際には、MSIファイルを実行するとこのメッセージがユーザーに表示されますが、MatanBuchusはバックグラウンドでregsvr32.exeを介してmain.dllを実行します。
▲notify.vbsの内容
▲notify.vbsが表示する偽のエラーメッセージ
main.dllは、ペイロードのロード、C2接続の作成、悪用されたシステムでのパーシステンスの確立を行うために、MatanBuchusにより使用されます。
▲Matanbuchusのアタックツリー(Cybereasonプラットフォームでの表示)
■ダイアグラム
▲MatanBuchus MSIの感染フロー
■Qbot
Qbot(Qakbot、Quakbot、Pinkslipbotとも呼ばれる)は、10年以上前から流通しているモジュール型トロイの木馬であり、その最も一般的なキャンペーンは、検知を逃れるためにOffice文書(特にExcel 4.0マクロ)に不正なマクロを添付するフィッシング攻撃から構成されています。
QbotのMSI亜種は2022年四月下旬に出回り始めましたが、これは偶然にもMicrosoftがVBAマクロの自動ブロック機能を実装することで、マクロを利用した悪意ある文書による攻撃を成功させることを難しくした時期と重なります。
■MSIの分析
ファイルのメタデータによると、このファイルはP.REGO, s.r.o.により署名され検証されています。
▲ファイル署名
Propertyテーブル内には、Visual Studioが利用する.NETコンポーネントであるVSDNET*プロパティへの参照が複数存在していました。
MSIは、コンポーネントの概念に基づいてインストールを整理することで知られており、それは基本的にアプリケーションやソフトウェアをインストールするものです。このマルウェアは、2つのコンポーネントを持つと見られています。
▲Componentテーブル(Orcaツールでの表示)
- C__FEAF4022223844D1906F79DF588CDB8A:このコンポーネントは、レジストリ、ODBCDataSource、またはFileテーブルへの主キーであるKeyPathに値_FEAF40223844D1906F79DF588CDB8Aを持ちます。KeyPathの値_FEAF40223844D1906F79DF588CDB8AはFile (1.dll) の主キーであるように思われます。これは同マルウェアが、インストール時にモジュール1.dllをドロップしようとしていることを示しています。
- C__653B5566E1394F029FA3A18ACFFE5CC8: C__FEAF4022223844D1906F79DF588CDB8Aとは異なり、このコンポーネントはKeyPath値を持ちません。KeyPath値がNULLの場合、デフォルトでDirectory_の値がKeyPath値として利用され、この場合それはTARGETDIRとなります。このコンポーネントはCreateFolder用であり、特定のコンポーネント用に明示的に作成する必要があるディレクトリへの参照を含んでいます。インストール時に作成されたあらゆるディレクトリは、空になった時点で削除されます。このコンポーネントは、TARGETDIRに設定されたディレクトリがインストール時およびインストール後に存在することを保証します。
▲File Table(Orcaツールでの表示)
▲CreateFolderテーブル(Orcaツールでの表示)
このMSIの振る舞いを理解するためには、カスタムアクションを調査する必要があります。CustomActionテーブルには4つのアクションが含まれていますが、このマルウェアのメインのアクションは_9BED75AC_30E3_4BB1_9F26_1A4F247F32EFとDIRCA_TARGETDIRです。
- _9BED75AC_30E3_4BB1_9F26_1A4F247F32EF:バイナリ_C212458FE5F810E2D8287472A14C2665をフェッチして実行します。
- DIRCA_TARGETDIR:ターゲットディレクトリ(TARGETDIR)をユーザープロファイル中のappdataディレクトリ(LocalAppDataFolder\ProductName)に設定します。
▲CustomActionテーブル
最初のアクション_9BED75AC_30E3_4BB1_9F26_1A4F247F32EFは、Binaryテーブル内にあるソース_C212458FE5F810E2D8287472A14C2665を参照します。
▲Binaryテーブル(Orcaツールでの表示)
カスタムアクション_9BED75AC_30E3_4BB1_9F26_1A4F247F32EFはType 3590を持っています。これはタイプと関連オプションの組合せを意味します。
- Type 6:Binaryテーブル内に格納されているVBScriptを意味します。
- Optional Term +3584:InstallFinalizeアクションが正常に終了した後のスケジュールされた実行を意味します。
カスタムアクション_C212458FE5F810E2D8287472A14C2665をさらに調査したところ、このVBScriptは、コンポーネントC__FEAF4022223844D1906F79DF588CDB8Aからregsvr32.exe経由でドロップしたモジュール(1.dll)を実行するように見えることが分かりました。
▲VBScript _C212458FE5F810E2D8287472A14C2665
2つ目のカスタムアクションであるDIRCA_TARGETDIRは、インストールディレクトリを、ユーザープロファイル中のAppDataディレクトリ(LocalAppDataFolder)の指定サブディレクトリ(ProductName)に設定します。この場合のProduct Nameは、Propertyテーブルで指定されたSetupTestという名前になっているため、その結果、DIRCA_TARGETDIRアクションはインストールディレクトリを「C:\Users
▲インストールされたファイルの出力フォルダパス
MSIを調べた結果、マルウェアはモジュール1.dllをユーザープロファイル中のappdataディレクトリのサブディレクトリsetuptestにドロップした後、Binaryテーブルに埋め込まれたVBScriptを呼び出して同モジュールを実行することが分かりました。
▲QBotのアタックツリー(Cybereasonプラットフォームでの表示)
■ダイアグラム
▲Qbot MSIの感染フロー
■比較表
本セクションで紹介した各マルウェアのMSIの振る舞いに見られる重要なポイントを下記にまとめました。
手法 | Magniber ランサムウェア |
MatanBuchus ローダー |
Qbot |
---|---|---|---|
インストールディレクトリをLocalAppDataFolderに設定する | ✓ | ✓ | ✓ |
インストールディレクトリにファイルをダンプする | ✓ | ✓ | |
カスタムアクション:指定されたコマンドラインから実行ファイルを実行する | ✓ | ||
カスタムアクション:Binaryテーブルに格納されたPE/スクリプトを実行する | ✓ | ✓ | |
インストールディレクトリにあるダンプされたファイルを実行する | ✓ | ✓ | |
偽のエラーメッセージを表示する | ✓ | ||
MSIの失敗にかかわらず悪意ある実行を継続する | ✓ | ✓ |
パープルチーム
このセクションでは、悪意あるMSIを特定するためのキーポイントと、防御者がMSIファイルを分析するのに役立つツールに焦点を当てます。このツールは、ブルーチームのセクションで既に活用されていたものです。
■疑わしい指標
疑わしいMSIファイルを特定できる悪意ある指標として、次の3つが挙げられます。
- ファイル情報と電子署名の不一致
- 被害者の判断を誤らせるエラー
- 不審なインストールパス
▲3つのチェックポイント
■ファイル情報と電子署名の不一致
MSIファイルは、よく知られたアプリケーションの正規のインストールソフトを装いますが、デジタル署名が発行元の作者と一致しないことがあります。
■Magniberランサムウェア
▲ファイル情報と電子署名の不一致
MatanBuchusローダー
▲ファイル情報と電子署名の不一致
MSIファイルの説明や発行元とデジタル署名の間に不一致が見られる場合、悪意あるファイルである可能性があり、よく知られたソフトウェアベンダーである場合、特にその可能性が高くなります。
■被害者の判断を誤らせるエラー
多くのマルウェアは、さまざま方法で被害者を騙すことが知られています。MSIを利用するマルウェアの場合、スクリプトを埋め込むことや、インストールをわざと失敗させることにより、偽のエラーメッセージを出力することが確認されています。このようなエラーメッセージを表示することで、インストーラーまたは環境が正しく設定されていないために、ソフトウェアのインストールが成功しなかったと、思い込ませることによって被害者を騙すことができます。偽のエラー出力は、悪意ある活動の指標となります。
▲表示されるエラーメッセージの例
■不審なインストールパス
多くの場合、MSIファイルの目的は、ソフトウェアをインストールし、関連するアプリケーションをディスク上にドロップすることです。しかし、インストール先のルートディレクトリがユーザープロファイル中のAppDataフォルダに設定されている場合、これは悪意ある振る舞いの兆候である可能性があります。正規のインストールでは、通常、C:\Program FilesまたはC:\Program Files(x86)に必要なファイルがドロップされます。
▲インストールディレクトリの設定
上の画像では、マルウェアはユーザープロファイル中のAppDataフォルダ(LocalAppDataFolder)のサブフォルダ(ProductName)に偽インストールファイルをドロップしています。
■MSIファイルの解析に利用できるツール
MSIファイルを解析するために、防御者が使用できるツールが複数存在しています。このセクションでは、それらのツールのいくつかを紹介し、その使用方法を説明します。
Msitools:Msitoolsは、MSIファイルを作成および検査するためのツールセットです。MSIファイルを検査する際、防御者が利用できる主要なツールは3つあります。これら3つのツールはコマンドラインベースであるため、自動化しやすく、マルウェア分析のパイプラインに簡単に組み込むことができます。
Msiinfo:Msiinfoは、MSIファイルに格納されているストリームやテーブルをリストアップしたり、抽出したりすることができるコマンドラインツールです。たとえば、アナリストがストリームコマンドラインオプションを実行することにより、関連するMSIファイル15f4cfd.msi(Qbot)を調査し、Binaryテーブルに格納されているバイナリを特定するとします。Binary._C212458FE5F810E2D8287472A14C2665を調査するために、アナリストはextractコマンドラインオプションを使用して、このバイナリストリームをダンプできます。
▲msiinfoによる出力ストリーム
Msidump:Msidumpも、MSIファイルに格納されている関連テーブルをidtテキストおよびストリームとしてダンプすることができるコマンドラインツールです。調査方法や使用方法は、msiinfoと似ています。
▲msidumpによる出力ストリーム
Msidiff:Msidiffは、2つのMSIファイルの差分を取ることで、それらを比較するコマンドラインツールです。msidiffを使うと、アナリストは2つの異なるインストーラーを比較し、その妥当性を確認できます。コマンドラインオプション「-l」を使用することによって、ダンプされる可能性のあるファイルをリストし、それらのファイルを比較できます。それによって、2つのインストーラーが同じファイルをインストールし、ダンプしているかどうかを確認することができます。
▲msidiffによるファイルのリスト(QBotのサンプルを使用)
Oledump.py:Oledump.pyはDidier Stevensによって作成されたPythonスクリプトであり、主にOLEドキュメントを分析するために利用されます。OLEドキュメントはCOM Structured Storageであるため、このPythonスクリプトを使うことでアナリストはMSIファイルを分析することも可能です。
▲Oledump.pyによる15f4cfd.msiからのストリームの表示
各行は次の3つの列から構成されています。
- ストリーム番号
- ストリームのサイズ
- ストリーム名
MSIファイルをoledump.pyで利用する場合、多くのケースで、ストリーム名は人間には理解できないものになります。
▲Oledump.pyでストリーム4の詳細を表示
“-s”オプションでストリーム番号を指定すると、oledump.pyはそのストリームの内容をダンプします。上の画像では、ストリーム4には、CABファイルのヘッダであるファイルヘッダ「MSCF」が含まれています。
ORCA:ORCAはGUIベースのWindows SDKコンポーネントであり、これを使用することでMSIデータベースのテーブルを編集や表示できます。防御者は、問題のMSIファイルを開き、各テーブルに移動して調査できます。GUIは視覚的にわかりやすいので、調査のプロセスがよりシンプルになります。
▲OrcaによるCustomActionテーブルの表示
Cybereason GSOC MDRによる推奨対策
これらの悪意あるMSI攻撃を検知し対応するために、Cybereason GSOCでは次のような措置を実施することを推奨しています。
- Cybereason NGAVのシグネチャモードとAI(人工知能)モードの両方を有効にし、これらの機能のDetectモードとPreventモードを有効にすること。
- 電子メールの読み取りやWebブラウジングなどから入手した、外部ソースのファイルを取り扱う際には十分注意すること。
- Cybereasonを使って脅威ハンティングを実施すること。Cybereason MDRチームは、特定の脅威を検知するためのカスタムハンティングクエリをお客様に提供しています。Cybereason Defense Platformを使った脅威ハンティングとMDR(Managed Detection and Response)の詳細については、こちらからお問い合わせください。
著者について
Kotaro Ogino(主席セキュリティアナリスト、Cybereason Global SOC)
Cybereason SOC チームの主席セキュリティアナリスト。脅威ハンティング、SOAR(Security Orchestration, Automation, and Response)システムの管理、XDR(Extended Detection and Response)の管理に従事。情報科学の理学士号取得。
Ralph Villanueva(シニアセキュリティアナリスト、Cybereason Global SOC)
Cybereason Global SOCチームのセキュリティアナリスト。サイバースペースにおける新たな脅威の発見・対策に取り組んでいる。マルウェアのリバースエンジニアリング、デジタルフォレンジック、APTの研究などに興味を持つ。フロリダ国際大学ネットワークセキュリティ修士課程修了。
Robin Plumer(セキュリティアナリスト、Cybereason Global SOC)
Cybereason Global SOCチームのセキュリティアナリスト。マルウェア攻撃の分析とトリアージに取り組んでいるほか、新たな脅威の研究に従事。英国ボーンマス大学サイバーセキュリティマネジメント学士号取得。
【ホワイトペーパー】有事を見据えたセキュリティ運用とは?〜攻撃事例から学ぶサイバー脅威対策〜
サイバー攻撃は進化を止めず、その被害は組織の存続さえ揺るがす時代。
昨今、特に注意しなければならないのが、サプライチェーン攻撃の新たな手法です。標的となる組織のセキュリティが堅固となってきたため、セキュリティが手薄な別の組織を踏み台にして標的組織を攻撃するというように、サプライチェーン攻撃はますます巧妙化しています。
このガイドは、重大なセキュリティインシデントに直面した時、慌てず騒がず対応するために。
セキュリティ担当者はもちろん、経営課題として平時から取り組むべきサイバー脅威対策について、最新の攻撃事情とともに紹介します。
https://www.cybereason.co.jp/product-documents/brochure/6938/