掲載日:2021/03/05

Hancitor 感染チェーン分析:そのアンパッキング手順と実行テクニックの検討

※ 本ブログは、2021年2月26日にBromium BlogポストされたHancitor Infection Chain Analysis: An Examination of its Unpacking Routine and Execution Techniquesの日本語訳です。

 

この記事では、2021年1月と2月に観測されたHancitorの感染チェーンに基づいて、どのようにシステムを侵害しているかを説明します。Hancitor のアンパッキング手順、情報の収集、コマンド&コントロール(C2)機能、ペイロード実行テクニックについて解説します。

 

マルウェア Hancitor 

Hancitor (別名 Chanitor) は、被害者のコンピュータへの最初のアクセスを得るために使用されるダウンローダーです。その主な目的は、マルウェア自体に含まれる複数の暗号化されたURLのうちの1つから第2段階のマルウェアペイロードをダウンロードして実行することです。このダウンローダーは、2014年に初めて確認され、一般的に PonyVawtrak マルウェアを展開していました。他の多くのマルウェアファミリーと同様に、Hancitor は2021年初頭に再び活発になっていることがわかりました。2021年の最初の Hancitor のスパムの波は1月12日に始まり、マルウェアは電子メールのWordドキュメント添付ファイルとして配布されました。それ以来、ほぼ毎日のように Hancitor の活動が確認されています。

 

Hancitor が使用するWordドロッパー

1月12日(火)、Wordドキュメントへのハイパーリンクを含むフィッシングメールがユーザーのインボックスに到達しました。そのWordドキュメントは、Hancitor のダウンローダーをインストールして実行するドロッパーでした。開くと、ユーザーはソーシャルエンジニアリングの画像を見て、文書の内容を見るには"Enable Editing"(”編集を有効にする”)ボタンをクリックする必要があることを伝えています。

VBAマクロの実行をユーザに要求するWordドキュメントのルアー 図1 - VBAマクロの実行をユーザに要求するWordドキュメントのルアー

 

oledumpを使用して添付ファイルを分析すると、VBAマクロだけでなく、OLE(Object Linking and Embedding)オブジェクトも文書に埋め込まれていることがわかります。OLEオブジェクトがどのように使われているのか、マルウェア感染がどのようにして起こるのかを調べるために、Word開発者ツールを使ってVBAマクロを解析しました。

 Wordドキュメント内のVBAマクロを示すledumpからの出力 図2 - Wordドキュメント内のVBAマクロを示すledumpからの出力

 

VBAコードは、ドキュメント内のいくつかの異なるモジュールに分散され、Document.Openイベントによって実行されます。OLEオブジェクトは、".tmp "というファイル拡張子で、"C:\Users[username]\AppData\Local\Temp "の下にあるローカル tempフォルダの一つに保存されます。VBAコードはファイルがどこに保存されたかを知らないので、すべてのローカルTempフォルダを再帰的に検索します。

tmpファイルをDLLとしてtemplatesフォルダに移動するVBAマクロ 図3 - tmpファイルをDLLとしてtemplatesフォルダに移動するVBAマクロ

 

".tmp" ファイルが見つかったら、"W0rd.dll" としてOffice templatesフォルダ(C:Illustrator\usernameApp\Data\RoamingMicrosoft\Templates)に移動して名前を変更し、rundll32.exeを使用してロードします。マクロは、第2引数として、エントリー関数 "DllUnregisterServer" をrundll32.exeに渡し、正しく実行が開始されるようにしています。

マルウェアをロードするためにrundll32.exeを実行するVBAマクロ 図4 - マルウェアをロードするためにrundll32.exeを実行するVBAマクロ

 

 

パックされたDLLの分析

DLLの特徴を簡単に見てみると、2つの未知のセクションがあり、マルウェアを難読化するためにパッキングされていることを示す痕跡があります。デバッガでDLLを開いてプログラムを実行し、疑わしい部分に何が起こっているのかに焦点を当ててみると、実際に何かしらのアンパックが行われていることが確認できます。

