2011年9月5日月曜日

Apache の脆弱性、対策しましたか?


先月末に Web サーバ として広く使われている Apache の既存のすべてのバージョンにおいて、深刻な脆弱性をかかえていることが明らかになりました。攻撃を行うための手法はすでに広く流通しており、手元の環境でも検証することができるくらいになっています。

最悪なシチュエーションの妄想


この脆弱性を突かれると Web サーバを沈黙させることができるという状況で Web サイト運営側とすると大きな脅威となっています。最悪のシナリオを考えてみると
  1. 政治問題などで某隣国を刺激してしまう
  2. 日本国内のWebサイトを攻撃する呼びかけが広まる
  3. 自動攻撃ツールに今回の脆弱性への攻撃手法が盛り込まれる
  4. 実際に攻撃が行われ国内の多くのサイトが沈黙してしまう
ということが起こりえる状況です。少なくとも対策が一巡するまでは隣国を刺激して欲しくない(笑)のですが、この blog では「さくらのVPS」でのサーバ構築ノウハウをとりあげたことがありますので、こういった状況が発生したときに、どういった対応をとればいいのかということを書いておきたいと思います。( Web サーバについてはマニアックに lighttpd を紹介しましたが、それは聞かないお約束です)

信頼できる情報を入手し行動しよう


まず何よりも大切なのは信頼できる情報を入手するということです。「blogでヤバいって書いてあるから」 とか 「Twitter で勧められたから」という理由で行動を起こすのは非常に愚かな行為であるといえます。今回の件での情報源としてあげることができるのは JPCERT/CC の


かと思います。JPCERT/CCの注意喚起についてはアナウンス用のメーリングリストでも公表されるので、これを機会に購読しておくのも良いかと思います。実際の対策については
The Apache Software Foundation から本脆弱性を修正した Apache HTTP
Server 2.2.20 が公開されています。また、一部のディストリビュータなどか
らも修正済みプログラムが提供されています。十分なテストを実施の上、修正
済みプログラムを適用することをお勧めします。
と書かれている通り、更新された新しいバージョンのものにアップデートすれば良いということが言えると思います。

Ubuntu の場合ですと、この件について
というセキュリティ告知 ( Ubuntu Security Notice ) が出されており、それを見てみると現在サポートされているバージョンにおいて対策を講じた apache2 パッケージが公開されており、それにアップデートすれば良いようです。対策済のバージョンはそれぞれ
Ubuntu 11.04
  apache2.2-bin 2.2.17-1ubuntu1.2
Ubuntu 10.10
  apache2.2-bin 2.2.16-1ubuntu3.3
Ubuntu 10.04 LTS
  apache2.2-bin 2.2.14-5ubuntu8.6
Ubuntu 8.04 LTS
  apache2-mpm-worker 2.2.8-1ubuntu0.21
  apache2-mpm-event 2.2.8-1ubuntu0.21
  apache2-mpm-prefork 2.2.8-1ubuntu0.21
  apache2-mpm-perchild 2.2.8-1ubuntu0.21
となっており、「一般的には通常の方法でアップデートすれば必要なものがすべてアップデートされる」とも書かれています。アップデートの方法は過去にこの記事で触れたので、参考にしてもらえればと思います。

なんとか対策が終わったとして、対策が済んだのかどうかを確かめる必要があるのですが、実は Ubuntu の場合ここで小さな罠があります。例えば apache2.2-bin パッケージのバージョンを調べるのに、dpkg -l を使ってこんな風に調べると
$ dpkg -l apache2.2-bin
Desired=Unknown/Install/Remove/Purge/Hold
| Status=Not/Inst/Conf-files/Unpacked/halF-conf/Half-inst/trig-aWait/Trig-pend
|/ Err?=(none)/Reinst-required (Status,Err: uppercase=bad)
||/ Name           Version        Description
+++-==============-==============-============================================
ii  apache2.2-bin  2.2.16-1ubuntu Apache HTTP Server common binary files
$ 
と、このようにバージョン文字列の表示が途中で切れてしまってセーフなのかアウトなのか分からないもどかしい表示となってしまいます。マニュアルを読んで調べれば分かることなのですが、一例しては、dpkg-query -W を使って
$ dpkg-query -W apache2.2-bin
apache2.2-bin   2.2.17-1ubuntu1.2
$ 
とすることで、対策済かどうかが判別できるかと思います。

「部品」として使われている Apache に注意


ということで、Ubuntu を使っている場合には「一般的な環境では通常通りアップデートせよ」と結果としては非常に簡単な結論になるわけですが、その根拠をこういった感じで調べるということが非常に重要なのではないかと思います。

あとは同じようなモノについても対策を講じる必要があるわけですが、Apache そのものは非常に広い範囲で使われているため「部品」として使われることも多く、Tomcat や Rails などの Web アプリフレームワークと連携をさせている場合などに盲点になりやすいので注意が必要です。

こういった脅威に対してどれだけ迅速に対応できるのかといった点が OS のサポートの質を問うバロメータの一つと言っていいかと思いますので、その辺りにも留意しておくとよいでしょう。

また、Apache を自前でコンパイルしていたり、独自のモジュールなどを組みこんでいたりするとそういったモノについてもケアする必要があるので、そこは各自頑張っていただくよりほかないことも付け加えておきたいと思います。