【深層解析】実用的にマルウェアを徹底解析してみる

# はじめに
ここ最近、SNSやニュースで取り上げられているランサムウェアによるサイバー攻撃が、多くの企業や個人が持っている重要なデータを人質に取られ、身代金を要求される被害が相次いでいます。

そこで私が一連の流れを通して、マルウェアの解析方法について、実用的に徹底解析していきます！

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


# 今回の解析で行うこと
※専門用語やツールの詳細は各解析の手順に沿って説明します。

- Detect it Easyを用いた実行ファイルのパッカー解析
- de4dot及びDnspyを用いたソースコード解析
- WireShark及びFakeNetを用いたHTTP通信解析
- CyberChefを用いたデータ解析

# 解析においての絶対順序
**マルウェアを解析する前に、必ず以下の順序を踏むことが重要です。**
1. 表層解析
マルウェアを実行せず、ファイルの状態を解析する。
1. 静的解析
マルウェアを実行せず、プログラムのソースコードを解析する。
1. 動的解析
マルウェアを実行し、挙動を解析する。
1. データ解析
マルウェアを実行し、動的解析から得た文字列を解析する。
<h>
<h>
※先に動的解析を行った場合、実際にマルウェアを実行するため、解析に時間がかかってしまうと感染してしまい、最悪の場合、解析できない状態になってしまうからです。

# 解析するマルウェア
解析に用いるサンプルマルウェアはBlackNet RATマルウェアを使用します。

https://github.com/AndroVirus/BlackNET

と、ここでみなさんも疑問に思っていると思います。今一番ホットなのはランサムウェアじゃないのかと。

そうなんです、今回この記事を書く上ですごく悩みました。なぜかというと・・

多くのランサムウェアは高度なデータ暗号化技術を使用しており、復号鍵の管理や身代金支払いの仕組みも複雑です。そのため、暗号解析は現実的には非常に困難で、ほとんどの場合不可能です。

今回は初心者にもわかりやすいように、RATマルウェアの解析を行います。

それでは、やっていきましょう！！

# RATマルウェアとは
**標的のコンピュータに侵入し、遠隔で操作を行うことができるマルウェアを指します。**

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3827354/5e45e9f3-41e2-27e5-6f55-7a19c23d2a10.png)

RATマルウェアの感染経路では、悪意あるサイトやメールを閲覧した際に、知らぬ間にLoaderがダウンロードされます。Loaderが実行されるとtempファイルに悪意のあるデータが作られ、PowerShellを悪用し、C2サーバーに接続されてしまいます。

例えば、これらの感染した端末がDDoS攻撃の踏み台として、使われてしまうのです。

:::note info
Loaderとは、感染直前の検出回避を目的とした悪意あるデータを作成するための実行ファイルです。 
:::
:::note info
C2サーバーとは、攻撃者が管理者権限を奪取した被害者の端末を管理するために用意したサーバーです。
:::

# 解析方法⒈ 表層解析
表層解析では実行ファイルの状態を解析していきます。そこで、"[Detect it Easy(DIE)](https://github.com/horsicq/Detect-It-Easy
)"という実行ファイルの種類や構成を解析し、識別するためのツールを用いて解析します。

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

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3827354/f2b87b5e-530c-27b8-64bd-3b76a0d026b3.png)

すると、上記のように、マルウェアの実行ファイルの詳細が表示されると思います。
ここで注目してほしいのが、「protector」という項目です。その項目には、Eazfuscatorと.NET Reactorが表示されています。これらはPackやPackerと呼ばれるもので、実行ファイルなどのソースコードを難読化するツールを使用していることを示しています。

また、「library」は.NETを使用しており、VBでコンパイルされています。

:::note info
ちなみに、「unpack」や「unpacker」という逆の言葉もあり、これは難読化されたソースコードを元の状態に戻すことを指します。
:::

 次に、難読化されているマルウェアの実行ファイルを .NETアプリケーションの逆コンパイル、デバッグ、編集するデバッカー御用達ツール"[Dnspy](https://github.com/dnSpy/dnSpy)"を用いて見ていきます。

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

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3827354/b7f0d159-328b-05a4-3c01-329a7e9bfedf.png)

上記のようにソースコードが読めなくなっています。これを元のソースコードに戻す作業をしていきます。
そこで、難読化されている実行ファイルを復元するツールである"[de4dot](https://github.com/de4dot/de4dot)"を用います。

de4dotにマルウェアの実行ファイルをドラッグアンドドロップで、復元していきます。

復元ができたら、先ほど同様"Dnspy"にドラッグアンドドロップしましょう。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3827354/1f685e00-addc-7570-34b9-2510517653fa.png)

