インフラSE日記

OSS、仮想化、金融工学、ゲーム、ときどきラーメン

ARP REQUSTの挙動について

今更、ネットワークの基本的なことを勉強しています。

その中でも、ARPは基本的な通信プロトコルであるため、どのような挙動をするか実験してみました。

何を今更そんな、という方もいらっしゃるかもしれませんが、ほとんど自分用のメモなので許してください!

 

結論

ARP REQUSTは他のサーバのARPテーブルを書き換えることができる

 

実験内容

仮想マシンVM1, VM2, VM3を使い、イーサネットヘッダの送信元MACアドレス送信先MACアドレスARPヘッダの送信元MACアドレス、送信元IPアドレス送信先MACアドレス送信先IPアドレスを変えながらARP REQUEST(ブロードキャスト)を投げる。ARP REPLYの内容と実際に書き換わったARPテーブルの内容を確認する。

 

通信するプログラムはVM1で実行する。VM1はUbuntu 14.04であり、生ソケットを使うものとする。

 

わかったこと①

イーサネットヘッダの送信元MACアドレスARPに全く影響しない。

 

イーサネットヘッダの送信元MACアドレスをVM1, VM2, VM3のMACアドレスに変更しながら実行してみたが、ARP REPLYに影響はなかった。

 

わかったこと②

ARP REPLYを返すサーバは、ARP REQUESTのARPヘッダに書かれている送信先IPアドレスのサーバである。

 

もともと知りたいIPアドレスに対応するMACアドレスのサーバにARP REPLYを返してほしいため、当たり前の挙動である

 

わかったこと③

ARP REPLYを返したサーバは、ARP REQUESTのARPヘッダに書かれている宛先IPアドレスのサーバのMACアドレスを、ARP REUESTのARPヘッダに書かれている送信元MACアドレスとして学習する

 

つまり、ARP REQUESTを受け取ったサーバは、素直にARP REQUESTを投げたサーバのIPアドレスMACアドレスを素直に学習する

この仕様を使えば、ARP REQUESTでブロードキャストドメイン上に存在するサーバのARPテーブルを改ざんできる

 

下に実験結果をまとめてみます

No.7以降の学習結果を書いていないのはめんどくさくなって実験してないからです

まぁ、ある程度仕様わかったしね、ある程度は大丈夫でしょう

これでARP SPOOFINGには偽のARP REPLYを投げてする方法と、偽のARP REQUETを投げる方法があることがわかりましたね!

 

良い子はARP SPOOFINGなんてやっちゃダメですよ!

 

No. 実行端末 ETH SRC MAC ETH DST MAC ARP SRC MAC ARP SRC IP ARP DST MAC ARP DST IP ETH SRC MAC ETH DST MAC ARP SRC MAC ARP SRC IP ARP DST MAC ARP DST IP VM1 VM2 VM3
1 VM1 VM1 FF:FF:FF:FF:FF:FF VM1 VM1 00:00:00:00:00:00 VM2 VM2 VM1 VM2 VM2 VM1 VM1 VM2のMACアドレスを、VM2のMACアドレスとして学習した VM1のMACアドレスを、VM1のMACアドレスとして学習した 学習していない
2 VM1 VM1 FF:FF:FF:FF:FF:FF VM2 VM1 00:00:00:00:00:00 VM2 VM2 VM2 VM2 VM2 VM2 VM1 VM2のMACアドレスを学習できなかった VM1のMACアドレスを、VM2のMACアドレスとして学習した 学習していない
3 VM1 VM1 FF:FF:FF:FF:FF:FF VM3 VM1 00:00:00:00:00:00 VM2 VM2 VM3 VM2 VM2 VM3 VM1 VM2のMACアドレスを学習できなかった VM1のMACアドレスを、VM3のMACアドレスとして学習した 学習していない
4 VM1 VM2 FF:FF:FF:FF:FF:FF VM1 VM1 00:00:00:00:00:00 VM2 VM2 VM1 VM2 VM2 VM1 VM1 VM2のMACアドレスを、VM2のMACアドレスとして学習した VM1のMACアドレスを、VM1のMACアドレスとして学習した 学習していない
5 VM1 VM2 FF:FF:FF:FF:FF:FF VM2 VM1 00:00:00:00:00:00 VM2 VM2 VM2 VM2 VM2 VM2 VM1 VM2のMACアドレスを学習できなかった VM1のMACアドレスを、VM2のMACアドレスとして学習した 学習していない
6 VM1 VM2 FF:FF:FF:FF:FF:FF VM3 VM1 00:00:00:00:00:00 VM2 VM2 VM3 VM2 VM2 VM3 VM1 VM2のMACアドレスを学習できなかった VM1のMACアドレスを、VM3のMACアドレスとして学習した 学習していない
7 VM1 VM3 FF:FF:FF:FF:FF:FF VM1 VM1 00:00:00:00:00:00 VM2 VM2 VM1 VM2 VM2 VM1 VM1      
8 VM1 VM3 FF:FF:FF:FF:FF:FF VM2 VM1 00:00:00:00:00:00 VM2 VM2 VM2 VM2 VM2 VM2 VM1      
9 VM1 VM3 FF:FF:FF:FF:FF:FF VM3 VM1 00:00:00:00:00:00 VM2 VM2 VM3 VM2 VM2 VM3 VM1      
10 VM1 VM1 FF:FF:FF:FF:FF:FF VM1 VM2 00:00:00:00:00:00 VM2 Gratuitous ARP
11 VM1 VM1 FF:FF:FF:FF:FF:FF VM2 VM2 00:00:00:00:00:00 VM2
12 VM1 VM1 FF:FF:FF:FF:FF:FF VM3 VM2 00:00:00:00:00:00 VM2
13 VM1 VM1 FF:FF:FF:FF:FF:FF VM1 VM3 00:00:00:00:00:00 VM2 VM2 VM1 VM2 VM2 VM1 VM3      
14 VM1 VM1 FF:FF:FF:FF:FF:FF VM2 VM3 00:00:00:00:00:00 VM2 VM2 VM2 VM2 VM2 VM2 VM3      
15 VM1 VM1 FF:FF:FF:FF:FF:FF VM3 VM3 00:00:00:00:00:00 VM2 VM2 VM3 VM2 VM2 VM3 VM3      

 

 

 

そんな感じです。