Del via


Valider portspejling

Gælder for: Advanced Threat Analytics version 1.9

Bemærk!

Denne artikel er kun relevant, hvis du installerer ATA Gateways i stedet for ATA Lightweight Gateways. Hvis du vil finde ud af, om du har brug for at bruge ATA Gateways, skal du se Valg af de rette gateways til din udrulning.

Følgende trin fører dig gennem processen til validering af, at portspejling er konfigureret korrekt. HVIS ATA skal fungere korrekt, skal ATA Gateway kunne se trafikken til og fra domænecontrolleren. Den primære datakilde, der bruges af ATA, er detaljeret pakkekontrol af netværkstrafikken til og fra dine domænecontrollere. Hvis ATA skal kunne se netværkstrafikken, skal portspejling konfigureres. Portspejling kopierer trafikken fra én port (kildeporten) til en anden port (destinationsporten).

Valider portspejling ved hjælp af et Windows PowerShell script

  1. Gem teksten i dette script i en fil med navnet ATAdiag.ps1.
  2. Kør dette script på den ATA Gateway, du vil validere. Scriptet genererer ICMP-trafik fra ATA Gateway til domænecontrolleren og søger efter den pågældende trafik på Capture-NIC'et på domænecontrolleren. Hvis ATA Gateway ser ICMP-trafik med en DESTINATIONS-IP-adresse på samme måde som den DC IP-adresse, du har angivet i ATA-konsollen, anses portspejling for konfigureret.

Eksempel på, hvordan du kører scriptet:

# 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)

Valider portspejling ved hjælp af Net Mon

  1. Installér Microsoft Network Monitor 3.4 på den ATA Gateway, du vil validere.

    Vigtigt!

    Installer ikke Microsoft Message Analyzer eller anden trafikhentningssoftware på ATA Gateway.

  2. Åbn Netværksovervågning, og opret en ny hentningsfane.

    1. Vælg kun hent netværkskortet eller det netværkskort, der er tilsluttet den switchport, der er konfigureret som destinationen for portspejling.

    2. Kontrollér, at P-tilstand er aktiveret.

    3. Klik på Ny hentning.

      Skærmbillede af dialogboksen Microsoft Network Monitor, der viser knappen Ny hentning.

  3. I vinduet Vis filter skal du angive følgende filter: KerberosV5 ELLER LDAP og derefter klikke på Anvend.

    Skærmbillede af dialogboksen Microsoft Netværksovervågning, hvor området Visningsfilter vises.

  4. Klik på Start for at starte hentningssessionen. Hvis du ikke kan se trafik til og fra domænecontrolleren, skal du gennemse konfigurationen af portspejling.

    Skærmbillede af dialogboksen Microsoft Netværksovervågning, hvor knappen Start vises.

    Bemærk!

    Det er vigtigt at sikre, at du ser trafik til og fra domænecontrollere.

  5. Hvis du kun ser trafik i én retning, skal du arbejde sammen med dine netværks- eller virtualiseringsteams for at hjælpe med fejlfinding af konfigurationen af portspejling.

Se også