PE ファイル ("W0rd.dll" ) のセクション 図 5 - PE ファイル ("W0rd.dll" ) のセクション

 

アンパックは複数の段階で行われますが、大きく分けて2つの段階に分けて説明することができます。

 

復号化ステージ1

まず、マルウェアは新しいメモリを確保して、セクション ".rdata4" のデータをコピーします。しかしながら、0x21を含むバイトが省略されているため、セクションから新しいメモリ領域へのデータのコピーは同一ではありません。コピー動作が終了するとすぐに復号処理が開始されます。新たに割り当てられたメモリの先頭の4バイトは、復号化されるデータ長を示します。データを復号化するアルゴリズムは単純です。XOR 演算を使用し、キーと平文は 4 バイトごとにインクリメントされます。まず、キーは 0xD508 で初期化されます。Python で書かれたこのアルゴリズムの複製が GitHub のリポジトリにあります。

暗号化されたマルウェアを含むセクションのデータビュー 図6 - 暗号化されたマルウェアを含むセクションのデータビュー

 

復号化されたデータとプログラムの動作を見てみると、異なる種類の情報を含む領域が複数存在することがわかります。Windows API の関数名は、最初の 150 バイトに格納されています。この後の領域には暗号化されたデータが格納されています。最後に、暗号化されたデータを復号化するために使用される実行コードが、この領域の最後に配置されています。図7にメモリーセクションの構造を示します。

暗号化されたセクションの構造 図7 - 暗号化されたセクションの構造

 

メモリセクションの先頭にあるAPI関数は、GetProcAddressを使って解決されます。しかし、それらは kernel32.dll 内で解決されるのではなく、kernelbase.dll 内で解決されます。これは Hancitor サンプルをデバッグする場合、ブレークポイントは kernel32.dll からの関数に設定されるのが一般的であり、実行中にトリガーされることはないため、注意が必要です。関数を解決した後、第二の復号化ステージが発生します。

 

復号化ステージ2

図のように、復号化されたメモリ構造には実行可能なコードが含まれています。予想通り、命令ポインタは第2ステージの復号化アルゴリズムが含まれているこのセクションに直接ジャンプします。復号化が開始される前に新しいメモリが割り当てられ、ステージ1からの暗号化データがそこにコピーされます。第2ステージの復号化アルゴリズムは通常同じですが、初期化キーとして 0x3E9 を使用します。この復号の出力がPEファイルになります。

Hancitorの復号化手順の概要 図8-Hancitorの復号化手順の概要

 

コピー手順はセクションごとに行われ、実行ファイルをロードされた形式にします。このテクニックは、セルフインジェクションまたは PE 上書きと呼ばれています。新しいイメージを実行可能な状態にするために、いくつかのWindows API関数がGetProcAddressを使って解決され、ロードされた実行ファイルのメモリに直接パッチが当てられます。これらの関数のアドレスはインストールごとに異なるため、静的なアンパッカーではこのパッチ適用はできません。他のすべての復号化手順については、GitHub リポジトリに静的アンパッカースクリプトがあります。新しいペイロードを効果的に実行するために、正しい DLL エントリポイントへの復帰が行われます。オプションヘッダの AddressOfEntryPoint がエクスポートされた関数 DllRegisterServer または DllUnregisterServer と一致しないため、マルウェアを起動するにはエクスポートされた関数のいずれかを実行する必要があることに注意してください。x32dbgを使用してサンプルを解析する場合、AddressOfEntryPointをエクスポートされた関数のいずれかにパッチを当てるとDLLが実行可能になります。

 

Hancitorマルウェアの実行

アンパックされた実行ファイルが実行されるとすぐに、マルウェアは感染したシステムに関する情報を収集します。次の逆アセンブリは、情報を収集するために使用される複数の関数への呼び出しを示しています。

Hancitorの情報収集関数のx86逆アセンブリ 図9 - Hancitorの情報収集関数のx86逆アセンブリ

 

