はじめに
Ajax(Asynchronous JavaScript + XML)やマッシュアップ(Mashup)に代表されるWeb 2.0技術は、そのリッチで使いやすいユーザーインターフェイスや高速なレスポンス性から、現在のWebアプリケーション開発のトレンドの一つとなっています。現在注目を集めているクラウド・コンピューティングにおいても、雲(=インターネット)から提供されるサービスを使用したり連携するために、AjaxやJavaScriptはよく用いられます。しかし、セキュリティーの観点から見ると、これらWebアプリケーションやその主要な実行環境環境であるWebブラウザーには、さまざまなセキュリティー上の脅威が存在します。図1は、IBMのセキュリティ部門の一つであるISSが公開しているセキュリティ脅威のトレンドとリスクに関するレポート2008年版によるもので、ISSが検知したWebアプリケーションに関する脆弱性の件数がここ数年で非常に増加していることを示しています。
また、同レポートでは、発見されたWebアプリケーションの脆弱性の数が、他のプラットフォームの脆弱性の数を上回ったことも報告されています。このことは、Webアプリケーションが、ITシステムの中核を担うようになってきたと共に、セキュリティー上の脅威とそれに起因するリスクが高まっていることを意味しています。
Webアプリケーションが、企業レベルの使用に耐えるためには、信頼性やセキュリティーと言った基盤技術が必要です。この記事では、Webアプリケーションを開発あるいは使用する際のセキュリティー上の問題点や対策、筆者が取り組んでいる研究開発プロジェクトなどについて紹介します。
Web 2.0に特有のセキュリティーがあるのか? と聞かれることがよくあります。Webアプリケーションのセキュリティーを高めるための情報やツールを提供しているOWASPプロジェクト(Open Web Application Security Projectでは、2004年と2007年にWebアプリケーションにおける10個のセキュリティー上の脅威をあげています。2007年のリストは次のようになっています。
- クロスサイトスクリプティング(Cross Site Scripting, XSS)
- インジェクション攻撃
- 悪意を持ったファイルの実行
- 安全でないオブジェクトの直接参照
- クロスサイトリクエストフォージェリー
- 情報漏洩と不適切なエラー処理
- 認証とセッション管理の不備
- 安全でない暗号データ保存
- 安全でない通信
- URLによるアクセス制限の不備
後で紹介するクロスサイトスクリプティングや、スクリプトやSQLコードを注入し実行させるインジェクション攻撃、意図しないWebページの書き込みや商品購入を引き起こすクロスサイトリクエストフォージェリー(Cross Site Request Forgery, CSRF)など、Web 2.0アプリケーションに多く見られる脅威が上位に来ていますが、クロスサイトスクリプティング、インジェクション攻撃は、2004年のTop 10リストにも入っています。つまり、攻撃手法そのものは、Web 2.0技術が普及する前後で大きく変化している訳ではなく、Webを取り巻く環境やアプリ開発のあり方が変化したことにより、より深刻さを増してきたと言えるでしょう。
Web 2.0の特徴の一つは、コンテンツが、多くの場合匿名のユーザによって生成され、別のユーザー群によってアクセスされることです。コンテンツの量が膨大になると共に、質という面では、企業や信頼される情報源からのコンテンツとは異なり、必ずしも正確な情報ばかりとは限りなくなってきています。信頼できるWebサイトを騙るフィッシング攻撃も問題になってきていますし、WikiやSNSなどでの誹謗中傷が社会的な問題になっているのはご存じの通りです。また、コンテンツに悪意を持ったJavaScriptコードやマルウエア(malware)が含まれる危険性も増加しています。このようにWeb上のコンテンツがコモディテイー化し、信頼性や価値が相対的に低下していることが、前述のさまざまな脆弱性を引き起こす原因の一つとなっています。
また、これらのコンテンツを扱うWebアプリケーション構築のあり方も変わりつつあります。例えば、Webブラウザは、静的なHTML文書の閲覧環境から、動的なコンテンツやWebアプリケーションの実行プラットフォームへと役割を変えつつあります。DojoなどのJavaScriptベースのライブラリーが充実し、ロジックがクライアント(=Webブラウザ)側でも動くようになったことで、従来サーバー側を主に守っていればよかったセキュリティーが、クライアント側でのプログラム実行にも注意を払う必要が出てきています。Webブラウザのセキュリティーモデルは、従来からの静的なHTML文書の閲覧環境を想定したものであり、Webアプリケーションのセキュアな実行環境としては不十分です。Webブラウザの実装が多数存在し、さらにバージョンの違いによって変わる振る舞いが、セキュリティ的にも問題になります。Flashなどブラウザ上で動くプラグインのバリエーションを考えると、開発者は膨大な組み合わせのクライアント環境を仮定しないといけません。
さらに、Web 2.0技術を用いることで、Webブラウザ上に複数の機能やAPIをコンポーネント化してマッシュアップすることが可能になりました。SaaSやクラウド・コンピューティングの普及と相まって、企業アプリにおいても、社内のコンポーネントとWeb上のコンポーネントをマッシュアップするケースが今後増えていくと考えられます。これらのコンポーネントは、セキュリティー的には、異なるドメインに属するものであり、信頼できるものとそうでないものをどのように組み合わせるかは非常に重要な問題です。信頼できないコンポーネントが悪意を持ったスクリプトを含んでいると、信頼できるコンポーネントをコントロールし、重要な情報を盗み出される可能性があります。
以降、Webアプリケーションのセキュリティーについて、いくつかのトピックを紹介します。