マルウェア解析と仮想環境とInetsimの活用方法

解析

マルウェア解析と聞くと「上級者向け」と感じる方も多いはず。でも実は、INetSim・仮想環境・Wireshark・Burp Suite・Fridaという5つのツールの役割と組み合わせを理解すれば、初心者でも安全にマルウェアの動作を観察できます。本記事ではそれぞれのメカニズムをゼロから解説し、実際の解析フローと防御策まで丁寧にまとめます。

1. マルウェア解析とは?なぜ必要?

マルウェア(Malware)とは、Malicious Software(悪意あるソフトウェア)の略です。ウイルス・ランサムウェア・スパイウェア・トロイの木馬・ワームなど多くの種類が存在し、感染したコンピュータを乗っ取ったり、データを盗んだり、身代金を要求したりします。

マルウェア解析(Malware Analysis)とは、「マルウェアが何をするプログラムなのかを調べる作業」です。セキュリティ研究者やインシデントレスポンスチームが行い、主に次の3つの目的で使われます。

  • 🔍 脅威の把握:どんなデータを盗むのか、どこに送信するのかを知る
  • 🛡️ 防御策の立案:通信先IPやドメインをブロックリストに追加する
  • 📣 インシデント対応:感染端末の範囲を特定し、被害を最小化する

解析手法は大きく2つあります。

手法 内容 主なツール
静的解析 実行せずにコードやバイナリを読む Ghidra, IDA Pro, strings
動的解析 実際に動かして挙動を観察する INetSim, Wireshark, Frida ← 本記事のメイン

本記事では動的解析に焦点を当て、5つのツールをどう組み合わせるかを解説します。

2. 解析ラボの全体構成

いきなりマルウェアを実行したら自分のPCが感染します。だからこそ、「隔離された実験室」を用意することが最初のステップです。

全体像はこうです:

【物理ホストPC】
  └─ 仮想化ソフト(VMware / VirtualBox)
       ├─ 【解析VM】Windows 10 / REMnux
       │     ├─ マルウェアサンプル(ここで実行)
       │     ├─ Frida(プロセス内部フック)
       │     └─ Burp Suite(HTTPプロキシ)
       │
       └─ 【サービスVM】Linux(Remnux / Kali推奨)
             ├─ INetSim(偽インターネットサービス群)
             └─ Wireshark(パケットキャプチャ)
 
【ネットワーク】
  解析VM ↔ サービスVM:ホストオンリー or 内部ネットワーク
  外部インターネット:完全遮断 ★重要

⚠️ 安全のための鉄則

  • 解析VM が外部インターネットに出られないようにする
  • VMのスナップショット(保存ポイント)を解析前に必ず取る
  • 解析が終わったらスナップショットに戻す
  • ホストPCとVMの間でファイル共有は最小限に

3. 仮想環境(VM)の役割と構築

3-1. 仮想環境とは?

仮想環境(Virtual Machine / VM)とは、1台のPCの中にもう1台の「仮想のコンピュータ」を作り出す技術です。仮想化ソフトがハードウェアをエミュレートし、ゲストOSはあたかも独立した物理マシンかのように動作します。

マルウェア解析でVMを使う最大の理由は「隔離性」と「復元性」です。万が一マルウェアが暴れても、ホストPCには影響が及びません(完全ではないため後述の注意点も確認してください)。またスナップショット機能により、感染前の状態に即座に戻せます。

3-2. 主な仮想化ソフトの比較

ソフト 価格 特徴
VMware Workstation Pro 個人は無料化(2024年〜) 高機能・安定。スナップショット管理が優秀
VirtualBox 無料(OSS) 導入しやすい。初心者向け
Hyper-V Windows Pro以上に内蔵 Windows標準。追加コスト不要

3-3. 解析VMに入れておくべきツール

REMnux(レムナックス)はマルウェア解析に特化したUbuntuベースのLinuxディストリビューションです。Wireshark・Volatility・YARA・Zeekなど多数のツールがプリインストールされており、無料で利用できます(remnux.org)。

Windowsマルウェアを動かす解析VMにはWindows 10 / 11が適しています。ライセンスが必要ですが、Microsoft公式の「評価版ISO」(90日間)を利用する方法もあります。解析VMには以下を追加インストールします:

  • Process Monitor(ProcMon) ― ファイル・レジストリ・プロセスの操作をリアルタイム記録
  • Process Hacker / System Informer ― 動作中プロセスの詳細監視
  • Autoruns ― 自動起動エントリの一覧(Sysinternals Suite)
  • Frida(後述)
  • Burp Suite(後述)

3-4. VMのネットワーク設定(最重要)

VMwareとVirtualBoxはネットワークアダプタのモードを選べます。マルウェア解析では「ホストオンリー(Host-Only)」「内部ネットワーク(Internal Network)」を使い、外部インターネットへの通信を物理的に切り離します。

推奨ネットワーク構成

解析VM と INetSim/Wireshark が動くサービスVM を同じ「ホストオンリーネットワーク」に配置。解析VMのデフォルトゲートウェイをサービスVMのIPに向け、すべての通信がそこで受け止められるようにする。

4. INetSim ― ニセのインターネットを作る

4-1. INetSimとは?

INetSim(Internet Services Simulation Suite)は、DNS・HTTP・HTTPS・FTP・SMTPなど多数のインターネットサービスを模倣する「偽のサーバー群」です。Kali LinuxやREMnuxにパッケージとして収録されており、コマンド一発で起動できます。

マルウェアは実行後にC2サーバー(Command & Control:攻撃者のサーバー)に接続しようとします。しかし本物のC2サーバーに到達させると、攻撃者に「解析されている」と気づかれたり、実際の攻撃コマンドが送られてきたりして危険です。INetSimを使えば、マルウェアが「つながった!」と思い込む偽環境を安全に作れます。

4-2. INetSimが模倣するサービス一覧(主要なもの)

プロトコル ポート番号 INetSimの動作
DNS53/UDP, 53/TCPすべてのドメイン名を自分のIPに解決(偽DNS)
HTTP80/TCPダミーHTMLやダミーファイルを返す
HTTPS443/TCP自己署名証明書でTLS接続を受ける
FTP21/TCPログイン成功を偽装
SMTP25/TCPメール送信を受理(実際には送らない)
IRC6667/TCP古いボットがIRC経由でC2通信する場合の偽IRC

4-3. インストールと起動(Kali Linux / REMnux)

# インストール
sudo apt update && sudo apt install -y inetsim
 
# 設定ファイルの編集
sudo nano /etc/inetsim/inetsim.conf
# → dns_default_ip を自分のIPに変更(例: 192.168.56.101)
 
# 起動
sudo inetsim
 
# 起動確認
sudo netstat -tulnp | grep inetsim

4-4. INetSimのログの読み方

INetSimは /var/log/inetsim/ にログを残します。たとえば以下のようなエントリが見つかれば、マルウェアが特定ドメインに接続しようとしたことが分かります:

[2025-06-01 10:23:44] DNS - Query: evil-c2-server.example.com (A)
[2025-06-01 10:23:44] DNS - Response: 192.168.56.101
[2025-06-01 10:23:45] HTTP - Request: GET /payload.exe HTTP/1.1 Host: evil-c2-server.example.com

このログから「マルウェアが evil-c2-server.example.com に接続して /payload.exe をダウンロードしようとした」という行動が判明します。これが動的解析の核心です。

5. Wireshark ― 通信を丸見えにする

5-1. Wiresharkとは?

Wiresharkは世界で最も使われているオープンソースのパケットアナライザ(ネットワークパケット解析ツール)です。ネットワークインターフェースを流れるデータをリアルタイムでキャプチャし、プロトコルごとに色分けして表示します。

マルウェアが送受信するすべての通信パケットを記録できるため、「どのIPにどんなデータを送ったか」を可視化できます。Wiresharkはwireshark.orgから無料でダウンロードできます。

5-2. Wiresharkの基本的な使い方

  1. Wiresharkを起動し、キャプチャするネットワークインターフェースを選ぶ(例:eth0)
  2. 「サメのヒレ」ボタン(▶)でキャプチャ開始
  3. 解析VMでマルウェアを実行
  4. スクエアボタン(⏹)でキャプチャ停止
  5. .pcapファイルとして保存(後から再解析可能)

5-3. 解析で役立つフィルター構文

# HTTPリクエストだけを表示
http.request
 
# 特定IPとの通信だけを表示
ip.addr == 192.168.56.101
 
# DNSクエリのみ
dns
 
# TCPポート80(HTTP)またはポート443(HTTPS)
tcp.port == 80 || tcp.port == 443
 
# パケット内容に特定文字列を含む(例:User-Agent)
http.user_agent contains "Mozilla"
 
# URIに特定文字列を含む
http.request.uri contains ".exe"

5-4. 重要な解析ポイント:TLS通信の復号

最近のマルウェアはHTTPS(TLS暗号化)を使うため、Wiresharkを素で使っても中身が見えません。これに対応するには次の2つの方法があります:

  • ① INetSimとの組み合わせ:INetSimが偽の自己署名証明書でTLS接続を終端させるため、INetSimのサーバー側ログを見ればHTTPS通信の内容が分かります。
  • ② SSLKEYLOGFILEを使う:ブラウザや一部アプリが出力するTLSセッションキーをWiresharkに読み込ませると、TLS通信をリアルタイム復号できます。Wireshark の Edit → Preferences → Protocols → TLS → (Pre)-Master-Secret log filename に指定。

5-5. pcap解析の自動化:tsharkとzaproxy

Wiresharkのコマンドライン版であるtsharkを使えば、pcapファイルの解析をスクリプト化できます:

# pcapからHTTPリクエストのURLを一覧表示
tshark -r capture.pcap -Y http.request -T fields \
  -e http.host -e http.request.uri
 
# DNSクエリ名を一覧表示
tshark -r capture.pcap -Y dns.flags.response==0 \
  -T fields -e dns.qry.name | sort -u

6. Burp Suite ― HTTPを深掘りする

6-1. Burp Suiteとは?

Burp SuiteはPortSwigger社が開発したWebアプリケーションセキュリティテストのプラットフォームです。コミュニティ版(無料)と有料のプロフェッショナル版があります(portswigger.net/burp)。

マルウェア解析でBurp Suiteを使う主な理由は「HTTP/HTTPSプロキシ」機能です。マルウェアとWebサーバーの間にBurp Suiteを挟み込み、通信の内容を読み取り・改ざんし・リプレイできます。

6-2. Wireshark vs Burp Suite の使い分け

観点 Wireshark Burp Suite
レイヤーL2〜L7(全パケット)L7(HTTP/HTTPS専門)
TLS復号キーログが必要プロキシが自動的に復号
改ざん不可可(インターセプト機能)
非HTTPプロトコル対応非対応

