wireshark-fortigate

FortiGate Sniffer Output in Wireshark

()

Fortinet beinhaltet bei ihren FortiGate Appliance den in FortiOS mit eingebauten Packet Sniffer, zur Analyse von Paketweiterleitungen, wie etwa mit Wireshark. Bei umfangreichen Analysen mit der Anwendung von Filtern, zeigt sich die Auswertung in der Console als unkomfortabel.

In diesem Tutorial wird gezeigt, wie unter Linux ein Sniffer Packet Output direkt via Pipe von Wireshark gelesen wird. Falls Wireshark noch nicht installiert sein sollte, wird das Paket für die entsprechende Distribution wie folgt bereitgestellt.

# Fedora
$ sudo dnf -y install wireshark

# CentOS, RHEPL
$ sudo yum -y install wireshark

# Debian, Ubuntu, Linux Mint
$ sudo apt-get install wireshark

Damit Wireshark als non-root User ausführbar wird, ist bei Ubuntu folgender Befehl aus dem Terminal auszuführen.

$ sudo dpkg-reconfigure wireshark-common
sudo dpkg-reconfigure wireshark-common
dpkg-reconfigure wireshark-common

Bei der Auswahl die bei der Wireshark Reconfigartion erscheint, wird YES gewählt, bei i18n Einstellung deutsch ist es JA.

Die Red Hat Distributionen CentOS und Fedora erfordern die folgenden Befehle zur Ausführung, so auch bei Ubuntu.

$ sudo gpasswd -a $USER wireshark
$ sudo usermod -a -G wireshark $USER

Wireshark Sniffer Analyse

Um Wireshark zum Analysier einer FortiGate zu machen, wird der Output von ‚diagnose sniffer packet‘ an Wireshark weitergeleitet. Dazu den Script sdump.pl hier herunterladen und ausführbar machen.

$ chmod +x sdump.pl

Nun wird in einem Terminal eine SSH Verbindung zur Firewall aufgebaut, um den Output direkt via Pipe an Wireshark zu senden.

$ ssh -l   "diag sniffer packet any 'ip' 3 0 l" | ./sdump.pl - | text2pcap - - | wireshark -k -i -

Es wird via SSH der Sniffer auf der FortiGate gestartet, sdump.pl liest Output von STDIN, erzeugt den hexdump 16 Bytes space-delimited, text2pcap formatiert den hexdump in das PCAP Format, um dann den Output in Wireshark einzulesen und zu analysieren.

 Erscheint beim Aufruf von Wireshark folgende Ausgabe:

couldn’t run /usr/bin/dumpcap in child process: Permission Denied.

Wurde bis hier noch nicht neu eingeloggt! Ferner ist wahrscheinlich noch folgende Zuweisung erforderlich.

$ sudo chgrp wireshark /usr/bin/dumpcap
$ sudo chmod +x /usr/bin/dumpcap

 Filter werden zwischen Hochkommata eingebunden, wie folgende Beispiele zeigen.

# Filter Session Initiation Protocol (SIP)
'udp port 5060'

# Capture non-HTTP and non-SMTP traffic
'host www.example.com and not (port 80 or port 25)'

# Die Traffic zum eigenen Rechner ausfiltern.
'host 10.10.10.1 and not host 10.10.10.2'

Der Perl-Script sdump.pl kann im Terminal mit  Copy Paste der folgenden Zeilen angelegt werden, oder hier per Download bereitstellen.

cat > sdump.pl << "EOF"
#!/usr/bin/perl

use strict;
use warnings;

our $help = "
 Usage: $0 <sniffer dump file> 
 Option - (dash) read from stdin
 ex. ssh -l admin \<fortigate ip or fqdn\> \"diag sniffer packet any 'ip' 3 0 l\" | $0 - | text2pcap - - | wireshark -k -i -
\n";

our $sdump;
our ($input) = $ARGV[0];

if (not defined $input) {
  die "$help\n";
}

if ( -e $input ) {
        open  ($sdump, qq(\x3C), $input);
} elsif ( $input =~ /^-$/ ) {
        $sdump = *STDIN;
} else {
        die "\nError in open dump $input may not exist or unable to read!\n $help";
}

while (<$sdump>) {
        if ( /^\d+-\d+-\d+\s+\d+:\d+:\d+\.\d+/ ) {
                our ($date, $time) = /^(\d+-\d+-\d+)\s+(\d+:\d+:\d+\.\d+)\s+/;
                print $date . qq(\x20) . $time . "\n";
        } elsif ( /^$/ ) {
                print;
        } elsif ( /^0x/ ) {
                s/0x/00/;
                s/^(\w+)\s+(.*)\t(.*)/$1 $2/;
                our ($hex, $x1, $x2, $x3, $x4, $x5, $x6, $x7, $x8, $null) = split ' ';
                print $hex . '  ';
                foreach our $out ( $x1, $x2, $x3, $x4, $x5, $x6, $x7, $x8 ) {
                        if ( $out ) {
                                substr $out, 2, 0, qq(\x20);
                                print $out . qq(\x20);
                        }
                }
                print "\n";
        }
}
EOF

Die Script Datei sdump.pl verschiebt man nun nach /usr/bin als sdump, und wird ausführbar gemacht.

$ sudo mv sdump.pl /usr/bin/sdump
$ sudo chmod 755 /usr/bin/sdump

Jetzt kann das CLI command diag sniffer packet über SSH Authentifizierung auf der FortiGate ausgeführt werden, um anschlissend via Pipe den Output in Wireshark zu analysieren.

$ ssh -l admin 10.10.10.1 "diag sniffer packet any 'not host 10.10.10.2' 3 0 l" | sdump - | text2pcap - - | wireshark -k -i -
Input from: Standard input
Output to: Standard output
Output format: pcap
admin@10.10.10.1's password:

  Bei Umgebungen mit erhöhter Netzwerk Traffic ist zu berücksichtigen, das eine Reduzierung durch Mitschnittfilter erreicht werden sollte.

Eine weitere Anwendung besteht darin, den PCAP Output in eine Dump Datei zu speichern, mit der Möglichkeit, die Analyse später mit Wireshark oder anderen Protocol Analyzer vornehmen zu können. Hierbei kommt folgende Zeile zur Anwendung.

$ ssh -l admin 10.10.10.1 "diag sniffer packet any 'not host 10.10.10.2' 3 0 l" | sdump - | text2pcap - - > sniffer.dump

 

Wie hilfreich war dieser Beitrag?

Klicke auf die Sterne um zu bewerten!

Durchschnittliche Bewertung / 5. Anzahl Bewertungen:

Bisher keine Bewertungen! Sei der Erste, der diesen Beitrag bewertet.

Es tut uns leid, dass der Beitrag für dich nicht hilfreich war!

Lasse uns diesen Beitrag verbessern!

Wie können wir diesen Beitrag verbessern?

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert