これらのセキュリティ制御は、仮想マシンのセキュリティのベスト プラクティスのベースライン セットを提供します。それらは、制御を実装した場合のメリットとトレードオフを説明する形で構成されています。システムの詳細設定を変更するには、提供される PowerCLI または vSphere Client[ホスト] > [構成] > [システム] > [システムの詳細設定])のいずれかを使用します。

使用される変数

このセクションの PowerCLI コマンドでは、次の変数を使用します。

  • $VM = "virtual_machine_name"

mks.enable3d

潜在的な攻撃ベクトルを減らすために 3D グラフィックス機能を必要としない仮想マシンでは、この機能を無効にし、システム全体のセキュリティを強化します。

インストールのデフォルト値:False
ベースラインの推奨値:False
必要なアクション
インストールのデフォルト値を監査します。
デフォルト値を変更した場合の潜在的な機能上の影響
なし
PowerCLI コマンドの評価
Get-VM -Name $VM | Get-AdvancedSetting mks.enable3d
PowerCLI コマンドの修正例
Get-VM -Name $VM | Get-AdvancedSetting mks.enable3d | Set-AdvancedSetting -Value FALSE

ethernet*.filter*.name

「dvFilter」ネットワーク API を使用して仮想マシンへのアクセスを制限します。

dvFilter インターフェイスは、ネットワーク トラフィックのフィルタリングと検査を行うために NSX などのツールで使用されます。他のツールで使用することもできます。これらのツールが承認されていることを確認します。

インストールのデフォルト値︰存在しない
ベースラインの推奨値︰存在しない
必要なアクション
インストールのデフォルト値を監査します。
デフォルト値を変更した場合の潜在的な機能上の影響
NSX を含む合法的なネットワーク ツールでは、この機能が必要になる場合があります。
PowerCLI コマンドの評価
Get-VM -Name $VM | Get-AdvancedSetting "ethernet*.filter*.name*"
PowerCLI コマンドの修正例
Get-VM -Name $VM | Get-AdvancedSetting "ethernet*.filter*.name*" | Remove-AdvancedSetting

不正なソースからの仮想マシンの起動の防止

不正なソースから仮想マシンが起動されるのを防止する必要があります。

仮想マシンへの不正アクセスは、プライマリ ブート ボリュームが使用できない場合に、EFI ファームウェアがネットワーク ブートなどの代替の起動ソースを要求すると、発生することがあります。不正アクセスを軽減するには、ネットワーク制御と、bios.bootDeviceClassesbios.bootOrder、および bios.hddOrder の詳細パラメータを使用します。

bios.bootDeviceClasses の形式は「allow:XXXX」または「deny:XXXX」です。XXXX は起動クラスのカンマ区切りリストです。起動クラスは、net(ネットワーク PXE ブート)、usb(接続された USB デバイスからの起動)、pcmcia(現在使用されていない PCMCIA 拡張カード)、cd(接続された仮想 CD/DVD デバイスからの起動)、hd(接続された仮想ハード ディスクからの起動)、fd(接続された仮想フロッピー デバイスからの起動)、reserved(不明なデバイスからの起動)、efishell(EFI シェルへの起動)、all、または any(all と同じ)。

allow または deny を使用すると、暗黙的に反対の動作が指定されます。例:
  • deny:all はすべての起動クラスを禁止します
  • deny:net はネットワーク ブートを禁止しますが、それ以外のすべての起動は許可します
  • allow:hd は HD からの起動のみを許可し、他のすべての起動は拒否します
  • allow:hd,cd は hd からの起動を許可し、次に cd デバイスからの起動を許可して、他のすべての起動を拒否します

新しい仮想マシンでは CD/DVD からの起動が必要になることがありますが、ラボなどの一部の動的環境ではネットワーク ブートが使用される場合があります。これらの環境を適切に設定し、根拠を文書化します。

インストールのデフォルト値︰allow:all
ベースラインの推奨値︰allow:hd(ゲスト OS がインストールされている場合)
必要なアクション
インストールのデフォルト値を変更します。
デフォルト値を変更した場合の潜在的な機能上の影響
仮想マシンは指定されていないソースから起動できなくなり、PXE ブートまたはリカバリ メディアが必要な場合に悪影響を受ける可能性があります。ただし、PowerCLI を使用してパラメータの大規模な変更を簡単に行うことができます。また、「deny:net」のように拒否される方法を指定することもできます。
PowerCLI コマンドの評価
Get-VM -Name $VM | Get-AdvancedSetting bios.bootDeviceClasses
PowerCLI コマンドの修正例
Get-VM -Name $VM | Get-AdvancedSetting bios.bootDeviceClasses | Set-AdvancedSetting -Value "allow:hd"

