Security Tips
 

QuickMLでメンバーを容易に追加できないようにする

宮本 久仁男
2004/10/6

 QuickMLとは、手軽にMLサーバを構築、運用するためのRubyプログラムである。利用者も多いが、QuickMLで運用しているMLサーバに対して攻撃を仕掛けてくる人がいるとも聞く。QuickMLのコンセプトと異なるテーマではあるが、そういう攻撃をはじくような設定2つをここでは紹介する。どちらの方法もQuickMLを稼働させているサーバ上にてroot権限で作業する必要がある。

 なお、この検証は、QuickMLサーバのプログラムを配布アーカイブからインストール、運用しているような環境を想定している。設定ファイルは/usr/local/etc/quickmlrcに、ML設定ファイルは/usr/local/var/lib/quickml配下に存在する「ML名」で始まる複数のファイルである。

●MLサーバの動作権限を変更し、メンバーを記録した設定ファイルをユーザーが書き込みできないように設定する

 QuickMLは、quickmlrcファイルの中の「:user」および「:group」の指定を変えることで、QuickMLサーバの動作ユーザーを変更することが可能である。quickmlrc.sample(設定ファイルのサンプル)中ではrootに設定されている。

 これを利用して、

  1. 動作権限を一般ユーザーのものにする
  2. メンバーを記録したファイルのみ所有者を変更し、そのユーザーが書き込みできないようにする

としておく。

 今回は、QuickMLの動作権限をユーザー、グループをquickmlとし、その中でsample@atmarkitというファイルのみ所有者を変更した。

-rw-r--r--  1 wakatono root   39 Sep 22 08:07 sample@atmarkit
-rw-r--r--  1 quickml quickml 12 Sep 22 08:08 sample@atmarkit,charset
-rw-r--r--  1 quickml quickml 145 Sep 22 08:30 sample@atmarkit,config
-rw-r--r--  1 quickml quickml  2 Sep 22 08:08 sample@atmarkit,count

 この設定を行った状態でユーザーを追加しようとすると、以下のようなエラーがログに残る。

2004-09-22T08:30:59: MAIL FROM:<wakatono@example.org>
2004-09-22T08:30:59: RCPT TO:<sample@atmarkit.ml.example.com>
2004-09-22T08:30:59: From: wakatono@example.org
2004-09-22T08:30:59: Cc: wakatono@mail.example.net
2004-09-22T08:30:59: bare From: "Kunio Miyamoto" <wakatono@example.org>
2004-09-22T08:30:59: bare Cc: <wakatono@mail.example.net>
2004-09-22T08:30:59: Closed: localhost
2004-09-22T08:30:59: Unknown Session Error: SystemExit:
2004-09-22T08:30:59: /usr/local/lib/site_ruby/1.6/quickml/utils.rb:72:in `exit'/usr/local/lib/site_ruby/1.6/quickml/utils.rb:72:in `safe_open'/usr/local/lib/site_ruby/1.6/quickml/core.rb:242:in `save_member_file'/usr/local/lib/site_ruby/1.6/quickml/core.rb:647:in `add_member'/usr/local/lib/site_ruby/1.6/quickml/core.rb:868:in `add_member'/usr/local/lib/site_ruby/1.6/quickml/core.rb:885:in `submit_article'/usr/local/lib/site_ruby/1.6/quickml/core.rb:884:in `each'/usr/local/lib/site_ruby/1.6/quickml/core.rb:884:in `submit_article'/usr/local/lib/site_ruby/1.6/quickml/core.rb:956:in `submit'/usr/local/lib/site_ruby/1.6/quickml/core.rb:990:in `process_recipient'/usr/local/lib/site_ruby/1.6/quickml/core.rb:986:in `synchronize'/usr/local/lib/site_ruby/1.6/quickml/core.rb:986:in `process_recipient'/usr/local/lib/site_ruby/1.6/quickml/core.rb:1006:in `process'/usr/local/lib/site_ruby/1.6/quickml/core.rb:1005:in `each'/usr/local/lib/site_ruby/1.6/quickml/core.rb:1005:in `process'/usr/local/lib/site_ruby/1.6/quickml/server.rb:249:in `process'/usr/local/lib/site_ruby/1.6/quickml/server.rb:266:in `_start'/usr/local/lib/site_ruby/1.6/quickml/server.rb:265:in `timeout'/usr/local/lib/site_ruby/1.6/quickml/server.rb:265:in `_start'/usr/local/lib/site_ruby/1.6/quickml/server.rb:278:in `start'/usr/local/lib/site_ruby/1.6/quickml/server.rb:316:in `process_session'/usr/local/lib/site_ruby/1.6/quickml/server.rb:298:in `accept'/usr/local/lib/site_ruby/1.6/quickml/server.rb:297:in `initialize'/usr/local/lib/site_ruby/1.6/quickml/server.rb:297:in `new'/usr/local/lib/site_ruby/1.6/quickml/server.rb:297:in `accept'/usr/local/lib/site_ruby/1.6/quickml/server.rb:352:in `start'/usr/local/sbin/quickml:79:in `main'/usr/local/sbin/quickml:81

●ML設定ファイルの属性を変更し、QuickMLサーバプログラムからのユーザー追加ができないようにする

  この方法は、以下の条件をすべて満たす場合に威力を発揮する。

  • 何らかの理由でQuickMLサーバをroot権限で動作させなければならない
  • MLサーバにchattrコマンドが使えるLinux系OSを使用している

 具体的な方法は、 「ファイルに対する書き込みを『追記モード』でのみできるようにする」というものだ。

 まず、メンバーを記録したファイルに対して、root権限でchattr +aを実行する。設定されているかどうかの確認は、lsattrコマンドを使うことで可能だ。

# lsattr sample\@atmarkit
-------------- sample@atmarkit
# chattr +a sample\@atmarkit
# lsattr sample\@atmarkit
----a--------- sample@atmarkit

 この属性の付与の仕方はLinuxのext2ファイルシステム独自のものである。ほかのOSでも同様の設定が可能なものもあるので、読者の環境に合わせて試してみてほしい。

  なお、このような設定を施した状態でのメンバー追加は、やはり前述の例と同じエラーになる。どちらの場合も、QuickMLサーバは継続して稼働し続けるが、エラーになったメールはそれ以上処理されないので注意のこと。

Security Tips Index



Security&Trust フォーラム 新着記事
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

注目のテーマ

Security & Trust 記事ランキング

本日 月間