Archiv der Kategorie: Workaround

UNBLOG Tutorials Usability and Addons Integration with Technical Workarounds and Tutorials for Professionals.

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

 

Benutzer SID abfragen

Windows Benutzer SID abfragen mit wmic useraccount get

Für System Administratoren ist das abfragen von Informationen zur Umgebung und Konfiguration eine alltägliche Arbeit. Eine dieser Information ist die SID (Security Identifier), diese von Windows zur Identifikation von Benutzer und Gruppen verwendet wird. Benutzernamen in einem Netzwerk können doppelt vorhanden sein, damit es zu keinem Konflikt kommt, wird jedem Benutzer eine eindeutige SID zugewiesen.

Bei der zuwiesung der Benutzer Rechte, verwendet Windows die dafür definierte SID. Eine SID ist ungefähr so aufgebaut wie ein GUID (Globally Unique Identifier), das jedes Objekt bei Windows besitzt. Die Benutzer SIDs erhalten aber ausschließlich sicherheitsrelevate Objekte, da die SID zur Echtheitsbestätigung verwendet wird.

Durch diese SID wird der Benutzer im ganzen Netzwerk identifiziert. Auch wenn der Name des Benutzer geändert wird, bleibt die SID bestehen, wird der Benutzer im Netzwerk gelöscht, wird seine SID aufgehoben.

Aufbau meiner Benutzer SID

S-1-5-214147432549-3588766049-1627529166-1001

Die SID (Security Identifier) Token haben folgende Bedeutungen:

SEs handelt sich um eine SID
1Revisionsnummer
5Identifier Authority
18Systemprofile
19Localservice
20NetworkService
21Benutzerprofile
4147432549-3588766049-1627529166Domain ID, Computer ID
1001Benutzer ID (RID)

Tabelle mit SID der Systemkonten

Alle Benutzer SID abfragen

Möchte man nun die SID aller Benutzerkonten abfragen, geht das mit folgendem Befehl in einem Command Prompt Win+Rcmd

wmic useraccount get sid,name

Es werden alle SIDs und Benutzernamen ausgegeben.

C:\>wmic useraccount get sid,name
Name                SID
Administrator
S-1-5-21-4147432549-3588766049-1627529166-500
DefaultAccount
S-1-5-21-4147432549-3588766049-1627529166-503
john
S-1-5-21-4147432549-3588766049-1627529166-1001
Gast
S-1-5-21-4147432549-3588766049-1627529166-501

Hier die SIDs der lokalen Konten. Bei einer abfrage in einer Netzwerk Domäne können es einige mehr sein.

Computer- und Domänen-SIDs bestehen aus einer Basis-SID und einer relativen ID (RID), die an die Basis-SID angehängt wird. Wenn der Computer einer Domäne angehört, kommt eine andere SID ins Spiel. Der Computer verfügt weiterhin über eine eigene Computer-SID und eigene lokale Konten und Gruppen, ist jedoch auch Mitglied einer Domäne und verfügt daher über eine SID, die das Computerkonto in dieser Domäne darstellt. Die SID eines Computerkonto besteht aus der SID des Administratorenkonto, abzüglich der RID, die letzten 3 bit oder 4 bit (500) entfallen.

Spezifische Benutzer SID abfragen

Soll gezielt die SID eines Benutzers abgefragt werden, zum Beispiel seine eigene SID, kann dies mit folgendem Command abgerfagt werden.

wmic useraccount where name='%username%' get name,sid

Möchte man die SID eines anderen Benutzers wissen, kann anstelle von %username% ein Benutzer angegeben werden, zB, john.

Mit folgendem Befehl lässt sich die SID des mit dem gerade angemeldeten Benutzer in einer AD-Domäne feststellen.

wmic useraccount where (name='%username%' and domain='%userdomain%') get domain,name,sid

In umgekehrter folge geht es auch, es soll der Benutzername einer SID abgefragt werden.

wmic useraccount where sid='S-1-5-21-4147432549-3588766049-1627529166-1001' get name

Benutzer SID in der PowerShell abfragen

In der PowerShell sieht die Benutzer SID abfrage wie folgt aus.

[wmi] "win32_userAccount.Domain='$env:UserDomain',Name='$env:UserName'"

Es wird der Benutzername und die SID des in der Domäne company angemeldeten Benutzers ausgegeben.

PS C:\> [wmi] "win32_userAccount.Domain='$env:UserDomain',Name='$env:UserName'"

AccountType : 512
Caption     : company\john
Domain      : company
SID         : S-1-5-21-4147432549-3588766049-1627529166-1001
FullName    : john smith
Name        : john

Hiermit kann beispielsweise mit der SID der ProfileImagePath zum Benutzerprofil in der Registry gefunden werden, um Reparaturen oder Anpassungen vornehmen zu können. Auch wird die Benutzer SID als ObjectID in SQL-Tabellen verwendet, um Benutzer aus Active Directory in einer Anwendung identifizieren und authorisieren zu können, so zum Beispiel bei Dynamics AX.

Windows Benutzer SID abfragen mit wmic useraccount get
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList