D. J. Bernstein [translated to Japanese by Yusuke Shinyama, 2002-09-06]
Internet mail
qmail

Wietse Venema の言いがかり

インターネット上で動くすべてのメイルシステムには リモートによる DOS 攻撃が存在します --- 1996年 1月の最初のリリースから、qmail のパッケージでは このことがずっと取りざたされてきました。

Wietse Venema は自分自身の MTA を宣伝するため、 誹謗キャンペーンを行っています。1997年 6月に、かれは qmail が「システムを、メモリ使い果たし攻撃に対して脆弱にする」と主張しました。

間違いです。 本当のところは、システムは qmail を走らせる 前から 脆弱だったのです。

つぎに Venema は、 qmail-smtpd がメモリを rlimits あるいは物理的リミットまで動的に割り当てる UNIX 唯一のネットワークサービスであるとほのめかそうとしました。

間違いです。 たとえば、sendmail や bind、そして inetd はどれもネットワークからの入力によって メモリを限界まで使わせるようにできます。

Venema はそのようなプログラムが沢山存在することを無言で認めた後、 任意大きさのメモリを割り当てることは「バグとみなされる」と主張しはじめました。

間違いです。 この問題はカーネルが何年も前に解決しています: UNIX システムには、変更可能で、簡単に使える、 プロセス毎のメモリ制限 rlimits があります。 システム管理者には 自分のリソースを割り当てる 巨大な権限があります。

どうやら Vename は、 すべてのネットワークデータ用に動的に割り当てられる構造体に対して、 変更可能な制限を人工的に課すようなコードをすべてのアプリケーションに別個に含めるのが よいデザインだと思っているようです。 私には、これはひどくまずいエンジニアリングに思えます。

最終的には、 よく管理されたシステムは、qmail を走らせていようといまいと、 メモリ使い果たし攻撃にやられることはありません。

まずいエンジニアリングに関する私の指摘を証明するニュース: 2001年 11月にある人が、Postfix の動的に割り当てられた SMTP セッションログで、 Venema が人工的な制限を課すのに失敗していることを見つけました。 したがって、リソースに制限をかけていない、管理のまずいシステムでは、 攻撃側はいとも簡単に Postfix の smtpd にすべての利用可能な メモリを使わせることができるわけです。 Venema が「exploit」をポストして、脆弱性データベースに エントリを追加しようとしたでしょうか? Venema のアプローチのほうがシステムのリソース制限よりも ずっと複雑になっていて、ミスを起こしやすいものであると彼は認めたでしょうか? No.


qmail では、送り手によって提供された情報を、 制御された環境変数を経由してローカルな配送プログラムで使うことができます。 Venema の MTA はそうなっていません。

Venema は 1997年 8月に、 このことが彼の MTA をセキュリティ的に有利にしていると主張しました。

間違いです。 qmail の環境変数は安全かつ簡単に使うことができ、 それを使わないプログラムには何の影響もありません。


Venema は 1997年 8月に、 qmail ではネットワークから受信したメッセージの アドレス書き換えができないと主張しました。

間違いです。 qmail-1*/FAQ, question 5.5 で詳しく説明されているように、 qmail はネットワークからくるメッセージも、システム管理者が ローカルメッセージと同じ機構で書き換えられるようにしています。


Venema は 1997年 8月に、 qmail は「字句解析できない email を床に落としてしまう」と主張しました。

間違いです。 もし qmail がメッセージを配送できない場合、その理由が何であれ、 そのメッセージは送り手に返されます。

Venema はのちにこれを以下のような主張に変えています: 「qmail は送り手または受け手のアドレスを解析中に問題が生じると、 メッセージ全体を拒否してしまう」

間違いです。 qmail は、ヘッダを書き換えるよう指示されてないかぎり、 まったくメッセージの中身を解析しようとしません。 もし qmail を走らせていて、完全には RFC 822 互換でない メッセージを誰かが送りつけてきたとしても、qmail は喜んでそれを配送します。


qmail はキューに入ったメッセージごとにメモリを消費します。

Venema はこれは「失敗するに決まって」いて、qmail は「固まって」、 巨大な未処理の山とともにクラッシュする、と主張しています。

間違いです。 Venema はメッセージの数はキューに使われるディスクの iノードによって 制限されることを忘れてしまっています。 最大メモリ消費は小さいので、たとえ非常に小さいメモリしか 積んでいないマシンでも、ばかでかいキューのための充分なディスク容量があれば、 Venema の妄想は単に起こりません。 (当然ながら、この問題は目新しいものではありません -- qmail がリリースされるたびにドキュメント中で分析されています)

例: あるマシンのキューには 2日間のネットワーク停止のあいだに 100,000 以上のメッセージがたまりました。 qmail はこの未処理のメッセージをうまく処理できたのです。


Venema は 1998年 3月に、 sendmail から qmail に移行することは、ユーザが 「いきなり email システムの利用法を変更させられることになる」と 主張しました。

間違いです。 qmail は sendmail が使っているのと同じ配送プログラムを使って /var/spool/mail への配送 をおこなえます。 また、dot-forward プログラムを介して、これは .forward ファイルも サポートしています。ユーザは .qmail ファイルや ezmlm などの 恩恵を受けることができますが、これらの新機能を知らない ユーザはその違いに気づかないでしょう。