図1 言われるがままに注文に応じるのは危ない(イラスト:なかがわ みさこ)
図1 言われるがままに注文に応じるのは危ない(イラスト:なかがわ みさこ)
[画像のクリックで拡大表示]
図2 受け付ける前に注文の内容をチェックする(イラスト:なかがわ みさこ)
図2 受け付ける前に注文の内容をチェックする(イラスト:なかがわ みさこ)
[画像のクリックで拡大表示]

 WAF(web application firewall)とは,Webサーバー上にアプリケーションを作り込んでデータを更新したり最新の状況を表示したりするタイプのサイトを,不正な攻撃から守るための装置やソフトウエアのこと。こうしたサイトにはオンライン・バンキング・やショッピング・サイトなどがある。

 オンライン・バンキングやショッピング・サイトなどのWebアプリは,ユーザーからの要求に合わせてWebページを生成し,それを送信する。Webアプリを狙う悪者(クラッカ)は,ユーザーの立場でとんでもない要求をして,ぜい弱性のあるWebアプリを勝手に操作しようとする。

 データベースを利用するオンライン・バンキングやショッピング・サイトのWebアプリにぜい弱性があると,ユーザーからの要求がデータベース管理システムにそのまま伝わってしまう。そば屋に例えると,メニューにない注文や,普通では考えられない量の注文を受けても,そのまま作ってしまうイメージだ(図1)。

 クラッカはこのようなぜい弱性を突いてくる。例えばある特定の項目の情報を抽出するためのWebページから「すべての項目を参照する」という想定外の要求を送り込んで他人の個人情報を抜き取ったり,口座情報を参照する画面から残高を変える要求を送り込んで自分の口座の残高を勝手に増やしたりする。

 こういった不正な攻撃の方法は「SQLインジェクション」と呼ばれる。実際にSQLインジェクションによって,個人情報が抜き取られたり,金品を騙し取られたりする事件が多く発生している。ちなみにSQLは,データベース操作に広く使われる標準言語。「インジェクション」は「注入」を意味する。つまりSQLインジェクションとは,SQLコマンドを送り込んでデータベースを勝手に操作することを指す。

 一方,Webアプリの中には掲示板のようにデータベース管理システムと連係しないケースもある。このようなサイトでもぜい弱性が存在するものがある。例えば掲示板アプリがスクリプトという小さなプログラムの書き込みを許すようになっていると,その掲示板を介してほかのユーザーのパソコンで悪意のあるスクリプトを実行させる「クロスサイト・スクリプティング」という攻撃を許してしまうことになる。本来これらのとんでもない要求は,Webアプリにぜい弱性がなければ,そのまま受け付けられることはない。ぜい弱性のないWebアプリは要求の内容をきちんとチェックして,問題のある要求はそのままでは受け取らないからだ。

 しかし,後からぜい弱性が見つかったWebアプリに対して,きちんと要求をチェックするようにぜい弱性を修正するのは簡単なことではない。複数あるWebページそれぞれに,どのような要求が正当で,どのような要求が不当なのかを登録してチェックさせる必要があるからだ。Webアプリは多数のプログラムが組み合わさってできているのが一般的で,漏れなくぜい弱性を修正するのは,時間も手間もかかるのが現実である。

 そこでWAFの出番となる。WAFは,Webアプリが受け取る前に要求をチェックして,安全な要求だけをWebアプリに渡す。そば屋でいうなら,メニューにないものやむやみに量の多い注文を断るチェック係を置くイメージだ(図2)。最初からWebアプリにぜい弱性がなく,おかしな要求を受け付けなければ,WAFは必要ない。それでもWAFは,Webアプリを使うサイトで広く使われている。Webアプリに新たなぜい弱性が見つかったときに,WAFは素早く対応できるからだ。

 ただしWAFは,導入してもそのままでは使えない。どの要求を遮断してどの要求は受け付けるのかを設定する必要がある。それでも大まかなチェックであればWAFの設定は簡単で,Webアプリへの攻撃の大部分は防げるようになる。さらに厳密にチェックするときには,Webアプリの構成を熟知したうえでWAFを細かく設定する必要がある。

 そこで,手間をかけずに細かく設定できるように,チェック内容の自動設定機能が充実している有償のWAFもある。ユーザーからの要求内容を一定期間監視したり,ユーザーの立場でWebアプリにアクセスして応答を分析したりして,正当な要求とそうでないものを学習して自動的に設定する。