印刷用表示へ切り替え 通常表示へ切り替え 更新履歴を表示 更新履歴を隠す
Linux Shellshock の対応を bash 2.05b で確認する

Gnu bash も Shellshock 脆弱性の対応ができているかをコマンドで確認する。パッチ適用後でも動作確認できないコードについては,修正して検証する。

■ ■ ■

Shellshock と名づけられた Gnu bash 脆弱性{ぜいじゃくせい}。この件については,複数の脆弱性が発見されており (GNU bash の脆弱性に関する注意喚起),それぞれについてコマンドで確認ができる。

それぞれの脆弱性については,CVE で始まる番号がつけられている。CVE は脆弱性情報データベースのうち MITRE 社が作っている Common Vulnerabilities and Exposures の頭文字をとったものである (脆弱性情報データベース - Wikipedia)。脆弱性検証のためのコマンドは Proof of Concept Code と呼ばれる (mubix/shellshocker-pocs · GitHub)。

このサイトのサーバでもこの問題の対策を行った (nlog(n): サポート切れ Linux の bash を RPM を自作して更新する)。以下は,脆弱性のある版と対策済みの版で実際にコマンドを入力した場合の結果である。コードは Shellshock (software bug) - Wikipedia, the free encyclopedia で公開されているものを使用する。

動作環境

動作環境は以下の通りである。bash 2.05b の場合,パッチを適用してあるかどうかをバージョン情報で確認することはできない (パッチの適用前後で --version オプションを付けて表示させた結果が変わらない)。

$ bash --version
GNU bash, version 2.05b.0(1)-release (i686-pc-linux-gnu)
Copyright (C) 2002 Free Software Foundation, Inc.

以下の実行結果のうち,一部 CVE-2014-7187, CVE-2014-6277 に関しては,bash 3.2 での実行結果を記載している (パッチ適用前 GNU bash, version 3.2.48(1)-release,パッチ適用後 GNU bash, version 3.2.57(1)-release)。

CVE-2014-6271

