「Strutsを使ってもセキュリティ・ホールはできる。例えばStrutsのtaglib(タグ・ライブラリ)は,入力データをサニタイジングしない場合もある」――7月8日,Web Application Securityフォーラムの第2回カンファレンスが開催され,Webアプリケーションで発生しうる問題についてパネル・ディスカッションなどで活発な意見が交わされた。

 パネル・ディスカッションは「フレームワークの光と影」と題し行われた。StrutsなどのWebアプリケーション・フレームワークは,大規模な開発では標準的な開発環境になっている。

 しかし,PHPフレームワーク「Ethna」の開発者でテックスタイル アーキテクト,グリー取締役の藤本真樹氏は「フレームワークの開発者が全員がセキュリティを意識して開発しているわけではない。また,協力会社の開発者が,必ずフレームワークの意図どおりに開発してくれるわけではない」と指摘する。

 日本IBM セキュリティ&NW技術 副主任ITスペシャリスト 賀戸大輔氏は,代表的なJavaのWebアプリケーション・フレームワークであるStrutsを例に,起こり得る問題を指摘した。「例えば,Strutsのtaglibは,本当に危険な入力データをサニタイジング(無効化)してくれるのかどうか検証したところ,alt属性とtitle属性はほぼ全滅。サニタイジングは行われなかった。value属性も一部サイニタイジングされない場合があった」(賀戸氏)。

 StrutsのActionクラスはスレッド・セーフではない。そのためタイミングによっては同時にアクセスした他人の情報が見えてしまったり,書き換えられてしまったりする恐れがある。「しかしドキュメントにはスレッド・セーフではないとしか書かかれていない」(同)。起き得る危険については書かれていないため,開発者が問題を認識しないままアプリケーションを作成してしまうことになる。

 「また,Strutsにはcancelボタン機能がある。この機能を使用すると,入力データのチェックvalidateをスキップしてプログラムをを呼ぶことができる。しかし,リクエスト中に,あるパラメータが含まれているとcancelボタンと判断するため,この機能を使われると入力チェックを回避して実行されてしまう」(同)。

 さらに賀戸氏は「ActionFormクラスをデータの格納に使用しているプログラムを見かけるが,ユーザーからの入力を受け取る以外の目的で使ってはいけない。プロパティ名がわかれば,ブラウザから値を上書きできてしまう」と警告した。

 とはいえ,フレームワークを使わない場合よりも,使ったほうが一般的にセキュリティは向上する。独立行政法人 産業技術総合研究所 情報セキュリティ研究センター 主任研究員の高木浩光氏は「昔はCookieにユーザーIDを格納するという,危険なセッション管理を行っているサイトが多く,大手ECサイトにもあった。現在は少なくなった。フレームワークや,言語にセッション管理機能を備えたPHPなどの普及によるところが大きい」と見る。

 フレームワークの多くは画面遷移やセッション管理,入力データ・チェックなどの機能を提供する。そのため,これらの欠陥から発生するセキュリティ・ホールへの対策になる。重要なのは妄信せずに正しく使用することだ。

 高木氏は,現状の問題点として「開発者とセキュリティ対策のコミュニテイが分断されてしまっている」と指摘する。それを象徴するのが「サニタイジング」という言葉だ。直訳すれば無毒化,前述のように不正アクセスに悪用される特殊な記号を無効化する処理を指す言葉だが,高木氏はこの言葉を使うべきはでないと語る。セキュリティ技術者から問題を指摘されると多くの開発技術者は反感をおぼえる。そもそも,本来行うべき正しいプログラミングを行えば,自然にセキュリティ対策にもなる。「コア・ダンプしないようなプログラミングを実行していれば,バッファ・オーバーフローは発生しない」(高木氏)。

 開発者とセキュリティ技術者の分断を埋めていく方法として,日本IBMの賀戸氏は「開発者に最初からセキュリティを教育していくべき。そうすれば意識せずにセキュアなコードを書けるようになる」と指摘する。

 モデレータの奈良先端科学技術大学院大学 助教授 門林雄基氏は「フレームワークのセキュリティ側面を文書化したり教育したりすることは可能だろうか」と問題提起,「今後フレームワークやデータベースなどの開発コミュニティとの連携を深めていきたい」と語った。

(高橋 信頼=IT Pro)