ARPスプーフィング(アープスプーフィング)、ARPキャッシュ・ポイズニングとは、ARPプロトコルの応答を偽装することにより、LAN上で通信機器のなりすましを行う技法である。
一般的に、攻撃者が攻撃者のIPアドレスを他のホストのIPアドレスに偽装することによって、偽装したホストに向かう通信は攻撃者に送信されてしまう。

ARPスプーフィングをすることによって、攻撃者はネットワークの通信に割りこみ、通信を改ざんし、全ての通信を停止することができる。
この攻撃は、DoS攻撃や中間者攻撃、セッションハイジャックなど次に行う攻撃の布石としても使われる。

この攻撃はARPを使用しているネットワーク内でのみ使用できる。すなわち、攻撃者はローカルネットワークに直接アクセスする必要がある。

日本国内でARPスプーフィングによって許可なく他人の通信を盗聴する行為は、不正アクセス禁止法によって禁じられており、刑事罰を受ける可能性がある。

## 概要

ARPとは、イーサネットにおいて、既知のIPアドレスから未知のMACアドレスを得るためのプロトコルである。

とあるIPアドレス宛にパケットを送信したい場合、まず「このIPアドレスに対応する通信機器はどれか?」という質問を記述したARP要求がブロードキャストで発信され、該当するノードがARP応答で「そのIPアドレスに対応するMACアドレスは私である」とユニキャストで答える。ARPはステートレス・プロトコルである。ARP要求とARP応答の2回の通信によりIPアドレスとMACアドレスの対応付けが実現し、以降はそのMACアドレスを宛先とする通信が行なわれる。

イーサネットのネットワークは、この仕組みによって作成されたARPテーブル(アドレス対照表)を信じる事で成り立っている。ARPの応答を偽装することにより、ネットワーク内のホストのARPテーブル(アドレス対照表)を偽のARPテーブルに上書きできる。ARPには認証がないため、プロトコル内で偽のARPテーブルを検知する手段が存在しない。すなわち、機器のなりすましができてしまい、特にルーターになりすますとLANからWANへの通信をことごとく盗聴することができることになる。
この仕様はARPの脆弱性であり、攻撃者はこの脆弱性を悪用してARPスプーフィングを行う。

一般に、LANに使うハブに、単純なハブではなくスイッチ/ブリッジ機能を持つものを導入すれば、盗聴に対して強固となると言われているが、上記の手法を用いれば、スイッチド・ネットワークにおいてもその危険性は存在する。

## 攻撃の機構

ARPスプーフィングの原理は、ARPのプロトコルに認証がないことを悪用し、なりすましたARPのメッセージをローカルネットワークへ送信することにある。ARPスプーフィングは、ローカルネットワークに直接接続できる端末から攻撃を行う。
攻撃者はルーターや他のホストになりすましをして通信するため、被害者は攻撃者がなりすましをしてるとは気づかずに通信する。

一般的に、攻撃のゴールは、攻撃者のMACアドレスと被害者のIPアドレスを関連づけることである。その結果、被害者への通信は全て攻撃者に送信される。
攻撃者は被害者の通信を傍受し、攻撃の発覚を避けるために本来の通信先へ転送する。中間者攻撃により通信の内容を改ざんし、DoS攻撃により通信の一部または全てを遮断することができる。

## カフェラテ攻撃

ARPスプーフィングの中には、Wi-Fiを経由して攻撃するものも存在する。
カフェラテ攻撃は、Wi-Fiに接続する対象に攻撃する。

攻撃者はWi-Fiに接続し、ARPスプーフィングを行う。対象からの通信は、Airodump-ngなどのLinuxのハッキングツールで対象とのトンネルを作成して傍受する。最後に、Aircrack-ngなどのハッキングツールで対象のWi-FiのWEP鍵を特定し、対象のWi-Fi通信を直接傍受する。

攻撃の名前は、カフェでドリンクを待つ時間で攻撃できてしまうことに由来する。

## 対処法

### 静的ARPエントリー

最もシンプルな対処法は、リード・オンリーの静的なARPキャッシュを使用することである。IPアドレスとMACアドレスの静的な対応表があれば、ホストはARP要求を送信する必要がない。この方法はARPスプーフィングに対するセキュリティは強くなるが、メンテナンスの労力が増える。ネットワーク内に n 台のホストが存在する場合、n 台のホストに n-1 個のエントリーが必要になるため、合計で n-n のエントリーが必要になる。

### 対策ソフトウェアの使用

ARPスプーフィングを検知するソフトウェアは、ARPの応答を相互にチェックする。ARPの応答の異常を検知した場合、ARPをブロックする。この方法はDHCPサーバーで使用できるため、動的IPアドレスと静的IPアドレスのどちらも検知することができる。個人のホストでも運用でき、スイッチや他のネットワーク機器も使用できる。一つのMACアドレスに複数のIPアドレスが紐づけられた場合にARPスプーフィングを検出するが、正しく使用しても一つのMACアドレスに複数のIPアドレスが紐づけられることはある。

AntiARP は、Windowsのカーネルレベルでスプーフィングを防御する。KVMなどの仮想化された環境で、同じホストの異なるゲストの間でのMACスプーフィングを防ぐ機能もある。
イーサネットアダプターの中にはMACやVLANのスプーフィングを防ぐ機能を持つものも存在する。

### OSのセキュリティ

