ShellShockは、2014年9月に発見された深刻なセキュリティ
脆弱性であり、GNU Bash(Bourne Again Shell)と呼ばれる広く使用されているUNIXシェルに影響を与えます。この脆弱性は、Bashが環境変数を処理する方法に関するもので、攻撃者がリモートから任意のコードを実行できる可能性があるため、非常に危険なものでした。ShellShockはCVE-2014-6271として知られており、その発見は世界中のシステム管理者やセキュリティ専門家に衝撃を与えました。
ShellShockの概要
ShellShock脆弱性は、Bashが環境変数を解析する際の特定の動作に関連しています。通常、環境変数にはシェルスクリプトや関数が含まれている場合があり、Bashはこれらを適切に処理する必要があります。しかし、ShellShockでは、環境変数に埋め込まれたコードが誤って実行される可能性がありました。この脆弱性を悪用することで、攻撃者はリモートから任意のコマンドを実行し、システムを乗っ取ることができました。
ShellShockの技術的詳細
- 環境変数: 環境変数は、システムやプログラムが動作する際に必要な情報を格納するためのキーと値のペアです。Bashは、環境変数の内容をシェルスクリプトや関数として解釈する機能を持っています。
- 脆弱性の原因: Bashは、特定の形式の環境変数を解析する際に、環境変数に続くコードを自動的に実行してしまうバグがありました。例えば、環境変数が以下のような形式で設定された場合:
env x='() { :;}; echo vulnerable' bash -c "echo this is a test"
この例では、echo vulnerableというコマンドが意図せず実行されてしまいます。
- 攻撃の影響範囲: この脆弱性は、特にインターネットに接続されたWebサーバーやSSHサービスに大きな影響を与えました。攻撃者は、脆弱なBashを使用しているサーバーに対してリモートからコードを実行し、任意のコマンドを送信できるようになりました。
ShellShockの影響と対応策
- 影響: ShellShockは、非常に広範な影響を与えました。特に、ApacheウェブサーバーでCGIスクリプトを使用しているサイトや、SSH経由でリモートアクセスが可能なシステムが危険にさらされました。この脆弱性により、多くの企業や組織がデータの漏洩、システムの乗っ取り、サービスの中断などのリスクに直面しました。
- 対応策: ShellShockの発見後、セキュリティコミュニティは迅速にパッチを開発し、脆弱性を修正しました。システム管理者は、Bashのバージョンを確認し、すぐに更新する必要がありました。また、ファイアウォール設定やアクセス制御リストの見直し、脆弱性スキャンの実施なども推奨されました。
- 長期的な影響: ShellShockの影響は、セキュリティ業界に対して、広く使われているオープンソースソフトウェアの脆弱性管理の重要性を再認識させました。また、この脆弱性の発見をきっかけに、他のシェルやコマンドインタプリタのセキュリティについても再評価が行われました。
まとめ
ShellShockは、セキュリティ業界にとって重要な教訓を残した脆弱性です。サイバーセキュリティエンジニアとしては、このような脆弱性が発生する仕組みや、その対応策を理解しておくことが不可欠です。適切なパッチ管理、定期的なセキュリティスキャン、およびセキュリティプロトコルの遵守は、ShellShockのような脆弱性からシステムを守るために重要です。
検知と対策(防御側の観点)
事実関係
- CVE-2014-6271(2014年9月24日公開)。GNU Bash 4.3 までが、環境変数の値に書かれた関数定義の後ろの文字列を実行してしまう
- 最初の修正が不完全で、残った問題に CVE-2014-7169 が割り当てられた。パッチは一度当てて終わりではなく、後続の修正まで追う必要がある
- CVSS v3.1 の基本値は 9.8。米 CISA は2022年1月28日に「既知の悪用された脆弱性」の一覧に加えている
- NVD は攻撃経路の例として、Apache HTTP Server の mod_cgi・mod_cgid、OpenSSH の ForceCommand、DHCP クライアントのスクリプトを挙げている。共通点は、外から渡された値が環境変数になり、権限の境界を越えて Bash に渡ること
見つけ方
- 資産の把握:Bash の版を全サーバで洗い出す。Web サーバだけでなく、組み込み機器・ネットワーク機器・古い仮想マシンも対象(脆弱性管理、脆弱性スキャン)
- ログの確認:HTTP のヘッダー(User-Agent など)や CGI への入力に、関数定義の形の文字列(「() {」で始まる値)が入っていないかを見る
- IDS/IPS のシグネチャで検知する(ids/ips)
防ぎ方
- Bash を後続の修正まで含めて更新する
- CGI から Bash を呼ぶ構成をやめる。外部の入力を環境変数として受け渡す箇所を減らす
- Web アプリケーションファイアウォールや IPS で、関数定義の形の入力を遮る(更新までのつなぎ)
- 侵害を前提に、更新前に外部へ公開されていたサーバは、不審なプロセスや通信がないかを確かめる(妥協の推定)
出典
確認日:2026年10月14日
最終更新:2026年10月15日 09:53