セキュリティ監査ツール

ソースコード監査を支援する目的で設計されたパッケージがいくらか Debian アーカイブから利用可能となっています。これには次のようなものがあります:

また、Debian 向けのパッケージ化はまだされていないかもしれませんが、 監査員にとって有用な特定のセキュリティ脆弱性に特化した他のツールも存在することに注意してください。 これには次のようなものがあります:

どのツールも完璧ではなく、更なる研究のための指針としてしか使えませんが、 使い方がとても単純という前提があるので、 少し時間を取って試してみる価値はあります。

ツールにはそれぞれ異なる特長や弱点があるため、複数併用するのが賢明でしょう。

Flawfinder

flawfinder は C および C++ ソースコードを分析して潜在的なセキュリティ欠陥を探すように設計された Python ツールです。

ソースコードを含むディレクトリに対して実行すると、 検出した潜在的な問題の報告を危険度 (危険度は 1–5 の 5 段階) の順に並べ替えて出力します。軽微な危険を無視する場合、 特定レベル以下の危険となる欠陥については報告しないようプログラムに指示することも可能です。 デフォルトでの出力は平文テキストですが、HTML での報告も可能です。

このプログラムはよく悪用される関数のデータベースを内蔵していて、 その中にある関数の使用をコードを走査することで探します。

報告の分析を支援するため、 関数が使用されている行が含まれる報告を出力させることが可能です。 問題をすぐに検出したり除外するような場合に有用かもしれません。

監査例のセクションに flawfinder の使用例とその出力があります。

ITS4

ITS4 は Debian アーカイブの non-free セクションに含まれるツールで、 woody ディストリビューション用だけが利用可能となっています。

ITS4 は C および C++ 双方のコードを走査して潜在的なセキュリティホールを探します。 flawfinder とよく似ています。

これが吐き出す出力は知的に努め、 危険な関数呼び出しが慎重に作られているような場合は除外されることがあります。

RATS

RATS は上で挙げたのと同様のツールですが、 違うのは非常に幅広い範囲の言語をサポートしている点です。 現在、C、C++、Perl、PHP、Python をサポートしています。

このツールはその脆弱性を読み込むのに単純な XML ファイルを使います。 これにより利用可能なツールの中で修正するのが最も簡単なものの一つとなっています。 サポート済みの言語それぞれに新しい機能を追加するのは非常に簡単です。

監査例のセクションに RATS の使用例とその出力があります。

pscan

pscan はこれまで説明してきたツールとは違い、 通常の目的のスキャナとは全く異なる、 書式文字列バグの検出に特化したプログラムとなっています。

このツールは C および C++ ソースコード内の可変長引数関数、例えば printffprintfsyslog の使用にあたっての潜在的な問題の発見を試みます。

書式文字列バグの検出および修正は非常に簡単で、 最も新しい種類のソフトウェア攻撃ではありますが、 その大部分は恐らく既に発見、修正済みです。

監査例のセクションに pscan の使用例とその出力があります。

スキャナ出力の理解

一般的な走査ツールはそれぞれ、検出した欠陥の説明と、 もしかするとそのコードの修正方法についての助言を出力に含めます。

例えば以下は getenv の危険性を説明する RATS の出力を抜粋したものです:

"環境変数は極めて信頼できない入力です。 任意の長さで任意のデータを含めることが可能です。 その内容や長さについての仮定は一切しないでください。可能な限りその使用は避け、 必要な場合は健全化した上で妥当な長さに切りつめてください。"

報告された穴の修正方法についての詳細な助言が必要であれば、 安全にプログラミングするための本、例えば David A. Wheeler により書かれた Secure programming for Linux and Unix HOWTO 等で勉強してください。

(セキュリティ問題を報告する際、 穴を塞ぐパッチが非常に喜ばれることを覚えておいてください)

コードの特に問題のある部分の修正に関連する議論は debian-security メーリングリストで行うこととも可能です。 これは公開されているメーリングリストで公開アーカイブもあるので、 どのプログラムに欠陥が含まれるのかを明らかにはしないように多少注意してください。