サーバーがShellShockのバグに対して脆弱かどうかをテストする方法は?


80

更新後にBashインストールがShellShockバグに対して脆弱にならないようにするにはどうすればよいですか?



bashにはまだパッチが適用されていない2つの脆弱性があります(CVE-2014-7186およびCVE-2014-7187)。
鹿ハンター14

CVE-2014-7186およびCVE-2014-7187を修正するパッチは、Deer Hunterがコメントを投稿してから間もなく利用可能になります。CVE-2014-7169のディストリビューション提供のパッチがある場合は、すでに7186/7187をブロックするのに十分な量がある可能性があります。以下のコマンドでシステムをテストして確認してください。また、ディストリビューションのセキュリティ更新プログラムを確認してください。
BeowulfNode42 14

回答:


83

CVE-2014-6271の脆弱性を確認するには

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

脆弱という言葉をエコーバックするべきではありません。


CVE-2014-7169の脆弱性を確認するには
(警告:失敗した場合は、/tmp/echo後で削除できるファイルを作成または上書きします。テストする前に削除する必要があります)

cd /tmp; env X='() { (a)=>\' bash -c "echo date"; cat echo

日付という言葉を言ってからのようなメッセージで文句を言うべきcat: echo: No such file or directoryです。代わりに、現在の日時が何であるかを示している場合、システムは脆弱です。


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"

テキストをエコーバックしないでくださいCVE-2014-7186 vulnerable, redir_stack


CVE-2014-7187を確認するには

