米Fortify SoftwareのJacob West氏 「アプリケーションの脆弱性を突く代表例は二つある。一つはバッファ・オーバーフロー,もう一つはクロスサイト・スクリプティング(XSS)だ。ともに10年近く前から指摘されているにもかかわらず,我々は過去の教訓を生かしきれていない」。10月26日,東京で開催されたセキュリティ関連のイベント「Black Hat Japan 2007 Briefings」で,アプリケーションの脆弱性対策ソフトウエアを開発する米Fortify SoftwareのJacob West氏(写真)はこう主張する。West氏は,同社セキュリティ研究グループの責任者を務めている。

 バッファ・オーバーフローは,設定したサイズ以上のデータをバッファに大量に送り込んで,管理者権限を取得すること。XSSは,悪意のある文字列を埋め込んでWebサイトなどを乗っ取ることをいう。なぜ,こうした脆弱性の問題を解決できないのか。West氏は,Webアプリケーションの開発に携わるプログラマの意識が低いことがその一因だと指摘する。

 「アプリケーションのセキュリティに対する責任を担っている,との意識を持たないプログラマがいることが問題だ」(West氏)。特にアプリケーションの規模が大きくなると,その傾向が強くなる。末端のプログラマは,自分の書いているコードがアプリケーションのどの部分を担っているかが見えにくくなるからだ。そうなると,「プログラムの単体レベルでは些細な脆弱性に見えたものが,アプリケーションが完成すると大きなセキュリティ問題に発展してしまう」(同)といった事態が生じやすくなるという。

 こうした脆弱性を解決するには,まず「プログラマの意識を改善することが重要」と,West氏は話す。「最近,ある開発者向け製品のニュースリリースに,こんなフレーズがあった。『アプリケーションの開発者は,セキュリティなどの余計なことを考えずにプログラミングだけに集中できる』。こうしたうたい文句を鵜呑みにして,セキュリティをおろそかにするのは間違っている」(West氏)。

 West氏は加えて,「ソフトウエア単体のセキュリティをテストする,静的なプログラム分析ツールの導入が有効だ」と話す。West氏によれば,「アプリケーションが完成してから脆弱性をチェックしているのでは遅い。アプリケーションの設計やコーディングの段階から,分析ツールを利用したセキュリティ対策を施すことが必要になる」という。重要なことは,「ソフトウエア開発のサイクルに,セキュリティ対策を組み込むことだ」とWest氏。「そうすることで,過去のミスを繰り返さない仕組みを作る必要がある」(同)。

 ただし,「プログラム分析ツールにも限界がある」とWest氏は認める。バグをゼロにするのは事実上不可能だ。加えて,導入してすぐに効果を上げるのは難しいことも指摘した。ある組織が導入したところ,「開発にかかる期間は初年度で前年比20%増,次年度も約10%増になってしまった」(同)。

 講演の締めくくりとして,West氏はバグの発見率向上のポイントを二つ挙げた。一つは,プログラマのセキュリティ意識を高めること。もう一つは,ツールを効率よく利用できるよう,企業ごとにコーディング規約を決め,それに基づいてツールをカスタマイズすることである。