不正な送信文字列をチェック

図3●Webフォームへの不正入力を許さない
不正なSQL文やシェル・コマンドの入力,クロスサイト・スクリプティング,バッファ・オーバーフローといったWebアプリケーションのセキュリティ・ホールを突く攻撃を遮断できる。

 悪意のあるSQL文の送信や,バッファ・オーバーフローを利用する攻撃は,Webフォームなどで入力される文字列を調べることで検知する(図3[拡大表示])。

 悪意のあるSQL文の送信とは次のようなものだ。ログイン用のWebアプリケーションを考える。Webアプリケーションでは,入力されたユーザーIDとパスワードをキーとして,データベースを調べ,登録されたものかどうかを確認する。そのためのSQL文で,ユーザーIDとして入力された文字列をそのまま条件式に代入していると,なりすましを許してしまう場合がある。ユーザーIDとして「andoh or '1'='1'」と入力されたとしよう。これには常に真になる条件式('1'='1')が含まれているため,パスワードの入力値にかかわらずSQL文の条件式は真になってしまう。このため不正なログインが可能になる。

 これを防ぐため,Webアプリ防御ソフトは,「'」といった,SQL文に特有の文字列がWebフォームに入力されていないかどうかを調べる。JavaScriptなどのスクリプト・プログラムをWebフォームなどに入力することで攻撃するクロスサイト・スクリプティングの防御方法も同様。JavaScriptなどに特有の文字列の有無をチェックする。

 バッファ・オーバーフローは,WebフォームやHiddenフィールドなどで,想定以上のサイズの文字列を送信すると,Webアプリケーションが誤動作するという問題。これに対する攻撃を遮断するため,Webアプリ防御ソフトは,送信文字列のサイズをチェックする。

 こうした不正な入力文字列は,本来はWebアプリケーションのコードの中でチェックすべきものだ。しかし「Webアプリケーションの開発では,入力文字列の処理を少数のソフトウエア・モジュールに集中させるのが難しい。多数のモジュールで入力文字列を処理することになるため,チェック漏れが発生しやすい」(ある大手システム・インテグレータ)。Webアプリ防御ソフトは,そうしたチェック漏れに対する攻撃を自動的に遮断できる。

攻撃を許してしまう場合も

 URLパラメータの書き換えなどは,うまく検知できずに許可してしまう場合もあるので注意が必要だ。Webアプリ防御ソフトを導入すると,正規のWebアクセスまで遮断してしまう場合があり,それを回避する設定が必要。ところが,そのために不正アクセスまで許してしまうことになる場合がある。

 正規アクセスを遮断してしまう典型例は,Webページの中にスクリプト・プログラムがあり,そのなかでパラメータ付きのURLにアクセスする場合。AppShieldとInterDoはどちらもスクリプト・プログラムを無視するので,URLに付いているパラメータをブラウザ側で勝手に付けたと判断し,アクセスを遮断してしまう。

 これを防ぐために,AppShieldでは,スクリプト・プログラムのなかで指定するURLをあらかじめ登録し,そのURLへのアクセスを許可する機能がある。この機能を利用すると,URLのパラメータが書き換えられても検知できなくなってしまう。

 安全性を高めるため,許可するURLのパラメータが取り得る値の範囲を指定して,それ以外のアクセスを遮断する機能が用意されている。しかしそれでも,他人によるなりすましなどは検知できない可能性が高い。パラメータとして取り得るすべての値を許可するように設定していれば,パラメータが他人のものに書き換えられても検知できないからだ。InterDoの場合も,設定方法が異なるが,事情はほぼ同じだ。

写真1●Webフォームなどで禁止する文字列をカスタマイズする
悪意のあるSQL文の送信などを防ぐために禁止する文字列をカスタマイズできる。正規アクセスの遮断を避けるためである。米サンクタムの「AppShield」の管理画面の例。

 AppShieldの場合,スクリプト・プログラムの中でパラメータなしのURLにアクセスする場合でも,ブラウザ側で勝手なURLにアクセスする「強制ブラウズ」とみなして遮断する。これを回避するため,機密性が低いと見られる画像ファイルやHTMLファイルへの強制ブラウズをすべて許可する機能がある。これを有効にすると,公開すべきではないファイルへのアクセスを許してしまう危険性がある(テキストやCSVファイルは守られる)。強制ブラウズを許可するファイルやディレクトリを1つずつ指定することもできるが,その設定は面倒だ。

クッキーの書き換えなどはOK

 スクリプト・プログラムではほかに,クッキーを書き換えたり,Hiddenフィールドを作成したりしてから,特定のURLにアクセスすることも可能である。そのURLへのアクセスを無条件に許可すると,クッキーの書き換えなども検出できなくなる。しかし「スクリプト・プログラムでクッキーやHiddenフィールドを処理する必要性は低く,現実にもそのようなプログラムはほとんどない」(テクマトリックス技術本部ネットワーク技術部セキュリティグループ サブリーダーの沢崎 裕喜氏)。クッキーとHiddenフィールドの書き換えは,すべて自動的に検知する設定のままで問題ないようだ。

 悪意のあるSQL文などを識別するための文字列も,カスタマイズが必要な場合がある(写真1[拡大表示])。しかし実際には,SQL文などに特有の文字列をWebフォームなどに入力させたい場合はあまりなく,これで不正アクセスを許してしまうケースは少なそうだ。

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