Kali Linux2022.1 でハッキングラボをつくってみる8 Wiresharkでパケットキャプチャ5 ARPスプーフィング

# はじめに
「ハッキングラボのつくりかた」p.462-487までを参考にした記事となります。
最初に、MACアドレスやARPについてまとめてあります。必要ない場合は、読み飛ばしてください。他の方の記事やサイト、書籍の方が、情報が充実していて正確だと思います・・・。

:::note alert
注意事項
記事で紹介されている行為を他人や団体、インフラなどの許可を得ずに行った場合、犯罪となる可能性が有ります。
あくまでも、記事の内容は情報セキュリティの学習です。読者様の所有・管理の機器、システムでのみ実行してください。
また、読者さまのシステムにトラブルが起きたとしても、私は責任を負いかねます。
:::
# MACアドレスの復習
## MACアドレスの確認コマンド
- Windows

`ipconfig /all`

- Linux

`ifconfig` または　`ip addr` または `ip a`
個人的に、最近のディストリビューションでは、`ifconfig`コマンドよりも`ip`コマンドのほうが推奨されているように思います。`ifconfig`がデフォルトでインストールされていないものもあるし。

## MACアドレスとEthernet
MACアドレスは、OSI参照モデルでのデータリンク層で定義される通信プロトコルEthernetのアドレス。
ローレベルの接続を受け持つ物理的なアドレスで、DHCPサーバーやユーザーによって割り当てられるIPアドレスとは違い、NICに事前に一意に割り当てられている。
ホストには、IPアドレスとMACアドレスを対応させるARPテーブルがあり、IPアドレスをMACアドレスに変換している。対応するMACアドレスが見つからなければ、ネットワーク内にARPリクエストをブロードキャストする。該当するホストが見つかったらARPレスポンスが返される。その対応関係をARPテーブルに追加する。
Ethernetでの通信には、送信元MACアドレス、宛先MACアドレスが必要。Wiresharkで表示されていたのは、厳密には、パケットではなくEthernetのフレームである。
Ethernetフレーム、ARPリクエストはLANを越えることはできない。ルーターで、EthernetフレームからIPパケットを取り出す。そのIPパケットに、ルーターのEthernetヘッダを付加して別のネットワークに送出することで、WANやインターネットとデータをやり取りすることができる。
## ARPテーブルの確認
次のコマンドで確認できる。
- Windows

`arp -a`
または
`arp /a`
- Linux

`arp`

# キャプチャのアプローチのタイプ
## パッシブキャプチャ
通信元、通信先の端末で受動的にキャプチャすること。通信を増加させない。
これを利用する条件として、ほぼ完成されたARPテーブルがあり、パケットが本来の宛先にしか送信されず、自分宛て以外のパケットは流れてこないときが挙げられる。
ポートミラーリング（ある接続ポートの通信をコピーして、別の接続ポートに送信する機能）の接続ポートにWiresharkを起動させた端末をつなげておくことで、キャプチャができる。
これを利用することで、不正なパケットをIDSで探知することもできる。

## アクティブキャプチャ
監視対象のネットワークに人為的な通信を作り出してキャプチャすること。攻撃的なキャプチャ。通信が不自然に増加する。
そのひとつがARPスプーフィング。

# ARPスプーフィング
ARPの仕様を悪用して、ターゲット端末のARPテーブルを書き換える攻撃。
ARPは仕様上、ARPリクエストとARPレスポンスには認証がない。例えば、
端末Aは、自身がARPリクエストを送っていなくても、任意の端末XからのARPレスポンスを受け入れてしまう。
もし、ARPレスポンスに偽のMACアドレス（パケットを盗聴する攻撃者、ここではKaliLiux)を書き込んでおくと、受信する端末Aはそれを信用してARPテーブルを上書きしてしまう。
単に、ARPテーブルを改ざんするだけなら、端末Aからのパケット（フレーム）は、KaliLinuxに流れるだけである。それでは、攻撃される端末Aの利用者に、「インターネットが使えない」と不審に思われる。
次のように３段階にすると、それを回避できる。

