理論的に考えて、相手のIPアドレスがわからなければ通信を行う事ができないので、IPを偽装する事は100%不可能だ。
今までそう思っていたが、ここに思わぬ抜け道がある事に最近気づいた。
※プロキシーサーバーはどちらかというと踏み台なので、ここでは偽装に含めない事にします。
まず、これを見て欲しい。
これは、サーバー管理者が見るアクセスログ。
XXXXmarunouchi.tokyo.ocn.ne.jp
- "" [21/Feb/2010:21:06:01 +0900] "GET / HTTP/1.1" 401 401
一般的にアクセスログはIPアドレスでなく、接続元のホスト名(名前)で記録される事が多い。
相手がこのWebサーバーに接続した時、接続元IPの逆引きを行って、出てきた結果をログに記録する。逆引きができなければIPアドレスを記録するのが一般的だ。
さて、ここで問題なのは、逆引きで出てきた名前の信頼性。
逆引きというのは必ず合っていないと行けないという制約は無いので、例えば192.168.0.1 → detarame.local ですよなんてデタラメな返事をさせる事も可能なのだ。
こんな逆引きの怪しいIPアドレスでWebサーバーにアクセスすると
detarame.local
- "" [21/Feb/2010:21:06:01 +0900] "GET / HTTP/1.1" 401 401
なんてログが残りる。
detarame.local は嘘の名前なので、正引きする事はできず、結局このホスト名が誰なのかわからなくなってしまう。
私たちが普段使っている一般的な家庭向けプロバイダの場合、固定IPにでもしない限り逆引きを任意に設定する事はできませんが、固定IPを利用している場合、デタラメな逆引きを設定する事も可能だ。
厳密にはIPアドレスの偽装ではないが、IPアドレス≒アクセス元 という感覚を持っている人にとっては同じ様な物だ。(「アクセス元のIPどこだろ?」 「xxx.ocn.ne.jpみたいですよ。」というような会話が日常的にあったりして、IP≒アクセス元という感覚が身に付いている。)
少なくとも、この方法はアクセス元の隠蔽としては十分すぎる程機能するだろう。
これに立ち向かうには逆引きをしない生のIPアドレスもログに残す習慣を付けておく必要がありそうだ。