	FML Security Advisory 1999-004: melissa family macro virus
	========================================

Topic:Melissa Macro Virus 一族(?)対策
Update 1999-003

			Ken'ichi Fukamachi <fukachan@sapporo.iij.ad.jp>

	Copyright (C) 1999,2001 Ken'ichi Fukamachi
		All rights reserved.

[Abstract]

Melissaが何か？については Cert Advisory を参照してください

	http://www.cert.org/advisories/CA-99-04-Melissa-Macro-Virus.html

Melissa originalはSubject:で弾けます。

	http://www.fml.org/fml/advisories/FA1999_003/index.html

Melissaの変種はSubject:で弾く子どもだましの手は使えません。
以下ではMelissa一族(Melissaと同様の祖先を持つウィルス群)をどう弾くか？
という理論とfmlの設定例について述べます。

補足:これらもできればMTAで弾く方がよいですがMTAレベルでは大変でしょう。

-------------------------
------------------------------------------------------------
1	特殊なWordファイルは弾く
1.1	理論
1.2	弾く条件
1.3	弾けるであろうとおもわれるvirus

2	fml 2.2A#42以降での設定
2.1	概要

3	fml 2.2A#41まで(2.2A#42以前のもの)
3.1	必要なファイル
3.2	cfの場合
3.3	config.ph
3.4	はりつけるべきHOOK

Appendix A	フィルタリング機能
Appendix A.1	fml フィルタリング機能について
Appendix A.2	makefml config を使う人
Appendix A.3	cf 書きの人
Appendix A.4	config.ph 生書きの人
Appendix A.5	make secure
------------------------------------------------------------

-------------------------

細かい手順の意味についてはINSTALLマニュアルを参照して下さい
	http://www.fml.org/fml/INSTALL/

1	特殊なWordファイルは弾く

1.1	理論

[条件1]

	http://www.zdnet.co.jp/news/9903/30/melissa3.html

によればMelissa virusにはGUIDという一種の個人情報が埋め込まれている。
普通のWORDファイルを(binaryだけど)強引に読むとGUIDは見えない(マクロな
どを定義しないならつかないらしい?)。

[条件2]

GUIDの正規表現はわかっている。

1.2	弾く条件

GUIDは通常条件下ではつかないらしい。よって

・ MIME/Multipartで送られてくるメール
・ GUIDらしきものを含んでいる

の２つの条件を満たしたら該当するメールをすべて拒否することで
怪しげなファイルを全部弾くことにする。

確かに理論上は多く弾きすぎだが、ログファイルにGUIDは残すのでデータが集
まって怪しげなGUIDのリストを作ることができたら全部を弾くのではなくその
リストにマッチしたものだけを弾けば良くなるかもしれない(新種に備えてそ
れはしないほうがいいかもしれない)。

ちなみに特定のパターンを含むかだけをチェックしているのでWORDとかに限ら
ずそれっぽいものが全部ひっかかるはずだが…e.g. Excelも?
＃あとは実際に叩き込んでみないと分からない

1.3	弾けるであろうとおもわれるvirus

Melissa original とMelissaの子孫及びMelissaと共通の祖先のvirus
例: Melissa, PDS2000

2	fml 2.2A#42以降での設定

2.1	概要

単純なルールでは弾けないので、2.2A#42以前のものではHOOKをごりごりかか
ないといけないだろう。fml 2.2A#42ではウィルスチェックのライブラリがつ
いている。2.2A#42では『フィルタリング機能をを有効にする』だけでこのウィ
ルスチェックは適用される。

逆にこのチェックが不必要だという人は$FILTER_ATTR_REJECT_MS_GUIDを0に設
定する。

フィルタリングを有効にする => Appendix A

3	fml 2.2A#41まで(2.2A#42以前のもの)

あまり古いとだめな気がしますが、おそらくfml 1.6以降なら有効と"思われる
"設定方法を書いておきます。＃動かなかったらあきらめて下さい _o_

3.1	必要なファイル

○ libviruschk.pl を入手する。それを/usr/local/fmlのようなfmlをインス
トールしてある場所に置く。

	ftp://ftp.fml.org/pub/fml/current/src/src/libviruschk.pl

3.2	cfの場合

以下にしめすHOOKをcfファイルのLOCAL_CONFIGの後に張り付けて

	% make config.ph

3.3	config.ph

以下にしめすHOOKをconfig.phの最後の1;より前にはりつける。

3.4	はりつけるべきHOOK

---------->8---------->8---------->8---------->8---------->8----------
$START_HOOK = q!;

local(%e) = %Envelope;
local($boundary);

# MIME skip mode; against automatic-MIME-encapsulated fool MUA
if ($e{'h:content-type:'} =~ /boundary=\"(.*)\"/i ||
    $e{'h:content-type:'} =~ /boundary=\s*(\S+)/i) {
    $boundary = $1;
    $boundary = "--$boundary";
    $e{'MIME:boundary'} = $boundary;

    require 'libviruschk.pl';
    $r = &VirusCheck(*e);

    if ($r) { 
	$DO_NOTHING = 1;
	&Log("EnvelopeFilter::reject for '$r'");
	&Warn("Rejected mail by FML EnvelopeFilter $ML_FN", 
	      "Mail from $From_address\nis rejected for '$r'.\n".&WholeMail);
    }
}

!;
---------->8---------->8---------->8---------->8---------->8----------

Appendix A	フィルタリング機能

Appendix A.1	fml フィルタリング機能について

fml 2.2以降にはヘッダやメール本文に基づくフィルタリング機構があります。
つまり「ヘッダに特定のパターンがあったら弾く」とか「一行メールを拒否す
る」などができます。
＃正式なリリースとしては2.2ですが当然 2.1 current からあります。
＃ドキュメントないしソースにUSE_DISTRIBUTE_FILTERというのがあれば
＃動くバージョンです。

デフォールトではフィルタリング機能はOFFです。そのため、まずフィルタリ
ングをONにする必要があります(以下elena MLを例にとる)。

フィルタリング機能を有効にするには以下の節のいづれか一つの方法を行ない
ます。どれも作業の結果は同じですが、使いなれている方法でどうぞ。

Appendix A.2	makefml config を使う人

   "makefml config elena" -> security -> USE_DISTRIBUTE_FILTER -> "y" (yes)

Appendix A.3	cf 書きの人

   USE_DISTRIBUTE_FILTER 1

を書く。その後

	% make config.ph

で config.ph を作り直す。

Appendix A.4	config.ph 生書きの人

   $USE_DISTRIBUTE_FILTER = 1;

Appendix A.5	make secure

この際なのでフィルタリングをはじめ、セキュリティ関連の基本的な部分を全
部有効にする

   % cd /var/spool/ml/elena
   % make secure

するといろいろな設定を自動的にcfに書いてconfig.phをUPDATEする。 
やってる設定は画面に表示される。

