Forward Secrecy Not Implemented
Forward Secrecy が未実装
説明
Forward Secrecy(FS)、またはPerfect Forward Secrecy(PFS)は、長期的なサーバーの秘密鍵が漏洩した場合でも、暗号化通信に使用されるセッション鍵が侵害されないことを保証する仕組みです。これは、セッションごとに一意のエフェメラルセッション鍵(一時的な鍵)を生成することで実現され、これらの鍵は再利用や保存されることはありません。これらの鍵のエフェメラルな性質により、単一のセッションの期間中のみ存在するため、攻撃者が後から長期的な秘密鍵を取得したとしても、過去のセッションを復号することは不可能です。各セッション鍵は新しく生成され、セッション終了後に破棄されるため、通信のセキュリティが強固になります。
実務上では、これは攻撃者が暗号化されたトラフィックをキャプチャしたとしても、その特定のセッション鍵で暗号化されたデータにしかアクセスできないことを意味します。後からサーバーの長期的な秘密鍵を侵害したとしても、依然として過去のセッションを復号することはできず、これにより機密情報が過去に遡って復号されることから保護されます。
Forward Secrecy を実装しない際のリスク:
- 遡及的な復号: 攻撃者が秘密鍵を取得した場合、過去のデータを復号できる可能性があります。
- アタックサーフェスの拡大: FSが欠如していると、侵害された秘密鍵を伴う高度な攻撃のリスクが高まります。
- コンプライアンス違反: 多くのセキュリティ標準や規制は、暗号化されたデータを保護するためにForward Secrecyの使用を推奨しています。
シナリオ例: サーバーの秘密鍵を侵害した攻撃者は、Forward Secrecyが有効になっていない場合、過去にキャプチャしたすべてのトラフィックを復号できる可能性があります。ログイン情報、財務情報、個人データなどの機密情報が漏洩する恐れがあります。
Forward Secrecyの実装を怠ることは、強力な暗号化とデータ保護の仕組みを重視するPCI DSS、GDPR、HIPAAなどのセキュリティ標準への準拠に影響を与える可能性もあります。
推奨事項
Forward Secrecyの欠如による過去の通信の復号リスクを軽減するために、以下の対策をご検討ください:
-
Forward Secrecy の有効化: ECDHEやDHEなど、Forward Secrecyをサポートする鍵交換アルゴリズムを実装してください。これらのアルゴリズムは、接続ごとに一意のセッション鍵を生成することを保証し、長期的な鍵が侵害された場合でも、過去の通信を復号することを不可能にします。
-
強力な暗号スイートの使用: ECDHEまたはDHEと、AES-GCMやChaCha20-Poly1305などの強力な暗号化方式を組み合わせた暗号スイートを優先してください。これらの強力なスイートを優先することで、暗号化通信全体のセキュリティを強化できます。
-
TLS 1.2 または TLS 1.3 の使用: 常にTLS 1.2またはTLS 1.3を使用してください。TLS 1.3はデフォルトでForward Secrecyを強制するため、設定が簡素化され、設定ミスのリスクが軽減されます。TLS 1.2の場合、Forward Secrecyをサポートする暗号スイートのみが有効になっていることを確認してください。
-
非FS暗号スイートの無効化: RSA鍵交換やその他の静的な鍵の方式を利用するものなど、Forward Secrecyをサポートしない暗号スイートを削除するために、定期的にサーバー構成を監査してください。これにより、潜在的な脆弱性のリスクを最小限に抑えることができます。
-
TLS 設定の定期的なレビュー: 最新のセキュリティ勧告およびベストプラクティスに準拠するために、TLS設定を継続的に監視し、更新してください。このプロアクティブなアプローチにより、変化し続ける脅威に対してサーバーの安全性を確保できます。
構成スニペット例:
```nginx server { listen 443 ssl; server_name example.com;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_prefer_server_ciphers on;
ssl_ciphers 'ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384';
ssl_session_cache shared:SSL:10m;
ssl_session_tickets off;
# HSTSを有効にする (オプション、推奨)
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
}
```
<VirtualHost *:443>
ServerName example.com
SSLEngine on
SSLProtocol all -SSLv2 -SSLv3
SSLCipherSuite ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384
SSLHonorCipherOrder on
SSLSessionCache shmcb:/var/run/ssl_scache(512000)
SSLSessionCacheTimeout 300
# HSTSを有効にする (オプション、推奨)
Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains"
</VirtualHost>
リンク
標準
- SOC2_CONTROLS:
- CC_2_1
- CC_3_4
- CC_6_7
- CC_7_1
- OWASP_MASVS_L1:
- MSTG_CRYPTO_4
- OWASP_MASVS_L2:
- MSTG_CRYPTO_4
- OWASP_MASVS_v2_1:
- MASVS_CRYPTO_1
- MASVS_CRYPTO_2
- CCPA:
- CCPA_1798_150
- GDPR:
- ART_5
- ART_25
- ART_32
- PCI_STANDARDS:
- REQ_2_2
- REQ_3_7
- REQ_4_2
- REQ_6_2
- REQ_6_3
- REQ_6_4
- REQ_11_3
- HIPAA_CONTROLS:
- SECURITY252
- SECURITY212
- SECURITY213