Japan

関連リンク

関連リンク

関連リンク

関連リンク

サイト内の現在位置

FOGとCAPEv2を用いた物理マシンでのマルウェア解析環境構築

NECセキュリティブログ

2025年4月4日

NECサイバーセキュリティ技術統括部 セキュリティ技術センターの松本隆志です。

本ブログでは、「FOG」と呼ばれるネットワーク経由でOSイメージ配布や復元などが行えるオープンソースのツールを紹介します。FOGを活用することで、マルウェア解析後の物理マシンを復元することが可能です。また、「CAPEv2」と呼ばれる自動マルウェア解析システムとFOGを連携させ、物理マシンを用いてマルウェアを自動解析する方法を紹介します。

注意: 本ブログの内容の悪用は厳禁です。また、本ブログの内容を使用したことによって発生する不利益等について筆者はいかなる責任も負いません。

目次

はじめに

一般的にマルウェア解析は、解析環境の復元が容易に行える仮想環境上で実施されることが多いです。しかし、一部のマルウェアは、仮想環境を認識すると本来の悪意ある挙動を隠すことがあり、仮想環境での解析が困難になる場合があります。こうしたマルウェアの回避手法に対応するための一つの手段が、物理マシンを用いた解析です。仮想環境を検知・回避するマルウェアや、ハードウェア依存の挙動を解析する場合には、実機を使用した解析が有効です。しかし、物理マシンで解析を行う場合は、仮想環境のようにスナップショットを取得する機能がないため、解析環境の復元に時間がかかってしまうという課題があります。

本ブログでは、このような課題を軽減するFOGnew window[1]new window[2]を利用した物理マシンの環境復元手法について紹介します。また、FOGとCAPEv2new window[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を連携させた自動解析方法について紹介します。

zoom拡大する
図 1 検証環境の構成図

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参照)。

zoom拡大する
図 2 インストールするLinuxのバージョンに関する質問

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

zoom拡大する
図 3 FOGのインストールモードに関する質問

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

zoom拡大する
図 4 ネットワークインタフェースに関する質問

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

zoom拡大する
図 5 ルータアドレスに関する質問

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

zoom拡大する
図 6 DNSサーバに関する質問

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

zoom拡大する
図 7 DHCPサービスの導入に関する質問

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

zoom拡大する
図 8 言語パックの追加に関する質問

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

zoom拡大する
図 9 HTTPS対応に関する質問

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

zoom拡大する
図 10 証明書に記載するホスト名に関する質問

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

zoom拡大する
図 11 情報収集に関する質問

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

zoom拡大する
図 12 設定の最終確認に関する質問

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

zoom拡大する
図 13 FOGデータベースの更新確認メッセージ

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

zoom拡大する
図 14 FOGデータベースのインストールと更新に関するWebページ

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

zoom拡大する
図 15 インストール完了メッセージ

以上でFOGサーバのインストールが完了しました。

各種設定変更

初期パスワードの変更

インストール完了後、FOGサーバのWeb管理画面にログインするためのアカウントが発行されます。デフォルトのユーザ名は、「fog」、パスワードは「password」で設定されています。パスワードの設定変更は、以下の手順で行えます。

  1. ブラウザで「http://localhost/fog/management」を開きます。
  2. デフォルトのユーザ名とパスワード(fog/password)を入力して、ログインします(図 16参照)。
zoom拡大する
図 16 FOGのログインフォーム

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

zoom拡大する
図 17 FOGのユーザ一覧ページ

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

zoom拡大する
図 18 FOGのパスワード設定ページ

以上の手順で初期パスワードの変更が完了しました。

DHCPサーバの調整

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

zoom拡大する
図 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を無効化することができます。

zoom拡大する
図 20 STPの無効化

設定変更後、以下のコマンドでnetplanの設定を適用します。

$ sudo netplan apply

以上でSTPの無効化が完了しました。

FOGの利用方法

本節では、まずFOGサーバへのマシン登録方法について紹介します。次にFOGを用いてイメージをキャプチャする方法、キャプチャしたイメージをデプロイして復元する方法をそれぞれ紹介します。

マシン登録

FOGサーバでマシンの管理を行うためには、まず対象マシンをFOGサーバに登録する必要があります。FOGサーバへのマシン登録は、以下の手順で行えます。

1. イメージのキャプチャ対象となる物理マシンを起動します。
2. UEFI/BIOSの設定画面から起動デバイスの優先順位を変更し、ネットワークからブートできるようにします。図 21の例では、「LAN」から起動できる設定にしています。

zoom拡大する
図 21 起動デバイスの優先順位設定

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

zoom拡大する
図 22 PXEブート画面の様子
zoom拡大する
図 23 FOGのメニュー画面

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

zoom拡大する
図 24 FOGサーバへの登録処理の様子

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

zoom拡大する
図 25 FOGに登録されたホスト一覧

イメージのキャプチャ

