OpenBSD
セキュリティとコード監査

OpenBSDを始めた直後、テオ・デ・ラートはSecure Networks, Inc. (SNI) というソフトウェア企業からの接触を受けた。SNIは「ネットワークセキュリティ監査ツール」Ballista（SNIがマカフィーに買収された後にはCybercop Scannerと改称）を開発しており、それはソフトウェアのセキュリティ上の欠陥を見つけ出し利用できるか確認するというものだった。これはテオ自身のセキュリティへの関心と共通していたので、両者は協力することに合意し、その関係はOpenBSD 2.3のリリースまで続き、プロジェクトの方向性に影響を与えた。OpenBSDの開発者は、容易さや性能や機能を犠牲にしてでも、正しく適切でセキュアな方法を選択しようとする。OpenBSDの中のバグは見つかったとしてもセキュリティホールとして利用しづらいものになっていき、SNIはOpenBSDを使った確認が困難になってきた。数年の協力の後、両者は目標としていたレベルに到達したと判断し、協力関係を解消した。
2002年6月まで、OpenBSDは次のようなスローガンをウェブサイトに掲げていた。
| 0 | 1 | 2 |
| --- | --- | --- |
| 「 | Five years without a remote hole in the default install!（5年間、デフォルトのインストールでセキュリティホールが見つかっていない） | 」 |
2002年6月、Internet Security Systems の Mark Dowd はチャレンジ-レスポンス型認証を実装したOpenSSHのコードにバグを見つけた。このセキュリティホールは、OpenBSDのデフォルトのインストールでも利用でき、攻撃者がリモートからのアクセスでroot特権を得ることができる。これはOpenBSDだけの問題ではなく、当時OpenSSHを利用していた他のOSにとっても大きな問題だった。このため、OpenBSDのウェブサイトでもスローガンを次のように変更せざるを得なくなった。
| 0 | 1 | 2 |
| --- | --- | --- |
| 「 | One remote hole in the default install, in nearly 6 years!（6年間弱で、デフォルトのインストールでのセキュリティホールは1件） | 」 |
しばらくはこのスローガンで推移したが、2007年3月13日、Core Security Technologies の Alfredo Ortega ネットワーク関連の脆弱性を発見した。スローガンは次のように変更された。
| 0 | 1 | 2 |
| --- | --- | --- |
| 「 | Only two remote holes in the default install, in a heck of a long time!（ものすごい長期間で、デフォルトのインストールでのセキュリティホールはたったの2件） | 」 |
このスローガンについては、OpenBSDのデフォルトのインストールではほとんど何もできないし、リリースに含まれているソフトウェアには他にもセキュリティホールが見つかったものがあると批判されている。しかしプロジェクト側は、デフォルトのインストールであることを強調しているのだから間違いではないとしている。OpenBSDの基本的考え方として、システムをシンプルでクリーンでsecure by defaultに保つという方向性がある。例えばOpenBSDの最小のデフォルト構成では、ごく一部のサービスしか有効にしない。このプロジェクトはまた、セキュリティシステムの重要な要素とされているオープンソースとコード監査手法を使っている。
OpenBSDにはセキュリティ強化のための設計変更がいくつも加えられている。例えば、APIとツールチェーンの変更としては、arc4random、issetugid、strlcat、strlcpy、strtonumといった関数の修正がある。他にも静的境界チェック機構、不正アクセスからの保護のためのメモリ保護技法として、ProPolice、StackGhost、W^Xによるページ保護機能、mallocの修正などがある。また、暗号およびランダム化機能として、プロトコルスタックの強化やパスワード暗号化へのBlowfish暗号の追加などがある。
特権昇格を可能にするような設定ミスや脆弱性の危険を低減させるため、一部のプログラムでは特権分離、特権放棄、chrootの使用といった手法を採用している。このうち特権分離はOpenBSDでいち早く採用した技法で、最小特権の原則に基づいてプログラムを複数の部分に分け、一部にだけ特権の必要な操作を受け持たせて、他の大部分は特権なしで実行するという技法である。特権放棄も同様の技法で、必要なときだけ特権を得て操作を行い、その操作が終わったら特権を放棄するという技法である。chrootを使った技法は、アプリケーションがファイルシステムの一部だけを使って動作するようにし、個人的なファイルやシステムファイルのある部分にアクセスできないようにする。開発者らは一般的なアプリケーションのOpenBSD版にこのような技法を適用しており、例えばtcpdumpやApache Webサーバなどがそうなっている（Apacheについてはバージョン2.xではライセンス問題があるため、1.3.29に巨大なパッチをあてている）。なお、OpenBSD 6.0ではhttpdとしてApacheは実装されなくなり、nginxが採用された。
プロジェクトは問題に対して継続的にコード監査する方針を採用しており、開発者Marc Epsieはこの作業を「特定のバグを見つけ出すというよりもプロセス自体への問いかけともいうべきもので…決して終わらない」と評した。彼はバグが見つかったときのいくつかの典型的工程を示しているが、その中には、同じまたは類似の問題がないかソースツリー全体を調査すること、「ドキュメンテーションを改正すべきかどうかを見つけ出すこと」、「この問題について警告を表示するようコンパイラを強化できないか」を調査すること、などが含まれる。標準の字下げスタイルはKernel Normal Formだが、これはコードの保守を容易にするための規定である。そのためコードをOSのベースに組み込む際には必ず守る必要がある。既存のコードもスタイルの要求仕様に合うように適宜書き換えられている。
Linuxカーネルの創始者であるリーナス・トーバルズはこれについて、開発というものは大きな問題に対処することに注力すべきで、バグはセキュリティ関連以外にも山ほどあるのだから、セキュリティ問題だけに注力すべきでないと述べている（「全ての平凡なバグは、単にそれらが数が多いというだけでも、より重要である」）。2008年7月15日、彼はOpenBSDの方針を批判し「彼らはセキュリティに専念することを大々的に宣言することで、他のことは彼らにとって重要でないと認めているようなものだ」と述べた。これに対してOpenBSDの開発者Marc Espieは「これは全くの誤解だ…（通常のバグ修正は）OpenBSDプロジェクトで人々が常にやっていることそのものだ」と応答した。開発者Artur Grabowskiも驚きを表明し「この中で最もおかしな部分は…（トーバルズが）言っていることが我々の言っていることと同じだという点だ」と述べた。