何かと物騒なニュースの多いWebアプリケーションのセキュリティ。 特にクロスサイトスクリプティング脆弱性(以下「クロスサイトスクリプティング」といいます)は、対策が難しいだけでなく、セッションハイジャックなどを組み合わせることで他のユーザーの情報を得られるなど攻撃者にとっての メリットも大きく、攻撃は増加の一途をたどっています。
クロスサイトスクリプティングとは?
クロスサイトスクリプティングとは、悪意のあるコードがWebサイトの訪問者のブラウザに送られてしまう脆弱性のことをいいます。 クロスサイトスクリプティング自体でも、ブラウザを強制的に停止させるなどの実害を訪問者に与えることができますが、もっと怖いことは、訪問者のクッキーなどを盗み出し、 ログイン状態を擬似的に作り出して、個人情報やクレジットカード番号など、重要な情報が盗まれる可能性があるという事実です。
プログラマがしっかりすれば済む話?
実際のところクロスサイトスクリプティングは、掲示板など「入力フォーム」に問題があり、意図しないJavaScriptのコードなどが訪問者のブラウザに送られてしまうというケース
が多いため、 一般的には「プログラマが、入力フォームを作る時にJavaScriptなどのコードを別な文字に置換するなどの対応を行うべき」と考えられています。
しかしながら、掲示板のような簡単なプログラムならいざ知らず、昨今のWebシステムは数百、数千のプログラムから構成されることが普通ですから、こうしたシステムで
全てをプログラマの努力に頼ることは難しいだろうという認識も生まれています。また、Webシステムへの攻撃技術も日進月歩で進んでおり、システム構築時には知られていなかった
攻撃の方法が後から発見される、というケースも多く見受けられます。
脆弱性検査で大丈夫なのか?
こうした状況から、各社が「脆弱性検査サービス」や「検査ツール」などを提供しています。
ツールを使ってクロスサイトスクリプティング、SQLインジェクション脆弱性などを洗い出し、事前にアプリケーションを修正することでWebアプリケーションのセキュリティを保とう、というアプローチです。
しかし、よく考えてみるとこの方法にはいくつかの問題があることが分かります。
脆弱性検査を利用するケース
- 本質的に受け身の対策である。脆弱性検査サービスで分かる脆弱性なら発見できるが、そうでなければ脆弱性は放置されたままとなる可能性がある
- リリースの度に、既存アプリケーションに加え、追加したアプリケーションまで検査する必要があり、検査コストが上がる可能性がある
- リリース後のアプリケーションにたった1箇所の問題があっただけで、それまでの検査コストがすべて無駄になる
つまり、脆弱性検査を行っても根本的な問題の解決とはいえないのです。
Webアプリケーションに対する攻撃はゲートウェイで防ぐ!
そこで、視点を変えてみましょう。もし、アプリケーションに対する攻撃をネットワークで防ぐことができたらどうでしょうか?
- アプリケーションの追加リリースの度に検査する必要がなくなりますので、将来の追加コストを抑えることができます
- 脆弱性検査などでも発見できない、未知の攻撃も防御することができます
- セキュリティ試験などの工数を削減でき、システム開発にかかる費用の削減が期待できます
そんな理想的な話があるのでしょうか?
実は、Citrix NetScalerを使えばWebアプリケーションに対する攻撃をネットワークレベルで防ぐことができるのです!
NetScalerは、もともと負荷分散やWebサーバのパフォーマンスを改善するためのネットワーク機器(ロードバランサ)として、GoogleやAmazon、国内ではmixiなどに採用されるなど豊富な実績が
ありますが、更に2007年になってからWAF (Web Application Firewall)という機能を統合し、これまでのファイヤーウォール、IPS/IDS、UTMなどでも
防げなかった、アプリケーションに対する攻撃も効果的に防御することができるようになりました。
NetScalerは、もともとレイヤー7(HTTPのヘッダやボディの中身)のコンテンツまでチェックすることを前提に作られた専用OSの上で動作していますので、非常に高度なセキュリティを
保ちながらも、なんと1.8Gpbs(NetScaler 12000)という驚異的なスループットを実現することができるだけでなく、もともと単体製品として販売されていたWAF機能を統合したという経緯もあって、
成熟度、機能面ともに他の追随を許しません。
NetScaler で防御できる攻撃の例
SQLインジェクション | SQLインジェクション攻撃からの防御を行う機能です。PHPとPostgreSQLの組み合わせで起こりえる「addslashes()関数でも防御できないSQLインジェクション攻撃」なども適切に排除可能です。 |
---|---|
クロスサイトスクリプティング | クロスサイトスクリプティング対策を実施することができます。HTMLの内容を解釈しますので、「簡単なFONTタグなどは認めるが、JavaScriptなどはブロックする」といった実際の運用に即した防御が可能です。 |
バッファオーバーフロー | HTTPリクエストの長さに制限を設けることで、アプリケーションやWebサーバーのバッファオーバーフローを防ぎます。 |
クッキー改ざん | NetScalerは、該当するユーザーが直前のアクセスでどのようなクッキーを保持していたのか、その内容を保持。不正にクッキーを改ざんしても、自動的に不正クッキーを削除することで、セッションハイジャックなどからアプリケーションを守ります。 |
クレジットカード番号 個人情報隠蔽 | 画面にクレジットカードを表示する際、番号の先頭12(11)桁を自動的にXに置換。情報を定義することで、個人情報の隠ぺいも可能です。 HTML内部だけでなくCSVファイルの場合でも同様にブロックできますので、アプリケーションの不備などによる情報漏えいを防ぎます。 |
ソースコード隠蔽 | Webアプリケーションでは、動的処理の開始タグにたった一文字の不備があるだけでソースコードの内容が丸見えになってしまう危険があります
(たとえばJSPのスクリプトレット開始タグ「<%」や、PHPの開始タグの「<?php」などの内、「<」を付け忘れるだけでその後のスクリプトが丸見えになる可能性があります)。 NetScalerは、こうした内部のプログラムが意図せず表示されることが無いように表示のブロックをかけることが可能です。 |
Start URL | ユーザーが直接アクセスすることができるURLを明示することで、意図しないページに直接アクセスされることを防ぐことができます。 |
結論
残念ながら、クロスサイトスクリプティングやSQLインジェクションなどへの攻撃は、アプリケーション開発者の努力によって防止しようと試みているのが現状です。
しかし、Webアプリケーションが巨大化した現状では、そもそもすべての場合の組み合わせをテストすることなど不可能ですし、そのためにセキュリティテスト、脆弱性検査、
保険商品など受身の防御にコストを費やしてしまい、「Webアプリケーションによって得られる生産性の向上や、新規顧客の開拓」といったメリットを得るために必要な
投資が犠牲になっているのが現状ではないでしょうか?
これではまるで、自動車保険と車検にお金を使ってしまい、ガソリンが買えなくなった車と同じ状況です。
車の目的は走ることです。車で移動することで、徒歩では得られない利益が得られますが、それにはリスクが伴うので、車検や保険でそのリスクをカバーするのです。
Webアプリケーションも、「Webを利用することによって高度なサービスの提供や生産性の向上を図る」ことが目的のはずです。
アプリケーション開発者にセキュリティの責任を持たせるのは、ドライバーに車検をやらせるようなものです。
「アプリケーション開発者には開発に集中させることで、より高度なアプリケーションを構築してもらい、攻撃はNetScalerで守る」
これがNetScalerが提供する最適なWebアプリケーションの姿です。