Проверка зеркального отображения портов

Область применения: Advanced Threat Analytics версии 1.9

Замечание

Эта статья относится только к развертыванию шлюзов ATA вместо упрощенных шлюзов ATA. Чтобы определить, нужно ли использовать шлюзы ATA, см. статью "Выбор правильных шлюзов для развертывания".

Ниже описан процесс проверки правильной настройки зеркального отображения портов. Для правильной работы ATA шлюз ATA должен иметь возможность просматривать трафик, идущий к контроллеру домена и от него. Основной источник данных, используемый ATA, — это глубокий анализ пакетов сетевого трафика к вашим контроллерам домена и от них. Чтобы ATA видел сетевой трафик, необходимо настроить зеркальное отображение портов. Зеркальное отображение портов копирует трафик из одного порта (исходного порта) в другой (целевой порт).

Проверка зеркального отображения портов с помощью скрипта PowerShell Windows

  1. Сохраните текст этого скрипта в файл с именем ATAdiag.ps1.

  2. Запустите этот скрипт на шлюзе ATA, который требуется проверить. Скрипт генерирует трафик ICMP от шлюза ATA к контроллеру домена и отслеживает этот трафик на адаптере захвата на контроллере домена. Если шлюз ATA видит трафик ICMP с целевым IP-адресом, таким же, как IP-адрес контроллера домена, который вы указали в консоли ATA, он считает, что зеркальное отображение портов настроено.

    Пример запуска скрипта:

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

Проверка зеркального отображения портов с помощью Net Mon

  1. Установите Microsoft сетевой монитор 3.4 на шлюзе ATA, который требуется проверить.

    Это важно

    Не устанавливайте анализатор сообщений Microsoft или любое другое программное обеспечение для отслеживания трафика на шлюзе ATA.

  2. Откройте сетевой монитор и создайте новую вкладку записи.

    1. Выберите только адаптер захвата или сетевой адаптер, который подключен к порту коммутатора, настроенному в качестве назначения зеркального отображения портов.

    2. Убедитесь, что режим P включен.

    3. Нажмите кнопку "Создать запись".

      Снимок экрана диалогового окна Сетевого Монитора Microsoft с кнопкой

  3. В окне фильтра отображения введите следующий фильтр: KerberosV5 ИЛИ LDAP , а затем нажмите кнопку "Применить".

    Снимок экрана диалогового окна Microsoft Network Monitor с областью отображения фильтра, которая показывается.

  4. Нажмите кнопку "Пуск" , чтобы начать сеанс записи. Если вы не видите трафик, идущий к и от контроллера домена, просмотрите конфигурацию дублирования портов.

    Скриншот диалогового окна сетевого монитора Microsoft, на которой показана кнопка

    Замечание

    Важно убедиться, что вы видите трафик на и с контроллеров домена.

  5. Если трафик отображается только в одном направлении, вы должны работать с группами сети или виртуализации, чтобы помочь устранить неполадки с конфигурацией зеркального отображения портов.

См. также