From nakano.hiroaki @ nttcom.co.jp Thu Apr 17 15:41:42 2014 From: nakano.hiroaki @ nttcom.co.jp (Hiroaki Nakano) Date: Thu, 17 Apr 2014 15:41:42 +0900 Subject: [Ultramonkey-l7-users 567] Re: =?iso-2022-jp?b?Q1ZFLTIwMTQtMDE2MBskQiROQlAxfiRLJEQkJCRGGyhC?= In-Reply-To: References: <1815421bf7c7429c9ac97859d62b0876@HKNPR03MB065.apcprd03.prod.outlook.com>, <534E1F5D.2030707@nttcom.co.jp> Message-ID: <534F77A6.4030801@nttcom.co.jp> 原田さん 中野です。 こんにちは。 (2014/04/16 17:44), HARADA SGU wrote: > 原田です。 > 中野様、アドバイスありがとうございました。 > >>> (tar ballからだとmakeしなおす必要があったりするのか?) >> >> makeし直す必要はないと思います。 >> 再起動したときに、入れ替えたOpenSSLの共有ライブラリl7vsdの >> プロセスメモリ空間にロードして関数へのリンクテーブルを作る >> だけですので。 >> >> # もしmakeが必要だと、世の中のOpenSSLライブラリをsharedリンクしている >> # アプリケーションすべてが再コンパイル必要になっちゃいます。 > > 恥ずかしながらよく分かっていなかった点でした。 > staticリンクしているアプリケーション(Phusion Passengerなど)については > OpenSSLのバージョンアップ後再コンパイルの必要がでてきたりするのですね。 > 勉強になりました。 そのとおりです。 staticリンクしているアプリケーションは、コンパイル時(正確には.oファイルを 作った後のリンク時)にライブラリの.soや.aファイルを読み込んで、適当な アドレスに配置してリンクテーブルを作っちゃいます。 なので、ライブラリを入れ替えてライブラリ内の関数位置が変わっちゃったら、 本体をmakeしてリンクテーブルを作り直す必要が出るんですよね。 -sharedで共有ライブラリをリンクしたアプリケーションの場合、アプリケーションの バイナリ内にあるリンクテーブルのうち、共有ライブラリの関数の部分は0が入って ます。 アプリ実行時に、/lib/ld.soが共有ライブラリをプロセスアドレス空間の空いている アドレスに初めてロードし、ロードしたアドレスをベースにして各関数の相対アドレスから 関数へのアドレスを計算して、アプリケーションのメモリ上のリンクテーブルを書き換えます。 なので、ライブラリだけ置き換えてもアプリケーションを再起動すればOKというわけです。 余談ですが、プログラム中でdlopen等のdlシリーズの関数を使えば、再起動しなくても 共有ライブラリをロードできたりします。 UM-L7のプロトコルモジュールやスケジュールモジュール、Apacheのローダブルモジュール等 はそのやり方です。 >> https通信でなければOpenSSLの更新も必要ないんですが、UltraMonkey-L7でSSL >> 使う通信って、大抵httpsですよね^^; > > Heartbleed脆弱性は、STARTTLSのSMTP, POP3, IMAP, FTPなどHTTPS以外にも影響すると > 言われておりますが、UltraMonkey-L7にてHTTPS以外でSSLを使っている場合は > この脆弱性の影響は受けないのでしょうか? > https://www.kb.cert.org/vuls/id/720951 > > 当方のUltraMonkey-L7上にはいくつかそのようなサービスがあり > 念のため対応しました。 あー・・・そうかもです。不勉強でした。 HeartbeatがTLSのどこで使われるのか、そもそもTLSってなんぞや? というところの知識があやふやで、Heartblead祭り以降、ちょこちょこ 調べてました。 TLSは通常の平文通信を暗号化拡張するための規格で、HTTP以外でも 原田さんのおっしゃったプロトコルで使われているようです。 で、TLSのプロトコルのうち、Client Helloの拡張部分でHeartbeatが 実装されているようです。 # pythonでサンプルコードを書いた方がいました。 # 38行目から始まるclient helloの一番最後、84行目に # heartbeatが埋め込まれています。 # https://gist.github.com/takeshixx/10107280 なので、STARTTLSで「TLSやるよー」とメッセージを送り、 そのあとHeartbeat対応バージョンのOpenSSLを使って Heartbeat入りClient Helloを送ったり、そのレスポンスを 受け取ったりってやると、オーバーフローアタックを食らう 可能性がある、と。 ですので、該当OpenSSLの関数を使ってTLS化しているものであれば、 SMTPやPOP3といったHTTPS以外のプロトコルでも影響するわけですね。 なので、原田さんの判断は正しいと思います。 自分も勉強になりました。 # というか、原田さんのメールを見て慌てて勉強しなおしましたw -- 中野 宏朗 (NAKANO Hiroaki)