Linuxは未承諾の返信は無視するが、他のマシンからのリクエストに対する返信はキャッシュを更新するために使用する。
Windowsでは、ARPのキャッシュの挙動は以下のレジストリで設定できる。

HKEY\_LOCAL\_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters,
ArpCacheLife,
ArpCacheMinReferenceLife,
ArpUseEtherSNAP,
ArpTRSingleRoute,
ArpAlwaysSourceRoute,
ArpRetryCount

## 適正な利用法

ARPスプーフィングはネットワークの冗長性を改善することにも利用できる。不具合のあるサーバーがある場合に、ARPスプーフィングを行うことによってバックアップサーバーに転送するソフトウェアが存在する
。

ARPスプーフィングは開発のデバッグにも利用される。ホストAとホストBの間の通信を確認したい場合、ARPスプーフィングを行うことによって、中間者攻撃と同じくホストAとホストBの間の通信を監視することができる。

## ツール

### 防衛用のツール

アクティブ:ビーコンを出す、
パッシブ:ビーコンを出さない

| 名前 | OS | GUI | 無料 | 防御 | 分割されたインターフェース | アクティブ/パッシブ | 備考 |
| --- | --- | --- | --- | --- | --- | --- | --- |
| Agnitum Outpost Firewall | Windows | Yes | No | Yes | No | パッシブ |  |
| AntiARP | Windows | Yes | No | Yes | No | アクティブ + パッシブ |  |
| Antidote | Linux | No | Yes | No | ? | パッシブ | Linux daemon、対応表を監視、たまに大量のARPパケット |
| Arp\_Antidote | Linux | No | Yes | No | ? | パッシブ | Linux Kernel Patch for 2.4.18 – 2.4.20, 対応表を監視、 検知したときに行動を決定できる |
| Arpalert | Linux | No | Yes | No | Yes | パッシブ | 事前にMACアドレスのリストを作成し、リストに存在しないMACアドレスを検出 |
| ArpON | Linux | No | Yes | Yes | Yes | アクティブ+パッシブ | 動的ネットワークと静的ネットワーク、ハイブリッドネットワークで動作するポータブルハンドラーデーモン |
| ArpGuard | Mac | Yes | No | Yes | Yes | アクティブ+パッシブ |  |
| ArpStar | Linux | No | Yes | Yes | ? | パッシブ |  |
| Arpwatch | Linux | No | Yes | No | Yes | パッシブ | IPアドレス-MACアドレス対応表を記録、対応表に変更があればシステムログやメールで通知 |
| ArpwatchNG | Linux | No | Yes | No | No | パッシブ | IPアドレス-MACアドレス対応表を記録、対応表に変更があればシステムログやメールで通知 |
| Avast Premium Security | Windows、Mac | Yes | No | Yes | No | アクティブ + パッシブ | 無料版は検知しない |
| Colasoft Capsa | Windows | Yes | No | No | Yes | 検知しない。手動でスキャンする |  |
| cSploit | Android (rooted only) | Yes | Yes | No | Yes | パッシブ |  |
| Prelude IDS | ? | ? | ? | ? | ? | ? | Arpスプーフィングのプラグイン。アドレスの基本的なチェックをする |
| Panda Security | Windows | ? | ? | Yes | ? | アクティブ | アドレスの基本的なチェックをする |
| remarp | Linux | No | Yes | No | No | パッシブ |  |
| Snort | Windows/Linux | No | Yes | No | Yes | パッシブ | Snort preprocessor Arpspoof、アドレスの基本的なチェックをする |
| Winarpwatch | Windows | No | Yes | No | No | パッシブ | IPアドレス-MACアドレス対応表を記録、対応表に変更があればシステムログやメールで通知 |
| XArp | Windows, Linux | Yes | Yes (+pro version) | Yes (Linux, pro) | Yes | アクティブ + パッシブ | アクティブにプローブを出して、パッシブでチェックする |
| zANTI | Android (ルート化) | Yes | Yes | No | ? | パッシブ |  |
| NetSec Framework | Linux | No | Yes | No | No | アクティブ |  |
| anti-arpspoof | Windows | Yes | Yes | ? | ? | ? |  |
| DefendARP: | ? | ? | ? | ? | ? | ? | ホストを元にしたARP対応表、公共のWi-Fiに接続するときに使用するためのツール。ARPポイズニングを防御し、偽のARPエントリーを修正する。攻撃者のMACアドレスとIPアドレスを特定する |
| NetCutDefender: | Windows | ? | ? | ? | ? | ? |  |

### 攻撃用のツール

ARPスプーフィング攻撃に使用するためのツール。

日本国内でARPスプーフィングによって許可なく他人の通信を盗聴する行為は、不正アクセス禁止法によって禁じられており、刑事罰を受ける可能性がある。

- Arpspoof (DSniff内のツール)
- Arpoison
- Subterfuge
- Ettercap
- Seringe
- ARP-FILLUP -V0.1
- arp-sk -v0.0.15
- ARPOc -v1.13
- arpalert -v0.3.2
- arping -v2.04
- arpmitm -v0.2
- arpoison -v0.5
- ArpSpyX -v1.1
- ArpToXin -v 1.0
- Cain and Abel -v 4.3
- cSploit -v 1.6.2
- SwitchSniffer
- APE – ARP Poisoning Engine
- Simsang
- zANTI -v2
- elmoCut
- NetSec Framework -v1
- Minary
- NetCut (Also has a defense feature)
- ARPpySHEAR