初期 MAC アドレス、有効な MAC アドレス、「MAC アドレス変更」ポリシー

Share on:

Table of contents

概要

vSphere では仮想スイッチで利用可能なセキュリティポリシーとして以下の3種類があります。これらのセキュリティポリシーを使用することで、MAC アドレスのなりすましのような L2 レイヤーの攻撃からネットワークを保護できます。

ただし、特定のネットワーク構成ではセキュリティポリシーの無効化が必要なケースがあります。セキュリティ機能が適切に構成されないと意図せずシステムに脆弱性を作り込んでしまう可能性もあるため、セキュリティ機能の仕様や動作を理解した上で適切に構成する必要があります。

今回の記事では「MAC アドレス変更」のセキュリティポリシーと、その前提知識としての初期 MAC アドレス・有効な MAC アドレスについて、簡易的な検証も交えつつ実際の動作を確認していきます。

仮想ネットワークアダプタの2種類の MAC アドレス

vSphere の文脈では、仮想ネットワークアダプタの MAC アドレスとして以下の2つを定義しています。

  • 初期 MAC アドレス (Initial MAC Address)
  • 有効な MAC アドレス (Effective MAC Address)

「MAC アドレス変更」のセキュリティポリシーの理解にあたってはこれらの理解が必須になるため、以下それぞれの概要を記載します。

初期 MAC アドレス (Initial MAC Address)

初期 MAC アドレスは、仮想マシンの設定や vmx ファイルで確認できる仮想ネットワークアダプタ自体の MAC アドレスです。

初期 MAC アドレス
初期 MAC アドレスは、アダプタの作成時に割り当てられます。初期 MAC アドレスは、ゲスト OS の外部から再構成できますが、ゲスト OS により変更することはできません。

有効な MAC アドレス (Effective MAC Address)

有効な MAC アドレスは、ゲストOSのネットワークインターフェースで実際に使用される MAC アドレスです。

有効な MAC アドレス
各アダプタには有効な MAC アドレスがあります。これは、送信先 MAC アドレスが有効な MAC アドレスとは異なる着信ネットワーク トラフィックをフィルタリングするために使用します。ゲスト OS は、有効な MAC アドレスの設定に関与し、通常、有効な MAC アドレスを初期 MAC アドレスに一致させます。

分散スイッチの場合には、vSphere Client から分散ポートのランタイム MAC アドレスとして確認が可能です。標準スイッチの場合は GUI では確認できません。

通常は、初期 MAC アドレスと有効な MAC アドレスは一致します。ただし、ゲストOSが OS 内でインターフェースの MAC アドレスを変更した場合には、初期 MAC アドレスと有効な MAC アドレスが一致しない状況となります。

有効な MAC アドレスを変更する

Linux では ifconfig や ip link でインターフェースの MAC アドレスが変更できます。

Windows ではネットワークアダプタの詳細設定から設定できます。

「MAC アドレス変更」セキュリティポリシー

ゲストOSはインターフェースの MAC アドレスを変更できるため、MAC アドレスのなりすましが可能になります。仮想スイッチの「MAC アドレス変更」のセキュリティポリシーにより、OS の MAC アドレスの変更によるなりすましからネットワークを保護することが可能となります。

以下は「MAC アドレス変更」ポリシーを「拒否」に設定した場合の動作を図にしたものです。

通常は初期 MAC アドレスと有効な MAC アドレスは一致しているため、左の仮想マシンのように仮想スイッチのポートステータスはリンクアップとなります。これに対して、OS 側で有効な MAC アドレスを変更した場合は右の仮想マシンのように仮想スイッチのポートステータスがブロックとなります。

MAC アドレス変更による仮想ポートのブロックを見てみる

初期状態として、VDS の分散ポートのランタイム MAC アドレスを確認します。MAC アドレス 00:50:56:96:d4:a1 は仮想ネットワークアダプタと一致している状態です。

Linux ゲスト上で ip link コマンドを使用し、インターフェースのハードウェアアドレスを変更します。ゲストOSからはリンクアップしているように見えています。

この状態でランタイム MAC アドレスを確認すると 00:11:22:33:44:55 に変更されており、ポートがブロックされている状況が確認できます。

また、ESXi の vmkernel.log を見てみるとセキュリティポリシー違反で仮想ポートがブロックされた記録が確認できます。

12022-02-23T07:31:54.479Z cpu6:1351848)cswitch: L2Sec_EnforcePortCompliance:232: [nsx@6876 comp="nsx-esx" subcomp="vswitch"]client SpoofingGuest.eth0 requested mac address change to 00:11:22:33:44:55 on port 0x400006e, disallowed by vswitch policy
22022-02-23T07:31:54.479Z cpu6:1351848)cswitch: L2Sec_EnforcePortCompliance:347: [nsx@6876 comp="nsx-esx" subcomp="vswitch"]client SpoofingGuest.eth0 has policy violations on port 0x400006e. Port is blocked

「MAC アドレス変更」ポリシーを「承諾」にするケース

「MAC アドレス変更」ポリシーを「承諾」にする必要がある代表的なケースとして Windows における NLB のユニキャストモードがあります。

ユニキャストモードの NLB ではネットワークアダプタの MAC アドレスが NLB 用 MAC アドレスに変更されるため、「MAC アドレス変更」ポリシーを「拒否」に設定すると仮想スイッチ側でポートがブロックされます。このため「MAC アドレス変更」ポリシーを「承諾」に設定する必要があります。

セキュリティを考えるとゲストOSによる MAC アドレスの変更が行われない場合は「MAC アドレス変更」ポリシーは「拒否」にするべきなので、「MAC アドレス変更」ポリシーの無効化が必要な場合はポリシーが無効なポートグループを別途作成するなどの対応が望ましいでしょう。

なお、ユニキャストモードの NLB の構成では合わせて「偽装転送」ポリシーを有効にするなどの注意事項もあります。その他の注意事項は以下の KB1556 を参照してください。

おわりに

今回の記事では vSphere の仮想マシンにおける2種類の MAC アドレスの概要、「MAC アドレス変更」ポリシーの動作について見ていきました。

「MAC アドレス変更」ポリシーによりインターフェースの MAC アドレスの変更によるなりすましを防ぐことができますが、Windows のユニキャストモード NLB のような特定のネットワーク構成では無効にする必要があります。ゲストOSによる MAC アドレスの変更が必要となる場合には別途ポートグループを作成して「MAC アドレス変更」ポリシーを無効にするなども可能なため参考になれば幸いです。

参考:標準スイッチでの有効な MAC アドレスの確認方法

標準スイッチでは有効な MAC アドレスも含めて GUI から仮想ポートの状態を確認できませんが、試してみた限りでは esxcli network vm list コマンドで有効な MAC アドレスを表示できるようでした。

 1# esxcli network vm list
 2World ID  Name              Num Ports  Networks
 3--------  ----------------  ---------  --------
 4 1365118  SpoofingGuest             1  Secure Standard Portgroup
 5# esxcli network vm port list -w 1365118
 6   Port ID: 100663407
 7   vSwitch: vSwitch0
 8   Portgroup: Secure Standard Portgroup
 9   DVPort ID:
10   MAC Address: 00:11:22:33:44:55
11   IP Address: 0.0.0.0
12   Team Uplink: void
13   Uplink Port ID: 0
14   Active Filters: