Japan
サイト内の現在位置
FOGとCAPEv2を用いた物理マシンでのマルウェア解析環境構築
NECセキュリティブログ2025年4月4日
NECサイバーセキュリティ技術統括部 セキュリティ技術センターの松本隆志です。
本ブログでは、「FOG」と呼ばれるネットワーク経由でOSイメージ配布や復元などが行えるオープンソースのツールを紹介します。FOGを活用することで、マルウェア解析後の物理マシンを復元することが可能です。また、「CAPEv2」と呼ばれる自動マルウェア解析システムとFOGを連携させ、物理マシンを用いてマルウェアを自動解析する方法を紹介します。
注意: 本ブログの内容の悪用は厳禁です。また、本ブログの内容を使用したことによって発生する不利益等について筆者はいかなる責任も負いません。
目次
はじめに
一般的にマルウェア解析は、解析環境の復元が容易に行える仮想環境上で実施されることが多いです。しかし、一部のマルウェアは、仮想環境を認識すると本来の悪意ある挙動を隠すことがあり、仮想環境での解析が困難になる場合があります。こうしたマルウェアの回避手法に対応するための一つの手段が、物理マシンを用いた解析です。仮想環境を検知・回避するマルウェアや、ハードウェア依存の挙動を解析する場合には、実機を使用した解析が有効です。しかし、物理マシンで解析を行う場合は、仮想環境のようにスナップショットを取得する機能がないため、解析環境の復元に時間がかかってしまうという課題があります。
本ブログでは、このような課題を軽減するFOG[1]
[2]を利用した物理マシンの環境復元手法について紹介します。また、FOGとCAPEv2
[3]を連携させ、物理マシンを用いた自動解析についても紹介します。
FOGを用いた物理マシンの環境復元
FOGの概要
FOG(Free Opensource Ghost)は、主にディスクのクローン作成や復元を行うためのオープンソースツールで、以下の機能があります。
- PXEブート環境の提供
- OSのイメージング(Windows、Linux、Mac OS Xに対応)
- 多様なディスク形式対応(パーティション、フルディスク、複数ディスクなど)
- クライアントへのソフトウェアインストール、ジョブ・スクリプト実行
- プリンタ管理
- ホスト名の変更とドメイン参加
- ユーザアクセスを追跡し、アイドル時に自動ログオフ・シャットダウン
- アンチウイルス機能
- ディスク削除
- 削除されたファイルの復元
- 不良ブロックのスキャン
以上のような機能からFOGは、クライアントへのイメージ配布やシステムのバックアップなどに利用されます。マルウェア解析においては、解析後の環境復元のツールとしてFOGを活用できます。
FOGのセットアップ
本節では、まず検証用に用意した環境について述べ、次にFOGサーバのインストール方法を紹介します。
検証環境
FOGの検証用に図 1のような構成の検証環境を用意しました。物理マシン1台にWindows 10 22H2をインストールし、さらに以下の仮想マシンを3台用意しました。
- FOG Server
- CAPEv2 Server
- INetSim Server
物理マシンとの接続には、USB接続のNICを使用し、FOG Server上に用意した仮想ブリッジ経由でアクセスできるように構成しています。
本章では、図 1の青枠の検証環境を用いたFOGサーバのセットアップ方法について紹介します。次章では、図 1全体の検証環境を用いたFOGとCAPEv2を連携させた自動解析方法について紹介します。


FOGサーバのインストール手順
まずは、FOGサーバのインストールに必要なスクリプトを準備します。FOGのStable Versionを以下のいずれかの方法でダウンロードして展開します。
- ZIPアーカイブ
$ wget https://github.com/FOGProject/fogproject/archive/stable.zip
$ unzip stable.zip
- TAR/GZアーカイブ
$ wget https://github.com/FOGProject/fogproject/archive/stable.tar.gz
$ tar xzf stable.tar.gz
- git
$ git clone https://github.com/fogproject/fogproject.git fogproject-stable
2025年3月28日の執筆時点では、Stable Versionとして、1.5.10.1650がダウンロードされました。
次に、以下のコマンドでFOGインストール用のシェルスクリプトを実行します。
$ sudo ./fogproject-stable/bin/installfog.sh
このシェルスクリプトを実行すると、以下のような質問が表示されるので、導入する環境に合わせて回答します。
1. インストールする環境のLinuxのバージョンについて問われます。検証環境のOSは、Ubuntuなので、「2」と回答します(図 2参照)。


2. FOGのインストールモードについて問われます。FOGサーバをインストールする必要があるため、「N」と回答します(図 3参照)。


3. 使用するネットワークインタフェースについて問われます。検証環境では、br0というブリッジで通信させたいので、「y」と回答し、その後「br0」と回答します(図 4参照)。


4. DHCPサーバのルータアドレス設定について問われます。検証環境では、10.30.30.1をルータアドレスとして設定させたいので、「y」と回答し、その後「10.30.30.1」と回答します(図 5参照)。


5. DHCPサーバのDNSサーバ設定ついて問われます。検証環境では、10.30.30.1をDNSサーバとして設定させたいので、「y」と回答し、その後「10.30.30.1」と回答します(図 6参照)。


6. DHCPサービスの導入ついて問われます。検証環境上にDHCPサービスをインストールさせたいので、「y」と回答します(図 7参照)。


7. 追加の言語パックのインストールについて問われます。日本語には対応していなさそうなので、「n」と回答します(図 8参照)。


8. FOGサーバのHTTPS対応について問われます。検証用に導入するため「n」と回答します(図 9参照)。


9. 証明書に記載するホスト名について問われます。デフォルトのままでよいので、「n」と回答します(図 10参照)。


10. OS名やバージョン情報の収集可否について問われます。情報の送信は控えたいので「n」と回答します(図 11参照)。


上記のすべての質問に回答すると、最終確認のメッセージが表示されます。表示された設定で問題なければ、「y」と回答し、インストールを開始させます(図 12参照)。


インストールの途中で、図 13のようなメッセージが表示されます。


指示にしたがい、ブラウザで「http://localhost/fog/management」を開くと、図 14のようなページが表示されます。FOGデータベースのバックアップやスキーマの更新に関するメッセージが記載されています。指示にしたがい、「Install/Update Now」ボタンを選択し、FOGデータベースをインストールします。


FOGデータベースのインストールが完了すると、以下のようなメッセージが表示されます(図 15参照)。


以上でFOGサーバのインストールが完了しました。
各種設定変更
初期パスワードの変更
インストール完了後、FOGサーバのWeb管理画面にログインするためのアカウントが発行されます。デフォルトのユーザ名は、「fog」、パスワードは「password」で設定されています。パスワードの設定変更は、以下の手順で行えます。
-
ブラウザで「http://localhost/fog/management」を開きます。
-
デフォルトのユーザ名とパスワード(fog/password)を入力して、ログインします(図 16参照)。


3. 「Users」→「List All Users」→「fog」ユーザを選択します(図 17参照)。


4. 「Change password」から新しいパスワードを入力し、「Update」を選択します(図 18参照)。


以上の手順で初期パスワードの変更が完了しました。
DHCPサーバの調整
FOGサーバを導入した環境に複数のネットワークインタフェースが接続されている場合、どのインタフェースでDHCPリクエストに応答させるのかを設定する必要があります。検証環境では、br0というブリッジに物理マシンを接続することを想定しているので、図 19のように「/etc/default/isc-dhcp-server」を編集します。


編集が完了したら、以下のコマンドで、isc-dhcp-server サービスを再起動します。
$ sudo systemctl restart isc-dhcp-server
以上でDHCPサーバの調整が完了しました。
STPの無効化
netplanでブリッジを構成すると、STP(Spanning Tree Protocol)がデフォルトで有効になります。STPが有効な場合、ポートが転送可能な状態に移行するまで約30秒かかり、その間はパケットが送信されません。PXEブートを行うクライアントがDHCP経由でIPアドレスを取得する際、この遅延によりIPアドレスの割り当てに失敗する可能性があります。図 20のようにnetplanの設定を行うことで、STPを無効化することができます。


