Published on

マルウェアの動作原理の解説

Authors

はじめに

当記事は当初、シンプルなマルウェアの作成によりマルウェアの動作原理について学ぶコンテンツとして公開しましたが、 読者からWizard Bible事件に類似するという指摘があったため、 前の記事は削除し、悪用可能な実コードを含まないようにアップデートしました。

当記事ではマルウェアの中でも最も代表的なものとして知られる遠隔操作ウイルス(RAT:Remote Access Trojan)について取り扱います。

当ブログの免責事項と利用に関する注意については当ブログについてを参照してください。

当記事で取り扱うマルウェアの概要と要件

マルウェアのイメージを掴むため、サイバー攻撃におけるマルウェアの使われ方からマルウェアの概要を説明します。

一般的な標的型攻撃ではフィッシングメールなどによってマルウェアを攻撃対象者(企業の従業員など)へ送信し、誘導された攻撃対象者がマルウェアを実行することで攻撃対象者の端末がマルウェア感染します。 マルウェア感染後は攻撃者が遠隔操作通信(C2通信)によって端末を遠隔操作し、攻撃者の目的に応じて感染の拡大や情報の窃取・暗号化などを行います。

当記事で取り扱う遠隔操作ウイルスは遠隔操作の指令を行うC2サーバーと端末に感染して攻撃者の指令に従って端末を操作するエージェントによって構成され、C2サーバーとエージェントがC2通信を行うことで、 攻撃者は継続的に遠隔操作を行います。

C2通信ではC2サーバーから実行するコマンドなどがHTTPなどのプロトコルを使用して配信され、これをエージェントが受け取り端末上で実行します。 この際、エージェントでは通常のWebサイトへのアクセスと同様にアウトバウンド通信が使用されるため、攻撃者は外部から直接到達できないローカルネットワーク内の端末に対しても干渉することが可能です。

当記事で解説するマルウェアも同様であり、HTTPサーバーと一定時間ごとにリクエストを送信し、コマンドを受け取るエージェントによって遠隔操作を再現します。

当記事で解説するマルウェアの要件を以下に示します。

C2サーバー

  • HTTPプロトコルでコマンドを配信するWebサーバーとする
  • Webサーバーではエージェントに対して実行させるコマンドを記載したテキストファイルをデプロイすることでコマンドを配信する
  • 配信するテキストファイルのファイル名は「cmd000.txt」、「cmd001.txt」、「cmd002.txt」、…と定義し、ファイル名に含まれる番号の順にファイル内に記載されたコマンドが実行される

エージェント

  • 簡略化のため形式BATのスクリプトでマルウェアを作成する

    ※実際のサイバー攻撃ではRust、Go、Pythonなどのプログラミング言語で作成したマルウェアが使用され、複雑な処理が行えないBATが使用されることはありません。

  • C2サーバーに対して10秒に1回の頻度でリクエストを送信し、コマンドが記載されたテキストファイルを受け取る

  • 受け取ったコマンドはコマンドプロンプト(cmd)により実行する

  • 簡略化のため、受け取ったコマンド実行のみを行い、実行結果はC2サーバーに返さない

C2サーバーの構築

今回作成するC2サーバーはテキストファイルを配信するのみの非常に単純な構成です。

NginxでもPythonのhttp.serverでも任意のWebサーバーでテキストファイルを配信します。

テキストファイルはエージェントから認識できるインデックスを付与したcmd000.txt、cmd001.txt、cmd002.txtのようなファイル名を指定し、デプロイする仕様とします。

エージェントの構築

エージェントはBAT形式のスクリプトとして作成します。

実際のプログラムは提示することができないため、BATで行う処理内容をフローチャートで表します。

フローチャート

以上の内容を実装することで、10秒に一回C2サーバーから指令を受け取り、コマンドとして実行するエージェントを作成することができます。

非常にシンプルな処理内容なので、10行程度のスクリプトで作成できます。

動作確認

C2サーバー上にcmd000.txtとcmd001.txtをデプロイして動作確認を行います。

cmd000.txt
whoami
cmd001.txt
hostname

C2サーバーを起動した状態でエージェントのBATファイルをダブルクリックしてエージェントを起動します。 終了の処理は実装していないため、エージェントを終了する際はctrl + Cで止めてください。

私が作成したエージェントではエージェントを実行したホスト上でコマンドプロンプトがポップアップし、実行結果が表示されるようにしているため、 ここからデプロイしたコマンドが正常に実行されていることが確認できます。

agent-log

また、HTTPサーバーのログからはエージェントから10秒おきにリクエストが送信されていることがわかります。

server-log

さいごに

世の中には様々な種類の遠隔操作型マルウェアが存在しますが、基本となる動作は今回解説した処理と同じです。 この記事からマルウェアの動作原理を理解し、セキュリティ対策やレッドーチームの技術力強化に役立ててください。

当記事が役に立ったと感じていただけたら、Xなどで共有していただけると励みになります。 今後もセキュリティに関する技術的な内容を発信していく予定ですので、ぜひチェックしてください。