coLinux日記

coLinuxはフリーソフトを種として、よろずのシステムとぞなれりける。

Pidora2014における Shellshock (Bash の脆弱性)について

2014-09-29 23:21:36 | Raspberry Pi
Shellshock と呼ばれているbashの脆弱性ですが、Pidora2014 では正式にはまだ修正が行われていません。

# /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 をコピーする必要があります。

コメント    この記事についてブログを書く
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする
« Apache httpd と Komodo Edit | トップ | Shellshock の検証用シェルス... »
最新の画像もっと見る

コメントを投稿

Raspberry Pi」カテゴリの最新記事