1. ターゲットの端末Aに対して、ARPスプーフィングして、ルーターに届くべきパケットを攻撃端末KaliLinuxに届くようにする。
1. ルーターに対してARPスプーフィングして、ターゲットの端末Aに届くべきパケットを攻撃端末KaliLinuxに届くようにする。 
1. 攻撃端末KaliLinuxは、ターゲットの端末Aやルーターから届いたパケットを __転送する__。

要は、Kalilinuxが二者間の通信に割り込んで、パケットをキャプチャする。流れるパケットは双方に転送することでターゲットのユーザーをごまかす。

こういった攻撃を中間者攻撃(MITM attack; Man in the Middle attack)という。

# ARPスプーフィングの準備
ARPスプーフィングによるアクティブキャプチャを実験するネットワーク環境を構築する。
同書p480のネットワーク構成とは違うが、ご容赦の程を。実験には支障なし。
- ターゲット（やられ端末）
Windows10（物理PC) : 192.168.1.17
- 攻撃
KaliLinux : 192.168.1.100(ブリッジアダプター３）　必須
:::note warn
KaliLinuxにNATやホストオンリアダプタをつないでも良いが、どのネットワークを経由してパケットが行き来しているかわからなくなるなど、混乱のもととなるので、注意する。
私の環境では、KaliLinuxのネットワーク環境を、以下の条件で、すでに設定してある。
```config:/etc/network/interfaces
source /etc/network/interfaces.d/*

#The loopback network interface
auto lo
iface lo inet loopback
#eth0
allow-hotplug eth0
iface eth0 inet static
address 192.168.56.2
netmask 255.255.255.0
#eth1
allow-hotplug eth1
iface eth1 inet dhcp
#eth2
allow-hotplug eth2
iface eth2 inet static
address 192.168.1.100
netmask 255.255.255.0
```

```config:/etc/resolv.conf
nameserver 10.0.3.3
```

しかし、この設定のままで、VirtualBox側でアダプタ１，２をオフにしたり、アダプタ１に「ブリッジアダプター」を割り当てても、ネットワークには通じない。

**解決法**
設定ファイル"/etc/network/interfaces"に"gateway 192.168.1.1"を追記する。
```config:/etc/network/interfaces
(略）　
最後に追記する
gateway 192.168.1.1
```
次に、nameserverが10.0.3.3を指定しているから、設定ファイル"/etc/resolv.conf"を別の任意のDNSのアドレスに書き換える。この設定の変更は、Kaliを再起動したらデフォルトに戻ることに注意。
GoogleのDNSサービス8.8.8.8に指定する。
```config:/etc/resolv.conf
#nameserver 10.0.3.3
nameserver 8.8.8.8
```
次のコマンド
```
sudo ifdown eth0
sudo ifdown eth1
sudo systemctl restart networking
sudo ifup eth2
````
を実行することで、ブリッジアダプターの接続のみでネットワークにつなげるようにした。
:::

:::note
同書p.487のコラムには、次のような対処法が掲載されている。どちらかお好きな方法で・・・。
>仮想マシンのネットワーク設定にて、仮想LANアダプターの割当を変更しても、ゲストOSでIPアドレスを確認すると正しいIPアドレスが割り当てられていないことがあります。
（中略）
こういったときには、dnclientコマンドでDHCPから動的IPアドレスを再取得してください。
```
dhclient -r eth0
dhclient eth0
```
:::

攻撃側のKaliLinuxの仮想マシンをシャットダウンした状態で、VirtualBoxの仮想マシン「KaliLinux」の「設定」ウィンドウを立ち上げる。メニューの「ネットワーク」からアダプター1を「ブリッジアダプター」に設定して、「プロミスキャス・モード」を「全て許可」にする。
![Screenshot_20220514_150104.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/535888/ae313703-c4aa-f5cc-fc6a-dfe43109c419.png)

1. kaliLinuxのIPアドレスとルータ、インターネットへの接続を確認する。
```
ip adress 
ping -c 3 192.168.1.1
ping -c 3 8.8.8.8
```
![VirtualBox_kali-linux-2022.1-ipaddress.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/535888/ffa83e94-fc41-7add-a0be-f7fee4139ed7.png)

2 . ターゲットWindows10のARPテーブルを確認する。
powershellかコマンドプロンプトをたちあげて、次のコマンドを実行する。
```
arp -a
```

3 . KaliLinuxのMACアドレスとIPアドレスの確認、`route -n`でルーター(ゲートウェイ）のIPアドレスも確認。
```
ip addr show eth2
route -n
```
![VirtualBox_kali-linux-2022.1-ipaddress_eth2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/535888/d6183e90-b73a-65f4-ddc5-54e6891dd4ea.png)
IPアドレスは192.168.1.100、MACアドレスは、08:00:27:86:50:a3である。

4 .KaliLinuxのIP転送機能を有効にする
```
sudo su -
echo 1 > /proc/sys/net/ipv4/ip_forward
cat /proc/sys/net/ipv4/ip_forward
//1と出力されたらOK
exit
//rootから抜ける
```
5 .ARPスプーフィングのパッケージをインストール
```
sudo apt install dsniff
```
6 .Windows10にWiresharkをインストールしてキャプチャを開始する。
インストール方法は[Wireshark公式サイト](https://www.wireshark.org)などを参考にしてください。

# ARPスプーフィングの実行
ARPスプーフィングを行う。

コマンドでターゲット端末に偽の情報を送る。
```
arpspoof -i eth2 -t 192.168.1.17 192.168.1.1
```
書式は次のようなる。
- -i : KaliLinuxで利用するインターフェースを指定
- -t : <ターゲットのIPアドレス> <書き換えたいIPアドレス> ２つの引数を指定。書き換えたいIPアドレスは、ルーターのIPアドレスにする。

Windows10を確認すると、`arp -a`コマンドの実行で、ルーター（192.168.1.1）のMACアドレス（物理アドレス）が変わったことを確認できた。00:08から始まるMACアドレスは、KaliLinuxのものである。
![2022-05-14.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/535888/cf2405cd-eb46-1578-4fce-a606f9348aac.png)
![2022-05-14 (1).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/535888/2aa59fe5-222a-dfd4-dcac-f2706679293f.png)

今度は、ルーターに対して偽の情報を送る。KaliLinuxで別に端末を起動し、次のコマンドを実行する。
```
sudo arpspoof -i eth2 -t 192.168.1.1 192.168.1.17
```
*-tオプションの、ターゲットのIPアドレスと書き換えたいIPアドレスを先ほどと逆にする。*

wiresharkを起動させて、キャプチャを行う。
![VirtualBox_kali-linux-2022.1-virtualbox-amd64_14_05_2022_17_24_32.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/535888/fe2bcd0c-fea7-578c-88d3-efb4a0707c8c.png)

arpspoofコマンドは、Ctrl+Cを押下して終了。終了時には、正常なARPレスポンスが送られるので、Windows10を確認すると、正常なMACアドレスに戻っている。

# おわりに
ネットワークの設定に手間取りました・・・。
次回は、中間者攻撃のフレームワークMITMfの導入、実験に挑戦しようと思っています。
ですが、このMITMf、さまざまなネット情報や私自身がいままで挑戦した経験にだと、新しいKaliLinux2022.1上で(というより、KaliLinux2018.x以降で)使用することが、難しい状態です（更新されていないため）。また、MITMfの次に同書で紹介されているBeEFを使った攻撃も、MITMfがないと使用できないのです。
うまくMITMf,BeEfが導入できない場合、この２つは先延ばしにして、無線LANのハッキングの実験を行います。ご了承ください。

「ハッキング・ラボのつくりかた」（IPUSIRON)
「図解でわかるネットワークのすべて」（小泉修）

https://e-words.jp/w/ポートミラーリング.html