CVE-2014-6271 は任意のコードが実行可能な脆弱性である (Vulnerability Summary for CVE-2014-6271)。確認用コマンドの意味については bash ShellShockメモ(Hishidama's bash "shell shock" Memo) で解説されている。

パッチ適用前の実行結果

$ env x='() { :;}; echo vulnerable' bash -c "echo this is a test"
vulnerable
this is a test

パッチ適用後の実行結果

$ env x='() { :;}; echo vulnerable' bash -c "echo this is a test"
this is a test

脆弱性がなくなると「vulnerable」の表示が消える。

CVE-2014-7169

CVE-2014-7169 も任意のコードが実行可能な脆弱性である (Vulnerability Summary for CVE-2014-7169)。

パッチ適用前

$ env X='() { (a)=>\' sh -c "echo date"; cat echo
sh: X: line 2: syntax error near unexpected token `='
sh: X: line 2: `'
sh: error importing function definition for `X'
Sat Oct 18 20:03:00 JST 2014

パッチ適用後

$ env X='() { (a)=>\' sh -c "echo date"; cat echo
date
cat: echo: No such file or directory

CVE-2014-7186

CVE-2014-7186 はサービス運用妨害 (DoS) の攻撃対象になる脆弱性である (Vulnerability Summary for CVE-2014-7186)。

パッチ適用前

$ bash -c 'true <<EOF <<EOF <<EOF <<EOF <<EOF <<EOF <<EOF <<EOF <<EOF <<EOF <<EOF <<EOF <<EOF <<EOF' || echo "CVE-2014-7186 vulnerable, redir_stack"
Segmentation fault
CVE-2014-7186 vulnerable, redir_stack

パッチ適用後

$ bash -c 'true <<EOF <<EOF <<EOF <<EOF <<EOF <<EOF <<EOF <<EOF <<EOF <<EOF <<EOF <<EOF <<EOF <<EOF' || echo "CVE-2014-7186 vulnerable, redir_stack"
$

パッチ適用後は何も出力せずにプロンプトが戻ってくる。

CVE-2014-7187

CVE-2014-7187 もサービス運用妨害 (DoS) の攻撃対象になる脆弱性である (Vulnerability Summary for CVE-2014-7187)。

この問題に対する確認コマンドについては,若干疑問がある。Wikipedia など (Shellshock (software bug) - Wikipedia, the free encyclopedia, mubix/shellshocker-pocs · GitHub) で公開されているコマンドでは動作検証がうまくできないのである。世界的に大騒ぎになっていて多くの人が参照しているはずなので,なぜ修正なりコメントなりがないのかよく分からない。

bash 2.05b では,この脆弱性は確認できなかった。つまり,パッチ適用前も後も,下の「パッチ適用後」と同じ結果となったということである。以下は bash 3.2 における結果である。

Wikipedia などで公開されているコマンドによる動作

パッチ適用前

$ (for x in {1..200} ; do echo "for x$x in ; do :"; done; for x in {1..200} ; do echo done ; done) | bash || echo "CVE-2014-7187 vulnerable, word_lineno"
bash: line 129: syntax error near `x129'
bash: line 129: `for x129 in ; do :'
CVE-2014-7187 vulnerable, word_lineno

パッチ適用後

$ (for x in {1..200} ; do echo "for x$x in ; do :"; done; for x in {1..200} ; do echo done ; done) | bash || echo "CVE-2014-7187 vulnerable, word_lineno"
bash: line 2: `x{1..200}': not a valid identifier
CVE-2014-7187 vulnerable, word_lineno

エラーの出方は違うが,パッチ適用後でも「vulnerable」と表示されてしまう。直前には,bash が構文エラーであるメッセージを出力している。

修正したコマンドによる動作

bash が構文エラーのメッセージを出さないように修正したコマンドで動作を検証する。

パッチ適用前

$ (for x in {1..200} ; do echo "for x in $x ; do :"; done; for x in {1..200} ; do echo done ; done) | bash || echo "CVE-2014-7187 vulnerable, word_lineno"
bash: line 129: syntax error near `x'
bash: line 129: `for x in 129 ; do :'
CVE-2014-7187 vulnerable, word_lineno

パッチ適用前は,構文エラーと「vulnerable」の両方が出力される。

パッチ適用後

$ (for x in {1..200} ; do echo "for x in $x ; do :"; done; for x in {1..200} ; do echo done ; done) | bash || echo "CVE-2014-7187 vulnerable, word_lineno"
$

何も出力せずにプロンプトが戻ってくるようになる。

CVE-2014-6277

CVE-2014-6277 もサービス運用妨害 (DoS) の攻撃対象になる脆弱性である (Vulnerability Summary for CVE-2014-6277)。コマンドは mubix/shellshocker-pocs · GitHub を参照。

このコマンドに関しては,パッチ適用の前後で結果が変わらなかった。

$ env X='() { x() { _; }; x() { _; } <<a; }' bash -c :
$

何も出力せずプロンプトが戻ってくる。bash 3.2 では,パッチ適用前は以下のように「セグメンテーション違反」となる。

$ env X='() { x() { _; }; x() { _; } <<a; }' bash -c :
Segmentation fault
$

CVE-2014-6278

パッチ適用前

$ env X='() { _; } >_[$($())] { echo CVE-2014-6278 vulnerable; id; }' bash -c :
bash: X: line 1: syntax error near unexpected token `{'
bash: X: line 1: `X () { _; } >_[$($())] { echo CVE-2014-6278 vulnerable; id; }'
bash: error importing function definition for `X'

パッチ適用後

$ env X='() { _; } >_[$($())] { echo CVE-2014-6278 vulnerable; id; }' bash -c :
$

この場合もパッチ適用後は何も出力せずにコマンドプロンプトが戻ってくるだけになる。

Posted by n at 2014-10-18 20:16 | Edit | Comments (0) | Trackback(0)
Trackbacks

  • 「手違いで複数トラックバックを送ってしまった!」という場合でも気にしないでください (重複分はこちらで勝手に削除させていただきます)
  • タイムアウトエラーは,こちらのサーバの処理能力不足が原因です (詳細は トラックバック送信時のエラー をご覧ください)
  • トラックバックする記事には,この記事へのリンクを含めてください(詳細は 迷惑トラックバック対策 をご覧ください)
Comments
Post a comment
  • 電子メールアドレスは必須ですが,表示されません (気になる場合は「メールアドレスのような」文字列でもOKです)
  • URL を入力した場合はリンクが張られます
  • コメント欄内ではタグは使えません
  • コメント欄内に URL を記入した場合は自動的にリンクに変換されます
  • コメント欄内の改行はそのまま改行となります
  • 「Confirmation Code」に表示されている数字を入力してください (迷惑コメント対策です)


(必須, 表示されます)


(必須, 表示されません)


(任意, リンクされます)


Confirmation Code (必須)


Remember info (R)?