フラミナル

考え方や調べたことを書き殴ります。IT技術系記事多め

NICのプロミスキャスモードとは何か?

wireshark

Wiresharkやtcpdumpを利用している際に設定されるプロミスキャスモード(promiscuous mode)とはどんなものかを調べてみた。

プロミスキャスモードとは?

「プロミスキャス」は「無差別の」という意味を持ち、自分宛のデータパケットでない信号も取り込んで処理をすることを示す。

標準の状態においては、ネットワークカードは自分宛のパケットを受信したときにだけ、上位のシステムにその内容を通知するようになっている。例えば、イーサネット用のネットワークカードでは、自分の持つMACアドレス以外へ送信されたパケットを受信してもCPUに対し割り込みをかけず、それを処理しない。(ただし、ブロードキャストなどの例外がある。)

しかし、ネットワークカードにプロミスキャス・モードでの動作を指示しておけば、パケットの宛先に関わらずパケットの到着を上位のシステムに知らせるようになり、上位のシステムは自分宛のパケット以外のデータも全て処理することができるようになる。つまり、プロミスキャス・モードとした場合、そのノードへ届けられるパケット全てを無差別に受け入れるようになる。 プロミスキャス・モード - Wikipedia

たしかに以前勉強した際に、自分自身のMACアドレスに対する通信のみを処理するといったことを見聞きしたのでそことも認識があう。ということはオフィスや家だと、横のマシンの情報が拾えることになる…?(疑問)

-> これはマシンに接続されているのがスイッチングハブなのかリピータハブ(バカハブ)なのかによって異なる。スイッチングハブの場合は、各ポートに接続されているNICのMACアドレスをMACテーブルにて認識しているので、特定のMACアドレスに対する通信は接続しているポートに対してしか送信しない。

しかしリピータハブにはその機構がないため、接続された全ての機器にトラフィックを送信するので別のサーバに対する通信を受け取ることができるようになる。


ちなみにクラウド大手のAWSの公式サイトの記載は見つけられなかったが、クラスメソッド の二次情報をみるとNICでプロミスキャスモードを有効にしても別インスタンスのデータを取得できないとのこと。

VMwareでは仮想スイッチにて無差別モードにてハンドリングが可能。(通常は拒否)

自分自身以外の通信を集める仕組みとは?

そもそも勘違いしたのだが、NICは自分自身宛じゃない通信もすべて受け取る。その中で自分に設定されたMACアドレスのものだけを上位レイヤーに渡す挙動のため、プロミスキャスモードにした場合はそのフィルタを無効化しているだけである。

ただし今現在はスイッチングハブよるL2ネットワークが構成されることが大半なので、現場や職場では他の機器の通信を盗み取るのは難しいだろう。

意図的に他の機器の情報を集めるには?

4つの方法があります。

  1. リピータハブを用意する
  2. スイッチングハブのミラーポートを利用する
  3. タップを利用する
  4. ARPキャッシュポイズニングを使う

具体的にどのようにやるのか?についてはこちらの書籍に詳しく解説がありますので、現場などで使う場合は購入して読み込まれることをお勧めします。