本ブログは、英語版ブログ「https://www.proofpoint.com/us/threat-insight/post/new-modular-downloaders-fingerprint-systems-prepare-more-part-1-marap」の翻訳です。
概要
Proofpointの研究者は最近、主に金融機関を狙った大規模な(数百万通のメッセージ)攻撃で、新しいダウンローダーマルウェアが使われたことを発見しました。「Marap」(paramを逆から読んだもの)と名付けられたこのマルウェアは、モジュールとペイロードをダウンロードする機能などの特化した機能が注目に値します。モジュール構造のため、攻撃者は新しい機能を追加することができ、それをマルウェアに含めたり、感染後にダウンロードしたりできます。これまでに、単純な偵察目的のためにシステムのフィンガープリントを収集する機能を確認しました。
攻撃の分析
2018年8月10日に、私たちがテストしているのと同じMarapマルウェアペイロードに誘導するいくつかの大規模なメール攻撃(数百万通のメッセージ)を観測しました。これらの攻撃は、過去にTA505[1]によって行われた攻撃と多くの点で共通点があります。メールには様々なタイプのファイルが添付されていました:
- Microsoft ExcelのWeb Query(.iqy)ファイル
- .iqyファイルを含み、パスワード保護されたZIPアーカイブ
- .iqyファイルを埋め込んだPDFドキュメント
- マクロを含んだMicrosoft Wordドキュメント
攻撃の概要は以下の通りです:
「sales」「.iqy」アタッチメント攻撃:件名が「REQUEST [REF:ABCDXYZ]」([]内はランダムな文字列)という「sales@[random address]」からのメールで、「REP_10.08.iqy」(攻撃日)というファイルが添付されています。
図1:「.iqy」ファイルを添付した「Sales」からのメールの例
「Major bank」「.iqy」アタッチメント攻撃:「IMPORTANT Documents - [Major Bank]」という件名の「"[recipient name]" <random_name@[major bank].com>」からのメッセージを装い、「Request 1234_10082018.iqy」(ランダムな数値と攻撃日)が添付されています。米有名銀行の名前とブランドを不正使用していますが、サンプルにはモザイクをかけています。
図2:「.iqy」ファイルを添付した「Major bank」メールの例;銀行名にはモザイクをかけています
PDFアタッチメント攻撃:件名に「DOC_1234567890_10082018」(ランダムな数値と攻撃日;他に「PDF」「PDFFILE」「SCN」など)とある「"Joan Doe" <netadmin@[random domain]>」(ランダムなディスプレイネーム)からのメールで、件名と同じ「DOC_1234567890_10082018.pdf」(.iqyファイルが埋め込まれています)というファイルが添付されています。
図3:.iqyファイルを埋め込んだPDFファイルを添付したメッセージの例
パスワード付きZIPファイル攻撃:「"John" <John@[random company]>」(ランダムな名前)からの「Emailing: PIC12345」(ランダムな数値)という件名のメッセージで、件名と同じ「PIC12345.zip」というファイルが添付されています。
図4:.iqyファイルを含むパスワード付きZIPファイルが添付されたメッセージの例
Microsoft Wordアタッチメント攻撃:「"Joan" <Joan@[random domain]>」(ランダムな名前)からのメッセージを装い、「Invoice for 12345.10/08/2018」(ランダムな数値と今日の日付)という件名で、「Invoice_ 12345.10_08_2018.doc」というファイルが添付されています。
図5:悪意のあるマクロを含むMicrosoft Wordファイルを添付したメッセージの例(メッセージ本文に「PDF format」との間違った記載がある)
マルウェアの解析
前述したように、Marapは新しいダウンローダーで、それが使うCommand & Control(C&C)サーバーへのコールバックパラメータである「param」のスペルを逆に並べたものが名前になっています。このマルウェアはCで書かれており、解析を逃れようとする興味深い機能をいくつか備えています。
解析逃れの機能
Windows APIの関数呼び出しはほとんどの場合、実行時にハッシュアルゴリズムを使用して処理されます。マルウェアがAPIハッシングを悪用し、アナリストや自動検知ツールにマルウェアの目的を簡単に判断できなくさせることがよくありますが、このアルゴリズムはMarap専用と思われます。私たちが使ったPythonでのハッシュアルゴリズムの実装はGithub[2] でご覧頂けます。私たちのコードで使われているXOR鍵は、他のサンプルでは異なっている可能性があります。
2番目の解析逃れの手法は、重要な機能の開始時にタイミングチェックを使用する方法です(図6)。これらのチェックは、マルウェアのデバッグやサンドボックス化を妨げる可能性があります。計算されたスリープ時間が短すぎる場合、マルウェアは終了します。
図6:解析逃れのためのタイミングチェック
マルウェア内の文字列は、以下の3つの方法のいずれかを使って難読化されています:
- スタック上に作成(Stack Strings)
- 基本的なXORエンコーディング(サンプルでは0xCEが使われていますが、サンプル毎に異なる可能性があります)
- 少し複雑なXORエンコーディング(復号化のためのIDA ProスクリプトをGithub[3]で公開しています)
最後の手法は、システムのMACアドレスを仮想マシンベンダーのリストと照合することです。仮想マシンが検知され、コンフィグレーションフラグがセットされている場合、マルウェアは終了します。
コンフィグレーション
Marapのコンフィグレーション情報は、マルウェアのバイナリに暗号化されて埋め込まれるか、マルウェアのワーキングディレクトリにある「Sign.bin」というファイル(たとえばC:\Users\[username]\AppData\
Roaming\Intel\Sign.bin)に保存されています。これはCBCモードのDESで暗号化されており、IVは「\x00\x00\x00\x00\x00\x00\x00\x00」です。鍵は以下のプロセスで生成されます:
- 線形合同法(LCG)と2つのハードコードされたシード(シードはサンプル毎に違う可能性があります)を使って164バイトのデータを生成します。PythonによるLCGの実装をGithubに上げてあります。[4]
- SHA1を使ってデータをハッシュします
- CryptDeriveKeyとハッシュを使って8バイトのDES鍵を生成します
復号化されたコンフィグレーション情報の例は以下の様なものです:
15|1|hxxp://185.68.93[.]18/dot.php|hxxp://94.103.81[.]71/dot.php|hxxp://89.223.92[.]202/dot.php
「|」で区切られており、以下のコンフィグレーションパラメータを含んでいます:
- C&Cとの通信におけるスリープ時間
- マルウェアが仮想マシンで動作していることを自身で検知した際に動作を停止するかどうかを設定したフラグ
- 最大3つまでのC&C URL
コマンド&コントロール
MarapはC&C通信にHTTPを使用していますが、最初にプロキシを使用する必要があるかどうか、使用する場合はどのようなプロキシを使用するかを判断するために、正規のWinHTTP関数を何回か実行します。下の図7にC&Cビーコンの例を示します。
図7:C&Cビーコンの例
このリクエストに「param」というパラメータが含まれており、コンフィグレーション情報と同じ手法で暗号化されており、base64エンコードも加えています。平文のリクエストの例は、以下の様なものです:
62061c6bcdec4fba|0|0
「|」で区切られており、以下を含んでいます:
- ボットID(ホスト名、ユーザー名、MACアドレスを上記のAPIハッシングと同じアルゴリズムでハッシュしたもの)
- ハードコードされた「0」
- ハードコードされた「0」
レスポンスもまた暗号化されており、復号化した例は以下の様になります:
319&1&0&hxxp://89.223.92[.]202/mo.enc
「&」で区切られており、以下を含んでいます:
- コマンドID
- コマンド
- レスポンスタイプを制御するフラグ
- コマンド引数(2つの引数を「#」で区切って使用可能)
特定されたコマンド
- 0: スリープしてもう一度ビーコン
- 1: URLをダウンロード、DESで暗号化、マニュアルでMZファイルをロード(バッファをアロケート、PEヘッダとセクションをコピー、再アロケート、インポートテーブルを解決)
- C&Cへデータを転送可能
- 2: コンフィグレーションをアップデートし、「Sign.bin」にDES暗号化したバージョンを書込み
- 3: URLをダウンロード、DESで暗号化、「%TEMP%/evt」にMZファイルを保存してコマンドライン引数と共に実行
- 4: URLをダウンロード、DESで暗号化、プロセス(マルウェアと同じ実行ファイル)を生成して空洞にし、ダウンロードしたMZファイルを注入
- 5: URLをダウンロード、DESで暗号化、「%TEMP%/zvt」にMZファイルを保存してLoadLibrary APIによってロード
- 6: URLをダウンロード、DESで暗号化、マニュアルでMZファイルをロード
- 7: 自身を削除して停止
- 8: 自身をアップデート
コマンド実行後、C&Cにレスポンスメッセージを送信可能。「|」で区切られ、以下を含みます:
- ボットID
- ハードコードされた「1」
- コマンドID
- コマンド
- レスポンスタイプを制御するフラグ
- コマンド戻り値
- コマンドステータスコード(様々なエラーコード)
- レスポンスデータ
- シンプルなステータスメッセージ
- または複数のモジュールからの「#」で区切られた長いデータ
システムフィンガープリンティングモジュール
ブログ執筆時点で観測されているのは、C&Cサーバーから送信されたシステムフィンガープリンティングモジュールです。それは「hxxp://89.223.92[.]202/mo.enc」からダウンロードされ、「mod_Init.dll」という内部名を含んでいました。モジュールはCで書かれたDLLであり、以下のシステム情報を収集してC&Cサーバーに送信します。
ユーザー名
ドメイン名
ホスト名
IPアドレス
言語
国
Windowsのバージョン
Microsoft Outlook の.ostファイルのリスト
検知されたアンチウイルスソフトウェア
結論
コモディティ型のマルウェアを検知するための技術が進化したため、脅威アクターやマルウェアの作成者は、攻撃の効率を高めマルウェアの痕跡と固有の「ノイズ」を減らすための新しいアプローチを模索し続けています。今年はランサムウェアの配布が激減し、トロイの木馬、ダウンローダー、その他のマルウェアがその空隙を埋めており、脅威アクターがデバイスやネットワークに永続的に関与する傾向が強くなっています。
この新しいダウンローダーと直接の関係は無いものの、類似したマルウェアも発見されています。(次回のブログで解説します)これらの小型で多様なマルウェアは増加する傾向にあり、将来の攻撃の基礎となり攻撃対象のシステムを特定する柔軟性をアクターに与えることで、より深刻な侵害を引き起こします。
リファレンス
[1] https://www.proofpoint.com/us/threat-insight/post/ta505-shifts-times
[2] https://github.com/tildedennis/malware/blob/master/marap/func_hashes.py
[3] https://github.com/tildedennis/malware/blob/master/marap/str_decrypt3.py
[4] https://github.com/tildedennis/malware/blob/master/marap/lcg.py
Indicators of Compromise (IOCs)
ET and ETPRO Suricata/Snort Signatures
2832142 || ETPRO TROJAN Win32/Marap CnC Beacon
2832143 || ETPRO TROJAN Win32/Marap CnC Beacon Response