Windows TIPS
[Network]
  Windows TIPS TOPへ
Windows TIPS全リストへ
内容別分類一覧へ

ウイルス・メールの送信元を調査する

―― メールのReceived:フィールドを使って送信経路を追跡する ――

デジタルアドバンテージ
2004/04/10
 
対象ソフトウェア
電子メール・ソフトウェア全般
ウイルスやスパム・メールでは送信元アドレスなどが偽装されているので、メール・アドレスで送信元を特定することは困難である。
メールのヘッダには、その送信経路がReceived:フィールドとして記録されている。
これを調査することにより、最初にメールを送信してきたホストを突き止めることができる。
 
解説

 電子メールのヘッダ部分には、そのメールが途中経由してきた中継サーバを表すための「Received:」というヘッダ情報が付けられている。これを調べることにより、そのメールがどこからやってきたかを知ることができる。特にウイルス付きのメールなどを受け取った場合に、そのメールを送信しているのは誰か(どういうIPアドレスを持つホストか)ということが分かる。最近のウイルス・メールやスパム・メールは、送信者アドレスを偽装するのが普通なので(こうすればメール・システムのフィルタリング設定などをすり抜けやすいから)、メールに書かれている送信者の電子メール・アドレスがそのメールを送信しているということはまれである。本当にその本人が送信しているのか、それとも単に送信者アドレスを偽装して送信しているのかを判断するためには、このようなヘッダの詳細なチェックが欠かせない。メールの送信者がだいたい分かれば、例えばそのメールを送信しているプロバイダや組織に連絡して適切な措置を施してもらうように依頼したり、メールの受信用フィルタなどを設定したりすることができるだろう。本TIPSでは、メール・ヘッダに書かれている情報のうち、Received:フィールドの情報に注目して、その意味を解説する。

メール・ヘッダの例

 Windows TIPS「Outlook Expressでメール・メッセージのソース情報(ヘッダ情報)を表示する」では、メールの内容を簡単に表示させる方法を紹介した。この方法を使うと、メールの本文部分以外に、メール・ヘッダと呼ばれる部分の情報も簡単に調べることができる。このヘッダ部分には、そのメールに関する詳細な情報が記録されているので、メールの解析をする場合には不可欠な情報である。Outlook Express以外でも、このようなメールのヘッダ部分を確認する手段は用意されていることが多いので、それぞれのメール・ソフトウェアのヘルプなどで調べて、メール・ヘッダの情報を表示させてほしい(Outlook 2003ならば、メッセージを選択したうえで、[オプション]メニューを表示させる。すると[メッセージ オプション]ダイアログの下部にメール・ヘッダ部分が表示されている)。

 1: Received: from mail.XXXDOMAIN.JP ([MM.MM.MM.MM]) by mail.YYYDOMAIN.JP with Microsoft SMTPSVC(5.0.2195.6713);
 2:         Sun, 4 Apr 2004 15:46:38 +0900
 3: Received: by mail.XXXDOMAIN.JP (Postfix)
 4:         id 3A0D2D80DB; Sun,  4 Apr 2004 15:46:38 +0900 (JST)
 5: Delivered-To: YYYYY@XXXDOMAIN.JP
 6: Received: from XXXDOMAIN.JP (pXXXX-ipadXXXXXXXXX.tokyo.ocn.ne.jp [NN.NN.NN.NN])
 7:         by mail.XXXDOMAIN.JP (Postfix) with ESMTP id 9FCEFD80DA
 8:         for <INFO@XXXDOMAIN.JP>; Sun,  4 Apr 2004 15:46:36 +0900 (JST)
 9: From: TANAKA@XXXFISHINGDOMAIN.COM
