「Webアプリケーションの脆弱性対策は簡単です」。

 セキュリティ関連の取材をするようになって10年以上になるが、セキュリティ対策が「簡単」だと聞いたのは恐らく初めてである。取材の相手は、TISの早矢仕善弘氏(技術本部 セキュアワン室 室長)。ソースコードを対象にした脆弱性チェックツールとして広く利用されている米Fortify Softwareに、同社ソフトの検証を依頼されたこともあるというセキュリティの専門家である。

 早矢仕氏によるとWebアプリケーションの脆弱性は、たった四つの原則を守れば防げるという。SQLインジェクションやクロスサイトスクリプティング(XSS)など著名なものはもちろん、最近になって発見されている数多くの脆弱性が、いずれかの原則の対象になる。四つの原則を紹介しよう。

(1)ユーザー入力を精査する
 Webページのフォームなどに入力された文字列は、きちんとチェックしなければならない。SQLコマンドの一部文字列を入力されてデータベースに不正アクセスされるSQLインジェクションは、この原則を守れば発生しない。XSSも同様である。

(2)ユーザーに渡したデータを信じない
 ユーザーに渡したデータは改ざんされる可能性があることを前提に対策する。例えばWebブラウザーに渡したCookieデータは、ユーザーが書き換える可能性がある。Webページにデータを埋め込む「Hiddenフィールド」も同じだ。

(3)不要なエラー情報を出さない
 データベースアクセスなどでエラーが出ても、そのエラー情報をWebページに表示してはならない。例えばエラー情報からデータベースのスキーマが判明すると、より巧妙なSQLインジェクションを仕掛けられる。

(4)セッション管理を強固にする
 セッション管理が脆弱だと、他人になりすますことが可能になる。別ユーザーの個人情報にアクセスできたり、管理者権限を乗っ取られたりする。

 早矢仕氏は、システムインテグレーターなどに向けたセキュリティ研修の講師も務めており、そこで四つの原則に当てはまらない脆弱性がないかどうか、いつも問いかけている。しかし、いまだ例外は見つかっていないという。

現実のWebアプリケーションでは…

 ではこの原則さえ学んでおけば、現実のWebアプリケーション開発で脆弱性を撲滅できるのだろうか。早矢仕氏は「原則は簡単だが、実際の開発現場で実践するのはなかなか難しい」と説明する。問題は、原則から考えられる対策と、実際のプログラムでやるべきことが、開発者の頭の中でなかなか結び付かないことだ。

 例えばCSRF(クロスサイト・リクエスト・フォージェリー)と呼ぶ脆弱性は、セッション管理を強固にするという原則(4)を守ることで防げる。しかしCSRFの中身を知らなければ、具体策を考えるのは難しい。

 CSRFは、ユーザーが悪意のあるサイトにアクセスしてしまったとき、事前にログインしていたECサイトなどに対して意図しない操作を強要されるもの。ECサイトに登録した個人情報(パスワードなど)を変更されたり、意図しない買い物を強要されたりする恐れがある。詳細は省くが、解決策にはいくつかの方法がある。個人情報の閲覧・変更といった重要な操作をする際に、それまでのWeb画面遷移を確認する方法や、再ログインを求める方法などである。このような対策は、CSRFという個別の脆弱性について具体的に調べなければ、最適なものを考えづらい。

 そこで早矢仕氏が実施しているセキュリティ研修でも、実際には個々の脆弱性について説明し、対策を解説している。特に経験の浅い開発者にセキュリティ対策を身に付けてもらうには、SQLインジェクションなど基本的なものから順に一つずつ教えていくしかないという。

 では四つの原則を学ぶのは無駄なのか。早矢仕氏は「多様な脆弱性を整理して、対策を体系化するのに役立つ」と解説する。記者も実際にこれまで学んだ脆弱性対策が、頭の中で整理されたと感じた。今後新しい脆弱性が出てきたときも、過去のものと関連付けて対策を考えられるだろう。読者も実際に試してみてほしい。