現在のWeb通信の大半がhttps://で始まるURLであり、SSL/TLSによって暗号化されています。これは、通信のセキュリティを確保する上で不可欠な要素ですが、同時にファイアウォールやUTM(統合脅威管理)デバイスにおけるアプリケーション制御やアンチウイルス、侵入防止システム(IPS)などのセキュリティ機能に課題をもたらします。なぜなら、SSLによって暗号化されたトラフィックはデバイスが内容を解析できないためです。
FortiGateでは、この問題を解決するために、SSLインスペクション(deep-inspectionと呼ばれる完全復号型インスペクション)を使用し、暗号化された通信を復号・解析する機能を提供しています。本記事では、SSLインスペクションの設定方法と動作確認について確認します。
SSLインスペクションを使用しない場合の動作
SSLインスペクションを使用しない場合、暗号化されたトラフィックはそのままファイアウォールを通過します。これにより、HTTPS通信自体は許可されるものの、どのアプリケーションが通信しているのか、また通信内容が安全かどうかを判断することはできません。
GUIで【ポリシー&オブジェクト】-【ファイアウォールポリシー】-【新規作成】より以下の通り設定します。
端末からGoogleへアクセスし、トラフィックログを確認します。トラフィックログは、【ログ&レポート】-【転送トラフィック】で確認します。
IPアドレスの宛先はGoogleのグローバルアドレスであることが確認できます。この状態では、トラフィックログにHTTPS通信として記録されるものの、Googleへのアクセスなど具体的なアプリケーションの詳細は確認できません。
SSLインスペクションを設定し、アプリケーションを可視化
次に、SSLインスペクション(deep-inspection)を有効化して通信を可視化します。これにより、ファイアウォールを通過するトラフィックが復号され、アプリケーション制御やウイルス対策、コンテンツフィルタリングが正常に機能するようになります。
内部→外部で設定したポリシーにて、SSLインスペクションを deep-inspection にして、アプリケーションコントロールを有効にします。
端末からGoogleへアクセスすると、ブラウザーで証明書のエラーが出力されます。
このエラーは、FortiGateが復号時に自動生成したサーバ証明書をブラウザが信頼していないことが原因です。サーバ証明書を確認すると、発行者がFortigate(図はデフォルトで割り当てたホスト名)であり、 発行者のルート証明書がインストールされていないことがわかります。
このエラーは、端末に、Fortigateのルート証明書をインポートすることで解決します。
GUIで、【セキュリティプロファイル】-【SSL/SSHインスペクション】へ移動し、deep-inspection をダブルクリックします。
以下、CA証明書より、ルート証明書をダウンロードできます。ダウンロードをクリックします。
ダウンロードした証明書を「信頼されたルート証明機関」へインポート後、Googleへアクセスすると、証明書エラーが出力されなくなります。
ブラウザで証明書を確認すると、Fortigate自身が www.google.co.jp に対してのサーバ証明書を生成していることがわかります。また、サーバ証明書と先ほどインストールしたルート証明書がチェーンされていることも確認できます。
SSLインスペクションの利点と注意点
SSLインスペクションを有効化することで、FortiGateは暗号化された通信を復号し、アプリケーションの識別やセキュリティスキャンを実施できるようになります。
トラフィックログを確認すると、Googleへのアクセスに対して、アプリケーション名Google.Serviceが表示されています。これは、SSLインスペクションによりデータ通信を復号した後、UTMの一つであるアプリケーションコントロール機能によりアプリケーションごとにログが可視化されます。これにより、企業ネットワーク内のトラフィックを精査し、潜在的な脅威を事前に防ぐことが可能です。
【ログ&レポート】-【アプリケーションコントロール】では、アプリケーションコントロールに特化したログが出力されます。
>> 参考記事 : 【初心者】公開鍵暗号、認証局、デジタル署名をイメージで解説ルート証明書のイメージが難しい方は参照してください。
>> 参考記事 : SSLインスペクション除外の設定 FortiOS6.2.4
注意点として、SSLインスペクションをすべてのトラフィックに対して実行すると、処理負荷が増加し、パフォーマンスに影響を与える可能性があります。SSLインスペクションから除外する接続先を設定するには、この記事を参考にしてください。
deep-inspectionでは、データを復号化しましたが、別の方式として、証明書インスペクション(certificate-inspection)という方式もあります。
PaloaltoでSSL復号化するには、この記事を参考にしてください。
コメント
ビルトイン証明書は機器交換時にコンフィグでレストアできないとこは注意必要ですね
コメントありがとうございます。
おっしゃるとおりで、コンフィグとは別に証明書のバックアップ・リストアが必要となります。
注意しないといけないですね。
Configuration backups
https://docs2.fortinet.com/document/fortigate/6.2.0/cookbook/702257/configuration-backups
Technical Tip: How to take a backup and restore the local certificates of the firewall
https://community.fortinet.com/t5/FortiGate/Technical-Tip-How-to-take-a-backup-and-restore-the-local/ta-p/190406?externalID=FD48830
機会があれば、バックアップ・リストアについても検証してみようかと思います。
ビルトインのFortinet_CA_SSLはexport出来なかった記憶です
コメントありがとうございます。
おっしゃるとおり、ビルドイン証明書のエクスポートは制限がありそうです。
商用環境では、OpenSSLなどで発行した証明書を用いて実装した方がよろしいですね。
今後、SSLインスペクションを使用する環境での証明書の発行、バックアップ、リストアの観点も含めた実機検証の記事をシェアできればと考えております。
有益な情報いただき、ありがとうございました。