設定変更後、以下のコマンドでnetplanの設定を適用します。
$ sudo netplan apply
以上でSTPの無効化が完了しました。
FOGの利用方法
本節では、まずFOGサーバへのマシン登録方法について紹介します。次にFOGを用いてイメージをキャプチャする方法、キャプチャしたイメージをデプロイして復元する方法をそれぞれ紹介します。
マシン登録
FOGサーバでマシンの管理を行うためには、まず対象マシンをFOGサーバに登録する必要があります。FOGサーバへのマシン登録は、以下の手順で行えます。
1. イメージのキャプチャ対象となる物理マシンを起動します。
2. UEFI/BIOSの設定画面から起動デバイスの優先順位を変更し、ネットワークからブートできるようにします。図 21の例では、「LAN」から起動できる設定にしています。


3. UEFI/BIOSの設定を保存して再起動します。再起動すると、図 22のようにPXEブートが開始されます。ブートに成功すると、図 23のようなFOGのメニュー画面が表示されます。




4. FOGのメニューから「Quick Registration and Inventory」を選択します。選択すると、図 24のような画面になり、FOGサーバへのマシン登録処理が開始されます。登録が完了すると、自動的に再起動されます。


5. FOGをインストールしたサーバから「http://localhost/fog/management」にアクセスします。
6. 「Hosts」→「List All Hosts」を選択します。マシン登録に成功していれば、このページに対象のホストが表示されます。


イメージのキャプチャ
まずは、キャプチャしたいイメージの情報をFOGに登録します。
1. 「Images」→「Create New Image」を選択し、キャプチャしたいイメージに合わせて以下の項目を入力します。
- Image Name
- Image Description
- Operating System
- Image Path
- Image Type
- Partition
- Image Enabled
- Replicate?
- Compression
- Image Manager
また、検証用に用意したWindows 10 22H2 の場合の設定例を図 26に示します。


2. 入力が完了したら、「Add」を選択します。イメージ作成が完了すると、図 27のようにイメージ一覧に追加されます。


次に、以下の手順でキャプチャ対象のホストに作成したイメージを割り当てます。
1. 「Hosts」→「List All Hosts」を開き、図 28の画面からキャプチャ対象のホストを選択します。


2. 「General」を開き、「Host Image」に作成したイメージを指定します。図 29の例では、「win10_22h2」を指定しています。


3. 「Update」を選択して設定を更新します。
最後に、以下の手順でイメージのキャプチャを実施します。
1. 「Basic Tasks」を選択し、図 30の画面から「Capture」を選択します。


2. 図 31の画面から「Task」を選択して、Captureタスクを登録します。登録に成功すると、図 32の画面に遷移します。




3. キャプチャ対象の物理マシンを起動します。タスクの登録ができていれば、図 33のように自動的にPartcloneが起動し、イメージのキャプチャが開始されます。


以上の手順でイメージのキャプチャが完了しました。
イメージのキャプチャログは、該当ホストの「Image History」から確認できます。図 34に実際の履歴を示します。検証環境では、4分30秒でイメージのキャプチャが完了しました。


また、キャプチャしたデータは、「/images/<イメージ名>」のディレクトリ配下に保存されます。図 35の結果から検証環境では、約5.3GB分が記録されていることが分かります。サイズが小さいように見えますが、これは、Partcloneがディスクの使用しているブロックだけを考慮してキャプチャを行っているためです。


イメージのデプロイ
イメージをデプロイし、キャプチャした時点に復元する方法について紹介します。イメージのデプロイは、以下の手順で行えます。
1. 「Hosts」→「List All Hosts」を開き、図 36の画面から復元対象のホストを選択します。


2. 「Basic Tasks」を選択し、図 37の画面から「Deploy」を選択します。


3. 図 38の画面から「Task」を選択して、Deployタスクを登録します。登録に成功すると、図 39の画面に遷移します。




4. 復元対象の物理マシンを起動します。タスクの登録ができていれば、図 40のように自動的にPartcloneが起動し、復元処理が開始されます。


以上の手順でイメージの復元が完了しました。実際にOS起動してみると、キャプチャを実施したタイミングに戻っていることが確認できました。イメージの復元ログは、該当ホストの「Image History」から確認できます。図 41に実際の履歴を示します。検証環境では、3分48秒でイメージの復元が完了しました。


