メールヘッダの Received フィールドの読み方

情報シナジーセンター 水木敬明

1 はじめに --- 差出人情報の偽装は容易? ---

 電子メールの差出人の情報(From フィールド)は,わりと簡単に偽装がで きてしまうことをご存知の方も多いと思います。例えば,普段お使いの Microsoft Outlook Express などのメールリーダ(*1) において,自分の名前の情報やメールアドレスを他 人のものに変更してから送信してみても,多くの場合,(あて)先のアドレスにちゃんと届いてしまいます (*2)。このことは何を示唆してくれるのでしょうか?
 それは,自分が受け取ったメールの中に含まれている差出人の情報を,いつ もそのまま盲信してはいけない,ということになると思います。
 …ちょっとおおげさに書いてしまいましたが,もちろん,ほとんどの場合, いつもやりとりしている相手からのメールであれば,本文の内容からも相手が すぐに確認できますし,毎回「差出人が本物だろうか?」といちいち懐疑的に なる必要はありません。
 注意深くなる必要が生じるのは,見知らぬ相手から本文の内容に全く心当り のないメールが届いたようなときです。あるいは,知っている相手からでも, 本文の内容が意味不明なメールが届いたようなときにも注意が必要です。これ らのメールが届く原因は,いわゆる spam メールやウイルスメールである場合 がほとんどでしょう。もしあなたがそのようなメールを受け取った場合には, 勢いにまかせてそのメールの差出人に苦情を言う前に,少し冷静になって,

「差出人の情報は常に偽装されている可能性がある」

ということぜひ思い出していただければ幸いです。もしも偽装されている差出 人の情報をそのまま正しいと信じ込んで,その差出人に苦情を言ってしまうと, 全くのぬれぎぬの人に文句を言ってしまうことになり,(経験上から言えるこ とですが)問題が余計に複雑になってしまうことが強く予想されます。
 例として,次のようなメールが花子さんに届いた場合を 考えてみることにしましょう。

Subject: Mail Delivery System (hanako@ex.tohoku.ac.jp)
From: taro@rei.topic.ad.jp
To: hanako@ex.tohoku.ac.jp
Date: Tue, 8 Mar 2005 17:32:54 +0900


Mail Delivery Failure - This mail couldn't be shown.


------------- failed message -------------
2,mnqxZk,jgsdf:YE#0yB.+sgH| -JNqMd9n#OC,SQ-
V-8&6W0KtK|LGB06c2Y,9.Zutqn0pIoG..gBB5Lmga+W
nKrGhk+F|hS2aY'3i44+asdfLj_6nd4LXQtyt.USYfP


Note: Received message has been sent as a binary file.

 花子さんのメールアドレスは hanako@ex.tohoku.ac.jp です。こ のアドレスが(あて)先(To フィールド)に セットされていますね。実はこのメールは,Netsky.Q というワーム(*3)で,いわゆるウイルスメールです。花子さんは,この メールを自分のメールリーダで受信して,ウイルスメールであることに気付き ました。そして,差出人の情報,すなわち From フィールドを見てみると,

From: taro@rei.topic.ad.jp

となっているので,taro@rei.topic.ad.jpというアドレスの持ち 主である太郎君に文句を言ってやろうと思いました。しかし,ここで花子さん は冷静になる必要があります。一番最初に述べましたように,From フィール ドは常に偽装されている可能性があります。実際,あるパソコンが Netsky.Q に感染してしまった場合,そのパソコン内のファイルからメールアドレスが抽 出され,それが偽装用差出人アドレスとして From フィールドにセットされま す。今回の例の場合,ウイルスに感染した(太郎君のものではない)パソコン 内のあるファイルに,たまたま太郎君のアドレスが含まれていて,太郎君のア ドレスが差出人にセットされたうえで,その感染パソコンから上記のメールが 発信されたのです。つまり,わかりやすく言うと,太郎君はウイルスメールを 発信した犯人ではなく,アドレスを(かた) られてしまったことになります(*4)
 それでは一体,この花子さんへのメールは,どこから発信されたものなので しょうか? ウイルスメールを発信したパソコンを特定することはできないの でしょうか? このことを知る手掛りとなる情報が,メールヘッダと 呼ばれるものの中に含まれてます。そして特に重要なのが,メールヘッダの中 の Received フィールドです。本稿では,この「Received フィール ド」というものに焦点を絞り,ごく基本的なことについて簡単に説明したいと 思います。Received フィールドの意味を理解できると,メールの本当の発信 者を特定したいときにとても役に立ちます。例えば,上の例にも出てきた Netsky.Q によるウイルスメールでは,Received フィールドを確認することで, ほとんどの場合ほぼ確実に,そのウイルスメールを発信したパソコン(の IP アドレス)を知ることができます。なお,Received フィールドを詳細に解析 しても,やはり限界というものがあり,確実に発信者を追跡できるわけではな いことをあらかじめ申し上げておきます(*5)。ただし, Received フィールドの読み方を知っているのと知らないとでは,得られる情 報に関して,極めて大きな差があることには疑いの余地がありません。
 以下本稿の構成は次の通りです。まず 2 節において,メールヘッダとは何 かについて説明します。次に 3 節において,Outlook Express を例に取りメー ルヘッダの表示の仕方を紹介します。次に 4 節において,Received フィール ドの読み方について説明します。最後に 5 節でまとめます。

2 メールヘッダとは

 本稿の目的は Received フィールドの読み方を説明することですが,そのた めに,本節では Received フィールドが含まれる「メールヘッダ」について簡 単に説明したいと思います。
 一般に,受信したメールをメールリーダで読む場合,メールリーダはメール の全て(*6) を表示するわけではなく,必要な部分だけ を取り出してユーザに対し表示しています。つまり,普段メールを読んでいる とき,実は直接ユーザには見えない部分が存在しています。少しわかりづらい と思いますので,具体的な例を挙げて説明しましょう。メールメッセージは一 般に次のような形をしています。

Received: from mx.rei.topic.ad.jp ([202.211.0.xx])
    by mail.ex.tohoku.ac.jp; Wed, 9 Mar 2005 16:29:14 +0900
Received: from pc1.rei.topic.ad.jp ([202.211.0.yy])
    by mx.rei.topic.ad.jp; Wed, 9 Mar 2005 16:29:02 +0900
X-Mailer: Michinoku Message Reader 0.49
Message-Id: <200503090729.j227SNHK090219.taro@rei.topic.ad.jp>
Subject: tomorrow's meeting
From: taro@rei.topic.ad.jp
To: hanako@ex.tohoku.ac.jp
Date: Wed, 9 Mar 2005 16:28:23 +0900

明日の研究打ち合わせは何時から始めましょう?
太郎より

アルファベットの列とコロン,あるいは空白で始まる 1 行目から 10 行目は, ヘッダと呼ばれる部分です。ヘッダの次に空白行(11行目)があり,その後ろ にメッセージ本体(12行目と13行目)が続きます。私たちがメールリーダで一 番よく目にするのは,もちろん(この例では下から2行分の)メーセージ本体 ですね。その他,件名(Subject フィールド),差出人(From フィールド), (あて)先(To フィールド),および日付 (Date フィールド)あたりの情報が,メールリーダによって表示されている と思います。一方,普段あまり目にしないものとして,Received フィールド や X-Mailer フィールドなどがあります。つまり,メールリーダは,ヘッダの 中から必要と思われるフィールドだけを取り出して,メッセージ本体とともに ユーザに表示してくれているのです。そして実は,ヘッダの隠れている部分に, 有益な情報が潜んでいることがあるのです。

3 メールヘッダの表示の仕方

 本節では,Microsoft Outlook Express を例に取って,(いつもは隠れてい る)メールヘッダを表示する方法を説明します(*7)


図 1: [プロパティ]を選択

 まず,Outlook Express において,受信トレイを開きましょう。次に,図 1 の通りに実行しましょう。すなわち,ヘッダを表示したい目的のメールの上で 右クリックを実行し,プルダウンメニューを出し,その中から[プロパティ] を選択します。そうすると,図 2 の左側のようなウィンドウが表示されます。 そこで,[詳細]タブをクリックすると,図 2 の右側ように,めでたくメー ルヘッダが表示されるはずです(*8)


図 2 : [詳細]タブをクリック

 なお,メールのプロパティを開く別な方法として,受信トレイから目的のメー ルを開き,[ファイル]→[プロパティ]と選択することによっても,同じ結 果が得られます。
 Outlook Express 以外のメールリーダをお使いの方は,それぞれのマニュア ルでヘッダの表示法をご確認いただければ幸いです。

4 Received フィールドの読み方

 本節では,いよいよ Received フィールドの中身を実際に見ていきましょう。
 最初に,2 節で出てきたメールをもう一度例に取って,Received フィール ドを見てみることにしましょう。ヘッダの中から,説明に必要な部分として, Received フィールド,From フィールドおよび To フィールドだけを抜き出し てみます。

