2014年10月17日金曜日

FedoraCore6のbashをShellshockに対応させる

Shellshockと呼ばれるbashの脆弱性が発表された。今年は、HeartbleedとPoodleのOpenSSLの脆弱性などたて続けにサーバー関連の脆弱性が世界中を駆け巡った。

その他、NASやネット接続電力計、ネット家電などコンピュータ以外の脆弱性もたくさん発表された。2014年は、ネット接続機器の脆弱性元年と言われるに違いない。

さて、bashのShellshockであるが、新しいOS、たとえばCentOS6などは、yum update bashで一発で完了するので、管理者の手間はほとんどかからない。

ところが、FedoraCore6になると、yumでアップデートできるパッチが用意されていない。バージョンアップアップをあきらめている管理者も多いと思う。


そのFedoraCore6のbash3.1をbash3.1.23にアップデートできる方法があるので紹介します。

1.影響を受けるバージョン(3.1はパッチの18までとしているページもある)
  Redhatは、日本のJPCERTと対策済みのバージョンが違う 3.1はここには出ていないけど。

2.bash3.1のパッチの場所。最新パッチをここで確認(2014/10/17現在23が最新)

3.基本的に下記の方法で3.1にパッチをあてて、bash3.1.23にバージョンアップする
(できれば、まずはテストサーバー機で実施してから本番サーバーで行ってください。自己責任)

(1)bash-3.1.tar.gzとパッチファイルをダウンロードする
wget http://ftp.gnu.org/gnu/bash/bash-3.1.tar.gz
wget http://ftp.gnu.org/gnu/bash/bash-3.1-patches/bash31-00{1..9} http://ftp.gnu.org/gnu/bash/bash-3.1-patches/bash31-0{10..19} http://ftp.gnu.org/gnu/bash/bash-3.1-patches/bash31-0{20..23} (一行で続いています)

(2)解凍しパッチを適用する
tar -xvf bash-3.1.tar.gz
cd bash-3.1
find ../bash31-??? -exec /bin/sh -c 'patch -p0 <{}' \;

(3)Configし、 Make、Make Install
./configure --prefix /tmp/bash23 && make && make install

(4)インストールしたbashを起動してみる
/tmp/bash23/bin/bash と、コマンドラインから直接起動する
echo $SHELL を実行すると
/tmp/bash23/bin/bash と表示されるはず(以後、しばらくこのbashが使われる)

(5)bashのバージョンを確認する
echo $BASH $BASH_VERSION
このように表示される: /tmp/bash23/bin/bash 3.1.23(1)-release

(6)Shellshockのテストをしてみる
env X="() { :;} ; echo vulnerable" /bin/bash -c "echo this is a test"
たぶん下のように表示される(/bin/bashと古いままのbashなので)
vulnerable
this is a test

(7)bashを入れ替える
・ tcsh  #念のため、使うシェルを変えておく
・ cd /bin/
・ cp bash bash.old  #念のためバックアップしておく
・ cp /tmp/bash23/bin/bash ./bash
・ exit #これで、/tmp/bash23/bin/bashへ戻る
・ bash #これで、/bin/bashへ切り替わる (/bin/bashとすることになるかも)

覚:shellの切り替え方法
1.コマンドラインで、chsh -s /bin/tcsh等とすると、/etc/passwdの中身が書き換わる。
  書き換わるが、再ログインしないとshellは切り替わらない。
2.コマンドラインで、tcsh等とすると、その時点で使うshellが切り替わる。
  exitで元に戻る。
echo $SHELLを実行してみると、使っているshellがわかる。

注:下記の処理をすることもあるかも
/etc/shellsファイルに/tmp/bash_patched/bin/bashを追加する
echo $PATH パスを通す
PATH=$PATH:/tmp/bash23/bin
export PATH

(8)bashのバージョンを再度確認する
echo $BASH $BASH_VERSION
このように表示される: /bin/bash 3.1.23(1)-release

(9)再度Shellshockのテストをしてみる
env X="() { :;} ; echo vulnerable" /bin/bash -c "echo this is a test"
下のように表示されればOK
bash: warning: x: ignoring function definition attempt (この行はでない時も)
bash: error importing function definition for `x' (この行はでない時も)
this is a test


0 件のコメント:

コメントを投稿