はじめに
FortiOS 自身に影響する脆弱性が公表されたとき、本来の対応はパッチを含むバージョンへのアップグレードです。ただし、メンテナンスウィンドウの確保や HA 構成での検証、業務影響の調整などで、すぐにアップグレードできないこともあります。こうした「パッチ適用までの間」をしのぐ暫定策として、FortiGate には仮想パッチ(virtual patch)の仕組みがあります。
本記事では、FortiGate の仮想パッチを、仕組みから設定手順・確認方法・限界までまとめます。設定全体の優先度は『FortiGate ハードニングの優先度と確認手順』で扱っています。
- 仮想パッチが脆弱性を緩和する仕組み(IPS エンジンと FMWP データベース)
- 仮想パッチが対象とする通信と、対象外セッションの扱い
- local-in policy を使った仮想パッチの設定手順
- 適用状況とブロックされた通信の確認方法
- 暫定策としての位置づけと、恒久対応との関係
仮想パッチは、IPS エンジンが既知脆弱性のシグネチャを使い、FortiGate 自身宛の悪用通信をブロックする機能です。アップグレードを置き換えるものではなく、パッチ適用までのリスクを下げる暫定策として位置づけられます。以降では仕組みと設定を順に扱います。
仮想パッチとは
仮想パッチは、FortiGate の IPS エンジンを使って既知脆弱性の悪用を緩和する手法です。FortiGate 自身宛の通信に対して、FMWP(Firmware Virtual Patch)データベースを local-in policy で適用します。これにより、たとえば web GUI や管理アクセスを狙った既知の悪用通信を、FortiGuard から配信されるシグネチャでブロックできます。
通常のパッチがコードそのものを修正するのに対し、仮想パッチはコードを変えず、悪用にあたる通信を入口で遮断する点が異なります。脆弱性そのものが消えるわけではないため、恒久対応のアップグレードまでの時間を稼ぐ位置づけになります。
なお、この機能は FortiOS 7.2.4/7.4.0 以降で利用できます。利用には FMWP データベースを導入するためのライセンスが必要で、詳細は設定手順のセクションで扱います。
参考: Fortinet「Virtual patching on the local-in management interface」
“a method of mitigating vulnerability exploits by using the FortiGate’s IPS engine”
(FortiGate の IPS エンジンを用いて脆弱性の悪用を緩和する手法)
https://docs.fortinet.com/document/fortigate/7.6.6/administration-guide/393161/virtual-patching-on-the-local-in-management-interface
仮想パッチが脆弱性を緩和する仕組み
local-in policy で virtual-patch を有効にすると、IPS エンジンが次のように動作します。
- WAD プロセスが FortiGuard の API サーバーに問い合わせ、稼働中の FortiOS バージョンを狙う脆弱性の一覧を取得します。
- local-in インターフェース宛のセッションについて、ポート番号とプロトコルからサービスを識別し、スキャン対象かどうかを判定します。
- 該当する脆弱性シグネチャに一致する悪用通信を破棄し、IPS のセキュリティイベントログに記録します。
ここで押さえておきたいのが、スキャン対象が絞られている点です。現行の動作では、セッションのうちタグ付けされるのは Agentless VPN と web GUI のサービスです。タグ付けされたセッションに、稼働中の FortiOS バージョン向けの脆弱性シグネチャが存在しない場合、IPS エンジンはそのセッションをバイパスします。これは、悪用にあたる通信だけをスキャン・破棄して性能への影響を抑えるための仕組みです。
取得された脆弱性ルールは、CVE と対応づくシグネチャとして扱われます。たとえば、管理 API の認証バイパスを狙う通信は、対応する CVE のシグネチャにマッピングされた仮想パッチルールでブロックされます。

