Home日記コラム書評HintsLinks自己紹介
 

フィンローダのあっぱれご意見番 第137回「メールは滅入るか」

← 前のをみる | 「フィンローダのあっぱれご意見番」一覧 | 次のをみる →

ある日突然、メールが大量にやって来た。 タイトルは Your Application だとか、 Thank you! というもので、本文は殆どなくて、 どでかい添付ファイルを見ろという内容になっている。 というと、もうお分かりかと思うのだが、 いわゆる Win32:Sobig-F というウィルスに感染したメールがやってきたのだ。

  

ほかのウィルスメールもそうだが、 Sobig-F の場合、個々のメールが約100KB程度あったりして、 こういうメールはたまたまH" でメールを読もうとした時にやってきて、 何十通も受け取るのに時間がかかって困ったものである。

 

※ Air H" だと通信速度が 32kbps になってしまう。

届いたメールの中には、 差出人が私になっているものがある。 もちろん、私が自分宛にウィルスメールを送るわけがない。 これは実は、メールの宛先が不明であるとか、アドレスが間違っているとか、 何かトラブルがあって差出人に戻ってきたようなケースなのだ。 つまり、 世間には、私が差出人になっているウィルスメールが結構出回っているらしい。 差出人を詐称するというのは今では常識になっているから、 それに関して私に苦情のメールがやってきたという記憶もない。 基本的に、知らない相手からメールが来たら、無視するのが一番いいのだ。 添付ファイルを開いてみるというのは論外としても、 単に「相手を間違えてないか」という返事を送っただけでも、 それがメールアドレス収集を目的とした無差別メールだったら、 まんまと罠にはまったことになってしまうからだ。

 

※ 戻しのメールではなく、 最初から From を詐称している場合もある。

それはそうとして、 私を詐称したウィルスメールのヘッダに、ご丁寧にも、 X-Mailer: Microsoft Outlook Express 6.00.2600.0000 という情報が入っている。 これが気に入らない。 だいたい、私は Outlook Express は封印しているから、全く使わない。 もちろん、 Windows Update は、 マイクロソフトが「ごめん、今のなし」と取り消す前に実行してしまうような頻度で実行してしまうから、 Outlook Express は多分、最新のはずである。 試しに調べたら、 6.00.2800.1123 というバージョンだった。 このバージョンを確認するために Outlook Express を初めて起動したのだが、 とりあえずこれが今のところ最初で最後である。

苦情は来ないとしても、 世の中には気の利いたシステムを組んでいる管理者もいて、 ウィルスメールを送ったら自動的に拒絶し、 何か感染しているようだ、という連絡をくれたりすることがある。(Fig)

---- Fig (ウィルスを検出したという連絡のメール) ----

====================================================================
Warning: antivirus system report

The following message has been detected by the antivirus system
====================================================================

The original message was received at Thu, 04 Sep 2003 13:28:12 +0800
The message was sent from: <SDI00344@nifty.ne.jp>

The virus found was: Win32:Sobig-F [Wrm]

---- Fig end ----

私に連絡されても、それでどうした、としか言いようがないのだが、 少なくとも、私の名前でウィルスメールが出ているという事実だけは分かるから、 全く無意味というわけでもないようだ。 この程度ならまだ我慢できるというか、仕方ないのかもしれないが、 単なる通知にしても大量にメールが送られてきたら、 プロバイダによってはメールボックスの制限とかあったりするからたまったものではない。 さらに、 世の中にはマヌケなシステムを組んでいる管理者もいて、 宛先不明のウィルスメールを、 添付ファイルも込みでそのままそっくり送り返してくれたりすることもある。 どことは言わないが、 世界でもかなり大手のプロバイダがそういうことを平気でやってのける。 ウィルスの作者にしてみれば、 プロバイダが協力して被害者にウィルスメールを送りつけて広めているわけで、 インターネットというのは実に便利なものだ。

メールというのは、中継するサーバーがパスを確実に保存しておけば、 どこから送ったのかという情報は一意的に決まるのである。 そうでなければ、メールが目的のアドレスに到達しないはずだ。 ただし、メールの本体にパスが全部保持されているかというと、 そこの所は保証できないし、 特に、悪意を前提とした場合には、 パスが保持されていたとしても信用しない方がいいが、 せめて経路程度は完全な情報で知らせてくれたらいいのにと思う。

§

  

もっと気の利いたプロバイダが ウィルス対策を勝手にやってくれたのか、 ある時期を境に急にウィルスメールは来なくなった。 実はウィルスではないメールも来なくなったりしていたりすると怖いのだが、 そこはそれ、インターネットメールというのは最初からそういうものだ。 何か最近は安定して使えるような錯覚を感じることもあるが、 誰か盗聴しているというのはまず確実だと思うし、 気軽に使えるものではないという認識が必要だとは承知しているわけだが。

 