RemoteDisplay.maxConnections

仮想マシンへのコンソール接続の数を制限します。

仮想マシン コンソールの共有を 1 人のユーザーに制限すると、複数のユーザーに表示されることがなくなるため、セキュリティが強化されます。ただし、サービス拒否の発生経路が誤って作成される可能性があります。

インストールのデフォルト値︰-1
ベースラインの推奨値:1
必要なアクション
インストールのデフォルト値を変更します。
デフォルト値を変更した場合の潜在的な機能上の影響
1 人のユーザーが接続しているか、コンソール セッションの切断状態が維持されているために、サービス拒否状況になって、コンソールが使用できなくなることがあります。VMware Cloud Director などの他の製品では、このオプションを大きな値に設定しなければならない場合があります。
PowerCLI コマンドの評価
Get-VM -Name $VM | Get-AdvancedSetting RemoteDisplay.maxConnections
PowerCLI コマンドの修正例
Get-VM -Name $VM | Get-AdvancedSetting RemoteDisplay.maxConnections | Set-AdvancedSetting -Value 1

PCI デバイス パススルー機能の制限

仮想マシンは、PCI デバイスのパススルー機能を制限する必要があります。

DirectPath I/O 機能を使用すると、仮想マシンはシステム ハードウェアに直接アクセスできるため、vMotion、DRS、High Availability などのリスク軽減ツールに影響します。DirectPath I/O 機能により、攻撃者にハードウェアへの特権アクセスが与えられる可能性もあります。ゲスト OS のセキュリティ制御によって、必要な仮想マシンにのみこの権限が付与されていることを確認します。

インストールのデフォルト値︰存在しない
ベースラインの推奨値︰存在しない
必要なアクション
監査
デフォルト値を変更した場合の潜在的な機能上の影響
GPU などのパススルー デバイスを切断すると、これらのデバイスは悪影響を受けます。これらの仮想マシンのビジネス ニーズを監査して、文書化します。
PowerCLI コマンドの評価
Get-VM -Name $VM | Get-PassthroughDevice
PowerCLI コマンドの修正例
Get-VM -Name $VM | Get-PassthroughDevice | Remove-PassthroughDevice

仮想マシンの不要な仮想ハードウェア デバイスの削除

仮想マシンから不要な仮想ハードウェアを削除する必要があります。

潜在的な攻撃対象を減らすには、仮想マシンから不要な仮想ハードウェアを排除します。使用頻度が極端に低いポート、一時的に使用される CD/DVD ドライブ、および移行によって導入されたハードウェアは脆弱である可能性があります。これらを削除すると、保護された環境にソフトウェアが導入されるリスクや、保護された環境からデータが漏洩されるリスクが減少します。

インストールのデフォルト値︰構成済み
ベースラインの推奨値︰存在しない
必要なアクション
インストールのデフォルト値を変更します。
デフォルト値を変更した場合の潜在的な機能上の影響
CD-ROM デバイスを削除すると、VMware Tools のインストールとメンテナンスに影響する可能性があります。XHCI コントローラを削除すると、一部のゲスト OS のコンソール キーボードとマウスの接続に影響する可能性があります。
PowerCLI コマンドの評価
$VMview = Get-VM -Name $VM | Get-View
$UnnecessaryHardware = "VirtualUSBController|VirtualUSBXHCIController|VirtualParallelPort|VirtualFloppy|VirtualSerialPort|VirtualHdAudioCard|VirtualAHCIController|VirtualEnsoniq1371|VirtualCdrom"

$VMview.Config.Hardware.Device | Where-Object {$_.GetType().Name -match $UnnecessaryHardware} | Foreach-Object {
	$devname = $_.GetType().Name
	Write-Host "$VM`: [WARNING] VM has a $devname device. Please evaluate and consider removing." -ForegroundColor Yellow
}
PowerCLI コマンドの修正例
該当なし
vSphere Client で場所を設定する
[仮想マシン] > [設定の編集] > [仮想ハードウェア]

tools.guestlib.enableHostInfo

仮想マシンがハイパーバイザーに関するホスト情報を取得できないようにします。

仮想マシンがハイパーバイザーに関するホスト情報を取得できないようにすると、攻撃者にとって重要な、物理ホストに関する詳細の取得が拒否されるため、高度な攻撃を受けるリスクが軽減されます。

