Webアプリケーションのセキュリティ・ホールを突く攻撃を,自動的に遮断してくれる「Webアプリ防御ソフト」が登場している。米サンクタムの「AppShield」に続いて,米カバドゥが「InterDo」を2002年7月に出荷。どちらも,クッキーなどの改ざんや,悪意のあるSQL文の送信,バッファ・オーバーフローに対する攻撃などを検知して遮断する。ただし正規のアクセスを遮断してしまう場合があり,それを避けるように設定すると,一部の攻撃を検知できなくなることがある。

(安東 一真=andoh@nikkeibp.co.jp)

 「クッキー・データを書き換えられて,他人になりすまされてしまった」,「クロスサイト・スクリプティングというぜい弱性がサイトにあると指摘された」,「サイト上に作成されるアンケート結果のファイルが外部に漏れてしまった」――。

図1●Webアプリ防御ツールの役割
Webアプリケーションのセキュリティ・ホールを突いた攻撃や,個人情報などを保存した機密ファイルへのアクセスを遮断する。

 このように,Webアプリケーションの作りが原因で発生する問題を解決してくれる製品「Webアプリ防御ソフト」が登場している。Webアプリケーションへの攻撃を自動的に遮断するソフトである。日立情報システムズとテクマトリックスが出荷している米サンクタムの「AppShield」に続いて,ディアイティは米カバドゥの「InterDo」を2002年7月に出荷。Webアプリケーションのセキュリティ上の問題は,あらかじめチェックしてすべて修正しておくのが原則だが,こうしたソフトを使うことで,修正の漏れをカバーできる。

 Webアプリ防御ソフトは,WebブラウザからのアクセスをWebサーバーに中継するかたちで設置する(図1[拡大表示])。Webブラウザとの間と,Webサーバーとの間の両方でHTTP/SSL(セキュア・ソケット・レイヤー)セッションを確立。正規のアクセスはそのまま中継し,Webアプリケーションに対する攻撃は遮断する。

防げる攻撃は2種類

表1●Webアプリ防御ツールで防げる主なWebアプリケーションへの攻撃

 Webアプリ防御ソフトで防げる攻撃は大きく2種類に分けられる(表1[拡大表示])。同じブラウザからの連続したアクセスを調べることで検知できる攻撃と,個々のWebアクセスを調べるだけで検知できる攻撃である。

 連続したアクセスを調べて検知できる攻撃には,クッキーまたはHiddenフィールド,URLパラメータの書き換えや,本来は公開していないファイルにアクセスする「強制ブラウズ」がある。

 クッキーとHiddenフィールド,URLのパラメータは,アクセスしてきたブラウザに固有のデータを渡しておき,次回のアクセスのときにそれを返してもらうのに用いる。ところが,これらの値はブラウザ側で書き換えることができ,Webアプリがそれを想定した作りになっていないと,第三者に他人になりすまされるなどの恐れがある。他人のふりをして,サイトの機密情報を盗まれたり,権限がないのにサイトの機能を利用されたりするのである。Webアプリ防御ソフトは,ブラウザに渡されたクッキーなどの書き換えを検知することで,そのアクセスを遮断する。未公開ファイルにアクセスされる強制ブラウズを防御する機能は,AppShieldにしかないが,そのために設定の手間が増える場合がある(後述)。

 個々のアクセスを調べて検知できるものには,悪意のあるSQL文やUNIXコマンドの送信,バッファ・オーバーフロー/クロスサイト・スクリプティングを狙った攻撃などがある。どれもWebページの入力フィールドなどに不正な文字列を入力する攻撃で,Webアプリ防御ソフトはその文字列を調べることで検知・防御する。

クッキーなどの書き換え検知を自動で

図2●Hiddenフィールドの書き換えを許さない
Webサーバーが送信したWebページの内容からHiddenフィールドの値を記憶しておき,そのページからのユーザーのアクセスにおいて,Hiddenフィールドが書き換えられていないかどうかを調べる。クッキーやURLのパラメータの書き換えも同様の仕組みで検出できる。
 クッキーやHiddenフィールドの書き換えにより,他人によるなりすましなどが発生する問題は,Webアプリケーションのセキュリティ・ホールとして典型的なもの。しかし,このホールをすべて見つけ出し,修正するのは容易ではない。多数のテスト・データを作成して試してみる必要もある。Webアプリ防御ソフトを使えば,この問題をほぼ自動的に解決できる。

 その仕組みを説明するため,オンラインで株取引を仲介するサイトにおいて,株式の取引履歴を閲覧するというWebアプリケーションを考えよう。取引履歴の一覧ページで,個々の取引の詳細を調べるためのボタンを用意(図2[拡大表示])。どのボタンが押されたかを識別するため,ボタンを含むWebフォームのHiddenフィールドに注文番号を入れておくとする。Webアプリケーションが,この注文番号の書き換えを想定していないと,他人の注文履歴を閲覧される危険性がある。書き換えられた注文番号を基に,他人の注文履歴が表示されるからだ。クッキーやURLのパラメータでも同じような危険性がある。

 Webアプリ防御ソフトは,これを次のように検知・遮断する。Webアプリケーションが送信するWebページの中身を調べ,そのページで指定されているHiddenフィールドやURLのパラメータを記憶しておく。クッキー・データも記憶する。そして,ブラウザからの次のアクセスを調べて,Hiddenフィールドなどが書き換えられていないかどうかをチェックするのである。

 同じブラウザからの連続したアクセスを識別するため,Webアプリ防御ソフトは独自のクッキーを利用する。防御対象のWebアプリケーションが使うクッキーはそのまま中継したうえで,独自のクッキーを付加する。

 強制ブラウズを防御する仕組みも同様である。ブラウザに送信されるWebページを調べて,そのページからリンクされているURLをすべて覚えておく。同じブラウザからそれ以外のURLへのアクセスがあれば,不正とみなして遮断するのである。トップ・ページなど,ユーザーが最初にアクセスするページはあらかじめ登録しておき,アクセスを遮断しないようにする。