第114回で、ウィルス付きのメールの受信をメールサーバで拒否する対策について述べました。これは、本文に含まれる文字列の条件で迷惑メールを拒絶するという、メール転送プログラムPostfixが持つ機能を利用したもので、スパムメール防御策をウィルス防御策にも活用したものです。
たとえばALIZというウィルスを運ぶメールの本体には、その添付ファイル名を指定する「name="whatever.exe"」という文字列が含まれるので、それを拒絶条件とすればよいのです。
また、SIRCAM、BADTRANSなどいくつかのウィルスには、その添付ファイルの真の拡張子が「bat, com, exe, lnk, pif, scr」(ウィルスの活動を可能とするデータタイプ)のいずれかでありながら、その直前に「doc」「mp3」などの偽の拡張子を置いて受信者にデータタイプを見誤らせようとするという特徴があります(たとえばBADTRANSの実例として「Card.DOC.pif」)。そのようなウィルスメールは、ファイル名が固定でなくても、正規表現という記述方法で
/name=".+\.[a-z0-9]*\.(bat|com|exe|lnk|pif|scr)"/
と指定することによってブロックできます。この方法では、正当な添付ファイルであってもファイル名にピリオドが二つ以上含まれたらブロックされてしまうことがありうるのですが、そのようなことはまれでしょう。
しかし、この方法を思いついても、なおもブロックできないウィルスがありました。HYBRISという、2000年10月に発生して今なお撲滅されていないウィルスです。これは、キャッシュ(インターネット一時ファイル)に記憶されたウェブページからメールアドレスを拾い出して自分のコピーをメールでばらまくもので、私もこれまで何度か受信しています(パソコンのウィルスチェッカーでガードしているので、被害にあったことはありませんが)。添付ファイル名は「
ランダムな英字8文字.EXE」という形で、この条件でブロックすると、正当な添付ファイルもブロックしてしまうおそれがあります。
そこで私がとった作戦は、ウィルスを生け捕りにしてデータのパターンを調べるというやり方です。メールを受信しても、すぐにはサーバからメールを削除しないようにしておきます。そして、パソコンのウィルスチェッカーにひっかかったら、Linuxサーバにログインして、そのメールを保存しておきます(Linuxサーバ上では、それは単なる文字データにすぎないので、生け捕りにしておいても危険はありません)。
こうして2通の捕獲に成功。BASE64という符号化方式によってメールで伝送可能な文字データに符号化された添付ファイルを解析しました。その結果、以下のことがわかりました。
- 全体で405行のうち、2通で異なっている行は、10、18、35〜36、42、63、93〜95、97、118〜119、121、137、149、151、157、164〜166、196〜390行目。
- 9行目までは2通で一致しているが、元のバイナリ(二進数)データでのオール0を符号化した文字「A」が多い。この範囲については、HYBRISを特徴付けるデータかどうかの確信が持てない。
そこで拒絶条件として採用したのは、2通で一致しているうちの11行目で、次のような文字列です(見ても危険はありませんから、ご心配なく)。
HPo3yJDnSLXJ7t3FOxTtOKRv+GfTc+pR9O6i/AuJNOIiPrxC4Cq53H5sNXfMXjVguFwJrFAYrHHj
そして、2002年3月9日、ついにHYBRISが罠にかかりました。メールサーバのログを見ると、差出人エンベロープアドレス(エラー時の返送先になるアドレス。
第105回参照)が空アドレス(<>)になっています。これは、通常は、こちらから送信したメールのエラー差し戻しメールにしかありえないものです。HYBRISだったことは間違いありません。ふっ、ざまあみろ。
パソコンのウィルスチェッカーで私の被害は防げるにしても、ウィルスに感染してウィルスをばらまいた人も、そのユーザーを収容していてウィルスメールを中継したプロバイダも気付かずにいるのは
癪です。受け取り拒否でメール伝送を異常終了させることにより、ウィルスメールの差出人アドレスが正しいならば感染者に突き返し、そうでなければ中継サーバの管理者に気付かせることができます。これが成功した時には無上の
快感を覚えます。私ってサディスティックですかね。