セキュリティ上の問題を、実環境で結果を出す前に検出するツールが存在します。 もちろん、すべての問題を見つけられるわけではありませんが、巧妙で見落とし がちな問題を見つけてくれます。 ここでは、オープンソースとフリーソフトウェアに焦点を当て、ツールを 紹介します。
ツールのタイプの 1 つは、ソースコードを調べて、セキュリティ上問題に なりそうな既知のパタンを検索するプログラムです(たとえば、何らかの手段で ライブラリ関数を呼び出すことが、セキュリティ上の脆弱性につながります)。 この種のプログラムは「ソースコード・スキャナ」と呼ばれています。 ここでいくつか紹介します。
RATS (Rough Auditing Tool for Security)は、Secure Software Solutions による もので http://www.securesw.com/rats から取得できます。 このプログラムは C と C++ のソースコードによく発生する問題をスキャンします。 ライセンスは GPL です。
Flawfinder は私が開発したもので、 http://www.dwheeler.com/flawfinder から取得できます。 これも C と C++ のソースコードによくある問題をスキャンします。ライセンスは やはり GPL です。 RATS との違いは、Python で実装している点です。 RATS と Flawfinder の開発者は、共同で最善の組み合わせのプログラムをオープン ソースで産み出すことに合意しています。
ITS4 は Cigital(前 Reliable Software Technologies。略称 RST)によるもので、 同じく静的に C と C++ のコードをチェックします。 商用に使わなければ自由に利用でき、ソースコードも利用できます。修正や再配布 も可能です。 ただ、これは「オープンソース」を定義した Open Source Definition (OSD)でリリースしているわけではありません。特に OSD の 6 番目の基準が オープンソースのライセンスとして「商用目的での利用の禁止」条項を禁止して います。 ITS4 は http://www.rstcorp.com/its4 から取得できます。
LCLint は静的に C プログラムをチェックするツールです。 手間をほとんどかけなくても、LCLint は優れた lint として利用できます。 さらに努力してプログラムに注釈を加えれば、LCLint は標準的な lint が行うどんな チェックより強力にチェックを行います。 たとえば、バッファオーバーフローが起こりそうなところを静的に検出するのに利用 できます。 ソフトウェアのライセンスは GPL で、 http://lclint.cs.virginia.edu から取得できます。
cqual は型ベースで分析するツールで、C プログラムのバグを見つけ出します。cqual は C の型システムを拡張して、さらにユーザ定義の型修飾子を追加しています。 たとえば、「tainted」や 「untainted」というように値を記述できます(Perl の汚染 チェックと似ています)。プログラマはプログラムに何ヶ所か注釈を入れると cqual は修飾子から推論を行い、修飾子が適切かどうかチェックします。cqual は分析結果 を Program Analysis Mode という emacs ベースのインタフェースを使って表示 します。 cqual の現バージョンは、C プログラムの書式文字列の脆弱性がありそうな部分 を検知できます。 前バージョンの cqual である Carillon は、C プログラムにある Y2K 関連のバグ を見つけるのに利用されました。 ソフトウェアは GPL ライセンスで、 http://www.cs.berkeley.edu/Research/Aiken/cqual から取得できます。
Cyclone は C ライクな言語で、C のセキュリティ上の弱点を排除するのが目的です。 ある言語から「もっと安全な」言語に理屈上はいつでも移行できます。しかし、 これは何にでも役に立つわけではありません(言語はよくある間違いを回避する のに役立つかもしれませんが、あなたの考えを汲み取ってくれるわけではありません)。 2001 年 12 月に John Viega has reviewed Cyclone で John Viega 氏は次のように述べています。 「Cyclone が美しい言語であることはまぎれもない事実です。 C 系の言語であり、C の持つどんなパワーも失ってはいません。にもかかわらず、 安全性を確固とすることを約束し、プログラマが本当に重宝できるさまざまな機能 も加わっています。 ただ残念なのは、Cyclone はまだ主流となるべく準備が整っているわけではない点です。 制限を無くしながらも、まだ Java(もしくは便利なツールを使った C)を越えるような 優位性を提供できていないので、この未熟な技術を使うリスクを負う価値はありま せん。 もちろん数年の内に Cyclone は能力の点で C に恐ろしく近くありながら、成熟して 強固になり、広くサポートされる言語になるでしょう。 そのような日がくれば、きっと C を捨てても良いと思うでしょう」。 Cyclone コンパイラは、GPL と LPGL でライセンスされています。 さらに詳しい情報は、 Cyclone web site を見てください。
別の解決方法にテストパタンを作成して、プログラムを動かす方法があります。 これはプログラムが持つ弱点を見つける試みの 1 つです。 ツールがいくつかあります。
BFBTester(Brute Force Binary Tester)は、GPL ライセンスです。 このプログラムは迅速にバイナリプログラムに対してセキュリティ上のチェックを 行います。 BFBTester はコマンドラインの単独もしくは複数の引数や環境変数のオーバーフロー をチェックできます。 バージョン 2.0 以上ではテンポラリファイルの作成をしようとする動作も監視できる ようになりました(安全でないテンポラリファイル名が使われていないかチェック します)。 以前は BFBTester は Linux では動きませんでした(Linux の POSIX スレッドの実装 による技術的な問題で)。しかし、バージョン 2.0.1 ではフィックスしています。 さらに詳しい情報は、 http://bfbtester.sourceforge.net/ を参照してください。
fuzz は他のソフトウェアを テストするツールです。 このテストは、ランダムなデータでプログラムを攻撃してテストしながら評価します。 セキュリティに限定したツールではありません。
動作しているプログラムを覗いて、コードにあるセキュリティ上の問題を発見 しようとするツールがたくさん存在します。 このツールに該当するのは、シンボリックデバッガ(gdb のような)やトレースする プログラム(strace や ltrace のような)です。 おそらくあまりご存じないと思いますが、 Fenris (GPL ライセンス)というプログラムがあります。 ドキュメントには Fenris のことを「バグトラックを簡単にするために、状態を 保存して分析したり、部分的に逆コンパイルする機能を持ったりした、汎用トレーサ です。 セキュリティ監査やコード、アルゴリズム、プロトコルを分析します。プログラム 構成のトレースや内部構造一般の情報として実行パス、メモリ操作、入出力、条件式 等々を提供します」とあります。 もう 1 つこの系列で興味深いプログラムがあります。それは Subterfugue です。
一般的に弱点を抱えがちな製品(ftp サーバやファイアーウォール)を構築している なら、セキュリティをスキャンするツールが役立つのはおわかりだと思います。 優れたものの 1 つに Nessus があります。他にもたくさん のツールがあります。 この種のツールはリグレッション・テスト(回帰テスト)を行うのに非常に便利です。 そもそも過去に特定している脆弱性のリストを使っているからです。ただし、新しい プログラムの問題を発見するのには、役に立つとはいえません。 【訳註:リグレッション・テストとは、プログラムのあるバグを直した副作用で、 また別のバグが発生していないかどうか、確かめるテストを指します】
他のツールを呼び出して、基盤を安全に実装する必要が出てくるケースがよくあります。 Open-Source PKI Book には、公開鍵基盤(PKI)実装用に、オープンソースのプログラムがたくさん載って います。
もちろん、安全でないプラットフォームの設定で「安全な」プログラムを動かすのは ほとんど意味がありません。 よろしければ、システムを強固にする方法を調査して、攻撃に対してより防御できる ようにシステムを設定、もしくはカスタマイズしてください。 Linux ならば、 Bastille Linux が http://www.bastille-linux.org で利用できます。