SSL 2.0 と 3.0 の脆弱性修正:#
SSL (Secure Sockets Layer) は、データの安全な転送を確保するために広く使用されていた暗号化プロトコルです。SSL 2.0 と 3.0 は初期のバージョンですが、もはや安全ではないと見なされており、現代のプロトコル(TLS 1.2 や TLS 1.3)に置き換えられています。
SSL 2.0 と 3.0 の脆弱性:
- SSL 2.0:弱い暗号アルゴリズムやセキュリティ検証の欠如など、複数のセキュリティ脆弱性があります。広く廃止されています。
- SSL 3.0:SSL 2.0 に比べて暗号アルゴリズムは改善されましたが、POODLE 攻撃(Padding Oracle On Downgraded Legacy Encryption)などの深刻なセキュリティ問題が依然として存在するため、推奨されなくなっています。
SSL 2.0 と SSL 3.0 の検出方法:
- ツールを使用してスキャン:多くのセキュリティスキャンツール(OpenSSL など)を使用して、ウェブサイトが SSL 2.0 と SSL 3.0 をサポートしているかどうかを検出できます。
openssl s_client -connect <hostname>:443 -ssl2
openssl s_client -connect <hostname>:443 -ssl3
接続が成功した場合、そのプロトコルがサーバーによってサポートされていることを示します。
- サーバー設定の確認:サーバー上の SSL/TLS 設定を確認し、SSL 2.0 または SSL 3.0 がサポートされていないことを確認できます。
- Apache の場合、
ssl.conf
またはhttpd.conf
ファイル内のSSLProtocol
設定を確認します:
SSLProtocol all -SSLv2 -SSLv3
- Nginx の場合、
nginx.conf
ファイル内のssl_protocols
設定を確認します:
ssl_protocols TLSv1.2 TLSv1.3;
- ブラウザの開発者ツールで確認:ブラウザの開発者ツール(Chrome や Firefox など)を使用して、ネットワークリクエストの暗号化プロトコルバージョンを確認することもできます。開発者ツールの「ネットワーク」タブで、HTTPS リクエストの詳細を確認し、プロトコルバージョンはレスポンスヘッダーに表示されます。
- 自動スキャンツール:自動化ツール(Nmap など)を使用して、サーバーがサポートしている SSL/TLS プロトコルをスキャンできます。例えば:
nmap --script ssl-enum-ciphers -p 443 <hostname>
"SWEET32" :#
"SWEET32" は、TLS および SSL プロトコルにおける中程度の強度の暗号スイート(3DES など)に対する攻撃手法で、主に 2 ブロック衝突攻撃(birthday bound attack)に使用されます。具体的には、64 ビットブロックサイズの暗号アルゴリズム(3DES やいくつかの古い暗号スイート)に影響を与えます。
なぜ中程度の強度の暗号スイートは安全でないのか?#
- SWEET32 攻撃の原理:3DES(および他の 64 ビットブロックに基づく暗号アルゴリズム)の設計上の欠陥により、攻撃者は長時間のデータトラフィックの中で暗号化データブロックの衝突を見つけ、情報を漏洩させることができます。攻撃の成功確率は、暗号化データ量の増加に伴って増加します。
- 推奨される対策:この攻撃は大規模なデータ転送(長時間の HTTPS セッションなど)で成功しやすいため、現代のベストプラクティスは、3DES のようなすべての 64 ビットブロックサイズの暗号アルゴリズムを無効にすることです。
サーバーがサポートしているすべての暗号スイートを確認:
openssl s_client -connect example.com:443 -cipher 'ALL'
解決策#
- 中程度の強度の暗号スイート(3DES など)を無効にする:サーバーは強力な暗号スイート(AES 暗号や ChaCha20 など)のみをサポートするように構成すべきで、3DES、RC4 などの安全でないスイートは無効にする必要があります。
サーバー設定にアクセスできる場合は、使用している Web サーバー(Apache、Nginx など)に応じて適切に設定できます。
例えば、Apache では、ssl.conf
ファイルで 3DES および他の弱いスイートを無効にできます:
SSLCipherSuite HIGH:!aNULL:!MD5:!3DES
Nginx では、同様の設定を使用できます:
ssl_ciphers 'TLS_AES_128_GCM_SHA256:TLS_AES_256_GCM_SHA384:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:!3DES';
- 現代の暗号スイートを有効にする:AES や ChaCha20 などの現代の暗号スイートを有効にすることを推奨します。有効にするスイートは TLS 1.2 または TLS 1.3 の標準に準拠していることを確認してください。
例えば、以下は強力な暗号アルゴリズムのみを有効にした推奨の暗号スイート設定です:
SSLProtocol TLSv1.2 TLSv1.3
SSLCipherSuite ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256:TLS_AES_128_GCM_SHA256:TLS_AES_256_GCM_SHA384
- TLS 1.2 または TLS 1.3 にアップグレード:サーバーが TLS 1.2 または TLS 1.3 のみをサポートし、SSLv3 および TLS 1.0/1.1 は無効にされていることを確認します。現代の暗号スイートとプロトコルバージョンは、SWEET32 攻撃のリスクを効果的に低減できます。
サーバーの設定ファイル ssl.conf で、古いプロトコルバージョンが無効になっていることを確認します:
SSLProtocol TLSv1.2 TLSv1.3