Security Casual Talks (すみだセキュリティ勉強会その2)

あんしんなWebサーバーのための
SSL設定

2013/12/07

FALZ (@falz_yineng)
FALZ
@falz_yineng

とあるネット企業での
サービス提供のインフ
ラ的なシステムを開発
/運用 しています。

趣味/興味:
中国語
東洋史/世界史
釣り
Apache で SSL の設定
どうやっていますか?
よくわからない
ほとんどデフォルト

しかもバージョン古い

http://www.flickr.com/photos/levork/5026708729/
怒られる

セキュリティ担当(人/部署)
外部スキャン結果
外部審査(PCI DSSなど)
http://www.flickr.com/photos/70609370@N00/7753084454/
なにすればいいの?
誰が「安全」と言ってくれるの?

でもあまり手を掛けたくない
http://www.flickr.com/photos/colinkinner/2200500024
簡単な設定で
堅牢にして

怒られたり
夜も眠れなく

ならないようにする

http://www.flickr.com/photos/tambako/4780304268/
https =
Hypertext Transfer Protocol Secure

https =
http + SSL/TLS
主にいじるところ(Linux

+ Apache)

http://www.flickr.com/photos/hinkelstone/2435823037/
SSLCipherSuite
SSLCipherSuite ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP:+eNULL

openssl のコマンドで
どんな暗号化種別か確認可能
$ openssl ciphers –v ‘{暗号化スイート}’
$ openssl ciphers -v 'ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP:+eNULL' | sort
AES128-SHA
SSLv3 Kx=RSA
Au=RSA Enc=AES(128) Mac=SHA1
AES256-SHA
SSLv3 Kx=RSA
Au=RSA Enc=AES(256) Mac=SHA1
DES-CBC-MD5
SSLv2 Kx=RSA
Au=RSA Enc=DES(56) Mac=MD5
DES-CBC-SHA
SSLv3 Kx=RSA
Au=RSA Enc=DES(56) Mac=SHA1
DES-CBC3-MD5
SSLv2 Kx=RSA
Au=RSA Enc=3DES(168) Mac=MD5
DES-CBC3-SHA
SSLv3 Kx=RSA
Au=RSA Enc=3DES(168) Mac=SHA1
DHE-DSS-AES128-SHA
SSLv3 Kx=DH
Au=DSS Enc=AES(128) Mac=SHA1
DHE-DSS-AES256-SHA
SSLv3 Kx=DH
Au=DSS Enc=AES(256) Mac=SHA1
DHE-RSA-AES128-SHA
SSLv3 Kx=DH
Au=RSA Enc=AES(128) Mac=SHA1
DHE-RSA-AES256-SHA
SSLv3 Kx=DH
Au=RSA Enc=AES(256) Mac=SHA1
EDH-DSS-DES-CBC-SHA
SSLv3 Kx=DH
Au=DSS Enc=DES(56) Mac=SHA1
EDH-DSS-DES-CBC3-SHA
SSLv3 Kx=DH
Au=DSS Enc=3DES(168) Mac=SHA1
EDH-RSA-DES-CBC-SHA
SSLv3 Kx=DH
Au=RSA Enc=DES(56) Mac=SHA1
EDH-RSA-DES-CBC3-SHA
SSLv3 Kx=DH
Au=RSA Enc=3DES(168) Mac=SHA1
EXP-DES-CBC-SHA
SSLv3 Kx=RSA(512) Au=RSA Enc=DES(40) Mac=SHA1 export
EXP-EDH-DSS-DES-CBC-SHA SSLv3 Kx=DH(512) Au=DSS Enc=DES(40) Mac=SHA1 export
EXP-EDH-RSA-DES-CBC-SHA SSLv3 Kx=DH(512) Au=RSA Enc=DES(40) Mac=SHA1 export
EXP-KRB5-DES-CBC-MD5
SSLv3 Kx=KRB5
Au=KRB5 Enc=DES(40) Mac=MD5 export
EXP-KRB5-DES-CBC-SHA
SSLv3 Kx=KRB5
Au=KRB5 Enc=DES(40) Mac=SHA1 export
EXP-KRB5-RC2-CBC-MD5
SSLv3 Kx=KRB5
Au=KRB5 Enc=RC2(40) Mac=MD5 export
EXP-KRB5-RC2-CBC-SHA
SSLv3 Kx=KRB5
Au=KRB5 Enc=RC2(40) Mac=SHA1 export
EXP-KRB5-RC4-MD5
SSLv3 Kx=KRB5
Au=KRB5 Enc=RC4(40) Mac=MD5 export
EXP-KRB5-RC4-SHA
SSLv3 Kx=KRB5
Au=KRB5 Enc=RC4(40) Mac=SHA1 export
EXP-RC2-CBC-MD5
SSLv2 Kx=RSA(512) Au=RSA Enc=RC2(40) Mac=MD5 export
EXP-RC2-CBC-MD5
SSLv3 Kx=RSA(512) Au=RSA Enc=RC2(40) Mac=MD5 export
EXP-RC4-MD5
SSLv2 Kx=RSA(512) Au=RSA Enc=RC4(40) Mac=MD5 export
EXP-RC4-MD5
SSLv3 Kx=RSA(512) Au=RSA Enc=RC4(40) Mac=MD5 export
KRB5-DES-CBC-MD5
SSLv3 Kx=KRB5
Au=KRB5 Enc=DES(56) Mac=MD5
KRB5-DES-CBC-SHA
SSLv3 Kx=KRB5
Au=KRB5 Enc=DES(56) Mac=SHA1
KRB5-DES-CBC3-MD5
SSLv3 Kx=KRB5
Au=KRB5 Enc=3DES(168) Mac=MD5
KRB5-DES-CBC3-SHA
SSLv3 Kx=KRB5
Au=KRB5 Enc=3DES(168) Mac=SHA1
KRB5-RC4-MD5
SSLv3 Kx=KRB5
Au=KRB5 Enc=RC4(128) Mac=MD5
KRB5-RC4-SHA
SSLv3 Kx=KRB5
Au=KRB5 Enc=RC4(128) Mac=SHA1
RC2-CBC-MD5
SSLv2 Kx=RSA
Au=RSA Enc=RC2(128) Mac=MD5
RC4-MD5
SSLv2 Kx=RSA
Au=RSA Enc=RC4(128) Mac=MD5
RC4-MD5
SSLv3 Kx=RSA
Au=RSA Enc=RC4(128) Mac=MD5
RC4-SHA
SSLv3 Kx=RSA
Au=RSA Enc=RC4(128) Mac=SHA1

