Edited at
CentOSDay 18

CentOS6.9/CentOS7.4でWebサーバのSSLのセキュリティ対策

More than 1 year has passed since last update.

この記事は


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で確認しました。

CentOS6-Default-Summary.jpg


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で確認しました。

CentOS7-Default-Summary.jpg


設定変更

CentOS6.9およびCentOS7.4でのウイークポイントを調べると共通していまして、


Protocols

プロトコルでSSLv3がウイークポイントという指摘。

Protocol.jpg


CipherSuite

長いので一部分のみ掲載しますが、こんな感じで多数指摘されます。

CentOS6-cipherSuites.jpg

全体を通してみると、ウイークポイントが指摘されているCipherSuiteにはすべてRC4と3DESとTLS_RSAという文字列が入っています。また合格したCipherSuiteにはRC4と3DESという文字列は入っていません。(注記: TLS_RSAとTLS_DHE_RSAとは別みたい。)


設定変更例

CentOS6.9のssl.confのデフォルト設定は以下のとおりです。


/etc/httpd/conf.d/ssl.conf

SSLProtocol all -SSLv2

SSLCipherSuite DEFAULT:!EXP:!SSLv2:!DES:!IDEA:!SEED:+3DES

CentOS7.4のssl.confのデフォルト設定は以下の通りです。


/etc/httpd/conf.d/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設定変更例


/etc/httpd/conf.d/ssl.conf

SSLProtocol all -SSLv2 -SSLv3

SSLCipherSuite DEFAULT:!EXP:!SSLv2:!DES:!IDEA:!SEED:!RC4:!3DES:!RSA

CentOS7.4設定変更例


/etc/httpd/conf.d/ssl.conf

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も停止しても問題ないようです。(かなり独断と偏見)


/etc/httpd/conf.d/ssl.conf

# 引数に -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



/etc/httpd/conf/httpd.conf

TraceEnable Off


CentOS6.9にはエンティティタグ(ETag)の設定をします。(補足:CentOS7は不要)


https://qiita.com/bezeklik/items/1c4145652661cf5b2271

Apacheセキュリティ設定



/etc/httpd/conf/httpd.conf

FileETag MTime Size


フレーム内への表示などを禁止する必要がある場合は、次の設定を検討してください。


https://developer.mozilla.org/ja/docs/Web/HTTP/X-Frame-Options

X-Frame-Options レスポンスヘッダ



/etc/httpd/conf/httpd.conf

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

設定例。


/etc/httpd/conf/httpd.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未対応)

CentOS6-on-tlsv1.jpg

CからAに改善しました。


CentOS6.9/7.4の評価(BEAST対応済み)

CentOS6-off-tlsv1.jpg

BEAST未対応よりProtocol supportが改善しています。


最後に

ほかにもウイークポイントが指摘されていますが、ここまでにしておきます(^_^;

以上です。