おひさしぶりだいこんです。ナツヨです。
GW中にOpenSSLの脆弱性が発表されていました。
OpenSSL、けっこういろんなサービスが使っていて、「このプロセスが使ってるのは意図したOpenSSLなのかな・・・?」って不安に思ったりすることがあるので、呼び出しているライブラリからOpenSSLのバージョンを確認できるのか、確かめてみました。
結果としては、うまくいきませんでした。
利用している環境はUbuntu14.04です。
まずdpkgコマンドで、opensslのバージョンを調べてみます。
# dpkg -l | grep openssl
ii libgnutls-openssl27:i386 2.12.23-12ubuntu2.5 i386 GNU TLS library - OpenSSL wrapper
ii openssl 1.0.1f-1ubuntu2.18 i386 Secure Sockets Layer toolkit - cryptographic utility
ii python-openssl 0.13-2ubuntu6 i386 Python 2 wrapper around the OpenSSL library
1.0.1fなので、今回の脆弱性に該当していることがわかります。
opensslコマンドでも調べておきます。
# openssl version
OpenSSL 1.0.1f 6 Jan 2014
次に、opensslコマンドで実際に呼び出しているライブラリをしらべます。
lddコマンドは、指定したプログラムの依存関係を調べることができます。
下の例では、opensslコマンドを実行するのにどんなライブラリが必要か調べています。
# ldd /usr/bin/openssl
linux-gate.so.1 => (0xb7712000)
libssl.so.1.0.0 => /lib/i386-linux-gnu/libssl.so.1.0.0 (0xb76a4000)
libcrypto.so.1.0.0 => /lib/i386-linux-gnu/libcrypto.so.1.0.0 (0xb74f6000)
libc.so.6 => /lib/i386-linux-gnu/libc.so.6 (0xb7347000)
libdl.so.2 => /lib/i386-linux-gnu/libdl.so.2 (0xb7342000)
/lib/ld-linux.so.2 (0xb7713000)
その中のlibssl.so.1.0.0の中身を覗いてみます。libssl.so.1.0.0ファイルはバイナリファイルです。バイナリファイルとは人間が解釈できない形式のファイルのことだそうです。stringsコマンドでは、そんなバイナリファイルの中身をのぞくことができます。
# strings /lib/i386-linux-gnu/libssl.so.1.0.0 | grep OpenSSL
OpenSSLDie
SSLv3 part of OpenSSL 1.0.1f 6 Jan 2014
TLSv1 part of OpenSSL 1.0.1f 6 Jan 2014
DTLSv1 part of OpenSSL 1.0.1f 6 Jan 2014
OpenSSL 1.0.1f 6 Jan 2014
最後の行で、OpenSSLのバージョンを確認することができました。次に、OpenSSLをアップデートしてみます。
# apt-get update
(省略)
# apt-get install openssl
(省略)
# dpkg -l | grep openssl
ii libgnutls-openssl27:i386 2.12.23-12ubuntu2.5 i386 GNU TLS library - OpenSSL wrapper
ii openssl 1.0.1f-1ubuntu2.19 i386 Secure Sockets Layer toolkit - cryptographic utility
ii python-openssl 0.13-2ubuntu6 i386 Python 2 wrapper around the OpenSSL library
Ubuntu 14.04のopensslの修正済みバージョンは2.19としてリリースされていました。
きちんと修正済みバージョンになってくれたようです。ε-(´∀`*)ホッ
# openssl version
OpenSSL 1.0.1f 6 Jan 2014
むむっアップデート前と結果が変わらないぞい・・・。
# strings /lib/i386-linux-gnu/libssl.so.1.0.0 | grep OpenSSL
OpenSSLDie
SSLv3 part of OpenSSL 1.0.1f 6 Jan 2014
TLSv1 part of OpenSSL 1.0.1f 6 Jan 2014
DTLSv1 part of OpenSSL 1.0.1f 6 Jan 2014
OpenSSL 1.0.1f 6 Jan 2014
日付も特に変わっていないぞい・・・。
う〜ん。
思い通りにいきませんでした(・ัω・ั)
2016/05/17 追記
いろいろリプライをいただいたので、追記いたします。
脆弱性対応=パッチを当てるだけ=バージョンアップではないというお話を聞きました。なのでバイナリの中のバージョンの表記が上がらないと。
@infragirl755 patchで塞いでるから、バージョンアップしてないんじゃ無いの?
— toki (@mimuret) 2016年5月10日
あとは、パッケージ管理システムによってchangelogを見ることができるので、それを確認したほうが良いという話。
OpenSSLとかって確かにバージョン謎。
— たかはら (@takahara) 2016年5月10日
RHEL系だと rpm -q --changelog openssl で確認できる。
Ubuntuだと aptitude changelog openssl とかで確認できんのかな。 https://t.co/BUnOygpwSA
私はdebian系(debian,ubuntu)しか経験がないので、apt-get以外使ったことがありません。パッケージ管理システムの違いとか気になる…。
ネットサーフィンしていると、apt-get VS aptitudeはよく目にしますね!
あとは、lsofコマンドを使うと、今プロセスが読み込んでいるファイルを確認できるので、そこでlibsslでgrepかければ良いという話も聞きました。
lsof、既視感あると思ったら、glibcの時も同じようなことをしていたのを、すっかり忘れていました・・・。
フォロワーさんが、Redhat系のOpenSSLのパッケージについて調査されていたので、引用させていただきました。
@infragirl755 興味あるかわからんけど、RHEL や CentOS のパッケージを探検するメモ書いてみた!https://t.co/vLY6VL0Lbk
— まこぴ (@makopicut) 2016年5月10日
超手抜きでごめんなさい ←
そういえば、OpenSSLのパッケージの中身ってきちんと見たことないなぁ。
次回は、OpenSSLのパッケージの中身を見てみよう(debian)にしてみようかな。
反応くださった皆さん本当にありがとうございました!('ω')
また気になることがあったら追記しますね。