uzullaがブログ

uzullaがブログです。

CentOS4でbashをアップデートする(ShellShockの件、あるいは、CentOS4でもう一度yumをつかう件)

(あるいは、CentOS4でもう一度yumをつかう件)

oss-sec: CVE-2014-6271: remote code execution through bash

bashの脆弱性(CVE-2014-6271) #ShellShock の関連リンクをまとめてみた - piyolog


例のbash脆弱性で世界が危ないですね。
CentOS4とかいうレガシーをつかっている人間も例外ではありません。

これを機会にCentOS4をすてるのが一番良いですので、まずはそれを検討してください。

しかし、どうしても営業上の理由でアップデートできない所もあるでしょう、私のことだ。

ところで、centos5以降なら…

yumであがります。
しかしcentos4はもうアップデートされていません、自分でやるしかない。

その前に…

!!!以下bashを置き換える作業なので、細心の注意を払いましょう!!!

/bin/bashをどこかにバックアップとか取って置いた方が良いですし、ミスった時にログインできなくなるので、シェルを二枚開いて置いた方が良いでしょう…。

bash野良ビルド

http://ftp.gnu.org/gnu/bash/

からDLすればいい…んだけど面倒ですね。
どのバージョンにするか決めなきゃいけないし、パッチを手であてたりしなきゃいけないし、後述のライブラリ足りてないのをいくらか試さないといけない。

SRPMをビルドすれば?

はい、そうですね。centos4 bashとかでググると同系列のMiracle Linuxsrpmをつかうとええんちゃうか、という話がでてきます。

https://news.ycombinator.com/item?id=8371414
http://blog.kaiman.net/?p=682
http://blog.osakana.net/archives/5561

(ただし、現在既知の全部の脆弱性に対するパッチが当たっているわけではない様です、また更新が出るでしょう)

これが楽そうです。

うまくいきました?やりましたね!

しかし…

srpmをビルドしようとしても、

# rpmbuild --rebuild ./bash-3.0-27.0.2.el4.src.rpm
./bash-3.0-27.0.2.el4.src.rpm をインストール中
エラー: Failed build dependencies:
	texinfo is needed by bash-3.0-27.0.1.x86_64
	bison is needed by bash-3.0-27.0.1.x86_64
	libtermcap-devel is needed by bash-3.0-27.0.1.x86_64

無情にも依存がたりていない場合があります。私の環境がそうでした。

yumであげればいいじゃん」というかもしれませんが、そうですねもうCentOS4のパッケージ配布は基本的に終わってますね。

# yum install texinfo
Loading "fastestmirror" plugin
Setting up Install Process
Setting up repositories
not using ftp, http[s], or file for repos, skipping - 4 is not a valid release or hasnt been released yet
Cannot find a valid baseurl for repo: update
Error: Cannot find a valid baseurl for repo: update

つらい。

DVDをお持ちですか?それならそこからrpmをコピーすることも可能ですね。

とはいっても過去のパッケージが手に入らないわけではありません。CentOSは過去パッケージをvauld.centos.orgでまだ配布しています。

でも手で探してきていれるのは面倒ですよね…。

本題、vault.centos.orgをyumから利用する

http://vault.centos.org/4.9/os/

前述の通り、このあたりからrpmはDLできます。
ちまちま必要なrpmをDLしてrpm -Uvhなどすればよいでしょう。

ただ、今回は、一時的にここからyumで引けるように設定したいとおもいます。

!これは「アップデートが復活する」というものではありません、単に古いRPMを手でDLするよりも簡単、というだけです!
!更新されたbashが配布されているわけではありません!
!終わったらyumの設定を戻す方が良いでしょう。なにせ二度とアップデートされる予定はないのですから!

/etc/yum.repos.d/CentOS-Base.repo を修正

CentOS-Base.repoをどこかにバックアップした後で、viなどでひらいて、いくつかある以下のような表記を

mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=os
#baseurl=http://mirror.centos.org/centos/$releasever/os/$basearch/

以下のように修正します。
mirrorlistをコメントアウトして、URLを修正ですね。

#mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=os
baseurl=http://vault.centos.org/4.9/os/$basearch/

すると…

# yum install bison texinfo libtermcap-devel
Loading "fastestmirror" plugin
Setting up Install Process
Setting up repositories
Loading mirror speeds from cached hostfile
Reading repository metadata in from local files
Excluding Packages in global exclude list
Finished
(省略)
Installed: bison.x86_64 0:1.875c-2 libtermcap-devel.x86_64 0:2.0.8-39 texinfo.x86_64 0:4.7-5.el4.2
Complete!

やった!楽だ!!

あとは上述のサイトなどを参考に

# wget https://oss.oracle.com/el4/SRPMS-updates/bash-3.0-27.0.2.el4.src.rpm
# rpmbuild --rebuild ./bash-3.0-27.0.2.el4.src.rpm
(省略)
# cp /bin/bash /bin/bash.old
# rpm -Uvh /usr/src/redhat/RPMS/x86_64/bash-3.0-27.0.2.x86_64.rpm
Preparing...                ########################################### [100%]
   1:bash                   ########################################### [100%]

tadaaaaa!!

チェック

かならずそのウインドウをひらいたままにして、別のシェルをひらいて試しましょう。
bash.oldはバックアップしておいたファイルです)

# env x='() { :;}; echo vulnerable' bash -c "echo this is a test"
bash: warning: x: ignoring function definition attempt
bash: error importing function definition for `x'
this is a test
# env x='() { :;}; echo vulnerable' bash.old -c "echo this is a test"
vulnerable
this is a test

よさそうですね!

なんかダメだったら、バックアップからもどすなりしましょう。

繰り返しになりますが

最後CentOS-Base.repoをもどしておきましょう。
あのサイトは過去のものを配布していますが、更新はされないので、登録したままだと無駄な負荷がかかりますからね。


こちらからは以上です。