ほぼデフォルトの
ままのサーバ
まずやること
 SSLv2 を使わない
 暗号化強度の低いものを除外
1. EXP
2. ADH
3. すでに安全でないとみなされているもの
a. RC2
b. DES
$ openssl ciphers -v 'ALL:!ADH:!EXP:RC4+RSA:+HIGH:+MEDIUM:-LOW:-SSLv2:-eNULL' | sort
AES128-SHA
SSLv3 Kx=RSA
Au=RSA Enc=AES(128) Mac=SHA1
AES256-SHA
SSLv3 Kx=RSA
Au=RSA Enc=AES(256) Mac=SHA1
DES-CBC3-SHA
SSLv3 Kx=RSA
Au=RSA Enc=3DES(168) Mac=SHA1
DHE-DSS-AES128-SHA
SSLv3 Kx=DH
Au=DSS Enc=AES(128) Mac=SHA1
DHE-DSS-AES256-SHA
SSLv3 Kx=DH
Au=DSS Enc=AES(256) Mac=SHA1
DHE-RSA-AES128-SHA
SSLv3 Kx=DH
Au=RSA Enc=AES(128) Mac=SHA1
DHE-RSA-AES256-SHA
SSLv3 Kx=DH
Au=RSA Enc=AES(256) Mac=SHA1
EDH-DSS-DES-CBC3-SHA
SSLv3 Kx=DH
Au=DSS Enc=3DES(168) Mac=SHA1
EDH-RSA-DES-CBC3-SHA
SSLv3 Kx=DH
Au=RSA Enc=3DES(168) Mac=SHA1
KRB5-DES-CBC3-MD5
SSLv3 Kx=KRB5
Au=KRB5 Enc=3DES(168) Mac=MD5
KRB5-DES-CBC3-SHA
SSLv3 Kx=KRB5
Au=KRB5 Enc=3DES(168) Mac=SHA1
KRB5-RC4-MD5
SSLv3 Kx=KRB5
Au=KRB5 Enc=RC4(128) Mac=MD5
KRB5-RC4-SHA
SSLv3 Kx=KRB5
Au=KRB5 Enc=RC4(128) Mac=SHA1
RC4-MD5
SSLv3 Kx=RSA
Au=RSA Enc=RC4(128) Mac=MD5
RC4-SHA
SSLv3 Kx=RSA
Au=RSA Enc=RC4(128) Mac=SHA1

だいぶ絞れた
http://www.flickr.com/photos/124330160/193454651/

さらに上を目指す
BEAST攻撃を回避する
http://www.flickr.com/photos/29001024@N02/2713261901/
SSL 3.0とTLS 1.0プロトコルのCBC(Cipher Block
Chaining)モードには、平文とそれに対応した暗号文を手がか
りに暗号解読(選択平文攻撃)が可能であるという脆弱性
(CVE-2011-3389)が存在します。
この問題は、暗号化のための初期ベクトル決定方法に起因し
ています。TLSプロトコルのCBCモードでは、最初のレコードの
初期ベクトルとして、別の鍵や秘密情報に基づき生成された値
を使用します。しかし、以降のレコードの初期ベクトルとして、
直前のレコードの最後の暗号ブロックを使用します。ここに脆
弱性(CVE-2011-3389)につながる要因があります。
CSIRTメモ - チェックしておきたい脆弱性情報<2011.10.18>:
Itpro
http://itpro.nikkeibp.co.jp/article/COLUMN/20111017/370861/

なんかヤバイらしい
CBCモードとやらをやめてみる
+
有効そうな設定をいくつか追加してみる
SSLProtocol all -SSLv2
SSLHonorCipherOrder on
SSLCipherSuite ECDHE-RSA-AES256-SHA384:AES256SHA256:RC4:HIGH:!MD5:!aNULL:!EDH:!AESGCM:!SSLV2:
!eNULL:!EXP
$ openssl ciphers -v 'ECDHE-RSA-AES256-SHA384:AES256SHA256:RC4:HIGH:!MD5:!aNULL:!EDH:!AESGCM:!SSLV2:!eNULL:!EXP'
RC4-SHA
SSLv3 Kx=RSA
Au=RSA Enc=RC4(128) Mac=SHA1
PSK-RC4-SHA
SSLv3 Kx=PSK
Au=PSK Enc=RC4(128) Mac=SHA1
KRB5-RC4-SHA
SSLv3 Kx=KRB5
Au=KRB5 Enc=RC4(128) Mac=SHA1
AES256-SHA
SSLv3 Kx=RSA
Au=RSA Enc=AES(256) Mac=SHA1
CAMELLIA256-SHA
SSLv3 Kx=RSA
Au=RSA Enc=Camellia(256) Mac=SHA1
PSK-AES256-CBC-SHA
SSLv3 Kx=PSK
Au=PSK Enc=AES(256) Mac=SHA1
DES-CBC3-SHA
SSLv3 Kx=RSA
Au=RSA Enc=3DES(168) Mac=SHA1
PSK-3DES-EDE-CBC-SHA
SSLv3 Kx=PSK
Au=PSK Enc=3DES(168) Mac=SHA1
KRB5-DES-CBC3-SHA
SSLv3 Kx=KRB5
Au=KRB5 Enc=3DES(168) Mac=SHA1
AES128-SHA
SSLv3 Kx=RSA
Au=RSA Enc=AES(128) Mac=SHA1
CAMELLIA128-SHA
SSLv3 Kx=RSA
Au=RSA Enc=Camellia(128) Mac=SHA1
PSK-AES128-CBC-SHA
SSLv3 Kx=PSK
Au=PSK Enc=AES(128) Mac=SHA1
使ってほしい暗号化方式を
サーバで指定した順にする

SSLHonorCipherOrder On
CRIME攻撃対策
http://www.flickr.com/photos/voteprime/4871645231/
中間者攻撃 (man-in-the-middle attack) により、
HTTP リクエストに含まれる文字列から HTTP ヘッダ
に含まれる文字列を推測されることで (通称 CRIME
攻撃) 、平文の HTTP ヘッダを取得される可能性が
あります。
JVNDB-2012-004393 - JVN iPedia - 脆弱性対策情報データベース
http://jvndb.jvn.jp/ja/contents/2012/JVNDB-2012004393.html

なんかヤバイらしい
SSLの圧縮処理を
無効化する
Apache2.4 -> 機能あり
Apache2.2 -> 2.2.24 から機能追加

Changes with Apache 2.2.24
*) mod_ssl: Change default for SSLCompression to off,
as compression causes security issues in most setups.
(The so called "CRIME" attack). [Stefan Fritsch]
• Apache をバージョンアップ
• conf にディレクティブ追加
SSLCompression off

<VirtualHost>の外に書かないと
怒られる
# service httpd configtest
Syntax error on line 23 of /usr/local/apache2/conf/httpdssl.conf:
This version of openssl does not support configuring
compression within <VirtualHost> sections.
SSLCipherSuiteの
設定結果は

ブラウザー上で
確認できる
#
Per-Server Logging:
#
The home of a custom SSL log file. Use this when you want
a
#
compact non-error SSL logfile on a virtual host basis.
CustomLog "/usr/local/apache2/logs/ssl_request_log" 
"%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x "%r" %b"

ログにプロトコルと暗号化スイートを
出力することも可能
http://www.flickr.com/photos/voteprime/4871645231/

誰かにチェックしてもらいたい
https://www.ssllabs.com/ssltest/
SSLに関する様々な項目をチェック

脆弱な箇所を指摘
httpsサーバのドメイン名を入れるだけ

あとは数分待つ
“Do not Show the results on the boards”

ホスト一覧に晒されてしまう
さすが優秀ですね
SSL Server Test と
‘openssl ciphers’ で
テスト

http://www.flickr.com/photos/25732779@N07/2938983864/

堅牢な設定ができる
でもブラウザーでの
テストも忘れずに。

堅牢すぎてアクセスできなければ無意味
最近のApacheなら
デフォルトでもそれなりに堅牢
SSLProtocol all -SSLv2
SSLCipherSuite HIGH:MEDIUM:!aNULL:!MD5

それは喜ぶべきこと
暗号解読はいたちごっこ

http://www.flickr.com/photos/pauldwaite/2845329889/

ECDHE とか
RC4 やめとけとか
TLS1.2 とか
新たな話題をうまくキャッチして
堅牢にしよう

SSL Server Test を定期的にチェック
http://www.flickr.com/photos/70609370@N00/7753084454/

あんしんなWebサーバーのためのSSL設定