【ヒープメモリ解析】超簡単! 難読化されたマルウェアからC2サーバーを特定してみる

# はじめに
マルウェア解析において、マルウェアのコマンド＆コントロール（C2）サーバーを特定することは、感染拡大を食い止める重要なステップです。しかし、C2サーバーの特定が複雑で高度な技術を必要とすると思われがちです。実際には、いくつかの解析ツールを活用することで、比較的簡単にC2サーバーを特定できるケースもあります。本記事では、実際の解析例を基に、C2サーバーを特定する流れをステップごとに説明します。

:::note warn
マルウェア解析は専門的な技術を必要とする作業であり、適切な環境でのみ行うことを推奨します。誤った手法で解析を試みると、システムやデータに深刻な影響を及ぼす可能性があります。十分な準備と専門的なアドバイスを得た上で、マルウェア解析を行うことをお勧めします。
:::

# 今回の解析で行うこと

- Detect it Easyを用いた実行ファイルのパッカー解析
- Garbagemanを用いたヒープメモリ解析による文字列抽出
- VirusTotalを用いたIPアドレス分析
- CensysとShodanを用いたピボット分析

今回の解析で重要なポイントは、ヒープメモリの解析を通じて文字列を抽出することです。
また、最終的な目標は、短時間でマルウェアの通信先を特定し、その通信先に関連するサーバーを突き止めていきます。
# 解析するマルウェア
今回解析に用いるマルウェアはRedline Stealerというサイバー犯罪者向けに販売されているSaaS型マルウェアです。主に機密情報を盗むために設計されています。

ちなみに解析に用いるマルウェアは[MalwareBazaar](https://bazaar.abuse.ch/browse/)というマルウェアのサンプルを収集、共有、分析するためのオンラインプラットフォームからダウンロードしています。

:::note alert
**【超超重要!!】今回解析するマルウェアは、実際に犯罪で使用されているものです。そのため、ダウンロードや実行を行う際は、必ずサンドボックス環境内で作業してください。また、この作業を行うことで発生したいかなる損害や問題についても、すべて自己責任で対処してください。** 
:::

:::note
私の環境では[FLARE-VM](https://github.com/mandiant/flare-vm
)を構築してます。
:::

それでは、早速やっていきましょう！！
# Detect it Easyによるパッカー解析
パッカー解析では、[Detect it Easy(DIE)](https://github.com/horsicq/Detect-It-Easy
)というツールを用いて実行ファイルの構造を調査し、使用されているパッカーを特定します。多くのマルウエアはパッカーを使用しているのが一般的です。
パッカーにはさまざまな商用ツールが存在し、代表的なものとして UPX、.NET Reactor、VMProtect などが挙げられます。

:::note
Pack・Packerとは、実行可能ファイル（主にEXEやDLLファイル）を圧縮、暗号化、または変形することでその内容を隠したり、サイズを小さくしたりするツールや技術を指します。
:::

DIEを実行したら、マルウェアの実行ファイルをドラッグアンドドロップしましょう。

![1コピー.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3827354/159c83dd-2f85-58a8-4d1d-540ffd3818e5.png)

上記のように実行可能ファイルの詳細が出力されます。
下部のスキャン結果に「プロテクタ: Confuser」と表示されています。Confuser とは、.NET アプリケーション向けのオープンソース難読化ツールです。この結果から、実行可能ファイルが .NET ベース で難読化されていることがわかります。

ここまでがパッカー解析です。次はヒープメモリ解析に移ります。

っと...その前に
## 補足
マルウェアの中には、独自のパック技術を使用しているものもあり、その場合、上記の方法では解析が難しいことがあります。
そこで、「Detect it Easy」のエントロピーグラフ機能を活用してみましょう。

![1コピー.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3827354/3a9702d2-2de4-9b6c-388c-4333e34ecd6c.png)

赤枠で囲まれている「エントロピー」を選択します。
パックされた実行ファイルには通常、エントロピーが異常に高い領域が含まれています。


![2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3827354/a776673e-d13e-bd31-a353-e8fc8b19b160.png)


上記のグラフでは、エントロピーが高い領域が確認できます。一般に、難読化ではデータを解読困難にするため、ランダムなバイト列に変換する処理が行われます。この過程でデータの規則性が失われ、結果としてエントロピーが高くなるのです。そのため、エントロピーの高い領域は、データがパッキングされている、または難読化されている可能性を示唆しているといえます。

:::note info
情報学におけるエントロピーとは平均情報量とも呼ばれており、情報の乱雑さや不確実さを表している量のことです。
:::

# Garbagemanによるヒープメモリ解析
ヒープメモリ解析では、プログラムの実行中に使用されるヒープ領域（メモリの一部）を解析し、C2サーバーに使用されているIPアドレスを抽出していきます。

:::note
ヒープ領域には、プログラム実行中に動的に割り当てられたデータやオブジェクトが格納されています。
:::

:::note info
C2サーバーとは、攻撃者が管理者権限を奪取した被害者の端末を管理するために用意したサーバーです。
:::

そこで使用されるのが[GarbageMan](https://github.com/WithSecureLabs/GarbageMan)というツールです。
GarbageManとは、マルウェア解析において主に .NET アプリケーションの難読化解除やデコンパイル支援を行うツールです。特に、難読化によって挿入された不要なコードやダミーデータを削除し、解析を容易にする非常に優れたツールです。
さらに、psnotify と呼ばれるコマンドラインツールを備えており、マルウェアのアンチダンピング技術にも対応しているため、複雑な難読化にも対応可能です。

:::note warn
この先の作業ではマルウェアを動作させる必要があります。そのため、実行する際は **必ずサンドボックス環境内で行ってください。** 安全な環境で解析を進めることで、感染や予期しない影響を防ぐことができます。
:::

![4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3827354/54cc988a-fe7d-a107-0ff2-890507478529.png)

GarbageManを実行したら、画面左上にある「File」から「New」→「Excute」を選択します。

![5.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3827354/3aee101c-9a91-5904-7431-59c5d06a6ea3.png)

すると、設定画面が表示されます。まず、「Executable」には解析に用いるマルウェアのパスを指定します。次に、「Delay」、「Snapshots」、「Interval」を指定します。

一般的には、間隔を 1000ミリ秒（1秒） に設定し、スナップショット数を3に設定するのが適切です。この設定により、500ミリ秒待機し、その後、1秒ごとに復号化された全てのデータを1回記録する動作を３回繰り返します。

上記の画像のように設定できたら「Start」を選択します。

![6.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3827354/e064c9d4-5859-63b2-64d5-a6d7125d55ca.png)

中央の出力画面にスナップショットによって取得されたヒープオブジェクトが表示されます。デフォルトでは、最初のスナップショットのヒープオブジェクトのみが表示されますが、ヒープメモリ解析では、「最後のスナップショット」に焦点を当て、そこから逆方向に作業を進めていきます。

![8.5.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3827354/0cf253ec-4ec8-40d9-7298-6fbaa7d4151e.png)

そのため、左上のSnapshotの項目を選択し、#3 (スナップショット3回目) に変更します。

:::note info
難読化されたマルウェアでは、最初に実行されるコードが後の復号化作業を行い、その結果として重要な情報が展開されます。最終的な復号化結果から逆順に解析を進めることで、マルウェアの動作を効率的に把握できます。特に「最後のスナップショット」には、実行後の最終的な状態や重要な動作が反映されており、最初のスナップショットよりも解析に有用な情報が多いためです。
:::

![6コピー.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3827354/abe43696-d7aa-c521-499b-44e7420bb6e9.png)

スナップショットを確認すると `16456` のオブジェクト数があります。この中から手作業で一つ一つ文字列を確認するのは非常に時間がかかり、効率的ではありません。

そこで、GarbageManのオブジェクト内の特定の文字列を検索する機能を使用しましょう。

![7.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3827354/784ba2fd-a99b-2d60-143a-ace30dca23e1.png)

画面左上にある「Tool」から「Search」→「Network」→「Urls」を選択します。

![8コピー.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3827354/a0006a2b-cea9-ec10-99c0-e437cf348e17.png)

URL検索を選択すると、同一IPアドレス`103.195.102[.]126`が7件出力されます。この疑わしいIPが判明したため、さらに関連するオブジェクトを検索します。

![9.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3827354/da00b44c-1f03-9b3e-8a1e-428eb12da88c.png)

赤枠で囲まれたValueのテキストボックスに`103.195.102[.]126`を入力し、「Search」を選択します。
この上記の出力結果からスナップショット（3回目）の全体オブジェクト内で、同一IPアドレス`103.195.102[.]126`が13件以上参照されていることがわかりました。

次はIPアドレスを分析していきます！！

# VirusTotalによるIPアドレス分析
IPアドレス分析では、そのIPアドレスが悪意のあるものであるかどうかを評価します。
分析には[VirusTotal](https://www.virustotal.com/gui/home/upload)というオンラインツールを活用します。VirusTotalは、複数のウイルス対策製品やオンラインスキャンエンジンを統合しており、疑わしいファイル、URL、IPアドレスを分析して脅威を検出することができます。

VirusTotalを開き、ヒープメモリ解析で取得した`103.195.102[.]126`をスキャンすると...

![10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3827354/089f6f39-ab8d-6c22-45bd-efe6fb29b50e.png)

2つのスキャンエンジンで脅威として検知されていることが確認できます。

※VirusTotalに統合されているスキャンエンジンは、それぞれ異なるデータベースや検出ルールを持っています。特定のIPアドレスに関する情報がデータベースに登録されていない場合、悪意を検知できないことがあります。

次は`103.195.102[.]126`に関連するIPアドレスを調査します！
# Censys・Shodanによるピボット分析
ピボット分析では、対象のIPアドレスを起点に、関連するサーバーやドメインなどの特定をしていきます。この際、[Censys](https://search.censys.io/)というインターネット全体のデバイスやサービスを検索・分析するオンラインプラットフォームを利用し、公開されている証明書やサービス情報を収集して関連性を深掘りします。

Censysを開いたら、検索欄に対象のIPアドレスを入力します。

![11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3827354/5f244581-2b48-6f64-a64a-591266941cea.png)

上記の結果から、対象のIPアドレスがRDPプロトコルを使用していることがわかります。
RDPを使用することで、攻撃者はリモートでターゲットシステムにアクセスし、システムを操作したり、データを抽出したりすることができ、システムの完全な制御を取得することが可能になります。

続いて、右側にある「VIEW ALL DATA」を選択して、全体の詳細情報を確認します。

![12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3827354/f2be4217-accc-a7c3-3906-1024d4b8eaeb.png)

詳細情報を調べると、下部に「Certificate〜self_signed `true`」と記載されている箇所があります。これは、Webサイトの責任者や開発者が自ら発行した自己署名証明書であることを意味します。

商業証明書は通常、認証機関（CA）に登録され、証明書に関する情報（所有者や発行元など）が公開されますが、自己署名証明書を使用すると、攻撃者は証明書に関する情報を公開せず、追跡や特定を難しくすることができます。

さらに調べると、上部に「Certificate〜subject.dn `CN=WIN-F6NF7R6I6PJ`」と記載されています。これはSSL/TLS証明書に含まれるフィールドの1つで、証明書が発行されたドメイン名を指します。コモンネーム（CN）は、証明書がどのドメインまたはサーバーに関連付けられているかを示すために使用されます。

つまり、コモンネームを基に調査を進めることで、関連するIPアドレスに辿り着くことができます。

次に、Censysと同様に、インターネットに接続されたデバイスを検索できる検索エンジンである[Shodan](https://www.shodan.io/dashboard)を使用します。

Shodanを開いたら検索欄にCensysで取得したコモンネーム(CN)を入力します。

![13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3827354/7147fc9f-0bb6-a4ec-73ef-e6a567922e86.png)

検索した結果、同一のIPアドレス`177.70.23.[.]86`が2件ヒットしました。このIPアドレスはLDAPプロトコルを使用していることがわかります。

LDAPは、企業や組織内でユーザーやコンピュータの情報を管理するために広く活用されるプロトコルです。しかし、マルウェアはこれを悪用することで、ネットワーク内のユーザーアカウント、グループ、コンピュータ名などの情報を収集する可能性があります。さらに、LDAP通信は通常のネットワークトラフィックと見分けがつきにくいため、セキュリティツールや管理者に検出されにくい場合があるため注意が必要です。

関連性のあるIPアドレスを特定したため、先ほどと同様にVirusTotalで悪意があるかどうかを評価します。

![14.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3827354/6dc36cc5-41d9-4145-3eb4-d1e8c62738fd.png)

1つのスキャンエンジンで脅威として検知されていることが確認されました。評価が低い理由として、解析に使用したマルウェアが2024年12月20日に発見された新しいものであるため、その情報がまだVirusTotalに反映されていない可能性が考えられます。

今回の解析を通じて、関連性のある疑わしいIPアドレスを特定しました。これらのIPアドレスは、マルウェアの通信先として使用される可能性があり、今後の監視対象とする必要があります。以下はそのリストです。

```
103.195.102[.]126
177.70.23[.]86
```

# まとめ
本記事では、ヒープメモリ解析を通じて、難読化されたマルウェアのC2サーバーを特定する方法を解説しました。解析ツールを使用することで、マルウェアの動作や通信先を特定し、攻撃者の意図を明らかにすることができます。この手法は、感染経路や被害範囲の把握に役立ち、効果的な対策を講じるために非常に有用です。

ぜひ参考にしていただければと思います！