インストールのデフォルト値:False
ベースラインの推奨値︰False または未定義
必要なアクション
インストールのデフォルト値を監査します。
デフォルト値を変更した場合の潜在的な機能上の影響
なし
PowerCLI コマンドの評価
Get-VM -Name $VM | Get-AdvancedSetting tools.guestlib.enableHostInfo
PowerCLI コマンドの修正例
Get-VM -Name $VM | Get-AdvancedSetting tools.guestlib.enableHostInfo | Remove-AdvancedSetting
vSphere Client で場所を設定する
該当なし。VMX ファイルの設定です。

Fault Tolerance の暗号化の設定

仮想マシンでは、Fault Tolerance の暗号化が必要です。

仮想マシンで Fault Tolerance の暗号化を必須にすると、安全なデータ転送が確保されます。デフォルトの暗号化である「任意」を適用すると、vSphere 互換ハードウェアでユビキタス AES-NI がサポートされているため、暗号化される可能性が高くなります。一方、暗号化として「必須」を適用すると、暗号化されていない操作の実行は不確実になります。

インストールのデフォルト値︰ftEncryptionOpportunistic
ベースラインの推奨値︰ftEncryptionRequired
必要なアクション
インストールのデフォルト値を変更します。
デフォルト値を変更した場合の潜在的な機能上の影響
なし
PowerCLI コマンドの評価
(Get-VM -Name $VM).ExtensionData.Config.FtEncryptionMode
PowerCLI コマンドの修正例
$VMview = Get-VM -Name $VM | Get-View 
$ConfigSpec = New-Object VMware.Vim.VirtualMachineConfigSpec
$ConfigSpec.FtEncryptionMode = New-object VMware.Vim.VirtualMachineConfigSpecEncryptedFtModes
$ConfigSpec.FtEncryptionMode = "ftEncryptionRequired" 
$VMview.ReconfigVM_Task($ConfigSpec)
vSphere Client で場所を設定する
[仮想マシン] > [設定の編集] > [仮想マシン オプション] > [暗号化]

isolation.tools.copy.disable

仮想マシンでコンソール コピー操作を無効にします。

仮想マシンでコンソール コピー操作を無効にすると、ユーザーが Web コンソール、VMRC、または別の方法のいずれを使用してアクセスしているかに関係なく、仮想マシンとローカル クライアント間のデータ コピーが禁止されます。

インストールのデフォルト値:True
ベースラインの推奨値︰True または未定義
必要なアクション
インストールのデフォルト値を監査します。
デフォルト値を変更した場合の潜在的な機能上の影響
なし
PowerCLI コマンドの評価
Get-VM -Name $VM | Get-AdvancedSetting isolation.tools.copy.disable
PowerCLI コマンドの修正例
Get-VM -Name $VM | Get-AdvancedSetting isolation.tools.copy.disable | Remove-AdvancedSetting

isolation.tools.paste.disable

仮想マシンでのコンソール貼り付け操作を無効にします。

仮想マシンでコンソール貼り付け操作を無効にすると、ユーザーが Web コンソール、VMRC、または別のコンソールのいずれを使用しているかに関係なく、ローカル クライアントから仮想マシンへのデータ転送がブロックされます。

インストールのデフォルト値:True
ベースラインの推奨値︰True または未定義
必要なアクション
インストールのデフォルト値を監査します。
デフォルト値を変更した場合の潜在的な機能上の影響
なし
PowerCLI コマンドの評価
Get-VM -Name $VM | Get-AdvancedSetting isolation.tools.paste.disable
PowerCLI コマンドの修正例
Get-VM -Name $VM | Get-AdvancedSetting isolation.tools.paste.disable | Remove-AdvancedSetting

isolation.tools.diskShrink.disable

仮想マシンでの仮想ディスクの圧縮を無効にします。

仮想マシンで仮想ディスクの圧縮を無効にすると、ディスクが使用不能になる問題を回避できます。通常、この操作を実行する機能は、ゲスト環境内の管理者以外のユーザーに限定されます。

インストールのデフォルト値:True
ベースラインの推奨値︰True または未定義
必要なアクション
インストールのデフォルト値を監査します。
デフォルト値を変更した場合の潜在的な機能上の影響
なし
PowerCLI コマンドの評価
Get-VM -Name $VM | Get-AdvancedSetting isolation.tools.diskShrink.disable
PowerCLI コマンドの修正例
Get-VM -Name $VM | Get-AdvancedSetting isolation.tools.diskShrink.disable | Remove-AdvancedSetting

isolation.tools.diskWiper.disable

仮想マシンで仮想ディスクのワイプ操作を無効にします。

仮想マシンで仮想ディスクのワイプ操作を無効にすると、ディスクが使用不能になる問題を回避できます。通常、この操作を実行する機能は、ゲスト環境内の管理者以外のユーザーに限定されます。

インストールのデフォルト値:True
ベースラインの推奨値︰True または未定義
必要なアクション
インストールのデフォルト値を監査します。
デフォルト値を変更した場合の潜在的な機能上の影響
なし
PowerCLI コマンドの評価
Get-VM -Name $VM | Get-AdvancedSetting isolation.tools.diskWiper.disable
PowerCLI コマンドの修正例
Get-VM -Name $VM | Get-AdvancedSetting isolation.tools.diskWiper.disable | Remove-AdvancedSetting

isolation.device.connectable.disable

仮想マシンによるデバイスの不正な削除、接続、および変更を防止します。

仮想マシンでデバイスの不正な変更を防止すると、管理者以外のユーザーまたはプロセスによるデバイス設定の接続、切断、調整がブロックされます。この対策を行うことにより、不正アクセスと操作の中断は抑制され、サービス拒否が生じるリスクとデータ漏洩の手段は減少します。

インストールのデフォルト値:True
ベースラインの推奨値︰True または未定義
必要なアクション
インストールのデフォルト値を監査します。
デフォルト値を変更した場合の潜在的な機能上の影響
なし
PowerCLI コマンドの評価
Get-VM -Name $VM | Get-AdvancedSetting isolation.device.connectable.disable
PowerCLI コマンドの修正例
Get-VM -Name $VM | Get-AdvancedSetting isolation.device.connectable.disable | Remove-AdvancedSetting

isolation.tools.dnd.disable

仮想マシン コンソールでのドラッグ アンド ドロップ操作を無効にします。

仮想マシンのコンソールでドラッグ アンド ドロップ操作を無効にすると、コンソール タイプに関係なく、仮想マシンとローカル クライアント間でのユーザーのデータ転送が防止されるため、データ セキュリティが強化されます。

インストールのデフォルト値:True
ベースラインの推奨値︰True または未定義
必要なアクション
インストールのデフォルト値を監査します。
デフォルト値を変更した場合の潜在的な機能上の影響
なし
PowerCLI コマンドの評価
Get-VM -Name $VM | Get-AdvancedSetting isolation.tools.dnd.disable
PowerCLI コマンドの修正例
Get-VM -Name $VM | Get-AdvancedSetting isolation.tools.dnd.disable | Remove-AdvancedSetting

tools.setInfo.sizeLimit

仮想マシンから VMX ファイルに渡される情報メッセージを制限します。

仮想マシンの情報メッセージを VMX ファイルに制限すると、メッセージがデフォルト サイズの 1 MB を超えることはなくなります。このオプションは、データストアがいっぱいになった場合に発生する可能性のあるサービス拒否状況を防止します。

インストールのデフォルト値︰1048576
ベースラインの推奨値︰1048576 または未定義
必要なアクション
インストールのデフォルト値を監査します。
デフォルト値を変更した場合の潜在的な機能上の影響
なし
PowerCLI コマンドの評価
Get-VM -Name $VM | Get-AdvancedSetting tools.setInfo.sizeLimit
PowerCLI コマンドの修正例
Get-VM -Name $VM | Get-AdvancedSetting tools.setInfo.sizeLimit | Remove-AdvancedSetting

ログの有効化

仮想マシンでは、診断ログを有効にする必要があります。

仮想マシンの診断ログは、フォレンジックとトラブルシューティングに役立ちます。

インストールのデフォルト値:True
ベースラインの推奨値:True
必要なアクション
インストールのデフォルト値を監査します。
デフォルト値を変更した場合の潜在的な機能上の影響
なし
PowerCLI コマンドの評価
Get-VM -Name $VM | Where {$_.ExtensionData.Config.Flags.EnableLogging -ne "True"}
PowerCLI コマンドの修正例
$VMview = Get-VM -Name $VM | Get-View 
$ConfigSpec = New-Object VMware.Vim.VirtualMachineConfigSpec
$ConfigSpec.Flags = New-Object VMware.Vim.VirtualMachineFlagInfo
$ConfigSpec.Flags.EnableLogging = $true
$VMview.ReconfigVM_Task($ConfigSpec)

