GNU/Linux >> Linux の 問題 >  >> Linux

Bashにシェルショックの脆弱性があるかどうかを確認する方法は?

Shellshockの脆弱性は、2014年後半に発見されました(正確には、影響は2014年9月24日にCVE-2014-6271に投稿されました)。その後、bashバージョンのアップデートがリリースされました 4.1.2-15 Shellshockの脆弱性が修正されました。さて、全世界がbashを更新し、Shellshockからシェルを保護しましたが、驚くべきことに、私のオフィスの多くのマシンは何らかの理由で更新されませんでした。怖いのは、脆弱なシェルを備えたマシンのいくつかがインターネットで多くのサービスをホストしていたことです。インターネット上のさまざまなブログによると、Shellshockエクスプロイトにより、攻撃者はCGIスクリプトを介してbashで悪意のあるコマンドをリモートで実行できます。

(I know this tutorial is pretty late, but there are many who are not aware of it and still using vulnerable bash on their public servers)

まず、BASHがShellshockに対して脆弱かどうかを確認します 。したがって、4.1.2より前のbashバージョンには必ずこの脆弱性があります。

$ bash --version
 GNU bash, version 3.2.25(1)-release (x86_64-redhat-linux-gnu)

(または)

$ rpm -qa|grep bash
 bash-completion-1.3-7.el5
 bash-3.2-32.el5_9.1

バージョンがわかったので、以下のコマンドを実行して、Shellshockに対して脆弱であることを確認します。

$ env x='() { :;}; echo vulnerable' bash -c "echo If you see the word vulnerable above, you are vulnerable to shellshock"
 vulnerable
 If you see the word vulnerable above, you are vulnerable to shellshock

解決策:

この投稿の一番下にジャンプします。場合によっては、シェルショックがどのように機能するかを知りたい場合は、読んでください。

SHELLのエクスポート変数について:

上記の出力が示すように、SHELLは脆弱ですが、どのように機能するかを見てみましょう。

通常、環境変数を設定してシェルで使用できます。たとえば、次のようになります。

$ test=1
 $ echo $test
 1

ただし、新しいbashシェルで環境変数「test」を直接使用することはできません。 。チェックしてください:

$ test=1
 $ echo $test
 1
 $ bash
 $ echo $test

出力が空白です。その理由は、環境変数は同じシェルでのみアクセスできるためです。ただし、環境変数をエクスポートすると、新しいbashシェルでも使用できるようになります。次に例を示します:

$ var="testing"
 $ export var
 $ bash
 $ echo $var
 testing

これで、変数「$ var」が設定され、1つのシェルにエクスポートされ、別のシェルからアクセスされたことがわかります。もちろん、以下のコマンドを使用していつでもエクスポートを停止できます。

$ export -n var
 $ bash
 $ echo $var

同様に、関数を作成して1つのシェルでエクスポートし、エクスポートされた関数に別のシェルからアクセスできます。その例も見てみましょう。

$ fnc() { echo "testing"; }
 $ fnc
 testing
 $ bash
 $ fnc
 bash: fnc: command not found

上記の出力では、「 bash:fnc:コマンドが見つかりません」と表示されます。 ‘なぜなら、 fnc エクスポートされた関数ではありません。したがって、別のシェルから呼び出すことはできません。

fnc」をエクスポートしましょう ‘も。

$ export -f fnc
 $ fnc
 testing
 $ bash
 $ fnc
 testing

期待どおりに機能します(「 fnc ‘がエクスポートされ、別のシェルで使用可能になりました。

変数または関数をエクスポートすると、環境変数が設定されます

$ env | grep -A1 fnc
 fnc=() { echo "testing"
 }

シェルショックエクスプロイトになりました

上記の例に基づいて、新しいbashシェルが()で始まる環境変数の定義を取り込み、それを関数として解釈することを学びました。 。ただし、ここに脆弱性があります。新しいシェルは、見積もりにあるものをすべて実行します。

例:

以下のコマンドを実行します:

$ export sse_fnc='() { echo "function shellshock exploit" ; }; echo "Not good"; '

「sse_fnc」の環境変数を確認してください:

$ env | grep -A1 sse_fnc
 sse_fnc=() { echo "function shellshock exploit" ; }; echo "Not good";

新しいbashシェルに移動します:

$ bash
 Not good

注:bash」と入力しました ‘とテキスト‘ Not good が表示されます ‘印刷。つまり、新しいシェルは、環境変数を読み取った後に関数の実行を開始し、後続のコマンドも実行します(「エコー「関数シェルショックエクスプロイト」;」の後に関数ブレースが閉じた場合でも)。

言い換えれば、「エクスポートされた変数sse_fnc 関数sse_fncとして解釈されたサブシェルに渡されました しかし、後続のコマンドが実行されました(this is bad )サブシェルが生成されたとき。」

Fixee@StackExchange経由

この脆弱性を悪用するにはどうすればよいですか?

この男(shellshocker.net)よりもうまく説明できる人はいないと思います。ありがとう!

シェルショックを修正する方法

簡単です。bashを更新し、エクスプロイトを試して、脆弱性がなくなったかどうかを確認してください。

$curl https://shellshocker.net/fixbash | sh

上記のコマンドは、約30以上のパッチを自動的にダウンロードし、ソースからbashをコンパイルします。このスクリプトを定期的に実行して、bashを最新のパッチで最新の状態に保つことができます。

インストールが成功したら。以下のようにbashのバージョンを確認してください:

$bash --version
 GNU bash, version 4.3.42(1)-release (x86_64-unknown-linux-gnu)

シェルショックの脆弱性をテストする:

$env x='() { :;}; echo vulnerable' bash -c "echo If you see the word vulnerable above, you are vulnerable to shellshock
 If you see the word vulnerable above, you are vulnerable to shellshock

上記の出力から、「脆弱な」単語は出力されませんでした。だから私のbashは安全です!

(または)

$env X='() { (shellshocker.net)=>\' bash -c "echo date"; cat echo; rm ./echo

BASHが脆弱な場合、上記のコマンドは日付を出力します。それ以外の場合、BASHは安全です。


Linux
  1. Linux の Bash で syslog を確認するには?

  2. Bashでファイルが空かどうかを確認するには?

  3. BashでファイルにUTF-8 BOMがあるかどうかを検出する方法は?

  1. Bashでループを作成する方法

  2. シェルスクリプトBashでサブストリングをチェックする方法は?

  3. ssh-agent が既に bash で実行されているかどうかを確認するには?

  1. Bashが色を印刷できるかどうかを確認する方法は?

  2. 文字列にBashの部分文字列が含まれているかどうかを確認する方法

  3. Linux で Bash Shellshock CVE-2014-6271、CVE-2014-7169 を修正する方法