Shellshock と呼ばれているbashの脆弱性ですが、Pidora2014 では正式にはまだ修正が行われていません。
そこで、ソースからコンパイルすることにします。bash は、ほとんどのシステムで問題なくコンパイル可能ですので、pidora で問題ないでしょう。しかし、OpenSSLと異なり、最新バージョンの bash でも脆弱性は修正されていないため、パッチをあてる必要があります。bash のパッチは累積パッチが用意されておらず、各パッチが、patchlevel.h を毎回更新していく形式ですから、全てのパッチを001からあてていく必要があります。
4.2 のパッチ数が 50 、4.3 のパッチ数が 27 ですから、ここは bash-4.3 を /usr/local/bin にインストールするのが簡単そうです。
例えば、こんな感じです。
pidora では、gpg ではなくて gpg2 が標準ですから、パブリックキー 0x64EA74AB をインポートしてから、以下のようにチェックできます。
同様に27個のパッチを入手してチェックします。
用意できたら、コンパイルしてみます。
となってしまいました。patch をインストールします。
準備ができましたのでパッチをあてます。
先ほどのテストを行ってみます。
脆弱性は解消できました。インターネットに直接接続するような場合は、/bin/bash を待避して、作成した/usr/local/bin/bash をコピーする必要があります。
# /bin/bash --version
GNU bash, version 4.2.47(1)-release (armv6hl-koji-linux-gnu)
.......
# date;yum update bash
Mon Sep 29 20:46:47 JST 2014
Loaded plugins: langpacks, refresh-packagekit
No packages marked for update
# env 'x=() { :;}; echo vulnerable' 'BASH_FUNC_x()=() { :;}; echo vulnerable' \
bash -c "echo test"
vulnerable
bash: BASH_FUNC_x(): line 0: syntax error near unexpected token `)'
bash: BASH_FUNC_x(): line 0: `BASH_FUNC_x() () { :;}; echo vulnerable'
bash: error importing function definition for `BASH_FUNC_x'
test
#
そこで、ソースからコンパイルすることにします。bash は、ほとんどのシステムで問題なくコンパイル可能ですので、pidora で問題ないでしょう。しかし、OpenSSLと異なり、最新バージョンの bash でも脆弱性は修正されていないため、パッチをあてる必要があります。bash のパッチは累積パッチが用意されておらず、各パッチが、patchlevel.h を毎回更新していく形式ですから、全てのパッチを001からあてていく必要があります。
4.2 のパッチ数が 50 、4.3 のパッチ数が 27 ですから、ここは bash-4.3 を /usr/local/bin にインストールするのが簡単そうです。
例えば、こんな感じです。
# wget http://ftp.jaist.ac.jp/pub/GNU/bash/bash-4.3.tar.gz
# wget http://ftp.jaist.ac.jp/pub/GNU/bash/bash-4.3.tar.gz.sig
# wget http://ftp.jaist.ac.jp/pub/GNU/bash/bash-4.3-patches/bash43-001
# wget http://ftp.jaist.ac.jp/pub/GNU/bash/bash-4.3-patches/bash43-001.sig
,,,,,
# wget http://ftp.jaist.ac.jp/pub/GNU/bash/bash-4.3-patches/bash43-027
# wget http://ftp.jaist.ac.jp/pub/GNU/bash/bash-4.3-patches/bash43-027.sig
pidora では、gpg ではなくて gpg2 が標準ですから、パブリックキー 0x64EA74AB をインポートしてから、以下のようにチェックできます。
# gpg2 --verify bash-4.3.tar.gz.sig
gpg: Signature made Tue Feb 25 23:36:04 2014 JST using DSA key ID 64EA74AB
gpg: Good signature from "Chet Ramey <chet@cwru.edu>" [unknown]
gpg: WARNING: This key is not certified with a trusted signature!
gpg: There is no indication that the signature belongs to the owner.
Primary key fingerprint: 7C01 35FB 088A AF6C 66C6 50B9 BB58 69F0 64EA 74AB
#
同様に27個のパッチを入手してチェックします。
用意できたら、コンパイルしてみます。
# tar xvf bash-4.3.tar.gz
# cd bash-4.3
# patch -p0 <../bash43-001
-bash: patch: command not found
となってしまいました。patch をインストールします。
# yum install patch
......
準備ができましたのでパッチをあてます。
# patch -p0 <../bash43-001
Ignoring potentially dangerous file name ../bash-4.3/test.c
patching file test.c
Ignoring potentially dangerous file name ../bash-4.3/patchlevel.h
patching file patchlevel.h
# grep '#define PATCHLEVEL' patchlevel.h
#define PATCHLEVEL 1
# patch -p0 <../bash43-002
......
# patch -p0 <../bash43-027
# grep '#define PATCHLEVEL' patchlevel.h
#define PATCHLEVEL 27
# ./configure
.....
# make (約16分)
....
# make install 2>&1 |tee Install.log
...
# which bash
/usr/local/bin/bash
# bash --version
GNU bash, version 4.3.27(1)-release (armv6l-unknown-linux-gnueabihf)
..............
#
先ほどのテストを行ってみます。
# env 'x=() { :;}; echo vulnerable' 'BASH_FUNC_x()=() { :;}; echo vulnerable' \
bash -c "echo test"
test
#
脆弱性は解消できました。インターネットに直接接続するような場合は、/bin/bash を待避して、作成した/usr/local/bin/bash をコピーする必要があります。