ウイルスやスパムメールでは送信元アドレスなどが偽装されているので、メールアドレスで送信元を特定することは困難である。メールのヘッダには、その送信経路が「Received:」フィールドとして記録されている。これを調査することにより、最初にメールを送信してきたホストを突き止めることができる。
対象:電子メールソフトウェア全般
電子メールのヘッダ部分には、そのメールが途中経由してきた中継サーバを表すための「Received:」というヘッダ情報が付けられている。これを調べることにより、そのメールがどこからやってきたかを知ることができる。
特にウイルス付きのメールなどを受け取った場合に、そのメールを送信しているのは誰か(どういうIPアドレスを持つホストか)ということが分かる。
ウイルス付きメールやスパムメールは、送信者アドレスを偽装するのが普通なので(こうすればメールシステムのフィルタリング設定などをすり抜けやすいから)、メールに書かれている送信者の電子メールアドレスがそのメールを送信しているということはまれである。本当にその本人が送信しているのか、それとも単に送信者アドレスを偽装して送信しているのかを判断するためには、このようなヘッダの詳細なチェックが欠かせない。
メールの送信者がだいたい分かれば、例えばそのメールを送信しているプロバイダや組織に連絡して適切な措置を施してもらうように依頼したり、メールの受信用フィルタなどを設定したりできるだろう。
本Tech TIPSでは、メールヘッダに書かれている情報のうち、「Received:」フィールドの情報に注目して、その意味を解説する。
Tech TIPS「Outlook Expressでメールメッセージのソース情報(ヘッダ情報)を表示する」では、メールの内容を簡単に表示させる方法を紹介した。
この方法を使うと、メールの本文部分以外に、メールヘッダと呼ばれる部分の情報も簡単に調べることができる。このヘッダ部分には、そのメールに関する詳細な情報が記録されているので、メールの解析をする場合には不可欠な情報である。
Outlook Express以外でも、このようなメールのヘッダ部分を確認する手段は用意されていることが多いので、それぞれのメールソフトウェアのヘルプなどで調べて、メールヘッダの情報を表示させてほしい。例えばOutlook 2003ならば、メッセージを選択したうえで、[オプション]メニューを表示させる。すると[メッセージ オプション]ダイアログの下部にメールヘッダ部分が表示される。
以下は、あるメールアドレス宛てに送られてきたウイルス付きメールのヘッダ部分である(赤字の部分は架空の文字列に変更してある。「MM.MM.MM.MM」「NN.NN.NN.NN」はIPアドレス)。このメールアドレスは、連絡用としてWebページ上で公開されているため、スパムメールやウイルス付きメールがよく届く。
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: ……(以下本文。省略)……
上記の「From:」に書かれているアドレス(9行目)は詐称されているのに対して、「To:」に記述されているアドレス(10行目)は正式なメールアドレスである。
この例では、ある1つの公開メールアドレスを組織内で複数のユーザーのメールにフォワード(転送)しているため、通常の個人宛てのメールよりもやや複雑なルートを通ってメールが配信されている。それでも、基本的にはどのようなメールもこのようなヘッダを持っているはずである。手元のメールソフトウェアで確認してほしい。
メールヘッダにはこのように多くの情報が記述されているものの、その基本的なルールは非常に簡単である。
ここでは、「Received:」フィールドに注目してみよう。上の例では、「Received:」(緑色で示している)で始まる行が3行ある(1/3/6行目)。また、それらの行の次の行は、先頭が空白文字なので、これらの行は、つながっているものと解釈される。結局、このヘッダには「Received:」フィールドが3つ含まれていることになる。
インターネット上の電子メールは、メールサーバ間を順番に中継されることによって、最終的な目的地(一般的にはPOPメールサーバ)に届けられる。このような、メールを中継するサーバを「MTA(Message Transfer Agent)」という。
中継の途中でいくつのMTAを経由するかはネットワークの構成によっても変わる。一般的には、メールを送受信する組織ごとに代表となるMTAが1つあるので、最低でも2つのMTAを経由することになる(昔はインターネット上でも複数のMTAを経由してバケツリレー式に転送していた。現在では直接配信することがほとんどである)。
さらに組織内部で複数階層のMTAが構築されていることもあるし、メールをフォワードしたり、メーリングリストで再配布したりすると、さらに多くのMTAを経由することになる。
「Received:」フィールドは、MTAがメールを受け取るたびに、その記録として情報を付け加えるために使われる。このフィールドには、送信元のホストや受信したホスト、MTAのタイプ、受信時間などの情報が含まれている。
注意してほしいのは、このフィールドは、送信側が付けるのではなく、「受信した側がヘッダに書き加えていく」ということである。そのため、送信側がいくらメールアドレスやヘッダなどを偽装しても(送信側がたとえウイルスであっても)、受信した側では、どこのホスト(IPアドレス)からいつ受信したか、といった情報をきちんと記録するようになっている(通常のメールサーバはそのように設定されている)。従って、この「Received:」フィールドを逆にたどれば、メールの送信経路(発信元)をさかのぼることができる。
ただしメーリングリストを経由する場合は、元のヘッダ情報を削除してしまうことがあるので、そこで追跡できなくなる可能性がある。
先の例でいえば、最初にメールを送信したソフトウェア(MUA)が作成したヘッダは9行目のFrom:以降である(もともとこれらの情報が欠落している場合は、最初のMTAが付加する場合もある)。そして、最初にメールを受信したMTAの情報、つまり最初にウイルスを送信したホストの情報は、6〜8行目の「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:」フィールドは、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アドレスの割り当ての状況などから、どこの組織から送信されているかを特定することもできるだろう(海外からの場合、それ以上はもうどうしようもないが)。
■この記事と関連性の高い別の記事
Copyright© Digital Advantage Corp. All Rights Reserved.