今年はOpenSSLなどホント致命的な脆弱性がてんこ盛りな年ですな...
- シェルにbashは使わんとこ〜(sh, zsh, tcshとかへ変更)
/etc/passwdを見ると、利用しているシェルが出てきます。
私は普段ルートはsh、ログインが必要なユーザーはtcshにしてます。ですがMacOSXとかbashがルートに使われているものもあり、そういうのは抜けてました。
私は普段ルートはsh、ログインが必要なユーザーはtcshにしてます。ですがMacOSXとかbashがルートに使われているものもあり、そういうのは抜けてました。
脆弱性の有無診断
- シェルコマンド「env x='() { :;}; echo vulnerable' bash -c "echo this is a test"」
を叩いて、vulnerableが表示されないこと - CGIスクリプトテスト「BASHの脆弱性でCGIスクリプトにアレさせてみました(ワルブリック株式会社)」
以下、特にソースからbashを入れるときのメモを残しておきますね。
MacOSXの場合(9月30日)
パッチがでました。- MacOS 10.9用「OS X bash Update 1.0 – OS X Mavericks」
- MacOS 10.8用「OS X bash Update 1.0 – OS X Mountain」
- MacOS 10.7用「OS X bash Update 1.0 - OS X Lion」
これ見る限り、MacOS 10.6はもうサポート対象外なのでしょうね。
パッケージ管理ツールを使っている場合
- yum update bash
とかお使いのツール経由でアップデートしてください。
ただし、bash --versionでバージョンを確認した上で、
env x='() { :;}; echo vulnerable' bash -c "echo this is a test"
でvulnerableが表示されないことは確認を!!
MacOSXでも簡単ですよん。とはいえパッチ当ては超面倒です。ここではいくつかの短縮コマンドを使います。以下全部コマンドでやります。
curlは入っていると仮定します。
MacOSXの場合には、「プラグインのリポジトリ登録について」P12などを参考に、「Xcode」のインストールと、Xcode上の「Command Line Tools」のインストールをしておいてください。これらによってソースからコンパイルする環境を整えられます。
※MacOSXの場合には、OSアップデートで、/bin/bashは上書きされるでしょう。
その度に確認と修正が必要ですね。。。まぁ早く脆弱性がなおってほしいものですが。
仮に/usr/local/src/bash にするとします。
ソースからインストール/アップデートする場合
パッケージでも脆弱性が残ってしまっているなら、ソースからするほうが簡単です。MacOSXでも簡単ですよん。とはいえパッチ当ては超面倒です。ここではいくつかの短縮コマンドを使います。以下全部コマンドでやります。
curlは入っていると仮定します。
MacOSXの場合には、「プラグインのリポジトリ登録について」P12などを参考に、「Xcode」のインストールと、Xcode上の「Command Line Tools」のインストールをしておいてください。これらによってソースからコンパイルする環境を整えられます。
※MacOSXの場合には、OSアップデートで、/bin/bashは上書きされるでしょう。
その度に確認と修正が必要ですね。。。まぁ早く脆弱性がなおってほしいものですが。
Step 1. 作業用ディレクトリを作成
- mkdir -p /usr/local/src/bash
- cd /usr/local/src/bash
Step 2. bash-4.3.tar.gzのダウンロード
- curl -O https://ftp.gnu.org/gnu/bash/bash-4.3.tar.gz -k
Step 3. bashのパッチ 1-27の27個ダウンロード
頑張れ〜
以下をコピーして、ファイルに保存(download-bash-4.3-patches-001-027.sh)とかにして、sh download-bash-4.3-patches-001-027.sh を実行したら一括でとってくれますよん。
curl -O https://ftp.gnu.org/gnu/bash/bash-4.3-patches/bash43-001 -k
curl -O https://ftp.gnu.org/gnu/bash/bash-4.3-patches/bash43-002 -k
curl -O https://ftp.gnu.org/gnu/bash/bash-4.3-patches/bash43-003 -k
curl -O https://ftp.gnu.org/gnu/bash/bash-4.3-patches/bash43-004 -k
curl -O https://ftp.gnu.org/gnu/bash/bash-4.3-patches/bash43-005 -k
curl -O https://ftp.gnu.org/gnu/bash/bash-4.3-patches/bash43-006 -k
curl -O https://ftp.gnu.org/gnu/bash/bash-4.3-patches/bash43-007 -k
curl -O https://ftp.gnu.org/gnu/bash/bash-4.3-patches/bash43-008 -k
curl -O https://ftp.gnu.org/gnu/bash/bash-4.3-patches/bash43-009 -k
curl -O https://ftp.gnu.org/gnu/bash/bash-4.3-patches/bash43-010 -k
curl -O https://ftp.gnu.org/gnu/bash/bash-4.3-patches/bash43-011 -k
curl -O https://ftp.gnu.org/gnu/bash/bash-4.3-patches/bash43-012 -k
curl -O https://ftp.gnu.org/gnu/bash/bash-4.3-patches/bash43-013 -k
curl -O https://ftp.gnu.org/gnu/bash/bash-4.3-patches/bash43-014 -k
curl -O https://ftp.gnu.org/gnu/bash/bash-4.3-patches/bash43-015 -k
curl -O https://ftp.gnu.org/gnu/bash/bash-4.3-patches/bash43-016 -k
curl -O https://ftp.gnu.org/gnu/bash/bash-4.3-patches/bash43-017 -k
curl -O https://ftp.gnu.org/gnu/bash/bash-4.3-patches/bash43-018 -k
curl -O https://ftp.gnu.org/gnu/bash/bash-4.3-patches/bash43-019 -k
curl -O https://ftp.gnu.org/gnu/bash/bash-4.3-patches/bash43-020 -k
curl -O https://ftp.gnu.org/gnu/bash/bash-4.3-patches/bash43-021 -k
curl -O https://ftp.gnu.org/gnu/bash/bash-4.3-patches/bash43-022 -k
curl -O https://ftp.gnu.org/gnu/bash/bash-4.3-patches/bash43-023 -k
curl -O https://ftp.gnu.org/gnu/bash/bash-4.3-patches/bash43-024 -k
curl -O https://ftp.gnu.org/gnu/bash/bash-4.3-patches/bash43-025 -k
curl -O https://ftp.gnu.org/gnu/bash/bash-4.3-patches/bash43-026 -k
curl -O https://ftp.gnu.org/gnu/bash/bash-4.3-patches/bash43-027 -k
curl -O https://ftp.gnu.org/gnu/bash/bash-4.3-patches/bash43-002 -k
curl -O https://ftp.gnu.org/gnu/bash/bash-4.3-patches/bash43-003 -k
curl -O https://ftp.gnu.org/gnu/bash/bash-4.3-patches/bash43-004 -k
curl -O https://ftp.gnu.org/gnu/bash/bash-4.3-patches/bash43-005 -k
curl -O https://ftp.gnu.org/gnu/bash/bash-4.3-patches/bash43-006 -k
curl -O https://ftp.gnu.org/gnu/bash/bash-4.3-patches/bash43-007 -k
curl -O https://ftp.gnu.org/gnu/bash/bash-4.3-patches/bash43-008 -k
curl -O https://ftp.gnu.org/gnu/bash/bash-4.3-patches/bash43-009 -k
curl -O https://ftp.gnu.org/gnu/bash/bash-4.3-patches/bash43-010 -k
curl -O https://ftp.gnu.org/gnu/bash/bash-4.3-patches/bash43-011 -k
curl -O https://ftp.gnu.org/gnu/bash/bash-4.3-patches/bash43-012 -k
curl -O https://ftp.gnu.org/gnu/bash/bash-4.3-patches/bash43-013 -k
curl -O https://ftp.gnu.org/gnu/bash/bash-4.3-patches/bash43-014 -k
curl -O https://ftp.gnu.org/gnu/bash/bash-4.3-patches/bash43-015 -k
curl -O https://ftp.gnu.org/gnu/bash/bash-4.3-patches/bash43-016 -k
curl -O https://ftp.gnu.org/gnu/bash/bash-4.3-patches/bash43-017 -k
curl -O https://ftp.gnu.org/gnu/bash/bash-4.3-patches/bash43-018 -k
curl -O https://ftp.gnu.org/gnu/bash/bash-4.3-patches/bash43-019 -k
curl -O https://ftp.gnu.org/gnu/bash/bash-4.3-patches/bash43-020 -k
curl -O https://ftp.gnu.org/gnu/bash/bash-4.3-patches/bash43-021 -k
curl -O https://ftp.gnu.org/gnu/bash/bash-4.3-patches/bash43-022 -k
curl -O https://ftp.gnu.org/gnu/bash/bash-4.3-patches/bash43-023 -k
curl -O https://ftp.gnu.org/gnu/bash/bash-4.3-patches/bash43-024 -k
curl -O https://ftp.gnu.org/gnu/bash/bash-4.3-patches/bash43-025 -k
curl -O https://ftp.gnu.org/gnu/bash/bash-4.3-patches/bash43-026 -k
curl -O https://ftp.gnu.org/gnu/bash/bash-4.3-patches/bash43-027 -k
STEP 4. bashソースを展開(解凍)し、パッチをあてる
- tar -xzvf bash-4.3.tar.gz
- cd bash-4.3
- ls ../bash43-* | awk '{print "patch -p0 < ../"$1}'
で一度、
patch -p0 < ../bash43-001
patch -p0 < ../bash43-002
patch -p0 < ../bash43-003
....
patch -p0 < ../bash43-027
が表示されることを確認
※MacOSXの場合には、
ls ../bash43-* | awk '{print "patch -p0 < "$1}'
ですね。 - ls ../bash43-* | awk '{print "patch -p0 < ../"$1}' | sh
※MacOSXの場合には、
ls ../bash43-* | awk '{print "patch -p0 < "$1}' | sh
ですね。
Step 5. bashのコンパイルとインストール
/usr/local/bin/bash にインストールされるようにします。
標準は、大体/bin/bashであり、アプローチとしては、
/bin/bashをバックアップして、これを削除し、
/bin/bash → /usr/local/bin/bash となるようにシンボリックリンクをはるってことです。
標準は、大体/bin/bashであり、アプローチとしては、
/bin/bashをバックアップして、これを削除し、
/bin/bash → /usr/local/bin/bash となるようにシンボリックリンクをはるってことです。
- ./configure
通常は、/usr/local/ 以下にインストールされます。
いやなら、./configure --prefix=/usr/local/hogehoge
など変更したらよいかと。ここでは割愛 - make
- make -n install
でインストール先を確認(/usr/local 以下にインストールされるかどうか) - sudo make install
※root権限か、/usr/local/ 以下に書き込み権限があるユーザーで実行 - /usr/local/bin/bash
- env x='() { :;}; echo vulnerable' bash -c "echo this is a test"
でvulnerableが表示されないことを確認 - mv /bin/bash /bin/bash.org
- ln -s /usr/local/bin/bash /bin/bash
- でターミナルを起動しなおして、
env x='() { :;}; echo vulnerable' bash -c "echo this is a test"
でvulnerableが表示されないことを確認
0 件のコメント:
コメントを投稿