djbが教える脆弱性のないソフトウェアの書き方

別のところで書いた話の再掲。

djbと呼ばれるプログラマ、ダニエル・ジュリアス・バーンスタイン。最近ではChaCha20やPoly1305といった暗号技術で活躍しているが、その名を有名にしたのは「脆弱性がないソフトウェア」として知られるqmailだろう。1997年にリリースしてから10年後の2007年に本人が「なぜ俺の書くプログラムはセキュアなのか」と論文を書いており、そこから引用する。

http://cr.yp.to/qmail/qmailsec-20071101.pdf

In March 1997, I took the unusual step of publicly offering $500 to the first person to publish a verifiable security hole in the latest version of qmail

1997年にリリース後、セキュリティホールを最初に見つけた人物に500ドルを出すと言っている。脆弱性報奨金制度の先駆けだ。そして、誰も名乗り出てないことから、qmailには脆弱性がないということになっている。

I have become convinced that this “principle of least privilege” is fundamentally wrong. Minimizing privilege might reduce the damage done by some security holes but almost never fixes the holes.

セキュアコーディングで頻繁に引用される「Least privilege:最小限の権限」はwrongだと言っている。権限を最小にしたところでダメージが減るだけでセキュリティホールは残ったままだというわけだ。

The essence of user interfaces is parsing: converting an unstructured sequence of commands, in a format usually determined more by psychology than by solid engineering, into structured data.

ユーザインタフェースの本質はparsing、つまり非構造データを構造データにするところだが、

This situation is a recipe for disaster. The parser often has bugs: it fails to handle some inputs according to the documented interface. The quoter often has bugs: it produces outputs that do not have the right meaning.

このparserはバグが多く、例えば引用符はよくバグって間違った出力を生む。ここでは言及されてないが、SQLインジェクションやXSSは引用符のパースの問題だ。

I've mostly given up on the standard C library. Many of its facilities, particularly stdio, seem designed to encourage bugs. A big chunk of qmail is stolen from a basic C library that I've been developing for several years for a variety of applications.

C言語の標準ライブラリはバグを推奨するようなものだから諦めて、自作したライブラリを元にしているとのこと。これがC言語の標準ライブラリにも影響したとどこか聞いたような気がしたが、ちょっと検索して見つからず。聞き間違いだったかな。

この記事が気に入ったらサポートをしてみませんか?