【所要時間:約20〜30分】【対象:セキュリティ初心者〜中級者】
「マルウェアを安全に動かして調べたい…でも、実際にインターネットに繋がせたら危ない…」
そんなジレンマを解決してくれるのが INetSim(Internet Services Simulation Suite) です。
この記事では、INetSimの仕組みから実際の使い方まで、セキュリティの初心者でも理解できるように 丁寧に解説します。難しい用語には必ず説明を付けていますので、安心して読み進めてください。
📋 目次
1. INetSimとは何か?
INetSim(Internet Services Simulation Suite)は、インターネット上のさまざまなサービスを「偽物」として再現するソフトウェアです。
開発・公開しているのは Markus Schöne と Thomas Hungenberg によるドイツのセキュリティ研究プロジェクトです。公式サイトは https://www.inetsim.org/ であり、GPL(GNU General Public License)v2 のもとで無料公開されています。
💡 もっと簡単に言うと?
INetSim は 「偽のインターネット環境」 を作るツールです。マルウェア(悪意のあるプログラム)が「グーグルに接続しよう」「C2サーバーに指令を受けに行こう」としたとき、本物のインターネットに繋がせず、INetSimが偽サーバーとして応答することで、安全に通信内容を観察できます。
INetSimの主な特徴
- ✅ 完全オフライン環境でインターネットサービスを再現
- ✅ HTTP、HTTPS、DNS、FTP、SMTP、IRC など30種類以上のプロトコルに対応
- ✅ すべての通信をログとして記録(解析に役立つ)
- ✅ マルウェアが要求するファイルにカスタムレスポンスを返せる
- ✅ Linuxベースで動作し、REMnux・Kali Linuxに標準搭載・対応
- ✅ 無料・オープンソース
2. なぜINetSimが必要なのか?〜マルウェア解析の現場から〜
マルウェア解析における大きな課題
セキュリティ研究者がマルウェアを解析するとき、最大の問題のひとつが「インターネット接続」です。
マルウェアの多くは起動すると…
- 🔴 C2(Command and Control)サーバーに接続して命令を受ける
- 🔴 追加のマルウェアをダウンロードする
- 🔴 盗んだ情報を外部サーバーに送信する
- 🔴 DNSを使ってドメイン生成アルゴリズム(DGA)でランダムなドメインに接続を試みる
これらを実際のインターネット上で動かすのは極めて危険です。被害を広げる恐れがあるほか、攻撃者のサーバーに「サンプルを解析中」と気づかれる可能性もあります。
かといって完全に通信を遮断すると、マルウェアが「ネットワークがない」と判断して本来の動作をしない「サンドボックス検知」を行うものも多く存在します。
⚠️ 実際の攻撃事例で見るネットワーク通信の重要性
Emotet(エモテット) はC2サーバーへの定期的な通信なしに本格的なペイロードをダウンロードしません。INetSimのようなシミュレーション環境がないと、Emotetの実際の挙動の多くが観察できません。同様に TrickBot、Qakbot、Cobalt Strike Beacon なども通信が重要な動作をトリガーします。
INetSimが解決すること
INetSimは以下の絶妙なバランスを実現します:
| 状況 | マルウェアの視点 | 解析者の視点 |
|---|---|---|
| 完全遮断 | 「ネットがない」→動作停止・回避 | ❌ 本来の挙動が見えない |
| 実際のインターネット | 本来の動作をする | ❌ 危険・被害拡大のリスク |
| INetSim使用 | 「ネットに繋がった」→本来の動作開始 | ✅ 安全に通信・挙動を観察できる |
3. INetSimの仕組みとアーキテクチャ
全体像を理解しよう
INetSimの動作を理解するために、典型的なマルウェア解析環境のネットワーク構成を見てみましょう。
┌─────────────────────────────────────────────┐ │ 隔離されたネットワーク(VLAN等) │ │ │ │ ┌──────────────────┐ ┌────────────────┐ │ │ │ 感染マシン(VM) │ │ 解析マシン(VM) │ │ │ │ Windows等 │──▶│ Linux │ │ │ │ マルウェア実行中 │ │ INetSim起動中 │ │ │ │ │ │ Wireshark起動 │ │ │ └──────────────────┘ └────────────────┘ │ │ │ │ ※ 外部インターネットへの接続は完全遮断 │ └─────────────────────────────────────────────┘
INetSimの内部動作フロー
マルウェアが通信を試みたとき、INetSimは以下のように動作します:
- DNSリクエストをキャプチャ:マルウェアが「evil.com」のIPアドレスを問い合わせると、INetSimのDNSサービスが「自分(INetSimのIP)に来い」と返答
- HTTPリクエストを受け付け:マルウェアがそのIPにHTTPでアクセスしてきたら、INetSimのHTTPサービスが偽のレスポンスを返す
- すべてを記録:やり取りされた通信内容をすべてログファイルに書き出す
- ファイルの保存:マルウェアがアップロードしようとしたファイル(=盗んだデータ)もキャプチャして保存
INetSimが使うポート番号(デフォルト)
INetSimは起動すると、以下のポートで待ち受けを開始します:
| サービス名 | ポート(TCP/UDP) | 役割 |
|---|---|---|
| DNS | UDP/TCP 53 | ドメイン名解決(すべてINetSimのIPに返す) |
| HTTP | TCP 80 | Webアクセスの偽応答 |
| HTTPS | TCP 443 | SSL/TLS付きWebアクセスの偽応答 |
| FTP | TCP 21 | ファイル転送の偽応答 |
| FTPS | TCP 990 | SSL付きFTPの偽応答 |
| SMTP | TCP 25 | メール送信の偽応答(スパム送信マルウェア向け) |
| SMTPS | TCP 465 | SSL付きSMTP |
| POP3 | TCP 110 | メール受信の偽応答 |
| IMAP | TCP 143 | メール管理の偽応答 |
| IRC | TCP 6667 | チャット(古いボットのC2通信に使われる) |
| Syslog | UDP 514 | ログ収集の偽応答 |
| NTP | UDP 123 | 時刻同期の偽応答 |
| TFTP | UDP 69 | 簡易ファイル転送の偽応答 |
4. シミュレートできるサービス一覧(FACT付き)
INetSim 1.3.2(2020年時点の最新安定版)がサポートするサービスは以下の通りです:
📌 公式FACT:INetSim 1.3.2 がサポートするサービス数は 29種類。TCP/UDPを合わせると実質 30以上のプロトコル に対応しています。(出典:inetsim.org/documentation.html)
代表的なサービスの詳細
① HTTP / HTTPS サービス
マルウェアがWebサーバーにアクセスしようとすると、INetSimは偽のHTMLページや指定したファイルを返します。
特殊機能:URLパターンに応じてカスタムファイルを返せるため、マルウェアが特定のパスにアクセスしたとき「本物っぽい」レスポンスを返し、さらなる行動を引き出せます。
② DNS サービス
すべてのドメイン名照会に対し、INetSimのIPアドレスを返します。 これにより、マルウェアがどんなドメインに接続しようとしたかがわかります。DGAを使うマルウェア(Conficker、ZeuS等)の接続先候補ドメインをすべてログに残せます。
③ SMTP サービス
スパムメールを送信するマルウェア(スパムボット)が使うSMTPをシミュレート。マルウェアが送ろうとしたメールの宛先・内容・添付ファイルをすべてキャプチャします。
④ IRC サービス
古典的なボットネット(IRCボット)はIRCチャンネルに参加して攻撃者から命令を受けます。INetSimはIRCサーバーとしても動作し、ボットの接続・チャンネル参加をシミュレートします。
⑤ ダミーサービス(Dummy TCP/UDP)
INetSimが知らないプロトコルで通信が来た場合、Dummyサービスが全ポートでキャッチし、接続が来たことを記録します。未知のC2通信プロトコルの発見に役立ちます。
5. インストール方法(Kali Linux / REMnux)
方法① REMnux(最も推奨)
REMnux はマルウェア解析に特化したLinuxディストリビューションで、INetSimが最初からインストールされています。
REMnuxの公式サイト:https://remnux.org/
# REMnuxではすでにインストール済み。以下で確認できる which inetsim # → /usr/bin/inetsim # バージョン確認 inetsim --version
方法② Kali Linux へのインストール
# パッケージを更新してからインストール sudo apt update sudo apt install inetsim -y # インストール確認 inetsim --version # → INetSim 1.3.2 (2020-10-05)
方法③ 手動インストール(公式パッケージから)
# 依存パッケージのインストール sudo apt install perl libnet-server-perl libio-socket-ssl-perl \ libnet-dns-perl libdigest-sha-perl -y # 公式サイトからダウンロード wget https://www.inetsim.org/downloads/inetsim-1.3.2.tar.gz # 展開 tar xfz inetsim-1.3.2.tar.gz cd inetsim-1.3.2 # ファイルを配置 sudo cp -r . /opt/inetsim/
💡 初心者へのアドバイス:INetSimの学習には REMnux + VMware/VirtualBox の組み合わせが最も手軽です。REMnux の OVA ファイルをダウンロードしてインポートするだけで環境が整います。
6. 設定ファイルの読み方・カスタマイズ
設定ファイルの場所
# メイン設定ファイル /etc/inetsim/inetsim.conf # データディレクトリ(カスタムファイルを置く場所) /var/lib/inetsim/ # ログファイルの出力先(デフォルト) /var/log/inetsim/
inetsim.conf の主要な設定項目
# INetSimが待ち受けるIPアドレス # 解析環境のLinuxマシンのIPに合わせる(例:192.168.56.1) service_bind_address 192.168.56.1 # DNSサービスが返すIPアドレス # すべてのドメイン解決をこのIPに向ける dns_default_ip 192.168.56.1 # HTTP/HTTPSのデフォルトドキュメントルート # ここに置いたファイルがマルウェアに返される http_fakefile /var/lib/inetsim/http/fakefiles/ # ログ出力先 logfile /var/log/inetsim/service.log reportfile /var/log/inetsim/report.txt # 各サービスの有効/無効 start_service dns start_service http start_service https start_service ftp start_service smtp start_service pop3 start_service imap start_service irc # 必要なサービスだけをコメントアウトして有効化
カスタムHTTPレスポンスの設定
マルウェアが特定のURLにアクセスしたとき、特定のファイルを返すよう設定できます。例えば、マルウェアが http://update.evil.com/payload.exe にアクセスしたとき、こちらで用意したEXEファイル(無害なもの)を返すことができます。
# /etc/inetsim/inetsim.conf の http セクション # URLパターンに応じたファイルを返す設定 # 形式: http_fakefile<ローカルファイルパス> http_fakefile .exe /var/lib/inetsim/http/fakefiles/sample.exe application/octet-stream http_fakefile .zip /var/lib/inetsim/http/fakefiles/sample.zip application/zip http_fakefile .pdf /var/lib/inetsim/http/fakefiles/sample.pdf application/pdf
7. 実際の使い方・操作手順
ステップ1:ネットワーク環境の準備
マルウェア解析の典型的なネットワーク設定(VirtualBoxの例):
- 感染VM(Windows):ホストオンリーアダプター → IPアドレス例:
192.168.56.101、デフォルトゲートウェイ:192.168.56.1、DNSサーバー:192.168.56.1 - INetSim VM(Linux):ホストオンリーアダプター → IPアドレス:
192.168.56.1
重要:WindowsのDNSとデフォルトゲートウェイの両方をINetSimのIPに向けることで、すべての通信がINetSimを経由します。
ステップ2:設定ファイルの編集
sudo nano /etc/inetsim/inetsim.conf # 以下の行を環境に合わせて編集 service_bind_address 192.168.56.1 dns_default_ip 192.168.56.1
ステップ3:INetSimの起動
# INetSimを起動 sudo inetsim # または設定ファイルを明示的に指定 sudo inetsim --config /etc/inetsim/inetsim.conf # バックグラウンド実行する場合 sudo inetsim &
起動に成功すると、以下のような出力が表示されます:
INetSim 1.3.2 (2020-10-05) by Markus Schöne and Thomas Hungenberg Using log directory: /var/log/inetsim/ Using data directory: /var/lib/inetsim/ Using report directory: /var/log/inetsim/ Listening on 192.168.56.1 * Starting DNS service on port 53/udp... done. * Starting DNS service on port 53/tcp... done. * Starting HTTP service on port 80/tcp... done. * Starting HTTPS service on port 443/tcp... done. * Starting FTP service on port 21/tcp... done. * Starting SMTP service on port 25/tcp... done. * Starting IRC service on port 6667/tcp... done. ...
ステップ4:動作確認
# INetSimのDNSが動いているかテスト # (感染VM から、または別のターミナルから) nslookup google.com 192.168.56.1 # → "google.com" が 192.168.56.1 に解決されればOK # HTTP が応答しているかテスト curl http://192.168.56.1/ # → ダミーのHTMLページが返ってくればOK
ステップ5:マルウェアを実行して観察
感染VM(Windows)でマルウェアサンプルを実行します。このとき:
- INetSimのコンソールに リアルタイムで通信ログが流れていきます
- 同時にWiresharkでパケットキャプチャしておきましょう
ステップ6:ログの確認
# リアルタイムでログを監視 tail -f /var/log/inetsim/service.log # レポートを確認(セッション終了後) cat /var/log/inetsim/report.txt # マルウェアがアップロードしたファイルを確認 ls -la /var/lib/inetsim/smtp/ ls -la /var/lib/inetsim/ftp/
ステップ7:INetSimの停止
# Ctrl+C で停止、またはプロセスをkill sudo killall inetsim # 停止後にレポートが /var/log/inetsim/report_YYYYMMDD_HHmmss.txt に生成される
8. Wiresharkとの連携(パケット解析)
INetSimはログを記録しますが、パケットレベルの詳細な解析には Wireshark との組み合わせが必須です。
Wireshark のインストールと起動
# Kali Linux / REMnux では最初からインストール済み # インストールされていない場合: sudo apt install wireshark -y # GUIで起動 sudo wireshark & # CUIで起動(tshark) sudo tshark -i eth0 -w /tmp/capture.pcap
役立つWiresharkフィルタ(INetSim解析向け)
| 目的 | Wiresharkフィルタ |
|---|---|
| DNSクエリのみ表示 | dns |
| HTTPトラフィックのみ | http |
| 特定IPの通信 | ip.addr == 192.168.56.101 |
| SMTPのみ | smtp |
| DNS + HTTPを同時に | dns or http |
| HTTP POSTリクエスト | http.request.method == "POST" |
| 特定ポートへの通信 | tcp.port == 6667(IRC) |
Wireshark × INetSim でわかること
- 🔍 マルウェアが問い合わせた全ドメイン名(C2サーバー候補)
- 🔍 HTTP通信のUser-Agent(マルウェアの種類特定に役立つ)
- 🔍 POSTで送信しようとしたデータの内容(盗んだ情報の可能性)
- 🔍 SMTPで送ろうとしたスパムメールの内容
- 🔍 未知プロトコルのカスタムC2通信のバイナリデータ
9. マルウェア解析への実践的な活用方法
ケーススタディ①:ランサムウェアの通信解析
ランサムウェアの多くは暗号化を開始する前に、以下の通信を行います:
- C2サーバーに接続して暗号化キーを要求
- 感染成功をC2サーバーに報告
- 独自の身代金要求ページのURLを取得
INetSim環境で実行することで、ランサムウェアが接続しようとしたC2ドメイン・IPをすべて記録できます。暗号化が進まないケースもありますが(C2からキーが返ってこないため)、通信パターンの分析には十分な情報が得られます。
ケーススタディ②:バンキングトロイの木馬の情報窃取解析
ZeuS、Dridex、TrickBotなどのバンキングトロイは、感染後に以下を行います:
- Webブラウザのフォームデータを窃取してHTTP POSTで送信
- スクリーンショットをFTPでアップロード
- 設定ファイルをHTTPでC2からダウンロード
INetSimはHTTP POSTの内容をログに記録するため、マルウェアが何を送ろうとしたかを確認できます。これが実際の環境なら盗まれていたデータです。
ケーススタディ③:DGA(ドメイン生成アルゴリズム)マルウェアの解析
📌 DGA(Domain Generation Algorithm)とは?
マルウェアがC2サーバーのドメインを毎日・毎週ランダムに生成するアルゴリズム。例えばConfickerは1日に最大50,000個のドメインを生成します。防御側がC2ドメインをブロックしにくくするための技術です。
INetSimはすべてのDNSクエリに応答するため、DGAマルウェアが生成した全候補ドメイン名をログに記録できます。これによりDGAアルゴリズムの逆算・予測が可能になります。
# DNSログからDGAの候補ドメインを抽出する例
grep "dns" /var/log/inetsim/service.log | grep "query" | awk '{print $NF}' | sort | uniq
ケーススタディ④:マルウェアのダウンローダー解析
ダウンローダー型マルウェア(Downloader/Dropper)は:
- 特定URLに HTTP GET リクエストを送る
- EXEやDLLをダウンロードする
- ダウンロードしたファイルを実行する
INetSimの http_fakefile 設定で EXEの拡張子のリクエストに無害なファイルを返すことで、ダウンローダーが何をダウンロードしようとしたか(URL・User-Agent・HTTPヘッダ)をすべてキャプチャできます。
10. プロが使うTips・注意点
Tip 1:FakeFilesディレクトリを活用する
/var/lib/inetsim/http/fakefiles/ に各種ファイルを置いておくと、マルウェアが様々なファイルタイプを要求したときにリアルなレスポンスができます。
ls /var/lib/inetsim/http/fakefiles/ # 通常以下のようなファイルが用意されている: # sample.exe sample.zip sample.pdf sample.html sample.doc ...
Tip 2:マルウェアのSSL/TLS通信を解読する
INetSimはHTTPSサービスで自己署名証明書を使います。マルウェアの中には証明書を検証しないものも多く、INetSimのHTTPS証明書を受け入れてくれます。しかし証明書を厳密に検証するマルウェアには別のアプローチ(MITMツールとの組み合わせ)が必要です。
Tip 3:iptablesと組み合わせて全通信をリダイレクト
# 感染VMからの全TCP 80番通信をINetSimにリダイレクト sudo iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 80 # 全UDP 53番(DNS)をリダイレクト sudo iptables -t nat -A PREROUTING -i eth0 -p udp --dport 53 -j REDIRECT --to-port 53
Tip 4:INetSim + Remnux + FlareVM の組み合わせ
プロのマルウェア解析環境:
- REMnux(Linux VM):INetSim + Wireshark でネットワーク解析
- FlareVM(Windows VM):マルウェアを実際に実行する環境(FLARE by Mandiant)
- ホストオンリーネットワーク:2つのVMを繋ぎ、外部には接続しない
✅ この構成が業界標準として広く使われています。 SANS Instituteのマルウェア解析コース(FOR610)でも同様の構成が採用されています。
注意点:INetSimの限界を知る
- ⚠️ 暗号化されたC2通信(カスタム暗号)はINetSimだけでは復号できない
- ⚠️ 証明書ピン留め(Certificate Pinning)を実装したマルウェアはINetSimのHTTPS証明書を拒否する
- ⚠️ サンドボックス検知が高度なマルウェアはINetSimの応答パターンから解析環境と気づく場合がある
- ⚠️ INetSimはあくまで静的なシミュレーター。本物のC2サーバーのように動的な命令を返せない
11. INetSim環境から学ぶ実際のセキュリティ対策
INetSimを使ったマルウェア解析で得られた知見は、実際の組織防御に直接活かせます。
対策① DNSモニタリングの重要性
INetSim解析でわかることは、マルウェアはまずDNSを使って通信先を探すということです。
実際の対策:
- DNS over HTTPS(DoH)を使わない怪しい通信を検知するDNSファイアウォールの導入
- Cisco Umbrella、Cloudflare Gateway などのDNSフィルタリングサービスの活用
- 組織内の全DNSクエリをSIEM(セキュリティ情報イベント管理)に送ってログ分析
対策② HTTPSでも油断しない
マルウェアの多くはHTTPS(暗号化)通信を使います。「暗号化 = 安全」ではありません。
実際の対策:
- SSL/TLS インスペクションの導入(ゲートウェイで通信を復号して検査)
- 正規のCAが発行していない自己署名証明書を使う通信のブロック
- 証明書の透明性ログ(CT Logs)のモニタリング
対策③ SMTP通信の監視
INetSimのSMTPログを見ると、マルウェアが大量のスパムを送ろうとすることがわかります。
実際の対策:
- 端末から直接ポート25番(SMTP)への通信をファイアウォールでブロック
- SPF、DKIM、DMARCの正確な設定によるメールなりすまし対策
対策④ ネットワークセグメンテーション
INetSim解析環境そのものが示すように、ネットワークを隔離することが最大の防御です。
実際の対策:
- 重要サーバーを別VLANに隔離
- 感染端末の横展開(ラテラルムーブメント)を防ぐマイクロセグメンテーション
- ゼロトラストアーキテクチャの採用
対策⑤ IOC(侵害指標)の活用
INetSimで収集したC2ドメイン・IPアドレスは IOC(Indicators of Compromise)として活用できます。
実際の対策:
- MISP(Malware Information Sharing Platform)などのTIP(脅威インテリジェンスプラットフォーム)に登録・共有
- 収集したIOCをファイアウォール・EDR・SIEMに自動フィードバック
12. まとめ
INetSimは 「偽のインターネット環境を作るツール」というシンプルなコンセプトながら、マルウェア解析において非常に強力な役割を果たします。
この記事のおさらい
| 項目 | 内容 |
|---|---|
| INetSimとは | インターネットサービスをシミュレートするオープンソースツール |
| 目的 | マルウェアを安全に動かしてネットワーク通信を観察・記録 |
| 対応プロトコル | DNS、HTTP、HTTPS、FTP、SMTP、IRC など30種類以上 |
| 使用環境 | REMnux(標準搭載)、Kali Linux |
| 組み合わせツール | Wireshark、FlareVM、tshark |
| 最新安定版 | 1.3.2(2020-10-05リリース) |
| ライセンス | GPL v2(無料・オープンソース) |
🎯 初心者の方へ:最初の一歩
- REMnux の OVA をダウンロードし、VirtualBox/VMwareにインポート
- WindowsのVM(FlareVMや通常のWindows)を別途作成
- 両VMを「ホストオンリーネットワーク」で繋ぐ
- REMnuxで
sudo inetsimを起動 - WindowsのDNS設定をREMnuxのIPに向ける
- Wiresharkを起動して、Windowsから何かアクセスしてみる
これだけで、基本的なINetSim環境の完成です!
セキュリティの世界では、「攻撃を知ることが最大の防御」と言われます。INetSimはその学習ツールとして最適な選択肢のひとつです。ぜひ安全な仮想環境で試してみてください。
参考リソース
・INetSim 公式サイト:https://www.inetsim.org/
・INetSim 公式ドキュメント:https://www.inetsim.org/documentation.html
・REMnux 公式サイト:https://remnux.org/
・SANS FOR610 Malware Analysis Course:https://www.sans.org/cyber-security-courses/malware-analysis/
・FlareVM(Mandiant):https://github.com/mandiant/flare-vm


コメント