2014年5月9日金曜日

昨今の話題まとめとか

この連休は、ちょっと長めのお休みをいただき、リフレッシュしてきました。ちょっとエネルギーをもらったので、また仕事に励もうと思っています。

ところで、このところ、様々な脆弱性問題などが発生しています。このあたりをまとめた記事をJNSA(NPO日本ネットワークセキュリティ協会)のホームページに寄稿しましたので、お読みいただければと思います。

執筆中、さらに IEゼロデイ問題やApache Strutsの問題などが騒ぎになりましたが、これらはこの記事では対応できていません。

IEゼロデイ脆弱性は、発見される前に有効な攻撃コードが流通してしまったため、米国DHS(国家安全保障省が警告を出す事態に陥りました。XPサポート切れ直後にゼロデイ脆弱性が使われることは、ある程度予想されていたため、やはり・・と行った感じです。今回、マイクロソフトがXPも含めて対応をしてくれたのは、有り難かったと思います。

この脆弱性は、use after free と呼ばれるタイプの脆弱性で、プログラム内で一時的なデータ領域を確保するためのヒープ領域の取り扱いに問題が生じたものです。この脆弱性は、使用後、解放されたヒープ領域のデータを再利用できる手段を提供します。攻撃コードでは、最初にAdobe Flash Playerのオブジェクトを実行させ、その機能を使ってヒープ領域に大きなメモリを確保した上で、攻撃に必要な情報を埋め込み、領域を解放します。その後、Java Scriptで、IEの脆弱性を悪用し、あらかじめ書き込んであった情報を使って、攻撃コードを実行させます。この方法により、マイクロソフトが組み込んでいるASLR(攻撃コードによって、既存のライブラリコードが悪用されるのを防ぐため、プロセスごとにメモリ配置をランダマイズする対策)やDEP(データ領域でのコード実行禁止)などが回避できてしまうことになり、攻撃者が悪意あるコードを実行できてしまいます。

この攻撃コードを使って攻撃を仕掛けるには、まず、利用者を不正な(もしくは改ざんされた)Webサイトに誘導してFlashオブジェクトやJava Scriptを実行させることが必要です。このことから、いわゆる水飲み場攻撃を目的として作られた攻撃コードであるとも言え、特定の企業や政府機関などが標的にされた可能性があります。これが、DHSがまっさきに警告を出した理由でしょう。

このコードでは、Flash実行を禁止することで被害は防げますが、それ以外にも悪用する方法はあると考えられるので、早めに修正プログラムを適用することが重要です。今回は幸いにもXP対応が行われましたが、今後、これが保証されるものではないので、XPについては、できうる限り早くOSを更新しておく必要があります。

Apache Struts は、Webアプリケーションを開発するためのJavaベースのオープンソースフレームワークです。TomcatなどのJavaアプリケーションサーバの上で動作し、Webアプリケーションを開発するための様々な機能を提供します。このため、多くのWebサイトでアプリケーション構築に際して利用されています。

今回の脆弱性については、当初、Strutsの現バージョンであるStruts2の脆弱性として公表され、開発元のApache Foundation によって修正パッチが配布されました。この脆弱性は、外部から不正に加工されたリクエストを送ると ClassLoaderと呼ばれるJavaランタイムの機能を掌握することができ、攻撃者が任意のJavaコードを実行できるというものです。これによって実行されるJavaコードはWebサーバ(アプリケーションサーバ)の実行権限で実行されるため、制限はありますが、サーバの構成によっては重要なデータが漏洩したり、Webが改ざんされるといった可能性があります。また、これらがシステム権限で動作していた場合(通常、これは絶対行ってはいけないこととされていますが、アプリケーションの構造を簡単にするため、安易に行われるケースが後を絶ちません)サーバ自体を乗っ取られてしまう危険もあります。

修正配布で一件落着したかに見えたのですが、後日、この修正が不十分だったことが発覚します。さらに、同様の脆弱性が既にサポート切れとなっているStruts1という古いバージョンにも存在することが確認されたため、大騒ぎとなりました。Struts2の再修正は行われましたが、Struts1についてはサポート切れから相当期間経過しているため、修正は行われません。一方、国内では、まだStruts1で動作しているWebサイトが相当数有り、これらをどうするかが大問題となっています。Java環境はそのバージョンへの依存が強いため、どうしても開発者やサイト運用者はバージョンアップを嫌う傾向にあります。しかし、一旦サポートが切れてしまうと、こうしたリスクに曝されることになりますから、早め早めで対応していくという考え方に切り替える必要があるでしょう。これは、SIerだけではなく、コストを負担するユーザ側の認識も必要です。このような対応は必要なコストとして将来的なロードマップに乗せておく必要があるのです。今回、一部のSierが独自に修正コードを提供しはじめていますが、これが出来るSIerはそれほど多くありません。オープンソースのソフトウエアを使うということは、こうしたこと(自己責任でに利用)を頭に置いておく必要があります。

とりあえず、簡単にまとめてみました。ご参考まで。