WhiteHackerzBlogの目的として、インパクトのある攻撃技術を公開しハッキング技術に興味を持ってもらうということがあります。そこで数あるハッキング技術の中でも手軽にできてインパクトのある手法としてArpSpoofingが挙げられると思いますので、理論と実践方法について紹介させていただきます。
ARPとはなんだろう?
ARPとはAddress Resolution Protocolの略で、IPアドレスからMACアドレスを特定するための通信規約となります。
パケットはIPアドレスに基づき通信するのだとお考えの方も多いかと思いますが、それはインターネットプロトコル上のお話です。
最終的にコンピュータにパケットを送信するためには、MACアドレスが必要となります。
コンピュータはローカルエリアネットワーク内でのEthernetフレームの宛先を、ARPテーブルと呼ばれるIPアドレスとMacアドレスの対応表に基づき判断します。
もしARPテーブルに対応するIPアドレスとMACアドレスの変換レコードが存在しない場合、ARP REQUESTをブロードキャストすることにより、検索します。
つまり「このIPアドレスを使っている人がいたら、MACアドレスを教えてください!」というメッセージをネットワーク内の全てのホストに問い合わせるのです。
そして該当するホストは「それは私です!MACアドレスは〜〜ですよ!」という応答をARP REPLAYにより応答します。
このARP REQUESTとARP REPLAYのやりとりにより、ARPテーブルに新たなレコードを追加することができ、Ethernetフレームのやりとりが可能となるのです。
ARP Spoofingとはなんだろう?
ARPテーブルはARP REPLAYが届いた場合、無条件でARPテーブルを更新します。
この欠点に基づき、ルータとターゲットのARPテーブルを書き換えることにより、なりますましができるというのがARP Spoofingという攻撃手法になります。
想定される状況
LAN内に以下のようなネットワークがあったとします。
victimホストは通常のユーザであり、Routerを介してインターネットに接続しています。
attackerホストは招かれざるユーザであり、RouterかハブにLANケーブルを指されたとか、APをクラックされたとかで、ネットワークに参入したものとします。
Internet | +----------------------+ | Router [192.168.1.1] | +----------------------+ | | +-------+ +-------+ | | +-----------------------+ +--------------------------+ | victim [192.168.1.22] | | attacker [192.168.1.200] | +-----------------------+ +--------------------------+
この時のRouterのARPテーブルは以下のようになっているはずです。
192.168.1.22 | victimのMACアドレス |
192.168.1.200 | attackerのMACアドレス |
attackerはRouterのARPテーブルを書き換える目的で、「192.168.1.22のIPアドレスを持っているのは私です!」とRouterに聞かれてもいないのに、嘘のARP REPLAYを投げます。
victimに正しいARP REPLAYを投げられて、RouterのARPテーブルを正しい情報に書き換えられては困るので、attackerは嘘のARP REPLAYを投げ続けます。
Internet | +----------------------+ | Router [192.168.1.1] | +----------------------+ | | +-------+ +-------+ | | (偽ARP REPLAY) +-----------------------+ +--------------------------+ | victim [192.168.1.22] | | attacker [192.168.1.200] | +-----------------------+ +--------------------------+
偽ARP REPLAYによりRouterのARPテーブルは以下のように汚染されます。
192.168.1.22 | attackerのMACアドレス |
192.168.1.200 | attackerのMACアドレス |
以降、Routerは192.168.1.22宛のパケットも、192.168.1.200宛のパケットもattackerに配送します。
victimマシンにも同じようにARPテーブルを汚染し、Router向けのパケットをattackerに配送するように仕向けます。
これで、attackerはvictimの通信を全て取得することができます。
しかし、このままではvictimにパケットが届かないので、ネットワークの不調を訴えられてしまいます。
そこで、attackerはvictim宛のパケットをvictimに届くようにルーティングを行います。
Internet | +----------------------+ | Router [192.168.1.1] | +----------------------+ | +-------+ | (偽ARP REPLAY) +-----------------------+ +--------------------------+ | victim [192.168.1.22] |---| attacker [192.168.1.200] | +-----------------------+ +--------------------------+ (ルーティングを行う)
これでattackerはvictimの通信を全て傍受することも、書き換えることもできるようになりました。
victimはネットワークの不調をまず感じないでしょう。
実践
#ルーティングを行う sysctl -w net.ipv4.ip_forwad=1 #RouterのARPテーブルを汚染する arpspoof -i eth0 -t 192.168.1.1 192.168.1.22 #victimのARPテーブルを汚染する arpspoof -i eth0 -t 192.168.1.22 192.168.1.1
危険性
DNS、ウェブサイトのなりすまし、セッションハイジャック等の危険性があります。
暗号化されていない通信は全て信用できないといっていいと思います。
対策
ARPテーブルの更新をARP REPLAYで動的に変更するのではなく、静的に管理する方法がありますが、手間がかかるので現実的ではないでしょう。
ARP Spoofing対策が可能なスイッチングハブなども存在するようですが、高価のようです。
もっともよい対策方法はIPv6を使用することです。IPv6ではIPアドレスからMacアドレスの解決をARPではなく、ICMPv6の近隣探索を使用します。
間違っている点、指摘などありましたらコメントをいただけたら幸いです。