log.keepOld

保持される仮想マシン診断ログの数を制限します。

保持される診断ログの数を制限することで、診断機能を損なうことなく、データストアがいっぱいになるのを回避します。

インストールのデフォルト値︰10
ベースラインの推奨値︰10 または未定義
必要なアクション
インストールのデフォルト値を監査します。
デフォルト値を変更した場合の潜在的な機能上の影響
なし
PowerCLI コマンドの評価
Get-VM -Name $VM | Get-AdvancedSetting log.keepOld
PowerCLI コマンドの修正例
Get-VM -Name $VM | Get-AdvancedSetting log.keepOld | Remove-AdvancedSetting

log.rotateSize

仮想マシン診断ログのサイズを制限します。

仮想マシンの診断ログのサイズを制限すると、特に長時間実行される仮想マシンで容量が過剰に消費されるのを防ぐことができます。推奨される最小上限値は 2 MB です。

インストールのデフォルト値︰2048000
ベースラインの推奨値︰2048000 または未定義
必要なアクション
インストールのデフォルト値を監査します。
デフォルト値を変更した場合の潜在的な機能上の影響
なし
PowerCLI コマンドの評価
Get-VM -Name $VM | Get-AdvancedSetting log.rotateSize
PowerCLI コマンドの修正例
Get-VM -Name $VM | Get-AdvancedSetting log.rotateSize | Remove-AdvancedSetting

tools.guestlib.enableHostInfo

ゲストにホスト情報を送信する機能を無効にします。

物理ホストに関する詳細を取得するように仮想マシンを構成すると、攻撃者はこの情報を使用してホストに対するさらなる攻撃を通知できるようになります。デフォルトは目的の状態であるため、監査するには、この設定が未設定であることを確認するか、設定されている場合は False に設定されていることを確認します。

インストールのデフォルト値:False
ベースラインの推奨値︰False または未定義
必要なアクション
インストールのデフォルト値を監査します。
デフォルト値を変更した場合の潜在的な機能上の影響
ゲスト OS からホストに関するパフォーマンス情報を取得できない場合、トラブルシューティングが妨げられる可能性があります。
PowerCLI コマンドの評価
Get-VM -Name $VM | Get-AdvancedSetting tools.guestlib.enableHostInfo
PowerCLI コマンドの修正例
Get-VM -Name $VM | Get-AdvancedSetting tools.guestlib.enableHostInfo | Remove-AdvancedSetting

tools.guest.desktop.autolock

リモート コンソールが切断されたときに仮想マシンのゲスト セッションをロックします。

最後のコンソール接続が終了したときに仮想マシンをロックすると、ログインしたコンソール セッションを悪用する攻撃者からの不正アクセスを防止できます。

インストールのデフォルト値:False
ベースラインの推奨値:True
必要なアクション
インストールのデフォルト値を変更します。
デフォルト値を変更した場合の潜在的な機能上の影響
なし
PowerCLI コマンドの評価
Get-VM -Name $VM | Get-AdvancedSetting tools.guest.desktop.autolock
PowerCLI コマンドの修正例
Get-VM -Name $VM | Get-AdvancedSetting tools.guest.desktop.autolock | Remove-AdvancedSetting

vMotion の暗号化の有効化

仮想マシンで vMotion を行うには、暗号化が必要です。

仮想マシンで vMotion の暗号化を必須にすると、安全なデータ転送が確保されます。デフォルトの暗号化である「任意」を適用すると、vSphere 互換ハードウェアで AES-NI が広範にサポートされているために、暗号化される可能性が高くなります。ただし、暗号化として「必須」を適用すると、暗号化されていない操作は禁止されます。

インストールのデフォルト値︰任意
ベースラインの推奨値︰必須
必要なアクション
インストールのデフォルト値を変更します。
デフォルト値を変更した場合の潜在的な機能上の影響
なし
PowerCLI コマンドの評価
(Get-VM -Name $VM).ExtensionData.Config.MigrateEncryption
PowerCLI コマンドの修正例
$VMview = Get-VM -Name $VM | Get-View 
$ConfigSpec = New-Object VMware.Vim.VirtualMachineConfigSpec
$ConfigSpec.MigrateEncryption = New-Object VMware.Vim.VirtualMachineConfigSpecEncryptedVMotionModes
$ConfigSpec.MigrateEncryption = "required"
$VMview.ReconfigVM_Task($ConfigSpec)