FOGとCAPEv2を用いた物理マシンでの自動解析
CAPEv2の概要
CAPE(Config And Payload Extraction)は、Cuckoo Sandboxを基に開発されたマルウェア自動解析システムの一つです。CAPEは、これまでのCuckoo Sandboxと異なり、マルウェアのペイロードや設定情報の抽出を行う機能が追加されていることが特長です。もともとはPython 2をベースにCAPEv1の開発が進められていましたが、2019年10月20日にPython3に対応したCAPEv2が公開されました。現在はこちらのバージョンで開発が進められています。
また、CAPEv2は、FOGを利用した物理マシンでの自動解析[4]
[5]に対応しています。本章では、FOGとCAPEv2の連携方法、実際に解析を試した結果について紹介します。
なお、CAPEv2の詳細な構築手順については、「オープンソースの自動マルウェア解析システム「CAPEv2」のご紹介」[6]をご参照ください。
FOGとCAPEv2の連携手順
本節では、FOGとCAPEv2を連携するための手順を紹介します。連携には、以下の4つを設定する必要があります。
- ホスト名の変更
- APIの有効化とトークンの確認
- 物理マシンの設定変更
- CAPEv2の設定変更
ホスト名の変更
FOGで管理しているホスト名とCAPEv2で管理するホスト名を一致させる必要があります。FOGが管理するホスト名については、以下の手順で変更が可能です。
1. 「Hosts」→「List All Hosts」を開き、図 42の画面から対象のホストを選択します。


2. 「General」を選択し、「Host Name」をCAPEv2で管理しやすい名前に変更します。図 43の例では、「physical01」に変更しました。ここで設定したホスト名は、CAPEv2で使用されます。


APIの有効化とトークンの確認
CAPEv2からFOGを操作するためには、2つのAPIトークンを利用する必要があります。2つのトークンは、以下の手順で確認できます。
1. 「FOG Configuration」→「FOG Settings」→「API System」を選択します(図 44参照)。


2. 「API ENABLED」のチェックを入れ、「Update」を選択して設定を更新します(図 45参照)。


3. 「API TOKEN」の内容を記録しておきます。ここで確認した「API TOKEN」は、CAPEv2で使用されます。
4. 「Users」→「List All Users」を開き、CAPEv2で利用するユーザを選択します(図 46参照)。図 46の例では、デフォルトで生成される「fog」ユーザを選択しています。


5. 「API Settings」を選択し、「User API Token」の内容を記録しておきます(図 47参照)。ここで確認した「User API Token」は、CAPEv2で使用されます。


物理マシンの設定変更
CAPEv2でマルウェアを解析するためには、いくつか設定を変更しておく必要があります。以下の手順で設定変更を行います。
1. 「オープンソースの自動マルウェア解析システム「CAPEv2」のご紹介」[6]を参照し、以下の項目を設定します。
- 4-1. ファイアウォールの無効化
- 4-2. Windows Updateの自動更新の無効化
- 4-3. Windows Defenderの無効化
- 4-4. ユーザーアカウント制御(UAC)の無効化
- 4-5. ノイズの多いネットワークサービスの無効化
- 4-6. CAPEv2のエージェントのインストール
2. 「設定」→「ネットワークとインターネット」→「プロパティ」→「編集」を開き、固定IPアドレス設定を行います(図 48参照)。


3. ブラウザから「http://<FOGサーバのIPアドレス>」にアクセスします。
4. ページの末尾にある「FOG Client」を選択します。


5. 「Smart Installer(Recommended)」を選択し、FOG Clientのインストーラをダウンロードします。


6. ダウンロードしたインストーラを用いて、FOG Clientをインストールします。図 51以外の画面は、指示にしたがって進めます。図 51の画面では、「Server Address」の項目を編集し、FOGサーバのIPアドレスを入力します。