まず、マルウェアは "getComputerInfo" と我々が名付けた関数を呼び出します。この関数は、ユーザー名、コンピュータ名、感染したシステムのドメインを取得します。後続の関数では、マシンのパブリックIPアドレス、ドメインの信頼情報、コンピュータのアーキテクチャなどの追加情報を収集します。マルウェアは、無料のパブリックIPアドレスAPIである"hxxp://api.ipify[.]org" にHTTP GETリクエストを行うことで、コンピュータのパブリックIPアドレスを特定します。収集されたすべての情報は、コンピュータアーキテクチャに基づいて生成されるクエリ文字列にまとめられます。

 

C2 に送信される前のシステム情報を含むクエリ文字列 図 10 - C2 に送信される前のシステム情報を含むクエリ文字列

 

データの送信先として待機しているコマンド & コントロール(C2)サーバーを特定するために、マルウェアはRC4アルゴリズムを使用する復号化関数を呼び出し、C2のURL候補のリストを取得します。

URLとビルド復号化関数 図 11- URLとビルド復号化関数

 

C2 URL の復号化に成功すると、構築されたクエリ文字列をデータとして追加した HTTP POST リクエストを利用して、データが送信されます。アクティブなサーバに到達する確率を高めるために、マルウェアは復号化されたすべての C2 URL を繰り返し処理し、そのうちの 1 つがレスポンスを送信するまで、すべてのサーバに到達しようとします。

C2通信関数 図 12 - C2通信関数

 

受信したデータに基づいて、C2 サーバはアクティブなマルウェア・ダウンロード・サーバに復号化可能な単純文字列、または単純文字列の形をしたゴミデータのいずれかで応答すると仮定します。C2 レスポンスの復号化アルゴリズムは非常に複雑に見えますが、実際にはBase64復号化され、その後にキー0x7Aを使用したXOR演算が行われます。復号化の後に有効なURLにつながると、マルウェアはダウンロードを開始し実行ファイルを提供します。バイナリを実行するために、Hancitorは以下のテクニックのいずれかを使用します。

 

  • プロセス生成
  • スレッド生成
  • プロセスハロウイング
  • スレッド実行ハイジャッキング

 

プロセス生成

「プロセス生成」を選択した場合、マルウェアは取得した実行ファイルをディスク上のテンポラリフォルダに書き込み、エントリ関数の引数に "start" を指定してrundll32.exeを利用して実行します。

 

スレッド生成

スレッド生成は、プロセス生成と同じように簡単です。マルウェアはメモリを確保し、そこにマルウェアを書き込み、そこから新しいスレッドを生成するだけです。

 

プロセスハロウイング

プロセスハロウイングを使う場合には、サスペンド状態で新しい svchost.exe プロセスが作成されます。その後、マルウェアは新しく作成されたプロセスに新しいメモリを確保し、そこに実行ファイルを書き込み、新しいスレッドで実行します。

プロセス生成関数 図 13 - プロセス生成関数

 

 

スレッド実行ハイジャッキング

Hancitorがサポートする最後の方法は、スレッド実行ハイジャッキングです。この方法は、上述のプロセスインジェクションとほとんど同じです。唯一の違いは、マルウェアがスレッドコンテキストをダウンロードした実行ファイルに置き換え、その後再開することです。

 

結論

この記事は2021年2月時点でのHancitorの能力や行動の概要を提供しました。

 

侵害の痕跡(IOC)

IOCのリストはHP Threat Research GitHubのリポジトリにもあります。

 

HancitorのWordドキュメント:

 

