ShellshockBashの脆弱性からサーバーを保護する方法
序章
2014年9月24日、Shellshockまたは「BashBug」と呼ばれるGNUBashの脆弱性が公開されました。 つまり、この脆弱性により、リモートの攻撃者は、環境変数の割り当てに続いてコードの文字列を渡すことにより、特定の条件で任意のコードを実行することができます。 Linux、BSD、およびMac OS Xディストリビューションの間でBashが遍在しているため、多くのコンピューターはShellshockに対して脆弱です。 1.14から4.3までのパッチが適用されていないすべてのBashバージョン(つまり、 これまでのすべてのリリース)が危険にさらされています。
Shellshockの脆弱性は、許可されていないリモートユーザーがBash環境変数を割り当てることを許可するサービスまたはアプリケーションを実行しているシステムで悪用される可能性があります。 悪用可能なシステムの例には、次のものがあります。
- Bashで記述された、またはBashサブシェルを起動するCGIスクリプト(
mod_cgi
およびmod_cgid
経由)を使用するApacheHTTPサーバー - 特定の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 is vulnerable!
の部分は、リモートの攻撃者が悪意のあるコードを挿入できる場所を表しています。 環境変数割り当て内の関数定義に続く任意のコード。 したがって、次の出力が表示された場合は、ご使用のバージョンのBash が脆弱であり、更新する必要があります。
Bash is vulnerable!
Bash Test
出力にシミュレートされた攻撃者のペイロードが含まれていない場合、つまり 「Bashは脆弱です」は出力として出力されません。少なくとも最初の脆弱性( CVE-2014-6271 )から保護されますが、後で発見された他のCVEに対して脆弱である可能性があります。 出力にbash
の警告またはエラーがある場合は、Bashを最新バージョンに更新する必要があります。 このプロセスについては、次のセクションで説明します。
テストコマンドから出力されるのが次の場合のみ、BashはShellshockから安全です。
Bash Test
リモートサイトをテストする
Webサイトまたは特定のCGIスクリプトが脆弱かどうかをテストするだけの場合は、次のリンクを使用してください:‘ShellShock’ Bash Vulnerability CVE-2014-6271 TestTool。
テストするWebサイトまたはCGIスクリプトのURLを適切なフォームに入力し、送信するだけです。
脆弱性の修正:Bashを更新する
この脆弱性を修正する最も簡単な方法は、デフォルトのパッケージマネージャーを使用してBashのバージョンを更新することです。 次のサブセクションでは、Ubuntu、Debian、CentOS、Red Hat、FedoraなどのさまざまなLinuxディストリビューションでのBashの更新について説明します。
APT-GET:Ubuntu / Debian
現在サポートされているUbuntuまたはDebianのバージョンについては、Bashをapt-get
から入手できる最新バージョンに更新してください。
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
yum
から入手できる最新バージョンにBashを更新します。
sudo yum update bash
次に、前のセクションのコマンド(システムの脆弱性の確認)を実行して、システムの脆弱性を再度確認します。
保守終了CentOS/Red Hat/Fedoraリリース
サポート終了ステータスと見なされるCentOS/Red Hat / Fedoraのリリースを実行している場合、パッケージマネージャーを使用してBashを更新するには、サポートにアップグレードする必要があります。 次のコマンドを使用して、新しいリリースにアップグレードできます(問題が発生した場合に備えて、最初にサーバーと重要なデータをバックアップすることをお勧めします)。
sudo yum update
アップグレードが完了したら、必ずBashを更新してください。
結論
影響を受けるすべてのサーバーを最新バージョンのBashに更新してください。 また、サーバーを最新のセキュリティアップデートで最新の状態に保つようにしてください。