復元前後のソースコードを比較すると、乱雑していた文字列が読めるようになっています。　
ここまでが表層解析です。お次は静的解析です！

# 解析方法⒉ 静的解析
静的解析では、プログラムのソースコードを解析します。
復元したマルウェアのソースコード内で、HTTP通信に使用されている可能性がある関数名を文字列ベースで検索していくと、C2サーバーに送信するHTTPリクエストを発見しました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3827354/a7c86ed7-c917-8bd5-2a56-d63e13faa3ad.png)

上記のソースコードを読んでいくと、C2サーバーに送信するHTTPリクエストの構成では、POSTメソッドが使用されており、「filename」という変数にリクエストのパスが代入されていて、「str」という変数にボディ情報が代入されています。

さらに、「ENB」という関数名を深掘っていくと・・

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3827354/6c286a07-1db0-08eb-9723-55c1c31024fe.png)

ボディ情報は、Base64にエンコードしていることがわかります。
静的解析はここまでです。次は実際にマルウェアを実行してみましょう！

# 解析方法⒊ 動的解析
動的解析では、マルウェアを実行してその挙動を解析します。
**※実行する前に、必ずサンドボックス内で行ってください。** 

サンドボックスはホストシステムから完全に隔離された環境を構築し、マルウェアがホストシステムやその重要なデータに影響を及ぼすリスクを低減します。また、サンドボックス内でのみマルウェアを実行することで、意図しない外部ネットワークやシステムへの広がりを防ぎます。この制御された実行環境により、安全にマルウェアの挙動を観察・分析することが可能です。

:::note info
最近のマルウェアは仮想環境を検知して動作を停止させる技術や、仮想環境内で認識しているUSBといった周辺機器から実機に感染するマルウェアも存在するため、解析を行うための環境構築には手間がかかることがあります。
:::

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

ローカルネットワーク上で"[FakeNet](https://github.com/mandiant/flare-fakenet-ng
)"というネットワーク環境をエミュレートするツールを用いて、"[Wireshark](https://www.wireshark.org/download.html)"でマルウェアのパケットをキャプチャします。

WiresharkとFakeNetを起動した状態で、マルウェアを実行します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3827354/365e0b3f-8826-46f7-2d2d-a51435834fcb.png)

パケットのキャプチャに成功すると、静的解析で得たHTTPリクエスト構成と一致しているHTTPリクエストを発見しました。続いて、このHTTPリクエストのボディ情報を見ていきます。


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3827354/af699f39-7d47-9164-02c8-1d2627b8739a.png)

ボディ情報も「data」という変数にBase64の文字列が代入されています。
ここまでが動的解析です。いよいよ終盤になってきました。次はボディ情報の文字列をデコードしていきましょう！

# 解析方法⒋ データ解析
データ解析では、Wiresharkで取得したHTTPリクエストのボディ情報をデコードします。
そこで、"[CyberChef](https://gchq.github.io/CyberChef/
)"と呼ばれるイギリスの情報機関GCHQ（政府通信本部）によって開発されたツールを用います。このツールを使えば、データの解析、暗号化、復号化、圧縮などができます。もちろんオフライン環境でも使用できます。

CyberChefのサイトを開けたら、左にある「Operations」の項目から「From Base64」を「Recipe」の欄にドラッグアンドドロップします。「Input」には、Base64にエンコードされているボディ情報をコピーアンドペーストします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3827354/cdf426cf-09bd-79fc-8803-74bcbc52239b.png)

「Output」にデコードされたボディ情報が出力されます。
文字列を見ていくと、感染した被害者の端末の構成情報やアンチウィルスソフトの詳細、どのアカウントでログインしているかなどの情報がC2サーバーに送信されています。

これらから考えられることは、感染した端末からC2サーバーにPOSTメソッドを使用して、リバースシェルの動作原理と似たHTTP通信を行うことで、攻撃者が感染した端末の状況を監視し、定期的に情報を収集しているのです。

また、RATマルウェアは自己アップデート機能を備えていることがあり、攻撃者はC2サーバーを介してマルウェアのコードを更新し、新しい機能を追加したり、既存の機能を修正したりすることができます。

以上が一連の流れを通したマルウェアの徹底解析でした！
# まとめ

この記事では、解析用ツールを使用してマルウェア解析の具体的な手順を示しました。これらのツールを活用することで、攻撃の手法や標的に関する深い理解を得ることができます。また、マルウェアの行動パターンや通信先を特定することで、感染経路や被害の範囲を把握し、効果的な対策を立てることができます。 

ぜひ参考にしてみてください！