Received: from mx.rei.topic.ad.jp ([202.211.0.xx])
    by mail.ex.tohoku.ac.jp; Wed, 9 Mar 2005 16:29:14 +0900
Received: from pc1.rei.topic.ad.jp ([202.211.0.yy])
    by mx.rei.topic.ad.jp; Wed, 9 Mar 2005 16:29:02 +0900
From: taro@rei.topic.ad.jp
To: hanako@ex.tohoku.ac.jp

Received フィールドが 2 つあり,From フィールドと To フィールドがそれ ぞれ 1 つずつありますね。そして,Received フィールドはどちらも 2 行に (わた)っていることがわかりますね。例え ば,上のフィールドである 1〜2 行目を見てみると,「Received: 」から始まって「from …」と続いて,改行の後にいくつかの空白か あってから「by …」と続いています。このような「折り畳み」によ り,フィールドを複数行に分割することができます。
 …少し文法的な方向に話が脱線してしまいました。元々の目的である Received フィールドの読み方の解説に戻りましょう。このヘッダ部分 6 行を 眺めることによって,どのようなことがわかるのでしょうか? 簡単に言うと, Received フィールドを見ることによって,メールがどのようなところを経由 して自分まで配送されてきたかがわかります。もう少し具体的には,だんだん 慣れてくると,このヘッダを見ることによって,図 3に描かれているような状 況がすぐに頭に浮かんでくるようになります。


図 3: メールの配送の流れ

図 3 は,太郎君から花子さんへのメールがどのように配送されたかを示して います。太郎君のパソコン pc1.rei.topic.ad.jp (以下では簡単の ため「pc1」と書きます)から発信されたメールは,太郎君が使って いるメールサーバ mx.rei.topic.ad.jp (同様に「mx」と 書きます)と花子さんが使っているメールサーバ mail.ex.tohoku.ac.jp (同様に「mail」と書きます)を 経由して,花子さんに届いています。さて,Received フィールドが 2 つあっ たことを思い出して下さい。下の方のフィールドは,

Received: from pc1.rei.topic.ad.jp ([202.211.0.yy])
    by mx.rei.topic.ad.jp; Wed, 9 Mar 2005 16:29:02 +0900

でしたね。実はこのフィールドは,サーバ(*9) mx が 3 月 9 日(水)の 16 時 29 分 02 秒にメールヘッダに書き 込んだもので,図 3 の矢印(a)に対応する部分のメールの流れを示しています。 つまり,「by …」のところに書かているマシン(この例では mx)が,「from …」のところに書かているマシン(この 例では pc1)からメールを受け取ったことを示しています。また 「from …」のところには,「([202.211.0.yy])」という ふうに,pc1 の IP アドレスも書かれていますね(*10) 。それでは,もう一つの Received フィールド, すなわち上の方のフィールドを見てみましょう。

Received: from mx.rei.topic.ad.jp ([202.211.0.xx])
    by mail.ex.tohoku.ac.jp; Wed, 9 Mar 2005 16:29:14 +0900

もうおわかりかもしれませんが,「by …」のところに記されている マシンが,このフィールドを付けたことになります。つまり,このフィールド はサーバ mail が 16 時 29 分 14 秒に付けたものですね。そして, このフィールドは,「mxmail」というメールの配送を 表しており,図 3 の矢印(b)の部分を示していることは,もう詳しく説明しな くても大丈夫ですね。
 繰り返しになりますが,大事なことは,「by …」にあるマシンが 「from …」にあるマシンからメールを受け取ったということと,そ のフィールドを書いたのは「by …」にあるマシンであるということ です。また,もうお気付きの方もいらっしゃるかと思いますが,ヘッダにおい て,より上にある Received フィールドが,自分からみてより近いところで行 われた配送処理を表わしています。つまり,メールを中継してくれるサーバは, 配送処理を行うたびに,新しい Received フィールドをどんどん上に追加して いくのです(*11) 。図 3 の例の場合も,花子さんに 近い(b)の処理の方が(a)の処理よりも,ヘッダにおいては上にありますよね。
 少しずつ Received フィールドの読み方がわかってきたところで,別な例を 取り上げてみましょう。次のヘッダは,1 節で出てきた Netsky.Q によるウイ ルスメールのものです。

Received: from ex.tohoku.ac.jp (pasokon.example.jp [192.42.103.xx])
    by mail.ex.tohoku.ac.jp; Tue, 8 Mar 2005 17:35:12 +0900
From: taro@rei.topic.ad.jp
To: hanako@ex.tohoku.ac.jp

