シェルショック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バージョンに更新してください!また、サーバーを最新のセキュリティアップデートで常に最新の状態に保つことを忘れないでください!
