Neues Networking Feature mit Hyper-V V2 SP1 – ARP Spoofing Prevention
Heute wurde die Fertigstellung von Windows Server 2008 R2 Service Pack 1 bekannt gegeben. Die wichtigsten Neuerungen für den Hypervisor sind sicherlich Dynamic Memory und RemoteFX. Allerdings gibt es noch ein anderes Feature, was kaum jemand wahrgenommen hat: ARP Spoofing Prevention. Was ist das?
ARP Spoofing ist eine Möglichkeit, mit der gefälschte ARP-Pakete an einen Host gesendt werden können. Das kann im schlimmsten Fall dazu missbraucht werden, um damit in die Kommunikation zwischen zwei Hosts unbemerkt einzutreten (man spricht auch von einem “Man-in-the-middle-Angriff”). Mit Service Pack 1 existiert nun die Möglichkeit, dieses für VMs zu unterbinden. Dazu wird der virtuellen Switch mittels WMI-Befehl mitgeteilt, welche IP-Adressen von welcher VM benutzt werden dürfen.
Damit man mit dem Feature experimentieren kann, habe ich hier zwei Powershell Scripts gepostet, mit der man das Feature für eine VM einschalten und auch wieder ausschalten kann. Wichtig ist beim Ausprobieren folgendes: man setzt mit z.B. dem Befehl:
.\Enable_PreventIPSpoofing.ps1 –VM TestVM1 –IPv4 192.168.210.3
das die VM mit Namen TestVM1 nur noch mit der IP –Adresse 192.168.210.3 komunizieren darf. Jetzt würde man erwarten, wenn das System z.B. die IP-Addresse 192.168.210.7 hat, das es nicht mehr kommunizieren kann. Stimmt leider nicht (zumindest nicht sofort). Erst wenn man jetzt die IP-Addresse z.B. auf 192.168.210.10 ändert, ist kein Ping mehr möglich. Nachdem man dann den Befehl:
.\Disable_PreventIPSpoofing.ps1 –VM TestVM1
eingegeben hat, kann man mit der IP 192.168.210.10 auch wieder pingen.
Hier sind nun die beiden Powershell Scripte:
Zum Einschalten Enable_PreventIPSpoofing:
# Usage: Enable_PreventIPSpoofing -VM [-IPv4 ] [-IPv6 ]
Param(
[string] $VM = "",
[string] $IPv4 = "",
[string] $IPv6 = ""
)
$FilterName = "ElementName='" + $VM + "'"
$VirtualMachine = Get-WmiObject -Namespace "root\virtualization"
-Class msvm_computersystem -Filter $FilterName
$switchPort = (($virtualMachine.GetRelated("Msvm_SyntheticEthernetPort") |
% {$_}).GetRelated("Msvm_VmLANEndpoint") | % {$_}).GetRelated("Msvm_SwitchPort") | % {$_}
$switchPort.PreventIPSpoofing = $true
if ($IPv4 -ne "") {
$switchPort.AllowedIPv4Addresses = ($IPv4)
}
if ($IPv6 -ne "") {
$switchPort.AllowedIPv6Addresses = ($IPv6)
}
$switchPort.Put()
und zum wieder Ausschalten Disble_PreventIPSpoofing:
# Usage: Disable_PreventIPSpoofing -VM
Param(
[string] $VM = ""
)
$FilterName = "ElementName='" + $VM + "'"
$VirtualMachine = Get-WmiObject -Namespace "root\virtualization"
-Class msvm_computersystem -Filter $FilterName
$switchPort = (($virtualMachine.GetRelated("Msvm_SyntheticEthernetPort") |
% {$_}).GetRelated("Msvm_VmLANEndpoint") | % {$_}).GetRelated("Msvm_SwitchPort") | % {$_}
$switchPort.PreventIPSpoofing = $false
$switchPort.AllowedIPv4Addresses = $null
$switchPort.AllowedIPv6Addresses = $null
$switchPort.Put()
P.S.: Erfahren habe ich von dem Feature aus dem Sessionmitschnitt VIR310 von der TechEd 2010 North America. Die Session ist hier zu finden “VIR310: Networking and Windows Server 2008 R2 Hyper-V: Deployment Considerations”. Hier findet man ab Minute 31:40 das Thema ARP Spoofing Prevention behandelt. Wer genau hinschaut, findet dann auch sehr ähnliche Scripte im Video. Sie dienten als Vorlagen der obigen Powershell Scripte, die ich nur noch ein kleines bischen verfeinert haben.