Partager via


Valider la mise en miroir de ports

S’applique à : Advanced Threat Analytics version 1.9

Remarque

Cet article est pertinent uniquement si vous déployez des passerelles ATA au lieu de passerelles légères ATA. Pour déterminer si vous devez utiliser des passerelles ATA, consultez Choisir les passerelles appropriées pour votre déploiement.

Les étapes suivantes vous guident tout au long du processus de validation de la mise en miroir de ports correctement configurée. Pour qu’ATA fonctionne correctement, la passerelle ATA doit être en mesure de voir le trafic à destination et en provenance du contrôleur de domaine. La source de données main utilisée par ATA est une inspection approfondie des paquets du trafic réseau à destination et en provenance de vos contrôleurs de domaine. Pour qu’ATA puisse voir le trafic réseau, la mise en miroir de ports doit être configurée. La mise en miroir de ports copie le trafic d’un port (port source) vers un autre port (port de destination).

Valider la mise en miroir de ports à l’aide d’un script Windows PowerShell

  1. Enregistrez le texte de ce script dans un fichier appelé ATAdiag.ps1.
  2. Exécutez ce script sur la passerelle ATA que vous souhaitez valider. Le script génère le trafic ICMP de la passerelle ATA vers le contrôleur de domaine et recherche ce trafic sur la carte réseau de capture sur le contrôleur de domaine. Si la passerelle ATA voit le trafic ICMP avec une adresse IP de destination identique à l’adresse IP du contrôleur de domaine que vous avez entrée dans la console ATA, elle considère que la mise en miroir de ports est configurée.

Exemple d’exécution du 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)

Valider la mise en miroir de ports à l’aide de Net Mon

  1. Installez Microsoft Network Monitor 3.4 sur la passerelle ATA que vous souhaitez valider.

    Importante

    N’installez pas Microsoft Message Analyzer ou tout autre logiciel de capture du trafic sur la passerelle ATA.

  2. Ouvrez le Moniteur réseau et créez un onglet capture.

    1. Sélectionnez uniquement la carte réseau Capturer ou la carte réseau connectée au port de commutateur configuré comme destination de mise en miroir de ports.

    2. Vérifiez que le mode P est activé.

    3. Cliquez sur Nouvelle capture.

      Capture d’écran de la boîte de dialogue Moniteur réseau Microsoft montrant le bouton Nouvelle capture.

  3. Dans la fenêtre Filtre d’affichage, entrez le filtre suivant : KerberosV5 OU LDAP , puis cliquez sur Appliquer.

    Capture d’écran de la boîte de dialogue Moniteur réseau Microsoft avec la zone Filtre d’affichage affichée.

  4. Cliquez sur Démarrer pour démarrer la session de capture. Si vous ne voyez pas le trafic vers et depuis le contrôleur de domaine, passez en revue votre configuration de mise en miroir de ports.

    Capture d’écran de la boîte de dialogue Moniteur réseau Microsoft avec le bouton Démarrer affiché.

    Remarque

    Il est important de vérifier que vous voyez le trafic vers et depuis les contrôleurs de domaine.

  5. Si vous ne voyez le trafic que dans une seule direction, vous devez travailler avec vos équipes de mise en réseau ou de virtualisation pour vous aider à résoudre les problèmes de votre configuration de mise en miroir de ports.

Voir aussi