ブログ移設しました。

bloggerから記事を移設しました。


HUGOで記事を書いてみると思いのほか書きやすかったので移動。
ラベル openssl の投稿を表示しています。 すべての投稿を表示
ラベル openssl の投稿を表示しています。 すべての投稿を表示

水曜日, 5月 06, 2015

openssl更新後、パッケージとの共存

現在想定しているパッケージのうち、opensslを利用しているじゃね?と思って調べてみた状況は以下の通り。
  • openssl
    • さて、これはどうしてやろうか。そのまま入れ替えてしまえ
  • openssh(
    • ibcryptoだけじゃね?
  • perl
    • やべー、みあたらねぇ。
  • php
    • パスをコンパイル時点で指定してるんじゃ => 要再ビルド?
  • httpd
    • mod_sslで使っている。きっと、シンボリックリンクだけでいいはず? エラーが出たらビルドしなおす。

がありますね。

前回はパッケージを使ってインストールすると、どういう風にプログラム側からopensslを欲しているかを確認しました。

一部わからないものがありましたが、それに関してはこのopenssl適用作業実施時にエラーなりが出た時に分析と対処によってはっきりさせていきたいです。

linuxをちゃんと理解して、opensslのライブラリを参照している人たちがどういう風に参照しているかを知っていれば問題ないのでしょうが、残念ながらopensslに依存しているぞ!っていうパッケージがあまりにも多すぎる。

そして、面倒になったので、CentOSだけにします。
もしかしたら、Debianもあとあと書くかもしれません。

OpenSSL入れ替え

openssl本体

https://gist.github.com/tluna/1d4df2d4da86fd1d0180#file-centos-change-openssl

opensslのso達

単にmoduleを入れ替えるだけではだめ。
もしかして、srpmとか見たら、専用のパッチとか当たってたりするのかな。(versionに関しては明示するようにしても、エラーになるし)

影響を受けて、wget, ssh sshd perl phpが全滅というお粗末さ。(phpは仕方がないにしてもよ。)

ものすごい時間かかってますね。これ。

引き続きしらべるけども。(virtualboxに引きずられてMacごと強制終了されちゃっているっぽい現象が)

あー。。。。仮説だけど、それぞれのプログラムってddlのバージョンが1.0.1eであることを期待してたり、、、する?
と思って色々やってみたけど、以下の原因でだめ

試してみたのは、openssl1.0.1e openssl1.0.1m ともにsoファイルにバージョン情報の付与をするかのオプションを追加。追加なしのパターンを用意

openssh

libcrypto.soでエラー(ssh/sshdともに)

httpd

libphp5.so,mod_ssl.soでそもそもsegmentation fault。。。。辛い。

php

version提示するようにしても、そんなバージョンしらんと言われる。

perl

通る。どっちでもOK

んー。srpmに入っていたパッチの中でバージョン情報に関するパッチを適用するとか、結構追って追ってしないとダメっぽい気がしてきた。

少し動的リンクについて見てみると、今のやり方では通らない気がしてきた。
 共有ライブラリーを解剖する http://ibm.co/1Ig3Jjv

perl php httpdのopensslの利用(パッケージ)

一旦、まずは、使ってきそうなperl,php,httpdの関連パッケージをインストールしていく。

パッケージインストール

perl(どっちももうはいっているはず) php httpdなどをインストール
環境構築のため、cpanmをwget後、以下の作業を実施。 ここは、各ディストリ共通。
環境変数
モジュールインストール
んで、リクエストを送ってみる。

Apache

ごめん、この辺ログに残していなかったので、CentOSとDebianに分けてやったことを列挙

CentOS

確か、
  • サーバーのオレオレ証明書を発行(これは不要かも。)
  • mod_sslインストール後に自動的にhttpsの設定有効になっていたと思う。
  • service httpd restart 

Debian

  • a2enmod ssl
  • a2ensite default-ssl
  • service httpd restart 
こんな感じ。
こういうときに思うのだけど、debianの方がこういうところ洗練されている感じがします。(CentOSが洗練されているのは、きっと、RPMだけじゃないか?と思っている今日この頃。)


確認していく

さて、一通りパッケージインストールで作成できましたね。

各言語、及びhttpdのモジュールからopensslがどういう風にリンクされているかを見ていきましょう。

PHP

どうもSharedObjectファイルが見当たらないので、php自体に組み込み?
centosはphp -iでコンパイル時にopensslの場所を指定してることはわかったのだけど。
libssl.soへのリンクあり
curl.soにはリンクあるなぁ。

perl

Net::SSLeayでリンクされているSO発見。
libssl.soへのリンクあり
CentOS
Debian

Apache

libssl.soへのリンクあり
CentOS
Debian

openssh(sshd)

CentOS
Debian
https://gist.github.com/tluna/61f495ebfeaf16c99ba6#file-debian-sshd

前に書いた「他のプログラムから色々依存関係があるから」っていう理由で、差し替えるだけですむものはいいですが、そうじゃないコンパイルオプション時点で決まってしまうものについては、更新しても新しいものを見てくれそうにないですね。

その辺を次記事で書いていきますか。。。(メンドクセェなこれ)

月曜日, 5月 04, 2015

opensslのインストール

opensslのインストールについて書いていきますか。

そもそも、opensslって各ディストリでは、ランタイムとdevelみたいなのがあって、ライブラリの組み込みがないのであれば、develは必要ないのかなと思っています。

さて、そんなわけで、debianとcentosのパッケージから見ていきましょう。

はじめに

検証用のvmを作成するので、vagrantでどんどん作っていきましょう。
mkdir -p openssl/centos
mkdir -p openssl/debian
cd openssl/centos
vagrant init centos6.64
cd ../debian
vagrant init debian7.8.64

これで二つのOSのVMができたので、確認をしていきましょう。。。

vagrantで接続する時には、sshで接続するので、ダメですね。
一度作成した後は、Virtualboxのコンソール画面でopenssl削除してから作業開始ですね。

と、アンインストールを試してみたいと思ったのですが、色々なライブラリから呼ばれて強制削除じゃないとダメみたいですね。

そしたら、各インストールされるファイルを確認しますか。

パッケージで何が入るのか。

openssl-develもインストールして一緒に確認して。(もう利用している環境で入れているわけではないなら、ちゃんとrpmファイルをダウンロードして確認ね?)
これだけはいるんだね。
https://gist.github.com/tluna/26eccbc8d248dc076e71

んー、予想外なのはファイル名的にopensslとdevの関係にあるパッケージがどうも同期を取ろうとは思っていない感じがすることですね。

さて、これらのファイルに上書きするようにインストールをしないようにしなきゃなね。(切り戻しをパス変更だけでできるように)

ソースインストール

さて、 今度はソースインストールするとどう配置されるか。ですね。 念のため、各ディストリごとに見ていきますか。

1.0.1系だと勝手に決めつけて作業を進めます。
wget https://www.openssl.org/source/openssl-1.0.1m.tar.gz
tar xvzf openssl-1.0.1m.tar.gz
cd openssl-1.0.1m.tar.gz
だめだ。vimとタイポするので、vimいれよ。


はいってるよね。
  * make
  * Perl 5
  * an ANSI C compiler
  * a development environment in form of development libraries and C
    header files
  * a supported Unix operating system

CentOS

んー、ディストリのビルドオプションがわからないですね。 centosのsrpm持ってきて中身を見るか。

srpm展開して、その中のtar.gxを展開したら予想だにしないオプションの列挙が。


だんだん頭が痛くなってきた。 no-sharedな訳ないでしょ。
実はインストール時点で./Configureしているのかしら。 とおもったら、srpmはspecファイルでしたね。


結構色々なオプションを定義しているのね。

Debian

やばい。srpmみたいなのあるのかしら。どう考えてもなさそうだ。 その中放浪していると、openssl version -a でコンパイルオプションまで見れるんだね。

centosとdebianを比較してみるとコンパイルオプションに差があるのがきになりますけど。

https://gist.github.com/tluna/a9a9a3869e21a2f5f9b1

とりあえず、インストールしてみてprefix以外のところにファイルが配置されないか、確認しますか

インストール前後でファイルの一覧差分を確認しましたが、prefix以外だとopensslのソースディレクトリで差分があるくらいで、インストールの切り戻しは容易だね。
アンインストールもprefix指定のディレクトリを削除するだけでOKということの確認も取れたわけだ。

debianとcentosも同一オプションにしたいな。(めんどいので)
なので、両方の差分をとってコレっぽいと思ったのを使うとに。
https://gist.github.com/tluna/a9a9a3869e21a2f5f9b1#file-centos-sourceinstall-configure-option

インストールの結果はあとあとしかわかんないので、この記事はここまで。次の調査にうつる。
make testでこけるので、オプションを--prefix以外削除。 ocnfigureの段階で自動的につけてくれるオプションもあるはずなので、それで進めてみる。

日曜日, 5月 03, 2015

OpenSSLビルド・影響範囲調査

どうも。またまた環境周りのことで対処が速攻決断できない事象があったので、一度自分で実践と調査することに。

先に結論

現在opensslをソースインストールあと、lib64でlibssl.so、libcrypt.soを入れ替えて試してみましたが、パッケージでいれたものは、perl以外成功にはならず。
なので、そのままでもいける方法が見つからないのであれば、既存のライブラリを残したまま、opensslを別でコンパイルして、LD_LIBRALY_PATHに追加して、各プログラムをソースコンパイルですかね。。。
何かわかったら、更新します。 知っている方いらっしゃいましたら、ご教示願います。。。

きっかけ

perl周りで複数のDB繋いで遊ぶみたいなことをやってたんだけど、そこのエントリーは、また次にする。。。

んで、OpenSSLってなんでいきなり話題にあがったかというと、
話としてはこの辺がトリガー

CVE-2015-0291のほうがすごい深刻な問題だと感じたけど、CVE-2015-0204のほうだけ対応できればいいということが判明。
そうなると外部通信時にデータ抜かれるだけっぽいし、まぁいいかな?と思ったけど、そういうわけにもいかないので、調べてみることに。

そもそも、OpenSSLってライブラリとして利用しているものが多すぎて影響範囲がわかんねぇよ。ってところからのスタートです。
※今回の話は影響調査〜構築までとなりそうなので、以下のシリーズの7〜20までは読んでないと意味わからないかもね。
http://www.atmarkit.co.jp/ait/kw/buildlamp.html

恥ずかしながら、知らないことばかりでした。

さて、話を戻すと、OpenSSLで私が使っている中で影響を受けそうなのは、
  • webサーバー
  • php,perlなどのプログラミング言語(外部通信するなら)
  • sshd, ssh, wget, curl,etc
  • RDBMS(ビルドオプション次第かな。)
これらのプログラム、デーモンが影響を受けますね。
ただ、きになるのは、更新された後、そのまま動くんですか? 本当に新しくなったものを利用しているんですか?
ですね。

ソースで入れたのは各々で認識しているはずなので、それは置いといて、yum,aptで入れた人はどういう状態なのか確認しておくとしましょう。

vagrant box list 
centos6.64     (virtualbox, 0)
centos7.64     (virtualbox, 0)
debian7.8.64   (virtualbox, 0)

freebsd10.1.64 (virtualbox, 0)

perlでDB操作する時用にvagrantのboxは自作してあるので、この中からcentos6とdebian7.8で確認していくとしましょう。
freebsdは書いていくと説教されそうなのでやめとこう。

で、各々のものに関してはきっと確認していくポイントが違いそうなので、各々のページを作って後でまとめをこのページに書くかな。

基本的に作業ログに関しては全てgistに登録して、結果だけブログに記載するようにしたいです。

各プログラムの確認及び更新作業
なお、調査当初から見ていこうとしている順番が異なっています。
どうしても、公式パッケージ環境構築=>公式パッケージ環境確認=>opensslビルド=>適用作業=>確認となるので、上記の順番に変更を行いました。

あっ、openssl周りでwindowsからssh系の作業ができるやつははサーバー云々とかとは別に新しいプログラムが出ているはずなので、ちゃんと更新してますよね?
彼らはきっとopensslについては静的リンクになっているか、opensslのライブラリがディレクトリ内にいるはずなので、ちゃんと更新しましょう