■「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