6-3. Burp Suiteのプロキシ設定手順

  1. Burp Suite を起動 → Proxy → Options でリスニングアドレスとポートを確認(デフォルト: 127.0.0.1:8080
  2. 解析VM(またはホスト)のブラウザ or マルウェアのHTTPクライアントのプロキシ設定を 127.0.0.1:8080 に向ける
  3. HTTPS通信を復号するため、BurpのCA証明書をOSにインストール(Proxy → CA Certificate からDL)
  4. Proxy → Intercept をONにすれば通信を一時停止して内容を確認・改ざん可能

6-4. マルウェア解析でのBurp Suite活用例

  • 📦 C2サーバーへのビーコン(定期接続)の内容確認 ― どんなデータを送っているか(OSバージョン、ホスト名、Walletアドレスなど)
  • 🔑 暗号化されたペイロードの分析 ― TLS復号後のJSONやBase64データを観察
  • 🔁 レスポンスの改ざん ― C2サーバーからの「次のコマンド」を書き換えてマルウェアの次の行動をコントロール
  • 🕵️ HTTPヘッダーの分析 ― User-Agentが正規ソフトのふりをしていないか確認

6-5. Collaboratorを使った帯域外(OOB)通信検出

Burp Suite ProfessionalにはBurp Collaboratorという機能があります。外部のDNS/HTTPサーバーを使って「マルウェアが予期しない外部ホストに問い合わせる」動作(帯域外通信、OOB: Out-of-Band)を検出できます。コミュニティ版では使えませんが、interactsh(OSSのCollaborator代替)が無料で利用可能です。

7. Frida ― 動いているプロセスを内側から見る

7-1. Fridaとは?

Frida(フリーダ)はOleavra AB社のNick Christofidesらが開発したオープンソースの動的計装フレームワーク(Dynamic Instrumentation Framework)です(frida.re)。

「計装(Instrumentation)」とは、動作中のプログラムに外からコードを注入して、関数の呼び出しを傍受したり戻り値を書き換えたりする技術です。Fridaの特徴は:

  • エージェントレス ― ターゲットアプリを再コンパイル不要
  • マルチプラットフォーム ― Windows / macOS / Linux / Android / iOS対応
  • JavaScript API ― スクリプトをJSで書けるため可読性が高い
  • リアルタイム ― 実行中のプロセスにライブでアタッチ可能

7-2. Fridaの仕組み

Fridaは対象プロセスにFridaエージェント(frida-agent)という小さなランタイムをDLL(Windowsの場合)として注入します。このエージェントはV8 JavaScriptエンジンを内蔵しており、Fridaサーバー(解析マシン)から送られるJavaScriptスクリプトを実行します。これにより関数フック・メモリ読み書き・システムコール傍受が可能になります。

【解析者PC / コントロール側】          【ターゲットプロセス(マルウェア)】
  frida (CLIツール)                       frida-agent.dll(注入済み)
       ↕  TCP / USB                              ↕
  スクリプト (JavaScript)            関数フック・メモリ操作

7-3. インストール

# Python経由でインストール(pip)
pip install frida-tools
 
# バージョン確認
frida --version

Windowsの解析VM上でマルウェアをフックする場合は、frida-serverのWindowsビルドをGitHubリリースから取得して管理者権限で起動します。

7-4. 基本的なFridaスクリプト例:関数呼び出しをフック

// hook_messagebox.js
// Windows API の MessageBoxW を傍受し引数を表示する
 
const user32 = Process.getModuleByName("user32.dll");
const MessageBoxW = user32.getExportByName("MessageBoxW");
 
Interceptor.attach(MessageBoxW, {
  onEnter: function(args) {
    console.log("[*] MessageBoxW called!");
    console.log("    hWnd    : " + args[0]);
    console.log("    lpText  : " + args[1].readUtf16String());
    console.log("    lpCaption: " + args[2].readUtf16String());
  },
  onLeave: function(retval) {
    console.log("[*] MessageBoxW returned: " + retval);
  }
});
# 実行(プロセス名でアタッチ)
frida -l hook_messagebox.js -n malware.exe

7-5. マルウェア解析でのFrida活用例

  • 🔐 暗号化ルーティンの傍受CryptEncryptBCryptEncrypt をフックして、暗号化前のデータ(平文)を取得
  • 🌐 ネットワーク関数の傍受WSASend / send / WinHttpSendRequest をフックし、送信データを取得
  • 🔑 アンチ解析バイパスIsDebuggerPresent の戻り値を常に0(偽)に書き換えることで、デバッガ検出を無効化
  • 📝 レジストリ操作の監視RegSetValueEx をフックして持続化(Persistence)のキー名と値を取得
  • 📱 Android解析 ― Androidアプリ(APK)の暗号化されたネットワーク通信を内部フックで復号

7-6. FridaとBurp Suiteの相乗効果

マルウェアが独自の暗号化を施した後にHTTPSで送信する場合、Burp SuiteだけではTLSを復号しても中身がまだ暗号化されていることがあります。こういったダブル暗号化のケースでは、FridaでアプリレベルのXOR/AES処理をフックして平文を取得し、それをBurpのレスポンスと照合することで完全な通信内容が把握できます。

8. 5ツールの組み合わせ方・実際の解析フロー

8-1. 全体フローチャート

① 【準備】
   └─ VMスナップショットを取得
   └─ INetSimを起動(サービスVM)
   └─ Wiresharkをキャプチャ開始(サービスVM or 解析VM)
   └─ Burp Suiteのプロキシを起動(解析VM)
   └─ Fridaエージェントをスタンバイ
 
② 【静的事前確認】
   └─ strings, die(DetectItEasy)でバイナリのヒントを確認
   └─ VirusTotalでハッシュチェック
 
③ 【実行・動的観察フェーズ1:ネットワーク】
   └─ マルウェアを実行(解析VM)
   └─ INetSimログでDNSクエリ・HTTP接続を確認
   └─ WiresharkでTCP接続先IP・ポートを確認
   └─ Burp SuiteでHTTPヘッダー・Body内容を確認
 
④ 【動的観察フェーズ2:内部動作】
   └─ FridaをマルウェアプロセスにAuto-Attach
   └─ 暗号化関数・レジストリ操作・ファイル操作をフック
   └─ ProcMonで並行してファイル/レジストリ変更を記録
 
⑤ 【情報整理・IOC抽出】
   └─ DNS/IPをC2 IOCとしてリスト化
   └─ HTTPリクエストのユーザーエージェント・パスを記録
   └─ Fridaが拾った暗号鍵・平文をメモ
 
⑥ 【後処理】
   └─ VMをスナップショットに戻す
   └─ IOCをSIEM/EDRに登録 or 共有

8-2. ツールの役割分担早見表

知りたいこと 使うツール
マルウェアがどのドメインに接続するかINetSim(DNSログ)+ Wireshark
HTTPSの中身Burp Suite(プロキシ復号)
暗号化する前の平文データFrida(関数フック)
非HTTP通信(FTP, IRC, DNS over TCP等)Wireshark + INetSim
アンチデバッグ・難読化対策Frida(API戻り値の書き換え)
通信先のC2への偽レスポンスINetSim + Burp Suite(インターセプト改ざん)
ホスト全体の安全な隔離仮想環境(VMware / VirtualBox)

8-3. 実践例:ランサムウェアサンプルの解析シナリオ

シナリオ:不審なPDFに添付されていたEXEファイルを解析する

  1. INetSim起動。WiresharkキャプチャON。
  2. EXEを解析VM(Windows 10)で実行。
  3. INetSimログransomware-c2.ru への DNSクエリが連続して記録される。
  4. Wireshark:ポート443でTLS通信。証明書のSNI(Server Name Indication)フィールドに ransomware-c2.ru を確認。
  5. Burp Suite:TLS復号後のBodyにBase64文字列。デコードするとJSONで{"victim_id":"XXXX","key":"AES_KEY_HERE"}
  6. FridaBCryptEncrypt をフックしてファイル暗号化前のランサムノートのテキストと被害者固有IDを取得。
  7. 結果:C2ドメイン・暗号化アルゴリズム・送信データ構造・被害者IDの生成ロジックがすべて判明。

8-4. 注意:VM検出(Anti-VM)への対策

高度なマルウェアはVM環境を検出すると挙動を変えたり停止したりします。主な検出手法と回避策を知っておきましょう:

VM検出手法 回避策
VMwareレジストリキーの確認レジストリ値を削除・変更 or Fridaでクエリ結果を書き換え
CPUID命令でHypervisor Bitを確認KVM / Hyper-Vの設定でCPUID結果を隠す
NIC MACアドレス(VMwareは特定のOUI)VirtualBox / VMwareで仮想NICのMACを書き換え
マウス動作・画面解像度・ファイル数デスクトップに大量のファイルを置き1920×1080に設定
実行時間(Sleep命令で遅延実行)FridaでSleepの引数を0に書き換え

9. 防御策・ブルーチーム視点のまとめ

解析した知見は攻撃者側の理解だけでなく、守る側(ブルーチーム)の施策に直結します。ここではマルウェアの各攻撃フェーズに対応する防御策を整理します。

9-1. IOCの活用

解析で得られたIOC(Indicators of Compromise:侵害の痕跡)は即座に防御に転用します:

  • 🌐 C2ドメイン・IPアドレス → ファイアウォール・DNSフィルタ・Proxyのブロックリストに追加
  • #️⃣ マルウェアのSHA256ハッシュ → EDR・アンチウイルスのカスタムルールに追加
  • 📋 HTTP User-Agentや特徴的なURL → WAFやPROXYのシグネチャに追加
  • 📁 ファイルパス・レジストリキー → SIEMの検知ルール(YARA, Sigma)を作成

9-2. ネットワーク防御

  • 🔒 DNS Firewalling:マルウェアの多くは最初にDNSを使う。Cisco Umbrella・NextDNS・Pi-holeなどでカテゴリフィルタと悪性ドメインリストを適用
  • 🔍 TLS Inspection:エンタープライズ環境では出口プロキシでTLS復号を行い、内部から外向けのHTTPS通信を監視
  • 🚧 ゼロトラスト・ネットワーク分割:感染した端末が横展開(ラテラルムーブメント)できないよう、端末ごとに最小権限ネットワークを設定

9-3. エンドポイント防御

  • 🛡️ EDR(Endpoint Detection and Response):CrowdStrike / SentinelOne / Microsoft Defenderなどがプロセス・ファイル・レジストリ・ネットワークをリアルタイム監視。FridaやProcMonが解析で見るものをEDRは本番環境で常時監視している
  • ⚙️ アプリケーションホワイトリスト:許可されたアプリ以外の実行をブロック(Windows AppLocker / WDAC)
  • 🔑 最小権限の原則:一般ユーザーに管理者権限を与えない。マルウェアが管理者権限を持てなければ多くのAPIが使えない

9-4. 人的・組織的防御

  • 📧 フィッシング耐性トレーニング:マルウェアの多くはメール経由。定期的なフィッシングシミュレーションで社員の認識を高める
  • 🔄 パッチ管理:OSとアプリを常に最新に保つ。マルウェアは既知脆弱性を悪用することが多い
  • 💾 3-2-1バックアップ:3つのコピー・2種類のメディア・1つはオフサイト。ランサムウェアへの最終防衛線
  • 📢 脅威インテリジェンス共有:ISAC・MISP・OpenCTIなどを通じて業界内でIOCを共有し、同様の攻撃から他組織も守る

9-5. MITRE ATT&CKフレームワークとの紐づけ

解析で観察したマルウェアの挙動は、MITRE ATT&CK(アタック)フレームワークのテクニックIDに対応させると、防御施策の網羅性を評価できます。たとえば:

  • DNSを使ったC2通信 → T1071.004 (Application Layer Protocol: DNS)
  • レジストリへの自動起動エントリ作成 → T1547.001 (Boot or Logon Autostart Execution: Registry Run Keys)
  • プロセスインジェクション → T1055 (Process Injection)
  • スリープによる解析回避 → T1497.003 (Virtualization/Sandbox Evasion: Time Based Evasion)

10. まとめ

本記事では、マルウェア動的解析のための5つのツールについて解説しました。最後に全体を整理します。

ツール 一言で言うと 解析における役割
仮想環境隔離された実験室ホストPCを守りながら安全に実行
INetSim偽のインターネットC2接続を安全に受け止め・記録
Wireshark通信の全録画全プロトコルのパケットを可視化
Burp SuiteHTTP専門の通訳HTTPS復号・内容確認・改ざん
Frida内部スパイ関数フックで暗号前データや内部動作を取得

これらのツールは単独でも強力ですが、組み合わせることで「外から見えない部分」まで解析できるのが最大の価値です。ネットワーク層(Wireshark+INetSim)・アプリケーション層(Burp Suite)・プロセス内部(Frida)の三層を同時にカバーすることで、高度なマルウェアも解析できるようになります。

初心者へのアドバイス

  • まずはREMnuxの仮想マシンを作り、INetSimとWiresharkだけで始める
  • マルウェアサンプルは ANY.RUN(オンラインサンドボックス)でまず挙動を確認し、本格解析は後で
  • Fridaはまず自分が作ったサンプルプログラムで練習してから本番投入
  • 法律に注意:マルウェアサンプルの取得は MalwareBazaar のような合法的な共有サービスから

サイバーセキュリティの世界は奥が深いですが、こうしたツールの組み合わせを一歩ずつ理解することで、確実にスキルが上がっていきます。ぜひ安全な環境で試してみてください。


参考リソース:
REMnux公式サイト| ・INetSim公式ドキュメント| ・Wireshark公式ドキュメント| ・Burp Suite公式ドキュメント| ・Frida公式ドキュメント| ・MITRE ATT&CK| ・MalwareBazaar

コメント