前回は「ソフトウエアの脆弱性対策とシステムのライフサイクル」を説明した。前回紹介したライフサイクルの実装フェーズにおけるソフトウエアの脆弱性対策の中に「ソースコード・セキュリティー検査」という手法があるが、企業においてはまだ浸透しておらず、有効性はあまり知られていない。そこで今回は脆弱性対策の一つであるこの検査手法について紹介する。

ソースコード・セキュリティー検査概要と利用効果

 ソースコード・セキュリティー検査は、ソースコードを機械的にチェックし、ソースコードに含まれる特定のパターンを抽出することで脆弱点を自動的に検出するセキュリティー対策である(図1)。この技術を活用することで、開発担当者のスキルに依存して作り込まれてしまう脆弱性を、機械処理で自動的に検出できる。

図1 ソースコード・セキュリティー検査ツールのイメージ
図1 ソースコード・セキュリティー検査ツールのイメージタイトル
[画像のクリックで拡大表示]

 ソースコード・セキュリティー検査技術を実装した、機械処理で検知するツールは一般に「ソースコード・セキュリティー検査ツール」と呼ばれる。この検査ツールを導入すると、ソフトウエア開発担当者がソフトウエアの実装を行いながら、「問題箇所」を検出することができる。そして、検査ツールが出力するレポートをもとに、「問題箇所」が脆弱性であるかを判断し、脆弱性である場合は修正することで、出荷される前に作り込まれる可能性があった脆弱性を減らすことができる。結果として、脆弱性が第3者によって発見され、悪用される可能性の低減や、開発工程の後半で脆弱性が発見され、再修正し直すといった作業工数増加のリスクを低減可能である。

 ソースコード・セキュリティー検査ツールで、検出可能な脆弱性は次のようなものだ。なお、検出できる脆弱性は検査ツールの機能に依存するため、例示した脆弱性をすべてのソースコード・セキュリティー検査ツールが検出できるとは限らないことに注意してほしい。また、ソースコード・セキュリティー検査ツールはあくまで機械処理で脆弱性を作り込んだコードのパターンを検知しているだけなので、100%の精度で脆弱性を検知できるわけではないことにも注意が必要だ。つまり、セキュア・プログラミングやファジングなどのテストは、ソースコード・セキュリティー検査をしたとしても、必要ということだ。

●バッファ・オーバーフロー
●フォーマット・ストリング
●整数オーバーフロー
●SQL インジェクション
●クロスサイト・スクリプティング

 上記脆弱性は作り込むと、重要な情報をシステムから抜き出される可能性や、システムを不正に操作されシステムを停止される可能性があり、脆弱性を悪用された時のシステム全体への影響が大きい。このような危険な脆弱性に対応するためにも、今回紹介しているソースコード・セキュリティー検査ツールを用い、可能な限り実装フェーズで抽出・修正することは非常に大切である。