この記事は
CentOS6.6でWebサーバのSSLのセキュリティ対策
https://qiita.com/qiitamatumoto/items/3bc4a22918412a7a169b
の改訂版です。またこの記事を書くにあたって以下の文献を参考にしています。
https://www.marineroad.com/staff-blog/16042.html
[SSL] SSL/TLS暗号化設定を見直そう!!(その2)
この記事は上記記事をもとにした、難しい事を考えるのが面倒な管理者が書いた文章です(^_^;
追記: 2018/1/19, 採点基準が変わったようなので修正。BEAST対策について加筆
追記: 2018/1/29, X-Frame-Options レスポンスヘッダの加筆について、注意事項を追記。
#はじめに
最近WebサーバのSSL関係のセキュリティ報告が多いのですが、たくさんあってよくわかりませんので、チェックツールを使ってみました。
https://www.ssllabs.com/ssltest/index.html
SSL Server Test
#管理下のWebサーバを検査してみた。
管理下のサーバは某大学のWebサーバで、OSはCentOS6.9およびCentOS7.4で、WebサーバはOS標準のApache、SSLの証明書はUPKI
https://certs.nii.ac.jp/
UPKI電子証明書発行サービス
を用いています。
Webサーバ(OS標準のapache)のSSL周りの設定(/etc/httpd/conf.d/ssl.conf)はUPKIのサーバ証明書の設定のみで、それ以外はOSのdefaultのままです。
それで検査してみた結果。
評価はC。
##CentOS6.9の例
執筆時点の最新版
httpd-2.2.15-60.el6.centos.6.i686.rpmおよびmod_ssl-2.2.15-60.el6.centos.6.i686.rpmで確認しました。
#CentOS7.4の例
執筆時点の最新版httpd-2.4.6-67.el7.centos.6.x86_64.rpmおよび mod_ssl-2.4.6-67.el7.centos.6.x86_64.rpmで確認しました。
#設定変更
CentOS6.9およびCentOS7.4でのウイークポイントを調べると共通していまして、
##Protocols
プロトコルでSSLv3がウイークポイントという指摘。
##CipherSuite
長いので一部分のみ掲載しますが、こんな感じで多数指摘されます。
全体を通してみると、ウイークポイントが指摘されているCipherSuiteにはすべてRC4と3DESとTLS_RSAという文字列が入っています。また合格したCipherSuiteにはRC4と3DESという文字列は入っていません。(注記: TLS_RSAとTLS_DHE_RSAとは別みたい。)
##設定変更例
CentOS6.9のssl.confのデフォルト設定は以下のとおりです。
SSLProtocol all -SSLv2
SSLCipherSuite DEFAULT:!EXP:!SSLv2:!DES:!IDEA:!SEED:+3DES
CentOS7.4のssl.confのデフォルト設定は以下の通りです。
SSLProtocol all -SSLv2
SSLCipherSuite HIGH:MEDIUM:!aNULL:!MD5:!SEED:!IDEA
それぞれに, ProtocolからSSLv3を削除する設定(-SSLv3)および、ChiperSuiteからRC4および3DESおよびRSAを除外する設定(!RC4と!3DESと!RSA)をします。(注記: !RSAをしてもTLS_DHE_RSAは無効にならないみたい。)
CentOS6.9設定変更例
SSLProtocol all -SSLv2 -SSLv3
SSLCipherSuite DEFAULT:!EXP:!SSLv2:!DES:!IDEA:!SEED:!RC4:!3DES:!RSA
CentOS7.4設定変更例
SSLProtocol all -SSLv2 -SSLv3
SSLCipherSuite HIGH:MEDIUM:!aNULL:!MD5:!SEED:!IDEA:!RC4:!3DES:!RSA
次に、BEAST対策が必要な場合はTLSv1.0を無効にする必要があります。
SSL と TLS の CBC モードに選択平文攻撃の脆弱性
http://jvndb.jvn.jp/ja/contents/2011/JVNDB-2011-002305.html
ただしこの対策をすると古いブラウザが切られますのでリスク判断を行ったほうがよいとおもいます。
SSLlabでTLSv1を有効/無効にして対応ブラウザを比較してみました。無効にして残ったブラウザはすべてTLSv1.2対応していました。そのためTSLv1を停止するならTLSv1.1を停止しても対応状況に変化はないようです。なのでついでにTLSv1.1も停止しても問題ないようです。(かなり独断と偏見)
# 引数に -TLSv1 -TLSv1.1を追加。
SSLProtocol all -SSLv2 -SSLv3 -TLSv1 -TLSv1.1
次に、SSLとは直接関係ありませんが、次の設定が必要な場合は検討をしてください。
CentOS6.9とCentOS7.4にはTRACEメソッドを無効にする設定。
http://itochif.com/contents/Security/Apache/apache_003000.html
[Apache] TRACEメソッドを無効にする - itochif.com
TraceEnable Off
CentOS6.9にはエンティティタグ(ETag)の設定をします。(補足:CentOS7は不要)
https://qiita.com/bezeklik/items/1c4145652661cf5b2271
Apacheセキュリティ設定
FileETag MTime Size
フレーム内への表示などを禁止する必要がある場合は、次の設定を検討してください。
https://developer.mozilla.org/ja/docs/Web/HTTP/X-Frame-Options
X-Frame-Options レスポンスヘッダ
Header always append X-Frame-Options SAMEORIGIN
追記:2018/1/29: 上記の設定は事前に身内のWebサーバからフレームを使って参照されてないか確認ください。もし参照されていた場合は以下の資料を参考にして別のタブでリンクを開くように書き換えを依頼すればおそらく良いかとおもいます。
http://htmlst.hatenablog.jp/entry/entry/2017/01/12/2230
別タブでリンクを開くようにする方法
次に、Webサーバのコンテンツのディレクトリにindex.htmlがおいてある場合はindex.htmlが表示されますが、もし無い場合は、ディレクトリの中身が表示される事があります。この設定が好ましくない場合は、設定を調べてOptions から Indexesを削除してください。Optionsは複数ある場合もありますので、すべてを調べてみてください。(副作用を検討して削除を行ってください。)。なお、「-Indexes」は無効にする設定ですので。
$ cd /etc/httpd/
$ grep Indexes */*.conf
設定例。
# Options Indexes FollowSymLinks
Options FollowSymLinks
その他推奨設定については参考文献をご覧ください。
上記の変更後、apacheを再起動してください。
/sbin/service httpd restart
補足: 次の文献などで挙げられている
https://rms-digicert.ne.jp/howto/basis/Forward_Secrecy_Apache_Ngix.html
ApacheとNginxでのForward Secrecy設定方法
設定「SSLHonorCipherOrder on」は今回指定していません。この指定をする場合は、「SSLCipherSuite」を真面目に書く必要があるからです(^_^; この記事で挙げているような、ダメなものを除外するだけの設定ではおそらく悪い影響が出ると思います。
#上記変更後のSSLlabの評価
##CentOS6.9/7.4の評価(BEAST未対応)
CからAに改善しました。
##CentOS6.9/7.4の評価(BEAST対応済み)
BEAST未対応よりProtocol supportが改善しています。
#最後に
ほかにもウイークポイントが指摘されていますが、ここまでにしておきます(^_^;
以上です。