※ 気を利かせたというよりは、 トラフィックが増大してサーバーに負荷がかかりすぎるのを避けるためであろう。

その間、やってられないということで、 あるサイズ以上のメールは定期的に読み取ってサーバーから消してしまおう、 と思い立った。 ある意味単純な処理だが、 実際に単純に書けるかどうかは、 言語というよりはライブラリとかモジュールとか、 既存のコードの充実度に依存するものである。 モジュールが充実しているといえば、やはり Perl というのは捨てがたいもので、 多分、割と簡単に書けるような気はしたのだが、 何となく今回は JavaMail を使ってみた。

大雑把な処理の流れは List のような感じである。 このあたりの話は、JavaMail のサイト (http://java.sun.com/products/javamail/) に書いてあって、 Fundamentals of the JavaMail API (http://developer.java.sun.com/developer/onlineTraining/JavaMail/) というチュートリアルもあるが、 全部英語なので頑張ってみてください。

---- List (JavaMail でメールを受信) ----

    try {
        Session session = Session.getDefaultInstance(properties, null);
        Store store = session.getStore(provider);
        store.connect(hostname, username, password);

        // Open the folder
        Folder inbox = store.getFolder("INBOX");
        inbox.open(Folder.READ_ONLY);
        Message[] messages = inbox.getMessages();

        for (int i = 0; i < messages.length; i++) {
            if (messages[i].getSize() > 90000) { // 限界を超えた
               // 読むなり消すなり、Message[n] に対する処理を行う
            }
        }

        inbox.close(true);
        store.close();
    }
    catch (Exception e) {
    }

---- List end ----

もちろん、このコードはこれだけでは動かない。 JavaMail をインストールしておかないとダメだというのは当然として、 JavaBeans Activation Framework というのが入ってないと動かないというのが意表をついている。 コードとしても、 properties とか、hostname、username、password、provider、 などを与えてやらなければならない。 なにより、肝心の処理を省略しているというのがアレだが。 一つだけ説明しておくと、 provider というのは、ここでは、 メールの送受信の細かい処理を一手に引き受けてくれる処理のことである。 多分、今回は pop3 というのを指定すればいい。

  

すると俄然気になってくるのが やはりセキュリティの話だ。 pop3というプロトコルは、IDとパスワードを平然とインターネット上に流し込む。 覗き見されたら、情報がもれ放題の状態なのである。 もっとも、実際に pop3 を使ってパスワードがばれてしまった、 という話があるとしたら、 社内のLANでパケットを見られたとか、 そういうケースの方が圧倒的に多いような気もするが、 それにしても、今時、パスワードを平文で流すというプロトコルが生き延びているというのも不思議である。

 

※ Ethereal などのパケットモニタ系ソフトを使えば、 実際にパスワードを見ることができる。

pop3 には拡張されたバージョンとして apop と呼ばれているものがある。 これはパスワードの部分をちょっとだけ暗号化してくれるので、 少し安心できるというものなのだが、 実際には、メールの本文が平然とインターネット上を流れていたりするので、 その程度のものだといえばそれまでなのだが、 さて問題は、JavaMail で apop に対応するにはどうすればいいのだろう、 ということなのだ。

 

※ 現在のバージョンの javamail は標準で apop に対応している。 Session を取得するときに指定するプロパティ (List では properties) に対して、 mail.pop3.apop.enable の値を true にしておけばよい。

多分、つまらないが効率的な解決方法としては、 apop に対応した provider を使うということだろう。 実際にそういう provider も公開されていたりするのだが、 まあ何というか、apop 位は標準で入れておいてくれてもいいと思ったりした。

§

Webブラウザでメールを読むサービスを提供しているプロバイダもある。 いわゆるWebメールというものである。 メールを読む専用ソフトがいらないというメリットもあるが、 一般にWebメールはパスワードやメールの内容がSSLで暗号化された状態でやりとりされるわけで、 セキュリティ的にもメリットがある。 インターネットのどこかの経路でメール自体が平文のまま流れることは考えられるとしても、一部が暗号化されるわけだし、 同一のプロバイダから送られたメールなら、 リスクはかなり小さくなる可能性もある。

  

もちろん、弱点もあって、 定期的にメールをチェックしたり、 メールの本文だけを保存して管理するのがちょっと面倒になったりする。 というわけで、そのためのWebページ対応オートパイロットだという話があるのだが、 そういうのを夏から作っているのになかなか完成しない。 この記事が公開される頃には出来ているといいのだが。

 

※ 動く状態という意味では出来ているのだが、 公開していない。

(C MAGAZINE 2003年11月号掲載)
内容は雑誌に掲載されたものと異なることがあります。

修正情報:
2006-03-02 裏ページに転載。

(C) Phinloda 2003-2006, All rights reserved.