仮想パッチの設定手順
仮想パッチは、local-in policy で virtual-patch を有効にして適用します。設定の前に、いくつかの前提を確認します。
前提条件
- FMWP データベースを導入するためのライセンス(FMWR / Firmware ライセンス)が必要です。 ライセンスがないと FMWP データベースが導入されず、仮想パッチは機能しません。
- IPS エンジンが利用できる状態であること。仮想パッチは IPS エンジンが脆弱性シグネチャでスキャンする仕組みのためです。
- FortiGuard への接続。
virtual-patchを有効にすると、WAD プロセスが FortiGuard の API サーバーへ定期的に問い合わせ、脆弱性ルールを取得します。
FMWP データベースが導入されているかは、diagnose autoupdate versions で確認できます(次のセクションで扱います)
local-in policy での有効化
管理アクセスを受けるインターフェース宛の local-in policy に対し、virtual-patch を有効にします。
config firewall local-in-policy
edit 1
set intf "port2"
set srcaddr "all"
set dstaddr "all"
set action accept
set service "ALL"
set schedule "always"
set virtual-patch enable
next
endlocal-in policy の基本的な考え方(暗黙の deny がない点、ロックアウトのリスク、接続元の絞り込み)は、関連記事『FortiGate 管理アクセス制限の手順』で扱っています。仮想パッチを有効にする policy でも、コンソールアクセスを確保したうえで、メンテナンスウィンドウでの適用と確認をおすすめします。
確認: show firewall local-in-policy
参照: 設定手順とライセンス要件は公式ドキュメントを確認しています。
https://docs.fortinet.com/document/fortigate/7.6.6/administration-guide/393161/virtual-patching-on-the-local-in-management-interface
適用状況の確認と診断
設定後は、FMWP データベースの導入状況と、有効になっているシグネチャ、実際にブロックされた通信を確認します。
FMWP データベースのバージョンとライセンスの有効期限は、diagnose autoupdate versions で確認できます。出力の FMWP Definitions の項目に、バージョンと契約期限が表示されます。
diagnose autoupdate versions仮想パッチで有効になっている FMWP シグネチャの数と一覧は、次のコマンドで確認できます。
diagnose ips vpatch fmwp-status稼働中の FortiOS バージョンを狙う脆弱性ルールの一覧は、ベンダー・バージョン・製品を指定して問い合わせられます。
diagnose wad dev-vuln query vendor=fortinet&version=<fortios-version>&product=fortios実際に悪用通信がブロックされると、IPS のセキュリティイベントログ(種別 utm、サブタイプ ips)に記録されます。ログのメッセージには vPatch: の接頭辞とシグネチャ名が含まれ、アクションは dropped になります。GUI では「ログとレポート」の侵入防止(セキュリティイベント)でこれらのログを確認できます。なお、スキャン対象としてタグ付けされても、該当バージョン向けのシグネチャがなくバイパスされたセッションは、ログを生成しません。
確認: diagnose ips vpatch fmwp-status で有効シグネチャ数が想定どおりであること。
仮想パッチの位置づけと限界
仮想パッチは便利な暫定策ですが、いくつかの前提と限界を理解したうえで使うことが重要です。
第一に、仮想パッチは恒久対応ではありません。脆弱性そのものはコード上に残るため、パッチを含むバージョンへのアップグレードが本来の対応になります。仮想パッチは、アップグレードを計画・実施するまでのリスクを下げる時間稼ぎとして位置づけます。アップグレードの進め方や対応バージョンの確認は、関連記事『FortiGate アップグレードパスの確認手順』を参照してください。
第二に、緩和できる範囲が限られます。スキャン対象としてタグ付けされるのは Agentless VPN と web GUI のサービスで、対象外の経路や、FortiGuard にまだシグネチャが存在しない脆弱性は緩和できません。公表されたばかりの脆弱性では、シグネチャの配信状況を確認する必要があります。どの脆弱性が自環境に該当するかは、公開アドバイザリで確認します。脆弱性情報の追い方は、関連記事『FortiGate PSIRT の確認手順』で扱っています。
第三に、依存する前提があります。FMWP データベースを導入するライセンス、IPS エンジン、FortiGuard への接続が前提となるため、これらが満たされない環境では機能しません。あわせて、local-in policy の設定誤りによる管理アクセスの遮断にも注意が必要です。
仮想パッチは、管理アクセスの接続元制限(Trusted Host・local-in policy)や、外部インターフェースでの管理アクセス無効化といった他のハードニングと組み合わせることで、暫定期間のリスクをより下げられます。単独の対策として過信せず、多層の一部として扱うことをおすすめします。
まとめ
FortiGate の仮想パッチは、IPS エンジンと FMWP データベースを使い、FortiGate 自身宛の既知脆弱性の悪用通信を緩和する暫定策です。local-in policy で virtual-patch を有効にし、適用状況を診断コマンドと IPS ログで確認します。恒久対応はアップグレードであり、対象範囲やライセンスの前提を踏まえて、多層防御の一部として用います。
- IPS エンジンと FMWP データベースによる既知脆弱性の悪用緩和
- 即時アップグレードが難しい場合の暫定策としての位置づけ
- local-in policy での virtual-patch 有効化による適用
- 対象は Agentless VPN と web GUI で範囲が限定的
- FMWR ライセンス・IPS エンジン・FortiGuard 接続が前提
- 診断コマンドと IPS ログによる適用状況の確認
- 恒久対応はアップグレードであり多層防御の一部として併用
以上、最後までお読みいただきありがとうございました。