10: To: INFO@XXXDOMAIN.JP
11: Subject: Delivery Failed (INFO@XXXDOMAIN.JP)
12: Date: Sun, 4 Apr 2004 15:46:17 +0900
13: MIME-Version: 1.0
14: Content-Type: multipart/mixed;
15:         boundary="----=_NextPart_000_0016----=_NextPart_000_0016"
16: X-Priority: 1
17: X-MSMail-Priority: High
18: Message-Id: <20040404064636.9FCEFD80DA@mail.XXXDOMAIN.JP>
19: Return-Path: TANAKA@XXXFISHINGDOMAIN.COM
20: X-OriginalArrivalTime: 04 Apr 2004 06:46:38.0366 (UTC) FILETIME=[9455B3E0:01C41A10]
21:
22: …(以下本文。省略)…

 これは、あるメール・アドレスあてに送られてきたウイルス・メールのヘッダ部分である(赤字の部分は架空の文字列に変更してある。MM.MM.MM.MMとNN.NN.NN.NNはIPアドレス)。このメール・アドレスは、連絡用としてWebページ上で公開されているため、スパム・メールやウイルス・メールがよく届く。この場合、「From:」に書かれているアドレス(9行目)は詐称されているが、「To:」に記述されているアドレス(10行目)は正式なメール・アドレスである。ただし、ある1つの公開メール・アドレスを組織内で複数のユーザーのメールにフォワード(転送)しているため、通常の個人あてのメールよりもやや複雑なルートを通ってメールが配信されているが、基本的にはどのようなメールもこのようなヘッダを持っているはずである。手元のメール・ソフトウェアで確認してほしい。

 メール・ヘッダにはこのように多くの情報が記述されているが、その基本的なルールは非常に簡単である。

  • 1つの情報(フィールド)は、1行に記述する。2つ以上の情報を1行にすることはない。
  • 各情報には、例えばReceivedやToというフィールド名が付けられている。フィールド名は行の左端にくっつけて記述し、フィールド名の最後には「:(コロン)」を付ける。フィールド名に対するパラメータは、その直後から行末までとなる。
  • パラメータが長い場合は、改行して先頭に空白文字かタブ文字を置き、複数行にわたって続けることができる(3行以上でもよい)。
  • X-で始まる行はコメント行(メール・ソフトウェアによって内容が異なる)。

 ここでは、Received:フィールドに注目してみよう。上の例では、Received:(黄色で示している)で始まる行が3行ある(1/3/6行目)。また、それらの行の次の行は、先頭が空白文字なので、これらの行は、つながっているものと解釈される。結局、このヘッダにはReceived:フィールドが3つ含まれていることになる。

「Received:フィールド」とは?

 インターネット上の電子メールは、メール・サーバ間を順番に中継されることによって、最終的な目的地(一般的にはPOPメール・サーバ)に届けられる。このような、メールを中継するサーバを「MTA(Message Transfer Agent)」という。中継の途中でいくつのMTAを経由するかはネットワークの構成によっても変わるが、一般的には、メールを送受信する組織ごとに代表となるMTAが1つあるので、最低でも2つのMTAを経由することになる(昔はインターネット上でも複数のMTAを経由してバケツ・リレー式に転送していたが、現在では直接配信することがほとんどである)。さらに組織内部で複数階層のMTAが構築されていることもあるし、メールをフォワードしたり、メーリング・リストで再配布したりすると、さらに多くのMTAを経由することになる。

 Received:フィールドは、MTAがメールを受け取るたびに、その記録として情報を付け加えるために使われる。このフィールドには、送信元のホストや受信したホスト、MTAのタイプ、受信時間などの情報が含まれている。注意してほしいのは、このフィールドは、送信側が付けるのではなく、「受信した側がヘッダに書き加えていく」ということである。そのため、送信側がいくらメール・アドレスやヘッダなどを偽装しても(送信側がたとえウイルスであっても)、受信した側では、どこのホスト(IPアドレス)からいつ受信したか、といった情報をきちんと記録するようになっているので(通常のメール・サーバはそのように設定されている)、このReceived:フィールドを逆にたどれば、メールの送信経路(発信元)をさかのぼることができる。ただしメーリング・リストを経由する場合は、元のヘッダ情報を削除してしまうことがあるので、そこで追跡できなくなる可能性がある。

メールとReceived:フィールド
MTAはメール・サーバ・システム、MUAはメールを送受信するクライアント・システムのこと。通常のメーラ・ソフトウェアだけでなく、メールを送信するウイルスもMUAの一種となる。メール・サーバは、メールを受信するたびに、その情報をメールの先頭にReceived:フィールドとして記録する。Received:ヘッダはメールが中継されるたびに増えていくことになる。このフィールドの内容を逆にトレースすることにより、メールの送信元を調査することができる。ただしこのフィールドが偽装されていたり、中継途中で削除されたりしている可能性もあるので、必ず送信元を調査できるという保証はない。

 先の例でいえば、最初にメールを送信したソフトウェア(MUA)が作成したヘッダは9行目のFrom:以降である(もともとこれらの情報が欠落している場合は、最初のMTAが付加する場合もある)。そして、最初にメールを受信したMTAの情報、つまり最初にウイルスを送信したホストの情報は、6〜8行目のReceived:フィールドに記述されているということになる。

Received:フィールドに記録される情報

 Received:フィールドには、送信元ホストや受信MTA、受信時刻などの情報が、次の表のような形式で記述される。

