ウェブサイト検索

シェルショックBash脆弱性からサーバーを守る方法


紹介

2014年9月24日、Shellshockまたは「Bash Bug」として知られるGNU Bashの脆弱性が明らかにされました。要するに、この脆弱性により、特定の条件下でリモート攻撃者が環境変数の割り当ての後にコードの文字列を渡すことで任意のコードを実行できるようになります。BashはLinux、BSD、Mac OS Xのディストリビューションの中で広く使用されているため、多くのコンピュータがShellshockに対して脆弱です。バージョン1.14から4.3までの未修正のBashバージョン(つまり、現在までのすべてのリリース)がリスクにさらされています。

Shellshockの脆弱性は、未承認のリモートユーザーがBash環境変数を割り当てることを許可するサービスまたはアプリケーションを実行しているシステムで悪用される可能性があります。悪用可能なシステムの例は以下の通りです:

  • Bashで書かれたCGIスクリプトを使用するApache HTTPサーバー(mod_cgiおよびmod_cgid経由)またはBashサブシェルを起動する
  • 特定のDHCPクライアント
  • 「ForceCommand」機能を使用するOpenSSHサーバー
  • Bashを使用するさまざまなネットワークに公開されたサービス

バグの詳細な説明は、CVE-2014-6271、CVE-2014-7169、CVE-2014-7186、およびCVE-2014-7187で見つけることができます。

Shellshockの脆弱性は非常に広範囲にわたるもので、OpenSSLのHeartbleedバグ以上に多く、特に悪用が容易であるため、影響を受けているシステムはできるだけ早く適切に更新して、脆弱性を修正または緩和することが強く推奨されます。私たちは、あなたのマシンが脆弱であるかどうかをテストする方法、そして、もし脆弱であれば、脆弱性を取り除くためにBashを更新する方法を示します。

システムの脆弱性をチェックする

Bashを実行している各システムで、次のコマンドをbashプロンプトで実行することでShellshock脆弱性を確認できます:

env 'VAR=() { :;}; echo Bash is vulnerable!' 'FUNCTION()=() { :;}; echo Bash is vulnerable!' bash -c "echo Bash Test"

強調表示されたecho Bash は脆弱です!コマンドの部分は、リモート攻撃者が悪意のあるコードを注入できる箇所を示しています。環境変数の割り当て内の関数定義の後に任意のコードが続いています。したがって、次の出力が表示された場合、あなたのBashのバージョンは脆弱であり、更新する必要があります:

Bash is vulnerable!
Bash Test

もしあなたの出力にシミュレートされた攻撃者のペイロード、つまり「Bashは脆弱です」というメッセージが出力として表示されない場合、あなたは少なくとも最初の脆弱性(CVE-2014-6271)に対して保護されていることになりますが、その後に発見された他のCVEに対しては脆弱である可能性があります。出力にbashの警告やエラーがある場合は、Bashを最新バージョンに更新する必要があります。このプロセスについては次のセクションで説明します。

テストコマンドから出力される唯一のものが以下であるなら、あなたのBashはShellshockから安全です:

Bash Test

リモートサイトをテストする

ウェブサイトや特定のCGIスクリプトが脆弱かどうかを確認したい場合は、こちらのリンクを使用してください:‘ShellShock’ Bash 脆弱性 CVE-2014-6271 テストツール。

テストしたいウェブサイトまたはCGIスクリプトのURLを適切なフォームに入力し、送信してください。

脆弱性を修正: Bashを更新する

脆弱性を修正する最も簡単な方法は、デフォルトのパッケージマネージャを使用してBashのバージョンを更新することです。以下の小節では、Ubuntu、Debian、CentOS、Red Hat、Fedoraを含むさまざまなLinuxディストリビューションでのBashの更新方法を説明します。

APT-GET: Ubuntu/Debian

現在サポートされているUbuntuまたはDebianのバージョンについては、apt-getを使用してBashを最新バージョンに更新してください:

sudo apt-get update && sudo apt-get install --only-upgrade bash

次に、前のセクション(システムの脆弱性をチェック)で説明したコマンドを実行して、システムの脆弱性を再確認してください。

エンドオブライフのUbuntu/Debianリリース

もしあなたが エンドオブライフ ステータスと見なされるUbuntu/Debianのリリースを実行している場合、Bashを更新するためにパッケージマネージャを使用するには、サポートされているバージョンにアップグレードする必要があります。以下のコマンドを使用して新しいリリースにアップグレードすることができます(問題が発生した場合に備えて、まずサーバーと重要なデータのバックアップを取ることをお勧めします):

sudo do-release-upgrade

アップグレードが完了したら、Bashも更新することを忘れないでください。

YUM: CentOS/Red Hat/Fedora

利用可能な最新バージョンのBashにyumを使ってアップデートします:

sudo yum update bash

次に、前のセクション(システムの脆弱性をチェック)で説明したコマンドを実行して、システムの脆弱性を再確認してください。

CentOS/Red Hat/Fedora のサポート終了リリース

CentOS/Red Hat/Fedora のリリースが サポート終了 ステータスと見なされる場合、Bash を更新するためにパッケージマネージャを使用するには、サポートされているバージョンにアップグレードする必要があります。新しいリリースにアップグレードするために次のコマンドを使用できます(問題が発生した場合に備えて、まずサーバーと重要なデータのバックアップを取ることをお勧めします):

sudo yum update

アップグレードが完了したら、Bashも更新することを忘れないでください。

結論

影響を受けたすべてのサーバーを最新のBashバージョンに更新してください!また、サーバーを最新のセキュリティアップデートで常に最新の状態に保つことを忘れないでください!

関連記事: