Ubuntu Weekly Topics

2014年9月26日号14.10の開発・“shellshock”その対応・UWN#384

14.10のFinal Betaとそれに伴うテスト

14.10の開発は無事にFinal Betaに達し[1]⁠、恒例のテスト要請が行われています。14.10のリリースイメージに何らかのバグがあっては困る場合はテストを、あるいはすでにバグを見つけている場合は速やかな報告が必要なフェーズです。近年はこの時期のリリースであっても一部の例外を除いて比較的安定しているため[2]⁠、⁠次リリースを体験してみる」意味でも良いタイミングです。

ただし、あくまで開発版であり、リリース版に比べると実施されたQAの分量は少ないため、バックアップや予備機の準備は必須です。

なお、多言語入力回りについてはFcitxのMIRが現状でまだ完了しておらず、Unityへの組み込みが現在もまだ残務あり、という状態にあるため、まだどちらへ転ぶのかは未知数です。一度インストールしてしまえばIBus環境がセットアップされ、Fcitxが昇格してもその環境が壊れる可能性はあまりありませんが、なんらかの問題で日本語入力が期待通りに行えなくなる可能性はゼロではありません。テストを行う場合、他の常用環境を準備する、壊れても自力で直す覚悟をする、連絡を取る可能性のある相手に「英語の勉強のために、とつぜん英語だけでメールを書いたりするかもしれない」とあらかじめ伝えておく、といった対処をしておくと良いでしょう。

“shellshock”

9月24日深夜に、bashの「shellshock」と呼ばれる脆弱性CVE-2014-6271が公表されました。環境変数に悪意ある細工が施された文字列が含まれた状態でbashが実行されると、攻撃者が与えた任意のコマンドが実行できてしまう、というものです。

この問題への一般的な対策は次の通りです。

  • 1. サポート対象バージョンへの更新:現在もサポートが継続されているバージョンにアップグレードする。
  • 2. CVE-2014-6271への対応:対応パッケージにアップグレードする。
  • 3. CVE-2014-7169への対応:対応パッケージのリリースを待ち、アップグレードする。

9月25日深夜の段階では、3の段階の対応が進められており、⁠パッチとして提案されたものは存在するが、レビュー中」という段階です。コードレビューやQAにまだいくらかの時間が必要になる見込みです。一般的なユーザーであれば「3のリリースを待って確実にアップデートする」対応を行うことで問題を解決できます。

なんらかのサービスを提供中でこのリリースが待てない場合、以下のパッケージ更新以外の対応を行ってください。

  • 3':影響範囲をレビューする。また、もしも/bin/shがbashのsymlinkによって提供されている場合は、それを異なるプログラムによって代替することを検討する。
  • 3a:サービスを停止する。
  • 3b:暫定版パッチを適用したbashに置き換える。
  • 3c:なんらかのmitigationプログラムを利用する。

これらについて、Ubuntuでの対策は具体的には次の通りです。

Ubuntuでの「パッケージ更新以外の対応」は次の通りです。

  • 3':影響範囲のレビュー(1):「readlink /bin/sh」の結果が⁠bash⁠でないことを確認します。後述の情報も参照してください。
  • 3':影響範囲のレビュー(2):readlinkの結果に問題が無ければ、⁠bashを直接利用して提供している外部サービス」の有無を調査します。bashベースのCGIがなければたいていの環境では問題ないと判断できますが、外部サービスを提供している環境であれば、ロード中のプロセスすべてについて、⁠bash」の文字列が含まれていないことを確認するとある程度の安全が担保できます。⁠sudo strings /proc/*/exe | grep bash」の結果をレビューしてください。
  • 3':影響範囲のレビュー(3):より確実な判断が必要な場合は、/proc/*/mapsの第6フィールドに列挙された共有ライブラリすべてについてstringsを実行し、出力にbashが含まれていないことを確認します(ただし、この確認は簡易的なものなので、bashを別名で呼び出しているケースは漏れます⁠⁠。

このレビュー結果を踏まえて、以下のいずれかの対応を行います。たいていのケースでは3bの暫定パッケージの導入が有効と考えられますが、該当のパッチは十分なレビューが行われていないため、未知の障害や非互換を引き起こす可能性があることに注意してください。

  • 3a:サービスの停止:HTTPdを始めとした、⁠bashを叩く可能性のあるサービス」を停止してください。たとえば、gitやsvn等のVCSのために利用コマンドを制約したSSHを提供している場合が該当します。
  • 3b:暫定版パッチを適用したbashへの置き換え:暫定パッチを適用したパッケージ(レビュー中のもの)が、Ubuntu Security Teamのテスト用PPAから入手可能です。PPAのリポジトリを有効にする方法ではなく、直接パッケージをダウンロードして導入してください。
  • 3c:なんらかのmitigationプログラム:今回の問題について、Ubuntu特有のmitigationは提供されていません。Red Hatの提供するmitigationプログラムを流用するか、UFWを用いてアクセス可能なネットワークを制約してください。通常の攻撃手法であればUFWのlimit機能によるアクセス回数の制限が有効ですが、本件では初回アクセスで攻撃として成立するアクセスが可能なため、limitによる防御はほぼ機能しません。

このレビューにおいて、⁠readlink /bin/shの結果が⁠bash⁠でないことを確認する」のくだりを理解するには、いくつかの前提知識が必要になります。

まず、Red Hat系ディストリビューションを利用している場合、/bin/shがbashのsymlinkになっているため、各種言語のシステムコマンド呼び出しが/bin/sh経由で行われる→実体はbash→ここに環境変数が渡るのでcommand injectionが成立する、というドミノ倒しが発生します。もう少しこの「ドミノ倒し」の構造を追いかけてみましょう。

まず、この問題の攻撃要件は「任意の環境変数をセットしてbashを呼び出す」ではなく、⁠環境変数に任意の値をセットしてbashを呼び出す」です。環境変数名が制約されていればかなり安全なのですが、⁠どのような環境変数であっても、とにかく問題を引き起こす文字列をセットできればよい」という点がポイントです。これにより、HTTP経由で動作するCGIのたぐいが攻撃の対象として成立します。

HTTP経由で動作するCGIのたぐいは、デザイン上の基本動作として、クライアント(ユーザーのブラウザ)からHTTP経由で引き渡された各種パラメータを、環境変数(たとえばHTTP_USER_AGENTやQUERY_STRING、HTTP_COOKIE)に格納してから呼び出されます。これにより、ユーザーの環境やリクエストに応じてCGIプログラム側の動作を変更することができるという目的です。

この問題が大きなものになるのは、⁠各種言語からOSの他のプロセスを起動する場合、暗黙で/bin/sh経由で呼び出される」という振る舞いがもうひとつの原因です。CGIから直接bashを呼び出さなくても、CGIから他のプロセスが呼び出される場合、暗黙で/bin/shが利用されるからです。

/bin/shが真にbourne shellやその類似品であれば(少なくともこの件の)問題はありませんが、/bin/shがbashのsymlinkであった場合、本来の「プロセスを起動する」という目的の副作用として「環境変数に任意の値をセットしてbashを呼び出す」という条件が成立してしまうことになります。プログラムの中から他の任意のコマンドを呼び出すことは、Unixのプログラムではしばしば行われることだからです。

……ということで、この攻撃の影響は「/bin/shがbashかどうか」によって大幅に変化するため、readlink /bin/shの結果が⁠bash⁠でないことを確認する、という作業が重要になるわけです。

基本的にUbuntuや現在のDebianであれば、/bin/shはdash[3]のsymlinkであり、bashが直接呼び出されていなければこの問題の影響を受けません。ただし、⁠/bin/shがdashのsymlinkである」は不変の設定ではなく、⁠sudo dpkg-reconfigure dash」を実行することで変更できます。この変更はほとんどの場合は必要になりませんが、商用ソフトウェア(コンパイラや各種ドライバ)のインストール時に「/bin/shがbashのsymlinkでなければ動かない」シェルスクリプト[4]への対応として行われる可能性があります。もしも変更していた場合、/bin/shはbashのsymlinkになっており、⁠おかしな環境変数が引き渡されるように仕組まれたHTTPアクセスがあると任意のコマンドが実行される」という条件が成立してしまいます[5]⁠。

UWN#384

Ubuntu Weekly Newsletter #384がリリースされています。

その他のニュース

今週のセキュリティアップデート

usn-2350-1:NSSに含まれる証明書のアップデート
  • https://lists.ubuntu.com/archives/ubuntu-security-announce/2014-September/002664.html
  • Ubuntu 14.04 LTS・12.04 LTS・10.04 LTS用のアップデータがリリースされています。
  • NSSに含まれる証明書を更新するためのアップデートです。
  • 対処方法:アップデータを適用の上、NSSを利用するアプリケーション(EvolutionやChromium)を再起動してください。
  • 備考:Ubuntuの通常のポリシーとは異なり、非互換を含む可能性がある、バグ修正が適用されたupstreamのリリースをそのままパッケージにしています。
usn-2351-1:nginx のセキュリティアップデート
  • https://lists.ubuntu.com/archives/ubuntu-security-announce/2014-September/002665.html
  • Ubuntu 14.04 LTS用のアップデータがリリースされています。CVE-2014-3616を修正します。
  • NginxがSSLセッションキャッシュを正しく扱っておらず、特定の設定下においては異なるVirtualhostの通信が漏洩することがありました。
  • 対処方法:通常の場合、アップデータを適用することで問題を解決できます。
usn-2352-1:DBus のセキュリティアップデート
  • https://lists.ubuntu.com/archives/ubuntu-security-announce/2014-September/002666.html
  • Ubuntu 14.04 LTS・12.04 LTS・10.04 LTS用のアップデータがリリースされています。CVE-2014-3635, CVE-2014-3636, CVE-2014-3637, CVE-2014-3638, CVE-2014-3639を修正します。
  • DBusに対してローカルユーザーがDoSを仕掛けられる複数の問題がありました。
  • 対処方法:アップデータを適用の上、システムを再起動してください。
usn-2353-1:APT のセキュリティアップデート
  • https://lists.ubuntu.com/archives/ubuntu-security-announce/2014-September/002667.html
  • Ubuntu 14.04 LTS・12.04 LTS・10.04 LTS用のアップデータがリリースされています。CVE-2014-6273を修正します。
  • URLの扱いに問題があり、悪意ある攻撃者が中間者攻撃を仕掛けることにより、メモリ破壊を伴うクラッシュを誘発させることが可能でした。また、usn-2348-1の修正の副作用で、file:やcdrom:ソースの取り扱いが正しくない状態になっていた問題を修正します。
  • 対処方法:通常の場合、アップデータを適用することで問題を解決できます。
usn-2354-1:Linux kernel のセキュリティアップデート
  • https://lists.ubuntu.com/archives/ubuntu-security-announce/2014-September/002668.html
  • Ubuntu 10.04 LTS用のアップデータがリリースされています。CVE-2014-5471, CVE-2014-5472を修正します。
  • 対処方法:アップデータを適用の上、システムを再起動してください。
  • 備考:ABIの変更を伴いますので、カーネルモジュールを自分でコンパイルしている場合は再コンパイルが必要です。カーネルモジュール関連のパッケージ(標準ではlinux-restricted-modules, linux-backport-modules, linux-ubuntu-modulesなど)は依存性により自動的にアップデートされるので、通常はそのままアップデートの適用を行えば対応できます。
usn-2355-1:Linux kernel (EC2) のセキュリティアップデート
  • https://lists.ubuntu.com/archives/ubuntu-security-announce/2014-September/002669.html
  • Ubuntu 10.04 LTS用のアップデータがリリースされています。CVE-2014-5471, CVE-2014-5472を修正します。
  • 対処方法:アップデータを適用の上、システムを再起動してください。
  • 備考:ABIの変更を伴いますので、カーネルモジュールを自分でコンパイルしている場合は再コンパイルが必要です。カーネルモジュール関連のパッケージ(標準ではlinux-restricted-modules, linux-backport-modules, linux-ubuntu-modulesなど)は依存性により自動的にアップデートされるので、通常はそのままアップデートの適用を行えば対応できます。
usn-2356-1:Linux kernel のセキュリティアップデート
  • https://lists.ubuntu.com/archives/ubuntu-security-announce/2014-September/002670.html
  • Ubuntu 12.04 LTS用のアップデータがリリースされています。CVE-2014-3601, CVE-2014-5471, CVE-2014-5472を修正します。
  • 対処方法:アップデータを適用の上、システムを再起動してください。
  • 備考:ABIの変更を伴いますので、カーネルモジュールを自分でコンパイルしている場合は再コンパイルが必要です。カーネルモジュール関連のパッケージ(標準ではlinux-restricted-modules, linux-backport-modules, linux-ubuntu-modulesなど)は依存性により自動的にアップデートされるので、通常はそのままアップデートの適用を行えば対応できます。
usn-2357-1:Linux kernel (OMAP4) のセキュリティアップデート
  • https://lists.ubuntu.com/archives/ubuntu-security-announce/2014-September/002671.html
  • Ubuntu 12.04 LTS用のアップデータがリリースされています。CVE-2014-3601, CVE-2014-5471, CVE-2014-5472を修正します。
  • 対処方法:アップデータを適用の上、システムを再起動してください。
  • 備考:ABIの変更を伴いますので、カーネルモジュールを自分でコンパイルしている場合は再コンパイルが必要です。カーネルモジュール関連のパッケージ(標準ではlinux-restricted-modules, linux-backport-modules, linux-ubuntu-modulesなど)は依存性により自動的にアップデートされるので、通常はそのままアップデートの適用を行えば対応できます。
usn-2358-1:Linux kernel (Trusty HWE) のセキュリティアップデート
  • https://lists.ubuntu.com/archives/ubuntu-security-announce/2014-September/002672.html
  • Ubuntu 12.04 LTS用のアップデータがリリースされています。CVE-2014-3601, CVE-2014-5077, CVE-2014-5471, CVE-2014-5472を修正します。
  • 対処方法:アップデータを適用の上、システムを再起動してください。
  • 備考:ABIの変更を伴いますので、カーネルモジュールを自分でコンパイルしている場合は再コンパイルが必要です。カーネルモジュール関連のパッケージ(標準ではlinux-restricted-modules, linux-backport-modules, linux-ubuntu-modulesなど)は依存性により自動的にアップデートされるので、通常はそのままアップデートの適用を行えば対応できます。
usn-2359-1:Linux kernel のセキュリティアップデート
  • https://lists.ubuntu.com/archives/ubuntu-security-announce/2014-September/002673.html
  • Ubuntu 14.04 LTS用のアップデータがリリースされています。CVE-2014-3601, CVE-2014-5077, CVE-2014-5471, CVE-2014-5472を修正します。
  • 対処方法:アップデータを適用の上、システムを再起動してください。
  • 備考:ABIの変更を伴いますので、カーネルモジュールを自分でコンパイルしている場合は再コンパイルが必要です。カーネルモジュール関連のパッケージ(標準ではlinux-restricted-modules, linux-backport-modules, linux-ubuntu-modulesなど)は依存性により自動的にアップデートされるので、通常はそのままアップデートの適用を行えば対応できます。

おすすめ記事

記事・ニュース一覧