次のページ 前のページ 目次へ

1. 序文

この論文は,安全なプログラムを Linux システム用に書くための設計と実装 のガイドラインを集めたものである. この論文の目的である「安全なプログラム」とは,安全な位置とそうでない位置 との境界上に置かれ,自分とは同等の権限を持っていないソースからの入力を 扱うプログラムのことである. これに該当するプログラムには,リモートデータのビューアとして使われる プログラム,CGI スクリプト,ネットワークサーバ,setuid/setgid して使用 するプログラム等がある. 本論文で説明する原則の多くは Linux カーネルにも当てはまるが,この論文 ではカーネルそのものの修正には触れない. この論文で述べるガイドラインは,安全なプログラムを作る方法に関するさま ざまな情報から「学んだ教訓」のまとめとして作成され(筆者が加えた意見も ある),より大きな原則として整理し直されている.

この論文は保証基準,ソフトウェアエンジニアリングの工程,品質 保証のアプローチは扱わない.これらは重要な問題であるが,他の場所で広く 議論されている.このような基準にはテスト,ピアレビュー,構成管理, 形式的手法が含まれる.特にセキュリティに関する開発保証基準を扱った ものとしては,Common Criteria [CC 1999], System Security Engineering Capability Maturity Model [SSE-CMM 1999] がある.より一般的なソフトウェアエンジニアリング手法やプロセスは Software Engineering Institute's Capability Maturity Model for Software (SE-CMM), ISO 9000 (および ISO 9001, ISO 9001-3), ISO 12207 等の文書で定義されている.

この論文は,与えられた環境でシステム(あるいはネットワーク)が安全となる ように設定する方法については議論しない.既存のプログラムを安全に使う方 法が重要なことは明らかだが,安全な設定については非常に多くの文書で 議論されている.Linux システムの安全な設定に関する情報は Fenzi [1999], Seifried [1999], Wreski [1998] を含む多岐に渡る文献から 入手できる.

この論文では,読者はセキュリティに関する一般的な知識,UNIX 的 OS の セキュリティモデル,C 言語の知識を持っているものとする.また, セキュリティに対する Linux のプログラミングモデルに関する知識も多少扱っ ている.

この論文の書式は, Linux Documentation Project (LDP, http://www.linuxdoc.org) に容易に加えられるように意図して整形してある.この論文のオリジナルは http://www.dwheeler.com から入手できる.

この論文は David A. Wheeler の著作物であり((C) 1999 David A. Wheeler), GNU General Public License (GPL) により保護される.詳しくは最後の節を 参照すること.

この論文では,まず Linux とセキュリティに関する背景的な知識を議論する. 次の節では Linux の一般的なセキュリティモデルの解説として,プロセス, ファイルシステムオブジェクト等のセキュリティに関する属性と操作の概要を 説明する.その次に本論文の主題である,Linux システム上でアプリケーション を開発する際の設計と実装のガイドラインを述べる.この説明は, 全ての入力の検証,バッファオーバーフローの回避, プログラムの内部および入口の構成, 外部リソースの慎重な呼び出し, 情報の慎重な返送,そして特殊な話題に関する情報(乱数の取得方法など)に分 けられる. そして最後に結論と参考文献を述べて論文の結びとする.


次のページ 前のページ 目次へ