・監査プロセス
われわれのセキュリティ監査チームは、だいたい 6人から12 人程度のメンバーで構成されて、たえず新しいセキュリティホールを見つけてはふさいでいます。われわれは 1996 年夏以来、この監査を続けてきました。セキュリティを高めるためにわれわれがしたがうプロセスは、単純に重要なソフトウェアコンポーネントについてすべて、ファイルを一つずつ総合的に分析していくことです。われわれが探しているのは、セキュリティホールというよりはむしろ、基本的なソフトのバグです。そしてもし何年もたってからだれかが、この問題はセキュリティ上の問題でもあったなぁ、と発見することがあったとしても、われわれがそれをただのバグだと思ってなおしていたのなら、それはそれで結構なことでしょう。システムのほとんどあらゆる部分に欠陥が見つかっています。この監査の過程で、新しいレベルのセキュリティ問題群が見つかったこともあるし、昔監査を行ったソースコードであっても、新発見の欠陥を念頭に、監査しなおさなくてはならないことも多いのです。コードは何度も監査され、監査する人も複数で、監査技能もちがっています。
セキュリティ監査チームのメンバーの中には、Secure Networks
社で働いていた者もいます。この会社は、業界の先駆的なネットワークセキュリティスキャン用ソフトパッケージ Ballista をつくったところです。(Secure Networks 社はその後 Network
Associates 社に買収されて、Ballista は Cybercop Scanner と改名されて、まあうんぬんかんぬん...)Secure Networks
社はセキュリティ関連の研究をいろいろやっていたので、 OpenBSD のスタンスともぴったりあったわけです。OpenBSD は Ballista のテストをしょっぱなから楽々突破したものでした。
われわれのセキュリティ監査プロセスの別の面は、その積極性です。多くの場合、あるセキュリティホールが悪用可能かどうかを判断する必要はない、ということにわれわれは気がつきました。監査プロセスを続ける中で、われわれはいろんなバグを見つけます。そして、それを悪用できることが証明されていなくても、それをなおそうとします。バグをなおして、ほかになおすバグをさがしにいくわけです。簡単ですぐにわかるような、そそっかしいプログラミング上のエラーをコードの中にたくさん見つけますが、数ヶ月して、その問題が実は悪用可能だったということが発見されるわけです。(あるいはもっとよくあるパターンは、BUGTRAQ
のだれかが、ほかのオペレーティングシステムが「新発見の問題」による危険にさらされている、という報告をして、でも OpenBSD ではそれが前のリリースで修正ずみだったというのがわかる、というものです)。ほかの場合だと、中間段階のどれかをなおしてあったがために、複雑な多段階攻撃で完全な攻撃にさらされずにすんだ、ということもあります。われわれがこういう成功をおさめた一例としては、Secure Networks が出した、lpd についての問題があります。
・その見返り
この積極的な監査プロセスは、十分にその報いがあるものでした。BUGTRAQのようなセキュリティ関連フォーラムでは「この問題は OpenBSD では半年前に解決済みです」というような発言は日常茶飯になっています。
セキュリティ監査がいちばん重点的に行われたのは、 OpenBSD 2.0 リリース直前と、2.0->2.1 への移行期でした。これは1996 年最後の四ヶ月ほどと、1997 年前半です。何千もの(はい、何千、です)セキュリティ問題が、この一年ほどの期間にわたり急速に修正されました。ふつうのバッファオーバーフローなどのバグ、プロトコル実装の弱点、情報収集、ファイルシステム競争などです。したがって出くわしたセキュリティ上の問題は、ほとんどが 2.1 リリース以前に修正され、それ以降、 2.2 リリースでなおす必要のある問題はぐっと減りました。もう昔ほど問題はたくさん見つかりません。よくある収益逓減の見本です。最近では、われわれが見つけてなおすセキュリティ上の問題は、以前よりものすごくマイナーでややこしいものになっています。それでも、われわれは監査にこだわり続けます。理由はいくつかあります:
- たまに、昔見逃した簡単な問題を見つけるから。おっとっと!
- セキュリティは軍拡競争みたいなものだから。最高のアタッカーたちは、たえずもっと複雑な悪用方法を探し続けているので、こっちだってそうするしかない。
- ややこしいソフトの細かい欠陥を見つけてなおすのは、とってもおもしろいから。
監査プロセスはまだ終わっていません。ごらんのとおり、われわれは新しいセキュリティ上の欠陥を見つけてはなおし続けていきます。
「デフォルトで高セキュリティ」
OpenBSD の初心者ユーザが、一夜にしてセキュリティ専門家にならないですむように(ほかのベンダーはこれを期待しているようですが)、われわれはオペレーティングシステムを出荷するとき、デフォルトで高セキュリティモードにしておきます。あらゆる本質的でないサービスは停止させてあります。利用者・管理者がシステムに習熟してくれば、システムのデーモンやその他の部分を有効にしなくてはならないことがわかるでしょう。新しいサービスを有効にする方法を学ぶプロセスで、初心者も、セキュリティ上の問題点を学ぶ見込みが高いのです。
これは、ますます多くのシステムがNFSや mountd web サーバなど各種のサービスをデフォルトで有効にしてあるのとは、まったく対照的です。こうしたシステムは、ユーザが初めてインストールして数分のうちに、すぐさまセキュリティ上の問題をつくりだしてしまうのです。
暗号の使用
そしてもちろん、OpenBSD プロジェクトはカナダベースですから、暗号をシステムに統合することができます。詳しくは、われわれが暗号で何をしたかを説明したページを見てください。
警告
OpenBSD 2.7 セキュリティ警告
以下は OpenBSD 2.7 用の警告です――これらの問題はすべて、カレント版のOpenBSDでは解決済みです。当然ながら、OpenBSD 2.6 以下の警告はすべて、 OpenBSD 2.7では修正済みです。
- Aug 16, 2000:
A format string vulnerability (localhost root) exists in xlock(1).
(patch included)
- July 14, 2000:
Various bugs found in X11 libraries have various side effects, almost
completely denial of service in OpenBSD.
(patch included)
- July 5, 2000:
Just like pretty much all the other unix ftp daemons
on the planet, ftpd had a remote root hole in it.
Luckily, ftpd was not enabled by default.
The problem exists if anonymous ftp is enabled.
(patch included)
- July 5, 2000:
Mopd, very rarely used, contained some buffer overflows.
(patch included)
- June 28, 2000:
libedit would check for a .editrc file in the current
directory. Not known to be a real security issue, but a patch
is available anyways.
(patch included)
- June 24, 2000:
A serious bug in dhclient(8) could allow strings from a
malicious dhcp server to be executed in the shell as root.
(patch included)
- June 9, 2000:
A serious bug in isakmpd(8) policy handling wherein
policy verification could be completely bypassed in isakmpd.
(patch included)
- June 6, 2000:
The non-default flag UseLogin in /etc/sshd_config is broken,
should not be used, and results in security problems on
other operating systems.
- May 26, 2000:
The bridge(4) learning flag may be bypassed.
(patch included)
- May 25, 2000:
Improper use of ipf keep-state rules can result
in firewall rules being bypassed. (patch included)
OpenBSD 2.6 セキュリティ警告
以下は OpenBSD 2.6 用の警告です――これらの問題はすべて、カレント版のOpenBSDでは解決済みです。当然ながら、OpenBSD 2.5 以下の警告はすべて、 OpenBSD 2.6では修正済みです。
Jan 20, 2000:
Systems running with procfs enabled and mounted are
vulnerable to a very tricky exploit. procfs is not
mounted by default.
(patch included).
Nov 9, 1999:
Any user could change interface media configurations, resulting in
a localhost denial of service attack.
(patch included).
Dec 2, 1999:
A buffer overflow in the RSAREF code included in the
USA version of libssl, is possibly exploitable in
httpd, ssh, or isakmpd, if SSL/RSA features are enabled.
(patch included).
Update: Turns out that this was not exploitable
in any of the software included in OpenBSD 2.6.
Dec 4, 1999:
Sendmail permitted any user to cause a aliases file wrap,
thus exposing the system to a race where the aliases file
did not exist.
(patch included).
OpenBSD 2.5 セキュリティ警告
以下は OpenBSD 2.5 用の警告です――これらの問題はすべて、カレント版のOpenBSDでは解決済みです。当然ながら、OpenBSD 2.4 以下の警告はすべて、 OpenBSD 2.5では修正済みです。
- Aug 30, 1999:
In cron(8), make sure argv[] is NULL terminated in the
fake popen() and run sendmail as the user, not as root.
(patch included).
- Aug 12, 1999: The procfs and fdescfs
filesystems had an overrun in their handling of uio_offset
in their readdir() routines. (These filesystems are not
enabled by default). (patch included).
- Aug 9, 1999: Stop profiling (see profil(2))
when we execve() a new process. (patch included).
- Aug 6, 1999: Packets that should have
been handled by IPsec may be transmitted as cleartext.
PF_KEY SA expirations may leak kernel resources.
(patch included).
- Aug 5, 1999: In /etc/rc, use mktemp(1) for
motd re-writing and change the find(1) to use -execdir
(patch included).
- Jul 30, 1999: Do not permit regular
users to chflags(2) or fchflags(2) on character or block devices
which they may currently be the owner of (patch included).
- Jul 27, 1999: Cause groff(1) to be invoked
with the -S flag, when called by nroff(1) (patch included).
OpenBSD 2.4 セキュリティ警告
以下は OpenBSD 2.4 用の警告です――これらの問題はすべて、カレント版のOpenBSDでは解決済みです。当然ながら、OpenBSD 2.3 以下の警告はすべて、 OpenBSD 2.4では修正済みです。
- Mar 22, 1999: The nfds argument for poll(2) needs
to be constrained, to avoid kvm starvation (patch included).
- Mar 21, 1999: A change in TSS handling stops
another kernel crash case caused by the crashme
program (patch included).
- Feb 25, 1999: An unbounded increment on the
nlink value in FFS and EXT2FS filesystems can cause a system crash.
(patch included).
- Feb 23, 1999: Yet another buffer overflow
existed in ping(8). (patch included).
- Feb 19, 1999: ipintr() had a race in use of
the ipq, which could permit an attacker to cause a crash.
(patch included).
- Feb 17, 1999: A race condition in the
kernel between accept(2) and select(2) could permit an attacker
to hang sockets from remote.
(patch included).
- Feb 17, 1999: IP fragment assembly can
bog the machine excessively and cause problems.
(patch included).
- Feb 12, 1999: i386 T_TRCTRAP handling and
DDB interacted to possibly cause a crash.
(patch included).
- Feb 11, 1999: TCP/IP RST handling was sloppy.
(patch included).
- Nov 27, 1998: There is a remotely exploitable
problem in bootpd(8). (patch included).
- Nov 19, 1998: There is a possibly locally
exploitable problem relating to environment variables in termcap
and curses. (patch included).
- Nov 13, 1998: There is a remote machine lockup
bug in the TCP decoding kernel. (patch included).
OpenBSD 2.3 セキュリティ警告
以下は OpenBSD 2.3 用の警告です――これらの問題はすべて、カレント版のOpenBSDでは解決済みです。当然ながら、OpenBSD 2.2 以下の警告はすべて、 OpenBSD 2.3では修正済みです。
- Nov 27, 1998: There is a remotely exploitable
problem in bootpd(8). (patch included).
- Nov 13, 1998: There is a remote machine lockup
bug in the TCP decoding kernel. (patch included).
- Jul 2, 1998: setuid and setgid processes
should not be executed with fd slots 0, 1, or 2 free.
(patch included).
- August 31, 1998: A benign looking resolver buffer overflow bug was re-introduced accidentally (patches included).
- June 6, 1998: Further problems with the X
libraries (patches included).
- June 4, 1998: on non-Intel i386 machines, any user
can use pctr(4) to crash the machine.
- May 17, 1998: kill(2) of setuid/setgid target
processes too permissive (4th revision patch included).
- May 11, 1998: mmap() permits partial bypassing
of immutable and append-only file flags. (patch included).
- May 1, 1998: Buffer overflow in xterm and Xaw
(CERT advisory VB-98.04) (patch included).
- May 5, 1998: Incorrect handling of IPSEC packets
if IPSEC is enabled (patch included).
OpenBSD 2.2 セキュリティ警告
以下は OpenBSD 2.2 用の警告です。これらの問題はすべて、OpenBSD 2.3では解決済みです。一部の問題は、他のオペレーティングシステムにはまだ残っています (ここに挙げたパッチは
OpenBSD 2.2 用のものです。OpenBSD 2.1では使えない場合があります)
- May 5, 1998: Incorrect handling of IPSEC
packets if IPSEC is enabled (patch included).
- May 1, 1998: Buffer overflow in xterm
and Xaw (CERT advisory VB-98.04) (patch included).
- Apr 22, 1998: Buffer overflow in uucpd
(patch included).
- Apr 22, 1998: Buffer mismanagement in lprm
(patch included).
- Mar 31, 1998: Overflow in ping -R (patch included).
- Mar 30, 1998: Overflow in named fake-iquery
(patch included).
- Mar 2, 1998: Accidental NFS filesystem
export (patch included).
- Feb 26, 1998: Read-write mmap() flaw.
Revision 3 of the patch is available here
- Feb 19, 1998: Sourcerouted Packet
Acceptance.
A patch is available here.
- Feb 13, 1998: Setuid coredump & Ruserok()
flaw (patch included).
- Feb 9, 1998: MIPS ld.so flaw (patch included).
- Dec 10, 1997: Intel P5 f00f lockup
(patch included).
OpenBSD 2.1 セキュリティ警告
以下は OpenBSD 2.1 用の警告です。これらの問題はすべて、OpenBSD 2.2では解決済みです。一部の問題は、他のオペレーティングシステムにはまだ残っています (OpenBSD 2.1 を使っている人は、最新リリースにアップグレードするよう強く推奨します。ここに挙げたものは、いちばん重大なセキュリティ問題をなおすものだけだからです。特に OpenBSD 2.2 は、多数の localhost
セキュリティ問題をなおしています。その多くは、パッチの提供が困難なやりかたで修正されています)
OpenBSD 2.0セキュリティ警告
以下は OpenBSD 2.0 用の警告です。これらの問題はすべて、OpenBSD 2.1では解決済みです。一部の問題は、他のオペレーティングシステムにはまだ残っています (まだ OpenBSD 2.0 をお使いの方、ずいぶん昔からのご愛顧に感謝感激! でも新しいバージョンをインストールしないと、ずいぶんいろいろ見逃していることになりますよ!)
われわれの変更の見方
われわれはセキュリティについて積極的な立場をとりますから、たえず新しいセキュリティ上の問題を見つけては直しています。そういう問題がすべて広く報告されるわけではありません。前にも述べたように、その多くは悪用可能かどうかわからないからです。多くの単純なバグは、実は予想しなかったセキュリティ上の問題になっていたりします。そういう変更を、上のような形式で公開するだけの時間的な余裕がないのです。
したがって、最新のメジャーなOpenBSD リリース以降、カレントのソースコードにはマイナーなセキュリティ上のフィックスが含まれています。そういう問題は、影響が小さく、悪用できることも示されていないという保証を限定つきで行います。もしまちがいなくセキュリティ上の問題となる問題を見つけたら、パッチはきわめてすばやくここに登場します。
本当にセキュリティについて関心のある人は、いくつか打つ手があるでしょう:
- もしセキュリティ問題が理解できる人なら、source-changes mailing list に登録して、セキュリティ関連と思われる内容に目を光らせておきましょう。フィックスの多くは、悪用可能だと示されていないものが多いので、関連する投稿がすべて「セキュリティフィックス」と書いてあるとは思わないでください。もし問題が示されて深刻なものなら、すぐにここにパッチが出ます。
- カレントのソースコードツリーを追いかけて、ときどき完全なシステムビルドを自分でやる方法を身につけましょう( /usr/src/Makefile
をじっくり読んでください)。ユーザは、カレントのソースツリーは最新リリースより必ずセキュリティが高いと思ってまちがいありません。でも、ソースコードから自分でシステムをビルドするのは、生やさしいことではありません。ソースコードはのべ 300MB あるし、メジャーリリースを移行する過程で、問題が生じることもあります。
- 自分のアーキテクチャ用バイナリスナップショットをインストールする。これは、かなりしょっちゅう公開されます。たとえば i386 用スナップショットは、だいたい毎週更新されます。
問題を報告するには
新しいセキュリティ上の問題を見つけたら、以下にメールしてください:
deraadt@openbsd.org.
PGP でエンコードしたい場合には(でもこれは、プライバシーがすごく重要な場合だけにしてくださいね、めんどうですから)、このpgp キーを使ってください。
その他読んでおきたい資料
OpenBSD チームメンバーは、OpenBSD のセキュリティ関連の変更について、いろいろ論文を書いています。これら文書の postscript 版が以下で手に入ります。
- A Future-Adaptable Password Scheme.
Usenix 1999,
by Niels Provos,
David Mazieres.
論文 and
スライド.
- Cryptography in OpenBSD: An Overview.
Usenix 1999,
by Theo de Raadt,
Niklas Hallqvist,
Artur Grabowski,
Angelos D. Keromytis,
Niels Provos.
論文 and
スライド.
- strlcpy and strlcat -- consistent, safe, string copy and concatenation.
Usenix 1999,
by Todd C. Miller,
Theo de Raadt.
論文 and
スライド.
- Dealing with Public Ethernet Jacks-Switches, Gateways, and Authentication.
LISA 1999,
by Bob Beck.
論文 and
スライド.
- Encrypting Virtual Memory
Usenix Security 2000,
Niels Provos.
論文 and
スライド.