Poortspiegeling valideren
Van toepassing op: Advanced Threat Analytics versie 1.9
Opmerking
Dit artikel is alleen relevant als u ATA-gateways implementeert in plaats van ATA Lightweight-gateways. Zie De juiste gateways voor uw implementatie kiezen om te bepalen of u ATA-gateways moet gebruiken.
De volgende stappen leiden u door het proces voor het valideren van de juiste configuratie van poortspiegeling. ATA werkt alleen goed als de ATA-gateway het verkeer van en naar de domeincontroller kan zien. De belangrijkste gegevensbron die door ATA wordt gebruikt, is grondige pakketinspectie van het netwerkverkeer van en naar uw domeincontrollers. Ata kan het netwerkverkeer alleen zien als poortspiegeling is geconfigureerd. Poortspiegeling kopieert het verkeer van de ene poort (de bronpoort) naar een andere poort (de doelpoort).
Poortspiegeling valideren met behulp van een Windows PowerShell-script
- Sla de tekst van dit script op in een bestand met de naamATAdiag.ps1.
- Voer dit script uit op de ATA Gateway die u wilt valideren. Het script genereert ICMP-verkeer van de ATA-gateway naar de domeincontroller en zoekt naar dat verkeer op de Capture-NIC op de domeincontroller. Als de ATA-gateway ICMP-verkeer ziet met een doel-IP-adres dat hetzelfde is als het DC-IP-adres dat u hebt ingevoerd in de ATA-console, wordt poortspiegeling geconfigureerd.
Voorbeeld voor het uitvoeren van het script:
# ATAdiag.ps1 -CaptureIP n.n.n.n -DCIP n.n.n.n -TestCount n
param([parameter(Mandatory=$true)][string]$CaptureIP, [parameter(Mandatory=$true)][string]$DCIP, [int]$PingCount = 10)
# Set variables
$ErrorActionPreference = "stop"
$starttime = get-date
$byteIn = new-object byte[] 4
$byteOut = new-object byte[] 4
$byteData = new-object byte[] 4096 # size of data
$byteIn[0] = 1 # for promiscuous mode
$byteIn[1-3] = 0
$byteOut[0-3] = 0
# Convert network data to host format
function NetworkToHostUInt16 ($value)
{
[Array]::Reverse($value)
[BitConverter]::ToUInt16($value,0)
}
function NetworkToHostUInt32 ($value)
{
[Array]::Reverse($value)
[BitConverter]::ToUInt32($value,0)
}
function ByteToString ($value)
{
$AsciiEncoding = new-object system.text.asciiencoding
$AsciiEncoding.GetString($value)
}
Write-Host "Testing Port Mirroring..." -ForegroundColor Yellow
Write-Host ""
Write-Host "Here is a summary of the connection we will test." -ForegroundColor Yellow
# Initialize a first ping connection
Test-Connection -Count 1 -ComputerName $DCIP -ea SilentlyContinue
Write-Host ""
Write-Host "Press any key to continue..." -ForegroundColor Red
[void][System.Console]::ReadKey($true)
Write-Host ""
Write-Host "Sending ICMP and Capturing data..." -ForegroundColor Yellow
# Open a socket
$socket = new-object system.net.sockets.socket([Net.Sockets.AddressFamily]::InterNetwork,[Net.Sockets.SocketType]::Raw,[Net.Sockets.ProtocolType]::IP)
# Include the IP header
$socket.setsocketoption("IP","HeaderIncluded",$true)
$socket.ReceiveBufferSize = 10000
$ipendpoint = new-object system.net.ipendpoint([net.ipaddress]"$CaptureIP",0)
$socket.bind($ipendpoint)
# Enable promiscuous mode
[void]$socket.iocontrol([net.sockets.iocontrolcode]::ReceiveAll,$byteIn,$byteOut)
# Initialize test variables
$tests = 0
$TestResult = "Noise"
$OneSuccess = 0
while ($tests -le $PingCount)
{
if (!$socket.Available) # see if any packets are in the queue
{
start-sleep -milliseconds 500
continue
}
# Capture traffic
$rcv = $socket.receive($byteData,0,$byteData.length,[net.sockets.socketflags]::None)
# Decode the header so we can read ICMP
$MemoryStream = new-object System.IO.MemoryStream($byteData,0,$rcv)
$BinaryReader = new-object System.IO.BinaryReader($MemoryStream)
# Set IP version & header length
$VersionAndHeaderLength = $BinaryReader.ReadByte()
# TOS
$TypeOfService= $BinaryReader.ReadByte()
# More values, and the Protocol Number for ICMP traffic
# Convert network format of big-endian to host format of little-endian
$TotalLength = NetworkToHostUInt16 $BinaryReader.ReadBytes(2)
$Identification = NetworkToHostUInt16 $BinaryReader.ReadBytes(2)
$FlagsAndOffset = NetworkToHostUInt16 $BinaryReader.ReadBytes(2)
$TTL = $BinaryReader.ReadByte()
$ProtocolNumber = $BinaryReader.ReadByte()
$Checksum = [Net.IPAddress]::NetworkToHostOrder($BinaryReader.ReadInt16())
# The source and destination IP addresses
$SourceIPAddress = $BinaryReader.ReadUInt32()
$DestinationIPAddress = $BinaryReader.ReadUInt32()
# The source and destimation ports
$sourcePort = [uint16]0
$destPort = [uint16]0
# Close the stream reader
$BinaryReader.Close()
$memorystream.Close()
# Cast DCIP into an IPaddress type
$DCIPP = [ipaddress] $DCIP
$DestinationIPAddressP = [ipaddress] $DestinationIPAddress
#Ping the DC at the end after starting the capture
Test-Connection -Count 1 -ComputerName $DCIP -ea SilentlyContinue | Out-Null
# This is the match logic - check to see if Destination IP from the Ping sent matches the DCIP entered by in the ATA Console
# The only way the ATA Gateway should see a destination of the DC is if Port Spanning is configured
if ($DestinationIPAddressP -eq $DCIPP) # is the destination IP eq to the DC IP?
{
$TestResult = "Port Spanning success!"
$OneSuccess = 1
} else {
$TestResult = "Noise"
}
# Put source, destination, test result in Powershell object
new-object psobject | add-member -pass noteproperty CaptureSource $([system.net.ipaddress]$SourceIPAddress) | add-member -pass noteproperty CaptureDestination $([system.net.ipaddress]$DestinationIPAddress) | Add-Member -pass NoteProperty Result $TestResult | Format-List | Out-Host
#Count tests
$tests ++
}
if ($OneSuccess -eq 1)
{
Write-Host "Port Spanning Success!" -ForegroundColor Green
Write-Host ""
Write-Host "At least one packet which was addressed to the DC, was picked up by the Gateway." -ForegroundColor Yellow
Write-Host "A little noise is OK, but if you don't see a majority of successes, you might want to re-run." -ForegroundColor Yellow
} else {
Write-Host "No joy, all noise. You may want to re-run, increase the number of Ping Counts, or check your config." -ForegroundColor Red
}
Write-Host ""
Write-Host "Press any key to continue..." -ForegroundColor Red
[void][System.Console]::ReadKey($true)
Poortspiegeling valideren met behulp van Net Mon
Installeer Microsoft Network Monitor 3.4 op de ATA Gateway die u wilt valideren.
Belangrijk
Installeer Microsoft Message Analyzer of andere software voor het vastleggen van verkeer niet op de ATA-gateway.
Open Netwerkmonitor en maak een nieuw tabblad voor vastleggen.
Selecteer alleen de Capture-netwerkadapter of de netwerkadapter die is verbonden met de switchpoort die is geconfigureerd als poortspiegelingsbestemming.
Zorg ervoor dat de P-modus is ingeschakeld.
Klik op Nieuwe opname.
Voer in het venster Weergavefilter het volgende filter in: KerberosV5 OR LDAP en klik vervolgens op Toepassen.
Klik op Start om de opnamesessie te starten. Als u geen verkeer van en naar de domeincontroller ziet, controleert u de configuratie van poortspiegeling.
Opmerking
Het is belangrijk om ervoor te zorgen dat u verkeer van en naar de domeincontrollers ziet.
Als u slechts verkeer in één richting ziet, moet u samenwerken met uw netwerk- of virtualisatieteams om te helpen bij het oplossen van problemen met de configuratie van poortspiegeling.