7. 物理マシンをシャットダウンし、FOGで再度イメージのキャプチャを行います。
CAPEv2の設定変更
FOGとCAPEv2の連携のため、以下の設定変更を行います。
1. 「/opt/CAPEv2/conf/cuckoo.conf」を次のように編集します。
[cuckoo]
# machinery = kvm
machinery = physical # 物理マシンで解析を行うので、physicalを指定します。
# freespace = 50000
freespace = 0 # ディスクの空き容量確認を無効にします。
# freespace_processing = 15000
freespace_processing = 0 # メモリの空き容量確認を無効にします。
[resultserver]
# ip = 192.168.1.1
ip = 0.0.0.0 # resultserverのbindするアドレスを指定します。
2. 「/opt/CAPEv2/conf/physical.conf」を次のように編集します。
[physical]
machines = physical01
interface = ens33
type = pure
[fog]
hostname = 10.30.30.1 # FOGサーバのIPアドレスを指定します。
apikey = <YOUR_API_TOKEN> # 確認したAPI TOKENを指定します。
user_apikey = <YOUR_USER_API_TOKEN> # 確認したUser API Tokenを指定します。
[physical01]
label = physical01 # FOGに入力したホスト名を指定します。
platform = windows
ip = 10.30.30.2 # 物理マシンに割り当てたIPアドレスを指定します。
resultserver_ip = 10.30.30.254 # CAPEv2のIPアドレスを指定します。
resultserver_port = 2042
arch = x64
3. 「/opt/CAPEv2/conf/routing.conf」を次のように編集します。
[routing]
# enable_pcap = no
enable_pcap = yes # pcapを取得するように変更します。
[inetsim]
# enabled = no
enabled = yes # INetSimを有効にします。
# server = 192.168.1.2
server = 10.30.30.100 # INetSimサーバのIPアドレスを指定します。
物理マシンでの自動解析の検証
前節で構築した環境を用いて、以下の2つの検体の解析を行いました。
これらの検体は、事前の調査で仮想環境を検知する機能を持っていることが分かっており、仮想マシン上で動作させた場合は、C2サーバへの通信を行わずに終了します。
検証環境を用いた解析結果を図 52、図 53に示します。それぞれC2サーバへの通信を観測できていることから、仮想環境検知を回避できたことが分かります。




おわりに
本ブログでは、「FOG」と呼ばれるネットワーク経由でOSイメージ配布や復元などが行えるオープンソースのツールを紹介しました。物理マシンを用いたマルウェア解析では、解析後の環境復元に時間がかかるという課題がありましたが、FOGを活用することで、約5分程度で復元可能であることを確認しました。また、FOGは、CAPEv2と連携させることで、物理マシンを用いた自動解析にも活用できます。実際に仮想環境を検知するマルウェアを用いて検証を行い、仮想環境の検知回避に有効であることを確認しました。マルウェア解析においてもFOGは、有用なツールの一つであり、ぜひ一度試してみることをおすすめします。
参考文献
- [1]FOG Project
https://fogproject.org/
- [2]GitHub - FOGProject/fogproject
https://github.com/FOGProject/fogproject
- [3]GitHub - kevoreilly/CAPEv2
https://github.com/kevoreilly/CAPEv2
- [4]Preparing the Guest(Physical Machine)- CAPE Sandbox v2.2 Book
https://capev2.readthedocs.io/en/latest/installation/guest_physical/
- [5]Using CAPE Sandbox and FOG to analyze malware on physical machines | by Mario Henkel | Medium
https://mariohenkel.medium.com/using-cape-sandbox-and-fog-to-analyze-malware-on-physical-machines-4dda328d4e2c
- [6]オープンソースの自動マルウェア解析システム「CAPEv2」のご紹介: NECセキュリティブログ | NEC
https://jpn.nec.com/cybersecurity/blog/231124/index.html - [7]VirusTotal - File - 5608583b4da5d0628d0f12fa308cc3a2c5a26e4db1adeb2d2d1b65edd1a014f5
https://www.virustotal.com/gui/file/5608583b4da5d0628d0f12fa308cc3a2c5a26e4db1adeb2d2d1b65edd1a014f5/details
- [8]VirusTotal - File - 3af18232a9175dea624a7947e6edef6a57457bdf6d3ba0ead58856a139db2832
https://www.virustotal.com/gui/file/3af18232a9175dea624a7947e6edef6a57457bdf6d3ba0ead58856a139db2832/
執筆者プロフィール
松本 隆志(まつもと たかし)
セキュリティ技術センター リスクハンティング・アナリシスグループ
マルウェア解析や攻撃者の行動分析などの業務を経て、現在はペネトレーションテスト、脆弱性診断などに従事。
これまでに Botconf、JSAC、CODE BLUEで講演。
CISSP、情報処理安全確保支援士(RISS)、SANS FOR710 メダルを保持。
趣味は、CTFとコーヒーを飲むこと。

執筆者の他の記事を読む
アクセスランキング
2025年3月30日~4月5日に読まれた記事のランキング