SSL/TLSのサーバー設定や脆弱性のテスト等を行う、bashスクリプト版のツール testssl.sh でのテストで検出されたセキュリティ問題への対処方法です。
今回は、WEBサーバーの設定(apache)についてです。
testssl.sh については、次の記事を参照してください。
TLS/SSL暗号をサポートするサービスをチェックする testssl.sh | パソコン鳥のブログ
テスト方法
次のように実行すると、https/ポート443番に対してテストします。
xxxxxxの箇所は、サーバー名またはURLを指定します。
この時、サーバー証明書の内容と、サーバー名またはURLで指定したサーバー名が異なると、証明書のテストで「certificate does not match supplied URI」となって問題が検出されますので、注意してください。
./testssl.sh xxxxxx
実行すると、次のようにチェック結果が表示されます。
下記では表示結果の一部分だけを示していますが、実際はこの後に続けていろいろ表示されます。
ここで検出された問題の対処方法を以降で説明します。
検出された問題の対処方法
以降ではセキュリティ重大度が CRITICAL(ターミナル上で桜色で表示される項目)、HIGH(赤)、MEDIUM(暗い黄色)への対処方法を説明します。
以降のssl.conf はCentOS/RockyLinux では /etc/httpd/conf.d/ssl.conf になります。
httpd.conf は /etc/httpd/conf/httpd.conf になります。
また設定を変更後、service httpd reload を実行して反映してください。
なお、SSLProtocol 、SSLCipherSuite を次のようにすると多くの問題が修正されます。
先に下記を設定してから testssl.sh を実行してください。
SSLProtocol all -SSLv2 -SSLv3 -TLSv1 -TLSv1.1
SSLCipherSuite !SHA1:!SHA256:!SHA384:!SSLv3:!DSS:AESGCM+ECDHE:AESGCM+EDH
注意点
複数のバーチャルホストでSSL設定を行っている場合
複数のバーチャルホストでsslの設定を行っている場合は、以降のssl.conf への設定はそれら全てで行わないと、問題が解決しません。
下記を実行して表示されたファイルで設定する必要があります。
cd /etc/httpd/conf.d/
grep "SSLEngine" *.conf
参考:ApacheでSSLv3の無効化に出来ない場合にやること
Let’s Encrypt 導入時の注意
Let’s Encrypt で証明書を導入している場合は、ssl.conf への記述は、
Include /etc/letsencrypt/options-ssl-apache.conf
の行より後におこなってください。
これは、Inlucdeしている options-ssl-apache.conf 内に SSLProtocol や SSLHonorCipherOrder、SSLCipherSuite の記述があり、Includeより前にこれらの項目を記述しても上書きされてしまうためです。
Testing protocols via sockets
testssl.sh の実行結果で、「Testing protocols via sockets」の箇所で検出された問題への対処方法です。
SSLv3、TLS 1、TLS 1.1
ssl.conf で SSLProtocol を以下にします。
SSLProtocol all -SSLv2 -SSLv3 -TLSv1 -TLSv1.1
Testing cipher categories
testssl.sh の実行結果で、「Testing cipher categories」の箇所で検出された問題への対処方法です。
LOW: 64 Bit + DES, RC[2,4] (w/o export)
ssl.conf で SSLProtocol 、SSLCipherSuite を以下にします。
SSLProtocol all -SSLv2 -SSLv3 -TLSv1 -TLSv1.1
SSLCipherSuite !SHA1:!SHA256:!SHA384:!SSLv3:!DSS:AESGCM+ECDHE:AESGCM+EDH
Triple DES Ciphers / IDEA
ssl.conf で SSLProtocol 、SSLCipherSuite を以下にします。
SSLProtocol all -SSLv2 -SSLv3 -TLSv1 -TLSv1.1
SSLCipherSuite !SHA1:!SHA256:!SHA384:!SSLv3:!DSS:AESGCM+ECDHE:AESGCM+EDH
Obsolete CBC ciphers (AES, ARIA etc.)
ssl.conf で SSLProtocol 、SSLCipherSuite を以下にします。
SSLProtocol all -SSLv2 -SSLv3 -TLSv1 -TLSv1.1
SSLCipherSuite !SHA1:!SHA256:!SHA384:!SSLv3:!DSS:AESGCM+ECDHE:AESGCM+EDH
Testing server preferences
testssl.sh の実行結果で、「Testing server preferences」の箇所で検出された問題への対処方法です。
Has server cipher order?
ssl.conf で SSLHonorCipherOrder を以下にします。
SSLHonorCipherOrder on
Negotiated cipher
ssl.conf で SSLHonorCipherOrder を以下にします。
SSLHonorCipherOrder on
Testing HTTP header response @ “/”
testssl.sh の実行結果で、「Testing HTTP header response @ “/”」の箇所で検出された問題への対処方法です。
Strict Transport Security
httpd.conf で以下を記述します。
Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains"
Server banner
httpd.conf で以下を記述します。
ServerTokens ProductOnly
ServerSignature off
Application banner
/etc/php.ini で次を設定します。
expose_php = Off
設定を変更後、service httpd reload を実行してください。
Testing vulnerabilities
testssl.sh の実行結果で、「Testing vulnerabilities」の箇所で検出された問題への対処方法です。
POODLE, SSL (CVE-2014-3566)
ssl.conf で SSLProtocol を以下にします。
SSLProtocol all -SSLv2 -SSLv3 -TLSv1 -TLSv1.1
SWEET32 (CVE-2016-2183, CVE-2016-6329)
ssl.conf で SSLProtocol 、SSLCipherSuite を以下にします。
SSLProtocol all -SSLv2 -SSLv3 -TLSv1 -TLSv1.1
SSLCipherSuite !SHA1:!SHA256:!SHA384:!SSLv3:!DSS:AESGCM+ECDHE:AESGCM+EDH
BEAST (CVE-2011-3389)
ssl.conf で SSLProtocol を以下にします。
SSLProtocol all -SSLv2 -SSLv3 -TLSv1 -TLSv1.1
LUCKY13 (CVE-2013-0169), experimental
ssl.conf で SSLProtocol 、SSLCipherSuite を以下にします。
SSLProtocol all -SSLv2 -SSLv3 -TLSv1 -TLSv1.1
SSLCipherSuite !SHA1:!SHA256:!SHA384:!SSLv3:!DSS:AESGCM+ECDHE:AESGCM+EDH
RC4 (CVE-2013-2566, CVE-2015-2808)
ssl.conf で SSLProtocol 、SSLCipherSuite を以下にします。
SSLProtocol all -SSLv2 -SSLv3 -TLSv1 -TLSv1.1
SSLCipherSuite !SHA1:!SHA256:!SHA384:!SSLv3:!DSS:AESGCM+ECDHE:AESGCM+EDH
参考
CentOS8で「TLS暗号設定ガイドライン」に準拠したSSLの暗号設定を行う – Qiita
Server Cipher Order enforcement | cPanel Forums
ApacheでSSLv3の無効化に出来ない場合にやること
TLS 暗号設定ガイドライン~安全なウェブサイトのために(暗号設定対策編)~
攻撃を受ける前に見直すApacheの基本的なセキュリティ10のポイント – レムシステム エンジニアブログ
openssl – How to disable CBC-mode ciphers – Information Security Stack Exchange
コメント