花子さんは,From フィールドにある太郎君に文句を言う前に,冷静になる必 要があったのでしたね。そこで,Received フィールドを見てみましょう。ひ とつしかないこの Received フィールドは,花子さんのメールサーバ mail が付けたものですね。そして,「from …」のところ を見ると,ex.tohoku.ac.jp からこのウイルスメールを受け取った ように見えますが,一方「pasokon.example.jp [192.42.103.xx])」 というコメント表示もあります。正解を言ってしまうと,このウイルスメール は,192.42.103.xx という IP アドレスを持ち,その逆引きドメイン名が pasokon.example.jp であるパソコンから発信されたものです。 「from …」の直後の「ex.tohoku.ac.jp」は,その感染パ ソコンが自己申告した情報をそのまま記しただけであり,正確なものであると は限らないのです。それに対し,その後ろの括弧内は,サーバ mail が自分で接続元を調べて記したものです。つまり,サーバ mail が 正常であれば,括弧内のコメントは正確なものになります。
 このように,Netsky.Q のようなウイルスメールの場合,ほぼ確実に感染パ ソコンの IP アドレスを特定することができます。ここで大事なことは, 「from …」のあとの括弧内は,「by …」あるサーバが自 分で接続元を調べて記したものであり,信頼性が高いということです(ただし, 過信は禁物です)(*12)
 最後に練習問題をひとつ。花子さんのメールサーバ mail ととも にsmtp.tohoku.jp もウソをつかないとするとき,「太郎君を ruby>(かた)っているのは次郎君(192.42.107.xx) である」ことがわかれば,合格です。

Received: from smtp.tohoku.jp ([192.42.107.yy])
    by mail.ex.tohoku.ac.jp; Tue, 15 Mar 2005 12:12:48 +0900
Received: from hello (jiro.pc.tohoku.jp [192.42.107.xx])
    by smtp.tohoku.jp; Tue, 15 Mar 2005 12:08:23 +0900
From: taro@rei.topic.ad.jp
To: hanako@ex.tohoku.ac.jp

5 おわりに

 本稿では,Received フィールドの説明に焦点を絞り,特に副フィールド fromby を取り上げ,メールヘッダから送信者の情報 を得るための方法を簡単に紹介しました。もし皆さんが試しにヘッダを表示し て,Received フィールドを眺めた場合には,fromby 以外にも,for とか,via とか,with など,別 な副フィールドが見付かり,もっとごちゃごちゃしていることでしょう(*13)。興味がありましたら,それぞれの副フィールドの 意味をご自分で調べてみると面白いと思います。ただし,fromby の意味がわかるだけで,たとえその他の副フィールドを全く無視 しても,かなりの情報が得られることには間違いがありませんので,何か不審 なメールを受け取ったときには,ぜひ試してみてはいかがでしょうか?


(*1) メールを読み書きするためのソフトウェアのこと を指します。MUA (Mail User Agent)と言っても良いと思います。メーラー, メールクライアント,あるいはメールソフトと呼ばれたりもします。
(*2) 実際に本当に届いてしまうかどうかは,偽装用と して選択した差出人アドレスや,使っているメールリーダ,また利用している MTA (いわゆる SMTP サーバ)の設定に依存しますが,いずれにしろ,意味も なく試さないようにして下さいね。
(*3) Netsky.Q は昨年の今頃に大流行しました。遭遇し た方も多いかと思います。今でもまだまだ見かけますので,注意しましょう。
(*4) もちろん,太郎君が犯人ではないとは断言できま せんが…。
(*5) Received フィールド自体も偽装されることがあり ます。
(*6) ヘッダと空白行とメッセージ本体からなる,メー ルメッセージのことです。その他,直接ユーザに見えないものに,エンベロー プがあります。
(*7) 筆者は Outlook Express を使うのは今回が初めて ですので,ここで説明する方法よりもっと良い方法があるかもしれません…。
(*8) さらに[メッセージのソース]をクリックすると, ヘッダを含んだメールメッセージが別のウィンドウで表示されます。
(*9) より正確には MTA です。
(*10) 括弧とその中の値はコメントと呼ばれ,MTA に よって付いたり付かなかったりします。
(*11) そうでなくてはならない決まりはないのですが, 一般的にはそうなっています。
(*12) もちろん,Received フィールド自体が偽装され ているという可能性を否定することはできまません。
(*13) どのような副フィールドやコメントがどのよう に追加されるかについては,それぞれの MTA (とその設定)に依存します。