2002/02/05
TCP偽装の話2
TCPは基本的には偽装が困難だと書きました。何故なら、双方向に通信を行っているためです。ところが、ここに裏技があります。その裏技をspoofingと言います。spoofingに関してはあまり細かくは書けませんので、少しだけ説明します。
spoofingは一方向通信で双方向通信に見せかける手法です。前回書いたとおり、サーバは接続されると接続したことを接続した側に返します。このときにシーケンス番号というのを渡します。接続した側はこのシーケンス番号を用いて次のデータを流します。そこでspoofingはまず、接続したいサーバに対して、正しい手順で本当に接続してみます。すると、シーケンス番号が返ってきます。このシーケンス番号を手に入れてしまえば、もう用はありません。次からは偽のデータで接続できるからです。何度も書きますが、双方向接続はIPアドレスとシーケンス番号という方法で実現します。まず、spoofingは自分のIPアドレスではなく、偽のIPアドレスを入れて接続要求を行います。サーバの応答はもちろん偽のIPアドレスに対して返されますから、自分には返ってきません。しかし、先ほどシーケンス番号を取得していましたから、そのシーケンス番号と偽のIPアドレスを入れて、その後のデータを流すことができるのです。無敵じゃないか、と思われるかも知れませんが、このspoofingにはもちろん制限があります。偽のIPアドレスを入れても、そのアドレスのマシンが生きていた場合には、spoofingは失敗してしまうのです。よって、偽のIPアドレスとしては、死んでいるマシンのアドレスを入れなければなりません。そのためspoofingを行う場合は、偽装するマシンを落としておく必要があります。私が自分のWebサーバが落ちたときに最も恐れたのはこのことでした。つまり誰かがspoofingを行うため、私のサーバを偽装するために落としたのではないか、と。幸い、そういう事実はありませんでしたが。
ADSLなどの常時接続を行う人は、spoofingという手段があることは知っておいて損はないでしょう。身に覚えのないことで捕まりたくはないでしょう?


 

Topへ