[ビデオ]OpenSSLのバグ“Heartbleed”ってどんなの? | TechCrunch Japan
チェック方法まとめ:OpenSSLの「Heartbleed」脆弱性は2年前から存在、「最悪のケースを想定して対処を」と専門家 - @ITでもチェック方法がいろいろ書かれているようだな。
「SSLで経路暗号化しているから安心だね」ってのがちょいと根底から揺らいでいるよーな気もするが引き続きこのあたりは情報収集していこうかなーと思ってますな。
で、今回の件で、OpenSSLのHeartbleed機能が有効化されているかを調べるには
openssl s_client -connect www.example.jp:443 -tlsextdebugって感じにすればよいらしいというのを教えてもらった。
あまりこのあたりよくわかってないので「外部の証明書に対してopensslのコマンドで調査できるのかー」ってのを初めて知った。
外部の証明書の詳しい情報を外から調べられるってのを知ったのでいろいろ試してみようとしたのだが丁度よいLinuxの環境がなかったのでWindowsにて調べることができないか試してみた。
OpenSSL: OpenSSL Binary Distributions経由でShining Light Productions - Win32 OpenSSLをインストールし、コマンドラインから
openssl s_client -connect www.google.com:443 -tlsextdebugって感じでやってみたのだが、
Loading 'screen' into random state - doneとなり接続できないようであった。いろいろ調べた結果デフォルトの状態でproxy経由でOpenSSLを使う方法はどうもよくわからなかった。(ソースを変更して再コンパイルしている人とかいたのだが私には無理でございましたw)
connect: No such file or directory
connect:errno=0
openSSLでは私のスキルではproxyを越えられないと結論付け、curlを使って証明書の取得を試みた。
まあ「Windowsで」とタイトルに付けたけど結局curlを使ってしまうのだ。すまん。
Windowsのcurlはいろいろあるようだが、私はGow - The lightweight alternative to Cygwinのcurlを使ってますな。curlでproxyを超えるにはこんな感じでWindowsのシステム環境変数にhttp_proxyとhttps_proxyを追加すればよさそうである。
http_proxy : http://proxy.example.co.jp:8080curlはいろいろ情報があったのだが「curl 証明書」などで検索すると「curlコマンドでSSLのエラーを無視するには」といった類の結果が沢山でてきた。証明書の情報を無視するのではなく証明書の情報がほしいのでなかなかよさそーなサイトに辿りつけなかったのだが、対応しているSSL暗号化スイートを確認する - Dondari memoとかが参考になったかな。
https_proxy : http://proxy.example.co.jp:8080
まあ、結論としては
curl https://google.com -v -kとかやればよさそうである。
しかし、上記の「-v -k」オプションでは情報が取得できないサイトが幾つかあった。更に調べたところ「 --ciphers ALL 」オプションを使えということが書かれていた。
つーことで、ちょいとこんなバッチファイルを作ってみたばい。(grep使ってるけどGowインストールしたから入ってるよね)
echo offでこれをchkcert.batとかって名前で保存して、コマンドラインから
set TMP_SSL_FILENAME="check.txt"
set LOGFILE="cert.log"
curl %1 -v -k --ciphers ALL 1>%TMP_SSL_FILENAME% 2>&1
grep "SSL connection using" %TMP_SSL_FILENAME% >%LOGFILE%
grep "subject:" %TMP_SSL_FILENAME% >>%LOGFILE%
grep "start date" %TMP_SSL_FILENAME% >>%LOGFILE%
grep "expire date" %TMP_SSL_FILENAME% >>%LOGFILE%
grep "issuer:" %TMP_SSL_FILENAME% >>%LOGFILE%
type %LOGFILE%
chkcert https://google.comとすると
* SSL connection using ECDHE-ECDSA-AES128-GCM-SHA256という感じに結果が表示される。とりあえず表示される全情報については「check.txt」に残してその中から必要な情報だけgrepで拾ってきて「cert.log」に保存しているのだが、別にそんなことせずに「curl %1 -v -k --ciphers ALL」という1行だけでバッチファイルを作ってももちろんOKである。
* subject: C=US; ST=California; L=Mountain View; O=Google Inc; CN=*.google.com
* start date: 2014-03-12 10:03:06 GMT
* expire date: 2014-06-10 00:00:00 GMT
* issuer: C=US; O=Google Inc; CN=Google Internet Authority G2
Googleはstart dateとexpire dateの期間が3ヶ月くらいだな。結構短いなー。
ちなみにこの方法ではOpenSSLのHeartbleedに関する情報は取得できませんよ。Heartbleedのチェック方法についてはいろんなところに紹介されていると思うのでそちらを見てください。
- OpenSSLの脆弱性(CVE-2014-0160)関連のメモをまとめてみた - piyolog
- エフセキュアブログ : 管理者達へ:Heartbleedの修正するときに設定基準を見直そう
- LastPass - LastPass Heartbleed checker