まずは、キャプチャしたいイメージの情報を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に示します。

zoom拡大する
図 26 新規イメージ作成の設定例

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

zoom拡大する
図 27 作成されたイメージ一覧

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

zoom拡大する
図 28 FOGに登録されたホスト一覧

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

zoom拡大する
図 29 Host Imageの設定例

3. 「Update」を選択して設定を更新します。

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

zoom拡大する
図 30 タスク選択メニュー

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

zoom拡大する
図 31 タスクの設定画面
zoom拡大する
図 32 タスク作成の成功画面

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

zoom拡大する
図 33 Partcloneによるイメージキャプチャ

以上の手順でイメージのキャプチャが完了しました。

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

zoom拡大する
図 34 イメージのキャプチャ履歴

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

zoom拡大する
図 35 キャプチャされたデータのサイズ

イメージのデプロイ

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

zoom拡大する
図 36 FOGに登録されたホスト一覧

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

zoom拡大する
図 37 タスク選択メニュー

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

zoom拡大する
図 38 タスク設定画面
zoom拡大する
図 39 タスク作成の成功画面

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

zoom拡大する
図 40 Partcloneによる復元処理

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

zoom拡大する
図 41 イメージ復元の履歴

FOGとCAPEv2を用いた物理マシンでの自動解析

CAPEv2の概要

CAPE(Config And Payload Extraction)は、Cuckoo Sandboxを基に開発されたマルウェア自動解析システムの一つです。CAPEは、これまでのCuckoo Sandboxと異なり、マルウェアのペイロードや設定情報の抽出を行う機能が追加されていることが特長です。もともとはPython 2をベースにCAPEv1の開発が進められていましたが、2019年10月20日にPython3に対応したCAPEv2が公開されました。現在はこちらのバージョンで開発が進められています。

また、CAPEv2は、FOGを利用した物理マシンでの自動解析new window[4]new window[5]に対応しています。本章では、FOGとCAPEv2の連携方法、実際に解析を試した結果について紹介します。

なお、CAPEv2の詳細な構築手順については、「オープンソースの自動マルウェア解析システム「CAPEv2」のご紹介」[6]をご参照ください。

FOGとCAPEv2の連携手順

本節では、FOGとCAPEv2を連携するための手順を紹介します。連携には、以下の4つを設定する必要があります。

  • ホスト名の変更
  • APIの有効化とトークンの確認
  • 物理マシンの設定変更
  • CAPEv2の設定変更

ホスト名の変更

FOGで管理しているホスト名とCAPEv2で管理するホスト名を一致させる必要があります。FOGが管理するホスト名については、以下の手順で変更が可能です。
1. 「Hosts」→「List All Hosts」を開き、図 42の画面から対象のホストを選択します。

zoom拡大する
図 42 FOGに登録されたホスト名一覧

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

zoom拡大する
図 43 ホスト名の変更

APIの有効化とトークンの確認

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

zoom拡大する
図 44 API System設定ページ

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

zoom拡大する
図 45 APIの有効化

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

zoom拡大する
図 46 FOGに登録されたユーザ一覧

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

zoom拡大する
図 47 User API Tokenの確認

物理マシンの設定変更

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参照)。

zoom拡大する
図 48 固定IPアドレス設定

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

zoom拡大する
図 49 FOGの管理ページ

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

zoom拡大する
図 50 FOG Clientのダウンロードリンク

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

zoom拡大する
図 51 FOG ClientインストーラのServer Address設定

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サーバへの通信を観測できていることから、仮想環境検知を回避できたことが分かります。

zoom拡大する
図 52 Remcosの解析結果の一部
zoom拡大する
図 53 Ursnifの解析結果の一部

おわりに

本ブログでは、「FOG」と呼ばれるネットワーク経由でOSイメージ配布や復元などが行えるオープンソースのツールを紹介しました。物理マシンを用いたマルウェア解析では、解析後の環境復元に時間がかかるという課題がありましたが、FOGを活用することで、約5分程度で復元可能であることを確認しました。また、FOGは、CAPEv2と連携させることで、物理マシンを用いた自動解析にも活用できます。実際に仮想環境を検知するマルウェアを用いて検証を行い、仮想環境の検知回避に有効であることを確認しました。マルウェア解析においてもFOGは、有用なツールの一つであり、ぜひ一度試してみることをおすすめします。

参考文献

執筆者プロフィール

松本 隆志(まつもと たかし)
セキュリティ技術センター リスクハンティング・アナリシスグループ

マルウェア解析や攻撃者の行動分析などの業務を経て、現在はペネトレーションテスト、脆弱性診断などに従事。
これまでに Botconf、JSAC、CODE BLUEで講演。
CISSP、情報処理安全確保支援士(RISS)、SANS FOR710 メダルを保持。
趣味は、CTFとコーヒーを飲むこと。

執筆者の他の記事を読む

Escキーで閉じる 閉じる