(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"

テキストをエコーバックしないでくださいCVE-2014-7187 vulnerable, word_lineno


CVE-2014-6277を確認するには。私はこれに100%確信はありません。それは、私がもはやアクセスできない部分的にパッチが適用されたシステムに依存しているようだからです。

env HTTP_COOKIE="() { x() { _; }; x() { _; } <<`perl -e '{print "A"x1000}'`; }" bash -c "echo testing CVE-2014-6277"

これに関する合格結果は、テキストのみをエコーバックすることですtesting CVE-2014-6277。perlを実行する場合、またはperlがインストールされていないことを訴えている場合、それは間違いなく失敗です。パッチが適用されていないシステムがなくなったため、他の障害の特性についてはわかりません。


CVE-2014-6278を確認するには。繰り返しますが、パッチが適用されていないシステムがないため、このテストが100%確実かどうかはわかりません。

env HTTP_COOKIE='() { _; } >_[$($())] { echo hi mom; id; }' bash -c "echo testing CVE-2014-6278"

このテストのパスは、テキストのみをエコーバックすることですtesting CVE-2014-6278。あなたのものがhi momどこにでもエコーバックする場合、それは間違いなく失敗です。


1
foo='() { echo not patched; }' bash -c fooこれに一般的なテストを追加できますか?関数のエクスポートが別の名前空間に配置されるまで、パーサーのバグから次のバグへの実行を停止しません。
ビリー14

そのテストにはCVEがありますか?この問題を説明する参考文献はありますか?また、この種の情報は、既存のパッチの成功または失敗をテストする方法に関するこのQのため、shellshockに関する他の質問の1つに属する場合があります。
BeowulfNode42 14

これは、Michal Zalewskiの今後のShellshock CVEのブログ投稿(lcamt​​uf.blogspot.com/2014/09/…)からのものです。CVE-2014-6278に対する彼の推奨テストは、まだ非公開です。ただし、テストの一般性については間違っていたようです。Zalewskiのテストに合格したが、CVE-2014-7187テストに失敗したケースに既に遭遇しました。
ビリー14

そして、CVE-2014-6277とCVE-2014-6278の完全な開示とそれらをチェックするコマンドがあります:seclists.org/fulldisclosure/2014/Oct/9
billyw

注意点:BASHのバージョンが脆弱であっても、何も使用しない場合(つまり、「www」や「cups」などのデーモンで使用されるすべてのアカウント)は、デフォルトのシェルとしてBASHで構成され、あなたのコードはsystem()などを呼び出します。脆弱なバージョンを持っている方がリスクは少ないかもしれませんが、それでもできるだけ早くBASHをアップグレードしてください。
DTK 14年

32

脆弱なバージョンのBashによって自動的に評価される、特別に細工された環境変数をエクスポートします。

$ export testbug='() { :;}; echo VULNERABLE'

ここで、単純なエコーを実行して、Bashが$ testbugのコードを評価したかどうかを確認します(その変数を自分で使用していない場合でも):

$ bash -c "echo Hello"
VULNERABLE
Hello

「VULNERABLE」文字列が表示されている場合、答えは明らかです。それ以外の場合、心配する必要はなく、パッチを適用したバージョンのBashは問題ありません。

複数のパッチが主要なLinuxディストリビューションによってリリースされており、脆弱性が完全に修正されない場合があることに注意してください。このバグのセキュリティアドバイザリとCVEエントリを確認してください。


5
CVE-2014-6271に加えて、特ににおけるRed Hatからの不完全な修正では、独自のを持っても、次の価値がある:CVE-2014から7169まで
DocMax 14

3
シェルenvを汚染せず、「youreが別のログインシェルを使用している場合(これについては知らないかもしれませんexport):env testbug='() { :;}; echo VULNERABLE' bash -c "echo Hello"
Lloeki 14

1
いくつかのUbuntuの具体的な詳細は、ここにありますaskubuntu.com/questions/528101/... -個人的に私は問題を解決するためのUbuntu 13.10から14.04にアップグレードしなければならなかった
dodgy_coder

2

ShellShockは実際にはbashの複数の脆弱性の組み合わせであり、現時点ではこの脆弱性を悪用するマルウェアも存在するため、ShellShockは未解決の問題である可能があり、この問題に関するRedHatからのアップデートを含むスレッドがあります

Redhatは以下を推奨します。

コマンドを実行:

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

出力が次の場合:

$ env 'x=() { :;}; echo vulnerable' 'BASH_FUNC_x()=() { :;}; echo vulnerable' bash -c "echo test"
vulnerable
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

修正はありません。

出力が次の場合:

$ env 'x=() { :;}; echo vulnerable' 'BASH_FUNC_x()=() { :;}; echo vulnerable' bash -c "echo test"
bash: warning: x: ignoring function definition attempt
bash: error importing function definition for `x'
bash: error importing function definition for `BASH_FUNC_x()'
test

あなたはCVE-2014-6271修正した

出力が次の場合:

$ env 'x=() { :;}; echo vulnerable' '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

あなたは脆弱ではありません。

ShellShockチェックのもう1つの部分は、CVE-2014-7169脆弱性チェックで、システムがファイル作成の問題から保護されていることを確認します。BashのバージョンがCVE-2014-7169に対して脆弱かどうかをテストするには、次のコマンドを実行します。

$ cd /tmp; rm -f /tmp/echo; env 'x=() { (a)=>\' bash -c "echo date"; cat /tmp/echo
bash: x: line 1: syntax error near unexpected token `='
bash: x: line 1: `'
bash: error importing function definition for `x'
Fri Sep 26 11:49:58 GMT 2014

システムが脆弱な場合、日時が表示され、/ tmp / echoが作成されます。

システムが脆弱でない場合、次のような出力が表示されます。

$ cd /tmp; rm -f /tmp/echo; env 'x=() { (a)=>\' bash -c "echo date"; cat /tmp/echo
date
cat: /tmp/echo: No such file or directory

2

CGIスクリプトの脆弱性についてWebサーバーをテストするために、ShellShockerというCLIユーティリティを作成しました。サイトをテストするには、次を実行します。

python shellshocker.py <your-server-address>/<cgi-script-path>

すなわち

python shellshocker.py http://example.com/cgi-bin/possibly-vulnerable-script.cgi

編集:このユーティリティは削除されました、ごめん: '(


あなたのリンクは死んでいる
SSK

@SSKごめんなさい;)入力ミス。
リアムマーシャル14

リンクはまだ機能していません。
Mxx 14

はい、ごめんなさい、私はそれを取り下げました。それは私が好きではない方法で悪用されていました。
リアムマーシャル14年

1

次のオンラインテストにCGI URLを送信できます。

http://shellshock.iecra.org


4
ダウン投票の理由を提供することは礼儀正しいことです。
デビッド

4
「すべてのスキャンを記録します」??? 不気味。Pythonをダウンロードして、自分で実行します。
ブラッド14

1
@brad少なくとも彼らはあなたに言っている。このサービスを提供するホワイトハットセキュリティサービスを提供していた場合、何人が盲目的にサイトの詳細を入力したかをログに記録します(個々の詳細のないカウンターのみの場合)。テストを提供するサイトの真正性についてあまり知らずに侵入テストを試行します...そして、誰かが他の人に属する脆弱なサイトを見つけるために彼らのサービスを使用した場合に誰が何をテストしたかのログが欲しいでしょう...
ロブモアー14

-1

タイプenv x = '(){:;}; echo脆弱なbash -c "これはテストです"これが脆弱であり、これがテストである場合、OSX / Linuxマシンが影響を受けていることを意味します。解決策は、bashの最新バージョンに更新することです。


6
なぜルートとして?完全に不要です。
マット14
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.