Partilhar via


Validar Espelhamento de Porta

Aplica-se a: Advanced Threat Analytics versão 1.9

Nota

Este artigo só é relevante se implementar ATA Gateways em vez de ATA Lightweight Gateways. Para determinar se precisa de utilizar os ATA Gateways, veja Escolher os gateways certos para a sua implementação.

Os passos seguintes orientam-no ao longo do processo para validar que o espelhamento de porta está configurado corretamente. Para que o ATA funcione corretamente, o ATA Gateway tem de conseguir ver o tráfego de e para o controlador de domínio. A origem de dados principal utilizada pelo ATA é a inspeção aprofundada de pacotes do tráfego de rede de e para os controladores de domínio. Para o ATA ver o tráfego de rede, o espelhamento de porta tem de ser configurado. O espelhamento de porta copia o tráfego de uma porta (a porta de origem) para outra porta (a porta de destino).

Validar o espelhamento de porta com um script de Windows PowerShell

  1. Guarde o texto deste script num ficheiro chamado ATAdiag.ps1.

  2. Execute este script no ATA Gateway que pretende validar. O script gera tráfego ICMP do ATA Gateway para o controlador de domínio e procura esse tráfego na NIC de Captura no controlador de domínio. Se o ATA Gateway vir o tráfego ICMP com um endereço IP de destino da mesma forma que o IP dc endereçado que introduziu na ATA Console, considera que o espelhamento de porta está configurado.

    Exemplo de como executar o 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)
    

Validar o espelhamento de porta com o Net Mon

  1. Instale o Microsoft Network Monitor 3.4 no ATA Gateway que pretende validar.

    Importante

    Não instale o Microsoft Message Analyzer ou qualquer outro software de captura de tráfego no ATA Gateway.

  2. Abra o Monitor de Rede e crie um novo separador de captura.

    1. Selecione apenas o adaptador de rede Capture ou o adaptador de rede que está ligado à porta de comutador que está configurada como o destino do espelhamento de porta.

    2. Certifique-se de que o Modo P está ativado.

    3. Clique em Nova Captura.

      Captura de ecrã a mostrar a caixa de diálogo Monitor de Rede da Microsoft com o botão Nova Captura.

  3. Na janela Filtro de Visualização, introduza o seguinte filtro: KerberosV5 OU LDAP e, em seguida, clique em Aplicar.

    Captura de ecrã a mostrar a caixa de diálogo Monitor de Rede da Microsoft com a área Filtro de Visualização apresentada.

  4. Clique em Iniciar para iniciar a sessão de captura. Se não vir tráfego de e para o controlador de domínio, reveja a configuração do espelhamento de porta.

    Captura de ecrã a mostrar a caixa de diálogo Monitor de Rede da Microsoft com o botão Iniciar.

    Nota

    É importante certificar-se de que vê tráfego de e para os controladores de domínio.

  5. Se apenas vir o tráfego numa direção, deve trabalhar com as suas equipas de rede ou virtualização para ajudar a resolver problemas com a configuração do espelhamento de porta.

See Also