はじめに
管理アクセスの経路を絞っても、その通信を保護する暗号方式が弱ければ、盗聴や中間者攻撃の余地が残ります。また、機器そのものに物理的に触れられる環境では、コンソールや USB を経由した操作のリスクも考える必要があります。FortiGate のハードニングでは、暗号化のグローバル設定・管理 GUI の証明書・物理アクセスの保護を合わせて見直すことで、攻撃面をさらに縮小できます。
本記事では、FortiGate の暗号化と物理アクセスまわりの堅牢化を CLI 中心にまとめます。設定全体の優先度は『FortiGate ハードニングの優先度と確認手順』で扱っています。
- 強い暗号のみを許可するグローバル設定(
strong-cryptossl-static-key-ciphersdh-params) - 管理 GUI の SSL 証明書を正規の証明書へ置き換える手順
- TPM と機密データの暗号化、USB 自動インストールや BIOS の保護
- NTP による時刻同期
- 未使用インターフェース・プロトコルと開放ポートの整理
暗号化と物理の堅牢化は、強い暗号方式を既定に保ち、管理 GUI の証明書を信頼できるものに置き換え、物理アクセスを前提とした保護と未使用要素の無効化で攻撃面を減らす、という流れで整理できます。以降では各設定を順に扱います。
暗号化のグローバル設定
FortiGate は、HTTPS・SSH・TLS・SSL の各通信で使う暗号方式をグローバルに制御できます。既定でも一定の強度はありますが、弱い暗号が許可されていないかを確認し、必要に応じて強化します。
strong-crypto を有効にすると、強い暗号アルゴリズムのみが許可されます。あわせて、静的キーの暗号スイートを無効化し、Diffie-Hellman の鍵長を引き上げます。出荷時設定: strong-crypto enable・ssl-static-key-ciphers enable・dh-params 2048。推奨値は、静的キーの無効化と dh-params 8192 です。
config system global
set strong-crypto enable
set ssl-static-key-ciphers disable
set dh-params 8192
end互換性の都合で strong-crypto を無効にせざるを得ない場合は、SSH 側の弱い方式を個別に無効化して補強します。
config system global
set ssh-hmac-md5 disable
set ssh-cbc-cipher disable
endなお、管理 GUI の HTTPS が使う TLS バージョン(admin-https-ssl-versions)と HTTP リダイレクトは、関連記事『FortiGate 管理アクセス制限の手順』で扱っています。本セクションは暗号スイートの強度に絞っています。
確認: show full-configuration system global | grep -e strong-crypto -e ssl-static-key-ciphers -e dh-params
参照: 暗号化のグローバル設定は Best Practices(FortiOS 8.0)の Hardening を確認しています。
https://docs.fortinet.com/document/fortigate/8.0.0/best-practices/555436/hardening
管理 GUI の SSL 証明書
FortiGate は既定で、Fortinet_GUI_Server という証明書を HTTPS の管理アクセスに使います。これは機器内蔵の CA(Fortinet_CA_SSL)で署名された自己署名系の証明書のため、内蔵 CA を信頼していないブラウザーでは証明書の警告が表示されます。
警告を解消する方法は 2 つあります。
内蔵 CA 証明書を管理端末に導入する: ダッシュボードの管理者ウィジェットから「HTTPS CA 証明書のダウンロード」で Fortinet_CA_SSL を取得し、端末の信頼するルート証明書ストアへ導入します。社内で管理する少数の端末からのアクセスに向きます。
正規の証明書へ置き換える: 公的 CA や社内 CA が署名した証明書を導入し、管理 GUI に割り当てます。複数の利用者や外部からのアクセスに向きます。
正規の証明書へ置き換える場合の流れは次のとおりです。
- 「システム」>「証明書」で CSR を生成します(鍵長は 2048 ビット以上を推奨)。
- CA で署名を受け、署名済みのローカル証明書と CA 証明書を「システム」>「証明書」からインポートします。
- インポートした証明書を管理 GUI に割り当てます。
config system global
set admin-server-cert "<certificate-name>"
end割り当て後は、管理 GUI へアクセスして証明書情報が想定どおりか確認します。DNAT やポートフォワード経由でアクセスする場合は、証明書の SAN にアクセス先の IP アドレスが含まれている必要がある点に注意します。
確認: show full-configuration system global | grep admin-server-cert
参考: Fortinet「New default certificate for HTTPS administrative access」
“the FortiGate uses the certificate named Fortinet_GUI_Server for HTTPS administrative access”
(FortiGate は HTTPS 管理アクセスに Fortinet_GUI_Server という証明書を使用する)
https://docs.fortinet.com/document/fortigate/7.2.0/new-features/499047/new-default-certificate-for-https-administrative-access-7-2-1
機密データと物理アクセスの保護
ここまでの設定は通信経路の保護が中心でしたが、機器そのものに物理的に触れられる環境では、別の経路からの侵害も考える必要があります。公式のハードニングガイドでも、FortiGate は物理的に保護された場所に設置することが推奨されています。物理アクセスがあると、再起動後に別のファームウェアを読み込まれるなど、これまでの対策を回避される可能性があるためです。物理アクセスとシリアル番号で管理者パスワードをリセットできる maintainer アカウントの扱いは、関連記事『FortiGate 管理者アカウントと認証設定の手順』で扱っています。
TPM による機密データの暗号化(private-data-encryption)
TPM(Trusted Platform Module)を搭載する機種では、private-data-encryption を有効にすると、設定ファイル内のパスワードや秘密鍵などの機密データを暗号化できます。TPM はマスター暗号化パスワードを保管し、そこから生成する一次鍵を機器内に閉じて保持するため、物理アクセスがあっても機密データの取り出しを困難にします。出荷時設定: disable。
config system global
set private-data-encryption enable
end有効化すると 32 桁の 16 進数のマスター暗号化パスワードの入力を求められます。TPM の対応可否は、diagnose hardware deviceinfo tpm などのコマンドが存在するかで確認できます。
運用上、特に注意したいのがバックアップと復元です。
- 暗号化された設定のバックアップは、同じマスター暗号化パスワード(鍵)を持つ機器でなければ復元できません。 無効化すると、それまでに暗号化したバックアップへアクセスできなくなります。
- FOS 7.6.1 以降は鍵がランダム生成に変わりました。 鍵を再生成・変更した場合や、別の機器(故障時の RMA 交換機など)では、暗号化済みバックアップを復元できません。設定のバックアップ管理を FortiManager 側で行う運用が選択肢になります。
- 一部の v7.4 ビルドで有効化したのち v7.6.6 へアップグレードすると、パスワードが失われる事象が案内されています。HA パスワードが失われるとスプリットブレインにつながる可能性があるため、アップグレード前に対象バージョンの注意事項を確認します。
GUI では「システム」>「設定」のセキュリティの項目で有効・無効を切り替えられます。RMA や移行時の復元手順に直結するため、運用フローと合わせて検討します。
確認: show full-configuration system global | grep private-data-encryption
参考: Fortinet「Trusted platform module support」
“the dedicated module hardens the FortiGate by generating, storing, and authenticating cryptographic keys”
(専用モジュールが暗号鍵の生成・保管・認証を行い FortiGate を堅牢化する)
https://docs.fortinet.com/document/fortigate/6.2.0/cookbook/893277/trusted-platform-module-support
USB 自動インストールの無効化
FortiGate は、USB メモリ内のファームウェアやコンフィグを起動時に自動適用する auto-install 機能を持ちます。物理的に保護できない環境では、無効化することで、USB を使った意図しない設定・ファームウェアの適用を防げます。
config system auto-install
set auto-install-config disable
set auto-install-image disable
end出荷時設定はバージョンや機種で異なります。資料が基準とする FOS 7.4.7 では有効、現行の公式ハードニングガイド(7.2/8.0)では無効と案内されています。適用前に show で現状を確認することをおすすめします。
確認: show full-configuration system auto-install | grep auto
参照: USB 自動インストールと物理セキュリティの推奨は Best Practices の Hardening を確認しています。
https://docs.fortinet.com/document/fortigate/8.0.0/best-practices/555436/hardening
BIOS セキュリティレベルとファームウェア署名
FortiGate の物理機器は、Fortinet 独自の FortiBootLoader から起動します。BIOS のセキュリティレベルは、アップロードされる FortiOS ファームウェア・AV エンジン・IPS エンジンの署名と整合性の検証の厳格さを決めます。
- レベル 2: Fortinet と第三者 CA の両方の署名と整合性が一致しないと正常動作しません。
- レベル 1: Fortinet CA の署名のみを要求し、一致しないファイルは動作はするものの GUI・CLI に警告を表示します。
- レベル 0(非推奨): コードの検証を行いません。
BIOS をサポートしない機種(FortiGate-VM など)はレベル 1 相当として動作します。現在のレベルとファームウェア署名の状態は get system status の Security Level と Firmware Signature で確認できます。セキュリティレベルの変更は機種により手順が異なり、起動時の BIOS メニューから行います。対応機種や手順は、利用機種の公式ナレッジ記事で確認します。サポートされる機種では、より高いレベルを維持し、署名済み(certified)のファームウェアを使うことを推奨します。
確認: get system status(Security Level・Firmware Signature の表示)
攻撃面を減らすその他の設定
最後に、暗号化や物理とは別に、攻撃面を縮小するうえで押さえておきたい設定を整理します。
NTP による時刻同期
正確な時刻は、証明書の有効期限の判定、ログのタイムスタンプ、2 要素認証のワンタイムパスワードなど、多くの機能の前提になります。複数機器のログを突き合わせるフォレンジックでも、時刻のずれは事象の前後関係の誤認につながります。NTP サーバーと同期させることで、これらの一貫性を保てます。
config system ntp
set type custom
set ntpsync enable
config ntpserver
edit 1
set server <ntp-ip>
next
end
endFortiGate 自身が NTP サーバーとしてクライアントへ応答する必要がない場合は、サービスの提供を絞ります。提供先を制御する場合は、Local-in-Policy を併用します(詳細は関連記事『FortiGate 管理アクセス制限の手順』を参照)この設定は、スポークの 2 要素認証やログ管理の前提にもなります。
確認: show system ntp、同期状態は diagnose sys ntp status
未使用インターフェースとプロトコルの無効化
使用していないインターフェースは無効化し、不要な検出系プロトコルを停止することで、情報収集に使われ得る経路を減らせます。多くの検出系プロトコルは既定で無効ですが、有効化されていないかを確認します。
config system interface
edit <unused-port>
set status down
next
endインターフェース単位では、LLDP の送信(lldp-transmission)やデバイス識別(device-identification)などの有効・無効も確認します。
確認: show system interface <name>
開放ポートの確認
FortiOS は、有効になっている機能に必要なポートのみを開放します。逆に言えば、不要な機能を無効化すれば、その機能が使うポートは閉じられます。公式のハードニングガイドには、FortiOS が開放し得る受信・送信ポートの一覧が掲載されているため、自環境で開いているポートと突き合わせて、不要なものを整理します。残ったポートのうち、特定の送信元のみに絞りたいものは、Local-in-Policy で制御します。
確認: 有効なサービスとインターフェースの管理アクセス(allowaccess)を点検し、不要なものを無効化します。
参考: Fortinet「Hardening your FortiGate」
“ports are only open if the feature using them is enabled”
(ポートは、それを使う機能が有効な場合にのみ開放される)
https://docs.fortinet.com/document/fortigate/6.4.0/hardening-your-fortigate/995103/building-security-into-fortios
まとめ
FortiGate の暗号化と物理アクセスの堅牢化は、強い暗号方式を既定に保ち、管理 GUI の証明書を信頼できるものに置き換え、物理アクセスを前提とした保護と未使用要素の無効化で攻撃面を減らす作業です。TPM や USB、BIOS の設定は復元手順や機種に依存するため、運用フローと合わせて判断します。NTP による時刻同期は、他の設定やログ運用の前提として整えておきます。
- 強い暗号方式を既定に保つグローバル設定の確認
- 管理 GUI の SSL 証明書の正規証明書への置き換え
- TPM による機密データの暗号化と復元・RMA への配慮
- USB 自動インストールの無効化と BIOS セキュリティレベルの維持
- NTP による時刻同期の確保
- 未使用インターフェース・プロトコルの無効化
- 開放ポートの最小化と Local-in-Policy での制御
以上、最後までお読みいただきありがとうございました。
