それは、ARPスプーフィングソフトと呼ばれるツール。スプーフィングとは"なりすまし"という意味。
以下のウェブサイトで入手しました。
Crelia Dragon as Kuchanにある、"ARPP Standard Edition Version 0.1"というツール。
ARP SPOOFING
実験環境は以下の通りです。↓
ルータを介して、A, B, Cの3台のPCが接続されています。
各端末のMACアドレスは、こちらの都合の良いように書き換えました。
この環境において、PC Cより、PC AとPC Bの通信を傍受することを試みます。
ここで少し復習。
LAN内(Ethernet)において各端末が通信を行う際、端末が何を頼りに通信先の端末を特定しているかというと、それはMACアドレスです。
実際の通信において、各端末は宛先MACアドレス・IPアドレス、送信元MACアドレス・IPアドレス等をパケットに付加し、ネットワークに流します。↓
各端末は、送られてきたパケットの宛先MACアドレスが自分のMACアドレスであるかを調べ、宛先MACアドレスと自分のMACアドレスが同じだった場合、パケットを受信します。
宛先MACアドレスと自分のMACアドレスが異なる場合は、パケットを破棄します。
したがって、通信先のMACアドレスがわからなければ通信ができません。そのため、各端末が通信を始める際は、まず通信先のMACアドレスを知る必要があります。
ここで、IPアドレスからMACアドレスを調べるためのプロトコルが登場します。それが"ARP"です。ARPには、ARP要求パケットとARP応答パケットがあります。
まずIPアドレスからMACアドレスを知るためにARP要求パケットをブロードキャストします。ブロードキャストなので、ARP要求パケットはLAN内全ての端末に送信されます。↓
ARP要求パケットで指定さているIPアドレスの端末は、自分のMACアドレスを知らせるためにARP応答パケットを返送します。↓
ARPを利用して、各端末はどのIPアドレスにどのMACアドレスが対応しているかを調べるのです。ただし、通信を行うたびにいちいちARP要求をするのは面倒です。そこで各端末は、ARPテーブルと呼ばれる、IPアドレスとMACアドレスの対応表をしばらくの間保持します。↓
復習終わり。
さて、ARPスプーフィングツール"ARPP"を実際に使用してみました。
結果から言うと、このツールを使用することにより見事通信を傍受することに成功してしまいました。
一体このツールは何をしているのだろうかと思い、調べてみることにしました。
下の画像が、ARPPの起動画面です。↓
使い方としては、まずネットワークカードを選択します。ちなみにここで無線LANを選択するとパケットを傍受することができませんでした。なぜ?
次に、汚染先IP・汚染先が通信するIP欄に傍受したい端末のIPアドレスを入力します。
ここでは、PC AのIPアドレスとPC BのIPアドレスを入力しました。
そして、"開始"をクリックします。
成功すると、ネットワーク情報欄に汚染元MACアドレス、汚染先MACアドレスが表示されます。↓
"ARPP"を起動させた状態で、パケットキャプチャソフト――ここでは"
Ethereal"――を起動して、パケットをキャプチャしてみます。
試しに、PC AからPC Bに向かってPINGを送信してみます。
その様子をPC Cでキャプチャしたものが下の画像です。ほかのパケットも流れていましたが、ここではPINGのみ表示させています。↓
見事にPC AとPC Bの通信が傍受できています。こんな簡単にできるものなんですね。
さて、ARPスプーフィングツール"ARPP"が動作中のPC Cは一体何をやっているかを解析してみたので、発表します。
PC Cはまず、傍受する対象のPC AとPC BのMACアドレスをARPで調べます。↓
PC AとPC Bは素直にARP応答を返してくれます。↓
これでPC Cは、PC AとPC BのMACアドレスを知ることに成功しました。PC Cは、PC A, Bと通信ができるようになったわけです。
次にPC Cは、PC A, Bそれぞれに、嘘のARP応答パケットを送信します。
具体的には、
PC Aに対して"IP:192.168.1.20のMACアドレスはCC:CC:CC:CC:CC:CC"だ!
PC Bに対して"IP:192.168.1.10のMACアドレスはCC:CC:CC:CC:CC:CC"だ!
というARP応答を送りつけます。↓
その結果。PC AとPC BのARPテーブルは書き換えられ、お互いが通信するべき端末をPC Cだと思ってしまうのです。PC A, BのARPテーブルに注目!↓
ここで問題なのは、嘘のARP応答が送りつけられてきたのにも関わらず、PC AとPC Bはそれを信じてしまいました。ARP要求をしたわけでもないのに、です。
つまりARP応答は、常にそれが正しいものだとして受信されてしまうようです。
下の画像は、"ARPP"の"開始ボタン"を押した直後のPC Cのパケットキャプチャ画像です。ARPパケットのみ表示させています。↓
各端末にARP要求をしてMACアドレスを取得し、嘘のARP応答パケットを何度も送りつけているのがわかります。この場合、No.9, 10, 15 ,16が嘘のARP応答ですね。
ARPテーブルが書き換えられたことにより、
PC Aは、PC CのことをPC Bだと勘違いした。
PC Bは、PC CのことをPC Aだと勘違いした。
のです。
その結果、PC AからPC BへのパケットはPC Cへ届きます。それは、宛先MACアドレスがPC Cのものだからです。
同じくPC BからPC Aへのパケットも、PC Cへ届きます。
宛先IPアドレスなんて関係ありません。届く先はMACアドレスです。
PC AからPC B宛のパケットおよびPC BからPC A宛のパケットは、すべてPC Cへ届くのです。
PC AはPC Bへパケットを送信しているつもりでも……、それはPC Cに届きます。↓
しかし、これではPC AとPC Bが通信できません。パケットがPC Cで止まってしまうからです。そこで、PC Cは、PC Aから来たPC B宛のパケットを、PC Bへ転送してやります。↓
その際PC Cは、パケットの送信元IPアドレスをPC AのIPアドレスに偽装します。これでPC Bは、送られてきたパケットの送信元がPC Aだと信じます。パケットの送信元IPとMACアドレスは、PC BのARPテーブルと一致しますから。
PC Cがパケットを転送することで、PC AとPC BはPC Cを介してですが通信できます。もちろんPC AとPC Bは、間にPC Cがいるなんて夢にも思っていません。
PC Cは、PC AとPC Bの通信が見放題です。なぜなら、PC AとPC Bの通信はすべてPC Cを通して行われるからです。↓
このパケット転送も、今回使用しているスプーフィングツール"ARPP"が行ってくれています。
この手口を使えば、パケットの内容を改ざんすることもできます。
PC CはPC Aから送られてきたPC B宛のパケットを受信します。そしてパケットの内容を改ざん!PC Bへそれを転送します。↓
PC Aとルータに対してARPスプーフィングを実行すれば、PC Aのインターネット通信が丸見えです。↓
さて、こんな簡単に通信が傍受できてしまう最大の問題は、何度も言いますがARP応答をそっくりそのまま信じてしまうことです。
ならば、LAN内の各端末にでたらめなARP応答を送ってやれば、ネットワークを混乱におとしめることができるではありませんか。
対策としては、MACとIPの組み合わせを静的に決めておくとか(超面倒くさい)、こまめにARP要求をして正しいARPテーブルを持つとかでしょうか。通信するたびにARP要求をしなくて済むようにARPテーブルがあるのに、それを利用されるとは……。
実験を終えて……
――
axsee談
LAN内のパケットをこんなに簡単に傍受できるとは思わなかったです。
パケットが傍受できたときはうれしかったですが、誰かLAN内でやってるかもと思うとちょっと怖いと思いました。
ただ、この方法では相手のPCが"Ethereal"などを起動していた場合(まぁその確率はかなり低いですが…)傍受しているPCのMACアドレスがばれていまいます。そのため、
以前行ったMACアドレス書き換えと組み合わせて使えば、証拠がかなり消えちゃいます。\(^^)/
ハッカー的なことに興味が出てきてしまった……。
――
scie談
この記事は、悪用されることを目的で書いたのではありません。悪用しないでください。いつ通信が傍受されているのかわかりません。それを分かって頂くためにも、この記事の内容はぜひ知っておいて欲しいと思いました。