■「CVE-2014-6271」、「CVE-2014-7169」について調べてみた(Debian Wheezy) bashが広く普及していることから、 bashバグ(bash bug)、シェルショック(ShellShock)とも呼ばれる。 ■「CVE-2014-7169」は「CVE-2014-6271」で修正されていなかった修正。 下記のテストコードは「sh」の実態が「bash」である環境の場合。 Debianでは、「sh」の実態は「dash」である環境のため、 そのままでは再現しないので注意。 https://twitter.com/taviso/status/514887394294652929 ■IPAの情報 bash の脆弱性対策について(CVE-2014-6271 等) https://www.ipa.go.jp/security/ciadr/vul/20140926-bash.html ■JPCERTCCの注意喚起 GNU bash の脆弱性に関する注意喚起 https://www.jpcert.or.jp/at/2014/at140037.html ■概要 以下より抜粋 2014年9月26日号 14.10の開発・“shellshock”とその対応・UWN#384 http://gihyo.jp/admin/clip/01/ubuntu-topics/291409/26 環境変数に悪意ある細工が施された文字列が含まれた状態でbashが実行されると、 攻撃者が与えた任意のコマンドが実行できてしまう ■SSH等のログインシェルやWeサーバが呼び出すCGI等で bashが使われていると該当します。 bashの脆弱性がヤバすぎる件 https://x86-64.jp/blog/CVE-2014-6271 ■確認方法 Redhatの情報がきちんとまとめられている。 bashの脆弱性(CVE-2014-6271) #ShellShock の関連リンクをまとめてみた http://d.hatena.ne.jp/Kango/20140925/1411612246 Bash Code Injection Vulnerability via Specially Crafted Environment Variables (CVE-2014-6271, CVE-2014-7169) https://access.redhat.com/articles/1200223 特別に作成された環境変数を使用した Bash コード挿入の脆弱性 (CVE-2014-6271) https://access.redhat.com/ja/articles/1210893 ■更新前のDebian Wheezyで確認 CVE-2014-6271の脆弱性の影響を受ける対象である。 $ cat /etc/debian_version 7.6 $ bash -version | head -1 GNU bash, バージョン 4.2.37(1)-release (x86_64-pc-linux-gnu) $ env x='() { :;}; echo Vulnerable CVE-2014-6271' bash -c "echo this is a test" Vulnerable CVE-2014-6271 this is a test ■「CVE-2014-6271」単体の脆弱性チェック $ env 'x=() { :;}; echo Vulnerable CVE-2014-6271' 'BASH_FUNC_x()=() { :;}; echo vulnerable' bash -c "echo test" Vulnerable CVE-2014-6271 bash: BASH_FUNC_x(): 行 0: 予期しないトークン `)' 周辺に構文エラーがあります bash: BASH_FUNC_x(): 行 0: `BASH_FUNC_x() () { :;}; echo vulnerable' bash: `BASH_FUNC_x' の関数定義をインポート中にエラーが発生しました test $ export LANG=C; \ env 'x=() { :;}; echo Vulnerable CVE-2014-6271' 'BASH_FUNC_x()=() { :;}; echo vulnerable' bash -c "echo test" Vulnerable CVE-2014-6271 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 ■「CVE-2014-7169」単体の脆弱性チェック $ env X='() { (a)=>\' bash -c "echo date"; cat echo bash: X: 行 1: 予期しないトークン `=' 周辺に構文エラーがあります bash: X: 行 1: `' bash: `X' の関数定義をインポート中にエラーが発生しました 2014年 9月 26日 金曜日 21:23:25 JST $ export LANG=C; env X='() { (a)=>\' bash -c "echo date"; cat echo bash: X: line 1: syntax error near unexpected token `=' bash: X: line 1: `' bash: error importing function definition for `X' Fri Sep 26 21:24:32 JST 2014 ■脆弱性のあるbashをインストールしている $ dpkg -l bash* | grep ^ii | awk '{printf "%-20s%-20s%-12s\n",$2,$3,$4}' bash 4.2+dfsg-0.1 amd64 bash-completion 1:2.0-1 all ■shの参照先はdash $ readlink /bin/sh dash ■外部サービスを提供している場合、ロード中のプロセスに含まれる bashの文字列すべてが調査対象となる可能性がある。 $ sudo find /proc/*/exe -exec strings {} \; 2>&1 | grep bash | wc -l 144 ■共有ライブラリの出力にbashが含まれていないこと。 ただし、bashを別名で呼び出している場合は除く。 $ sudo strings /proc/*/maps | awk '{print $6}' | grep bash /bin/bash /bin/bash /bin/bash /usr/share/locale/ja/LC_MESSAGES/bash.mo ■回避策と対応 こちらもRedhatの情報が詳しい。 対応:脆弱性修正版へ更新 回避:他シェル使用 フィルタリング アクセス制限 Mitigating the shellshock vulnerability (CVE-2014-6271 and CVE-2014-7169) https://access.redhat.com/articles/1212303 ■フィルタリングについて iptablesの場合 # iptables -A INPUT -m string --algo bm --hex-string '|28 29 20 7B|' -j DROP # ip6tables -A INPUT -m string --algo bm --hex-string '|28 29 20 7B|' -j DROP ■Apache2の「mod_security」を使用 Redhatも回避ではなく、アップデートを推奨している。 特別に作成された環境変数を使用した Bash コード挿入の脆弱性 (CVE-2014-6271) https://access.redhat.com/ja/articles/1210893 ■フィルタリングしてもロード中のプロセスや共有メモリまで 深く探っているとキリがないので、bashを含めてアップデートをしましょう。 $ grep security /etc/apt/sources.list deb http://security.debian.org/ wheezy/updates main deb-src http://security.debian.org/ wheezy/updates main $ for opt in update upgrade autoremove autoclean ;do sudo apt-get $opt -y ;done ... apt apt-utils bash libapt-inst1.5 libapt-pkg4.12 libnss3 libnss3-1d ... ■「changelog.Debian.gz」の確認 $ dpkg -L bash | grep change | xargs lv -z | grep "CVE-2014-7169\|CVE-2014-6271" * Add CVE-2014-7169.diff diff. CVE-2014-7169: Incomplete fix for CVE-2014-6271. (Closes: #762760, #762761) * Apply patch from Chet Ramey to fix CVE-2014-6271. ■「CVE-2014-6271」、「CVE-2014-7169」の対応後の確認。 $ bash -version | head -1 GNU bash, バージョン 4.2.37(1)-release (x86_64-pc-linux-gnu) $ env x='() { :;}; echo Vulnerable CVE-2014-6271' bash -c "echo this is a test" this is a test $ env 'x=() { :;}; echo Vulnerable CVE-2014-6271' 'BASH_FUNC_x()=() { :;}; echo vulnerable' bash -c "echo test" bash: warning: x: ignoring function definition attempt bash: error importing function definition for `BASH_FUNC_x' test $ export LANG=ja_JP.UTF-8; \ env 'x=() { :;}; echo Vulnerable CVE-2014-6271' 'BASH_FUNC_x()=() { :;}; echo vulnerable' bash -c "echo test" bash: 警告: x: ignoring function definition attempt bash: `BASH_FUNC_x' の関数定義をインポート中にエラーが発生しました test $ export LANG=C; env X='() { (a)=>\' bash -c "echo date"; cat echo date cat: echo: No such file or directory ■ロード中のプロセスや共有メモリにあるbashのためにシステムの再起動を推奨。 $ sudo shutdown -r now && exit