MacのMACアドレスを偽装する

# 概要

世の中にはMACアドレスでフィルタリングする等のセキュリティ対策がありますが、MACアドレスフィルタリングってMACアドレス偽装されたら意味無さそう？と思ったので、そもそもMacアドレスの偽装が出来るかどうか調べました。

タイトルは「MacでMACアドレスを偽装する」になっていますが、多分Mac以外でも動きます。(未検証)

# 注意

悪用、ダメ。ゼッタイ。
[不正アクセス行為の禁止等に関する法律](http://law.e-gov.go.jp/htmldata/H11/H11HO128.html)

# 参考サイト
[feross/spoof](https://github.com/feross/spoof)

# 準備

- node.js のインストール
- `npm install spoof -g`

# 実践

まず `spoof help` とやると下記のオプションがあることがわかります。

```
SpoofMAC - Easily spoof your MAC address in OS X & Linux

Usage:
  spoof list [--wifi]                     List available devices.
  spoof set <mac> <devices>...            Set device MAC address.
  spoof randomize [--local] <devices>...  Set device MAC address randomly.
  spoof reset <devices>...                Reset device MAC address to default.
  spoof normalize <mac>                   Given a MAC address, normalize it.
  spoof --help | -h                       Shows this help message.
  spoof --version | -v                    Show package version.

Options:
  --wifi          Try to only show wireless interfaces.
  --local         Set the locally administered flag on randomized MACs.
```

このオプションから下記のことが出来ることがわかりますので、上から1つずつ試してみます。

- 自分のデバイスで利用可能なMacアドレスの一覧を表示
- 任意のMacアドレスの設定
- ランダムなMacアドレスの設定
- 元のMacアドレスに戻す


## 自分のデバイスで利用可能なMacアドレスの一覧を表示

xx:xx:xx:xx:xx:xx に実際のMacアドレスが入ります。

```
[xxx@xxx]spoof list

- Wi-Fi on device en0 with MAC address xx:xx:xx:xx:xx:xx
- Bluetooth PAN on device en3 with MAC address xx:xx:xx:xx:xx:xx
- Thunderbolt 1 on device en1 with MAC address xx:xx:xx:xx:xx:xx
- Thunderbolt 2 on device en2 with MAC address xx:xx:xx:xx:xx:xx
- Thunderbolt Bridge on device bridge0 with MAC address xx:xx:xx:xx:xx:xx
```

## 任意のMacアドレスの設定

[MACアドレスっぽいものを生成する](http://www.boldweb.jp/genmac/) でダミーMacアドレスを生成して設定してみます。

```
[xxx@xxx]sudo spoof set 1e:5e:d7:e0:b0:bc en0
```

そして、もう一度 `spoof list` をしてみると、Macアドレスが書き換わっていることがわかります。

```
[xxx@xxx]spoof list

- Wi-Fi on device en0 with MAC address xx:xx:xx:xx:xx:xx currently set to 1E:5E:D7:E0:B0:BC
- Bluetooth PAN on device en3 with MAC address xx:xx:xx:xx:xx:xx
- Thunderbolt 1 on device en1 with MAC address xx:xx:xx:xx:xx:xx
- Thunderbolt 2 on device en2 with MAC address xx:xx:xx:xx:xx:xx
- Thunderbolt Bridge on device bridge0 with MAC address xx:xx:xx:xx:xx:xx
```

## ランダムなMacアドレスの設定

```
[xxx@xxx]sudo spoof randomize en0
[xxx@xxx]spoof list

- Wi-Fi on device en0 with MAC address xx:xx:xx:xx:xx:xx currently set to 00:05:69:55:1D:06
- Bluetooth PAN on device en3 with MAC address xx:xx:xx:xx:xx:xx
- Thunderbolt 1 on device en1 with MAC address xx:xx:xx:xx:xx:xx
- Thunderbolt 2 on device en2 with MAC address xx:xx:xx:xx:xx:xx
- Thunderbolt Bridge on device bridge0 with MAC address xx:xx:xx:xx:xx:xx
```


## 元のMacアドレスに戻す

```
[xxx@xxx]sudo spoof reset en0
[xxx@xxx]spoof list

- Wi-Fi on device en0 with MAC address xx:xx:xx:xx:xx:xx
- Bluetooth PAN on device en3 with MAC address xx:xx:xx:xx:xx:xx
- Thunderbolt 1 on device en1 with MAC address xx:xx:xx:xx:xx:xx
- Thunderbolt 2 on device en2 with MAC address xx:xx:xx:xx:xx:xx
- Thunderbolt Bridge on device bridge0 with MAC address xx:xx:xx:xx:xx:xx
```

# まとめ

Macアドレスは簡単に偽装出来ます。しかし、実際にMacアドレスフィルタリングを回避するには許可されているMacアドレスを調べる必要があるので、Macアドレスフィルタリング自体のセキュリティには意味があると思いました。