書式 必須/
オプション
意味
Received: 必須 Received:フィールドの開始文字列。必ず行の先頭から始めること。パラメータが長い場合は、適宜改行して、先頭に空白もしくはタブ記号を入れて続けられる。以下のオプションは、この順番に記述することが求められている
from <ドメイン> オプション 送信したホストの情報。「送信ホスト名 (FQDN名 [IPアドレス])」という書式で記述されることが多い。どこのホストから送信されたメールかという情報が得られる
by <ドメイン> オプション 受信したホスト(MTA)の情報。「FQDN名 (付加情報)」といった形態の場合が多い
via <文字列> オプション 送受信手段(Webメール経由かそうでないか)などの情報。ほとんど使われない
with <文字列> オプション メール・プロトコルやMTAのソフトウェアの名称、バージョン番号などの情報。この「with …」は1つのReceived:フィールド中で複数回使われることがある。具体的なMTAの文字列としては、SMTP/ESMTP(sendmailなど)やMicrosoft SMTPSVC(Exchange)といったものがある
id <メッセージID> オプション 受信者側がメッセージに付ける固有のID(Message-ID)。通常Message-IDは送信側の最初のMTAが付加するが、各MTAが個別に管理用のIDを割り当てる場合もある。このIDを元にメール・サーバのログを探せば、メールの中継記録などが得られる(可能性がある)
for <アドレス> オプション オリジナルのあて先メール・アドレス。途中でメーリング・リストを通ったり、別のアドレスへフォワード(転送)されたりすると、メール・ヘッダ中で指定した最初のTo:やCc:などとは異なるメール・アドレスへ送信されることがある。そういう場合に、元のあて先メール・アドレスを記録しておくために利用する
; <時刻> 必須 受信した時刻。日本の場合なら、最後に「+09:00」や「+09:00 (JST)」「(JST)」を付けて(GMTからの時差が+9時間ということ)、日本時間であることを表すことが多い
Received:フィールドにおける書式
Received:キーワードに続いて、これらの情報を記述することにより、詳細な中継の記録がメールに残される。ただしほとんどのキーワードはオプションであり、その書式もMTAによってさまざまである。必須なのは(必ず利用できると当てにしてよいのは)時刻パラメータだけである(新しい規格では、fromとbyも必須としている)。

 Received:フィールドには、この表のようなパラメータが、(基本的には)この表の順番で記述される。ただしこれらのパラメータはほとんどが必須ではなく、必ず存在しているという保証があるのは時刻のデータだけである。そのほかのパラメータは、MTAの種類によって大きく異なるし、その記述方法も統一されているわけではない。もともとこのReceived:フィールドは(メール中継の)デバッグのために利用されていたようであり、基本的には人間がその内容を参考として読み取ることを前提としている。だがほとんどのMTAでは、少なくとも「from …」と「by …」程度は記録してくれるので、これを頼りに、最初の送信元を特定できることが多い。

Received:フィールドの例

 ここで先ほどの例に戻ってみよう。結局、最初に付けられたReceived:フィールドは、6〜8行目であることが分かる(時間的にも、一番始めになっている)。これを抜き出して、1行にまとめると次のようになっている。

Received: from XXXDOMAIN.JP (pXXXX-ipadXXXXXXXXX.tokyo.ocn.ne.jp [NN.NN.NN.NN]) by mail.XXXDOMAIN.JP (Postfix) with ESMTP id 9FCEFD80DA for <INFO@XXXDOMAIN.JP>; Sun,  4 Apr 2004 15:46:36 +0900 (JST)

 この中の「from XXXDOMAIN.JP (pXXXX-ipadXXXXXXXXX.tokyo.ocn.ne.jp [NN.NN.NN.NN])」に注目していただきたい。これが最初にメールを送信してきたホストの情報である。最初の「XXXDOMAIN.JP」の部分は、メール送信のクライアントが提示することもある(SMTPの「HELO/EHLO」コマンドで指定するパラメータのことが多い)。従って偽装の可能性もあるので、あまり当てにはならない(ホスト名を特定する参考にはなるが)。

 その直後にある「(pXXXX-ipadXXXXXXXXX.tokyo.ocn.ne.jp [NN.NN.NN.NN])」の部分は、一般的には「(FQDN名 [IPアドレス])」や「([IPアドレス])」となっている。大事なのは「IPアドレス」の部分である(FQDN名の部分には、このIPアドレスを逆引きしたものが入っていることが多い)。これが送信元のホストのIPアドレスを表している。つまりこの場合は、「NN.NN.NN.NN」というIPアドレスからウイルス・メールが送信されていることになる。

 もっともこのIPアドレスが直接メールを送信しているホストというわけではなく、一般的にはNATやIPマスカレードを行うファイアウォールなどの(インターネット側の)IPアドレスを表している。だがここまで分かれば、あとはtracertコマンドや(プロバイダや組織に対する)IPアドレスの割り当ての状況などから、どこの組織から送信されているかを特定することもできるだろう(海外からの場合、それ以上はもうどうしようもないが)。End of Article

関連記事(Windows Server Insider)
  Windows TIPS:Outlook Expressでメール・メッセージのソース情報(ヘッダ情報)を表示する
     
「Windows TIPS」

@IT Special

- PR -

TechTargetジャパン

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

イベントカレンダー

PickUpイベント

- PR -

アクセスランキング

もっと見る

ホワイトペーパーTechTargetジャパン

注目のテーマ

Windows Server Insider 記事ランキング

本日 月間
ソリューションFLASH