111a2dc96e082b86a79dd90ec307c977a21c7aee0ddb141d688a17bd65f3661d
40c3eb22a02601cf70a4ae08eeaa5805144386bc13882e5f110c133b1d0ede8e
678da85cecff2cdda8559281dfc8a89f87c44c6371cbda4de4bc9ea5cd2f5cf9
772c897ffdfb824b31d70ea360224714ab9bb83659bd431897cc74dd2defc2f3
080bade36015dd79925bab0975ac0f30f18424bdd1e7836d63c2dee350bdbd69
22043734ed3f774db7a88297286f6ecd56336d755cc19f1bd54f2a2ac58982cd
2ac3b573d70c40c5c0fafe4e5914c723f2322a1c9cd76d232447654604ff8b76
385425e94ed8ac21d7888550743b7a2b89afbeb51341713adb6da89cd63b5aff
3ffe9ef810d01e9f242558ba59e8c7483adb72e087132cb0fd1e55171c45690f
51dd023b55be138ac7cfe7379a55c0a2a46c01cd3b3f96a151b0a27ed9e12485
56f1795abf78f798a51b9224a5deb17aedd924629136832b526c93339f525e56
6cd76e8f33a945b51d20b909495bbc613f78151dbea6c3a7a3a235bfd2167cdf
7b013a271432cc9dea449ea9fcf727ed3caf7ce4cc6a9ba014b3dd880b5668dd
8bcf45c2de07f322b8efb959e3cef38fb9983fdb8b932c527321fd3db5e444c8
99b98b8c7033456ba7840ad99c65347a8026aee62bccbbac6d22ca4b0f5dfa1e
a1ec1a483f549af7e6f26ffe8b2c2ef6ac8c8f0d99349350c1df5eaa327f1ed3
b1502cdbb5aeee57d0a5d38945c64855ba35c25d43a71bd72c3cf31665e5aa62
cab2a47456a2c51504a79ff24116a4db3800b099ec50d0ebea20c2c77739276d
d6755718c70e20345c85d18c5411b67c99da5b2f8740d63221038c1d35ccc0b8
ed3fa9e193f75e97c02c48f5c7377ff7a76b827082fdbfb9d6803e1f7bd633ca

 

抽出されたOLEオブジェクト(DLL):

 

Ce2449b7f600b0317614419159e9364e1a76613ac0cb112c88be171638573049
0941090d3eb785dbf88fbfafffad34c4ab42877b279129616a455347883e5738
6caccc64a9db7cfce75076ad273d85d108f5b764fcbbb865fd27c91f86cccfad
c5385df4db1e69b06cf36f4481365d1101679a5764d721e369ea1d5d4c4b6b2c
288fdf9c64da0251107df7f1c3283f328279ad581710a9cf71f67e53b0b1684d
c3e06473c4c3d801c962e6c90ccbcab3d532fb5a6649077ea09cd989edf45eaf
cdcd5ee8b80d3a3863e0c55d4af5384522144011b071d00c9c71ae009305f130
43690eaf47245d69f4bda877c562852e4a9715955c2160345cb6cc84b18ca907
00b2312dd63960434d09962ad3e3e7203374421b687658bd3c02f194b172bfe3
372da9447db4ca966a6a9fd45f12519637a562953a88b6d92fb26d3699c14799
878319795a84ebfe5122d6fc21d27b4b94b3c28ad66679f841dec28ccc05e801
82c9bc479ea92c1900422666792877e00256996ce2f931984115598ed2c26f23
edabef17fce2aaca61dbd17a57baf780cd82a2b0189b0cf3c5a7a3ca07e94a44

 

アンパックされたHancitor(パッチ関数アドレスなし):

 

1c55c9e30e3e2a4837afd80e6fc75518494af379835f4b2a7f0eaf815d697951
419fda1fec9e44d7988ceeb9c5742a09198e6fa7f213c23b7c064e56cbd50b40

 

C2 URL:

 

hxxp://requirend[.]com/8/forum.php
hxxp://spabyasiande[.]ru/8/forum.php
hxxp://conlymorect[.]ru/8/forum.php
hxxp://fruciand[.]com/8/forum.php
hxxp://forticheire[.]ru/8/forum.php
hxxp://nentrivend[.]ru/8/forum.php
hxxp://cloolyepervir[.]com/8/forum.php
hxxp://areentthrices[.]ru/8/forum.php
hxxp://syleclisizame[.]ru/8/forum.php

 

Build ID:

 

1301_dsf7823
1101_jh372
2001_6tc3ers

 

マルウェア・ダウンロードURL:

 

hxxp://anabolicsteroidsbuy[.]info/nedfr.exe

関連記事