Malware-Analyse: Ausgehende Verbindungen mit tcpdump und WinDump erfassen


    Tags: , ,

    tcpdumpWenn Ihr Server Ver­bindungen zu einem unbe­kannten Host auf­baut, dann könnte dies ein Zeichen dafür sein, dass er kompro­mittiert wurde. Mit Hilfe von tcpdump und WinDump können Sie aus­gehende TCP-Pakete unter Linux und Win­dows auf­zeichnen und erkennen, welche Programme sus­pekte Adressen kontaktieren.

    Tcpdump ist unter Linux häufig bereits installiert. Falls nicht, können Sie das unter Ubuntu mit den folgenden Befehlen nachholen:

    sudo apt update

    sudo apt install tcpdump

    Wenn Sie mit einer anderen Linux-Distribution arbeiten, müssen Sie die entsprechenden Installations­befehle verwenden.

    Unter Windows können Sie mit dem kostenlosen Tool WinDump arbeiten. Bevor Sie WinDump verwenden können, müssen Sie WinPcap installieren. Sie können beide Tools hier herunterladen. Sobald WinPcap installiert ist, können Sie WinDump in einen Ordner Ihrer Wahl entpacken. Eine Installation ist nicht erforderlich.

    Ausgehende Verbindungen

    Wenn Sie Grund zur Annahme haben, dass Hacker Malware auf Ihrem Server installiert haben, dann sollten Sie überprüfen, ob sie Verbindungen zu ihren Gebietern aufbaut. Dabei ist zu unterscheiden zwischen ausgehendem Verkehr im Allgemeinen und solchem, der von Ihrem Host initiiert wird.

    Unter Linux können Sie tcpdump verwenden, um alle ausgehenden Ver­bindungen mit diesem Befehl anzuzeigen:

    tcpdump -i any src host 10.0.0.1

    10.0.0.1 ist hier die IP-Adresse Ihres Hosts. Der Parameter -i bestimmt die Netzwerk­schnittstelle, auf der tcpdump lauscht. Wenn Sie nicht auf allen Interfaces horchen wollen, dann können Sie statt any die Schnitt­stellen des Servers mit dem Befehl ifconfig ermitteln und diese angeben.

    Der dazu entsprechende WinDump-Befehl sieht so aus:

    windump src host 10.0.0.1

    WinDump lauscht automatisch auf allen Schnittstellen, so dass wir den Parameter -i hier nicht benötigen. Wenn Sie nur ein bestimmtes Interface abhören wollen, können Sie den Befehl

    windump -D

    verwenden, um alle installierten Netzwerk­adapter aufzulisten.

    Auf einen bestimmten Netzadapter hören mit WinDump

    Nur vom Host initiierte ausgehende Verbindungen erfassen

    Der größte Teil des ausgehenden Datenverkehrs besteht in Antworten Ihres Servers auf Anfragen von Clients. Falls viele externe Geräte Verbindungen von zu Ihrem Server aufbauen, wird Sie die Menge der angezeigten Verbindungen überwältigen.

    Wenn Hacker bösartige Software auf Ihrem Server installieren, dann ist es wahrscheinlich, dass diese Malware versucht, mit ihrem Master zu kommunizieren. Sie wird also dafür eine Verbindung zu einer externen IP-Adresse initiieren.

    Um ausgehende TCP-Pakete abzufangen, die von Ihrem Server ausgehen, müssen Sie das Drei-Wege-Handshake-Konzept des TCP-Protokolls verstehen. Immer wenn ein Client versucht, eine TCP-Verbindung aufzubauen, setzt er das SYN-Flag. Der Server antwortet daraufhin mit einem SYN/ACK-Paket, und am Ende des Drei-Wege-Handshakes antwortet der Client mit einem ACK-Paket.

    Drei-Wege-Handshake von TCP

    Um also nur TCP-Pakete zu erfassen, die auf unserem Rechner initiiert werden, weisen wir tcpdump an, nur solche Pakete anzuzeigen, bei denen das SYN-Flag gesetzt ist. Wir müssen dabei aber auch Pakete ausschließen, bei denen das ACK-Flag gesetzt ist, da wir sonst auch die Antworten des externen Hosts erhalten:

    tcpdump -i any src host 10.0.0.1 and "tcp[tcpflags] & (tcp-syn) != 0" and "tcp[tcpflags] & (tcp-ack) == 0"

    Vom Host initiierte ausgehende Verbindungen unter Linux anzeigen

    Beachten Sie, dass die Syntax von tcpdump so etwas wie "(tcp-syn) == 1" nicht zulässt und dass Sie "&" nicht durch "and" ersetzen können (und umgekehrt).

    Dies ist der entsprechende WinDump-Befehl unter Windows:

    windump src host 192.168.178.29 and "tcp[tcpflags] & (tcp-syn) != 0" and "tcp[tcpflags] & (tcp-ack) == 0"

    Vom Host initiierte ausgehende Verbindungen unter Windows anzeigen

    Erkennen von Malware-Verbindungen

    Geraten Sie nicht in Panik, wenn Verbindungen zu unbekannten Hosts angezeigt werden. Ins­besondere auf einem Windows-System werden Sie höchst­wahrscheinlich viele davon sehen, da Windows sehr gerne "nach Hause telefoniert". Microsoft nennt dies Telemetrie, andere würden es als Sammeln privater Daten bezeichnen.

    Um zu überprüfen, ob Ihr System kompro­mittiert wurde, müssen Sie den whois-Dienst für jede unbekannte IP-Adresse konsultieren, um den Eigentümer zu ermitteln.

    Ausführbare Datei auffinden

    Wenn Sie wissen wollen, welches Programm die Verbindung zu einer bestimmten IP-Adresse hergestellt hat, können Sie den Befehl netstat mit dem Parameter -p verwenden. Der Parameter -n dient dazu, nur numerische Werte anzuzeigen, und -c, um die Verbindungen kontinuierlich jede Sekunde erneut zu prüfen:

    netstat -pnc

    Programm anzeigen, das eine Netzwerkverbindung unter Linux herstellt

    Wenn Sie die Ausgabe an grep weiterleiten, können Sie die Ausgabe auf die verdächtige IP-Adresse beschränken. Dies ist der Befehl für Linux:

    netstat -pnc | grep 8.8.8.8

    Unter Windows müssen wir den Parameter -b anstelle von -p verwenden. Um Verbindungen kontinu­ierlich anzuzeigen, gibt man das Zeitintervall an, in dem netstat den Befehl wiederholt. Im folgenden Beispiel beträgt dieses 1. Statt grep verwenden wir unter Windows findstr:

    netstat -b 1 | findstr 8.8.8.8

    Programm anzeigen, das eine Netzwerkverbindung unter Windows herstellt

    Protokollierung von tcpdump- und WinDump-Verbindungen

    Da die Malware auf Ihrem Server möglicher­weise nur zu bestimmten Zeiten ihren Gebieter kontaktiert, empfiehlt es sich, die von Ihrem Server initiierten Verbindungen zu protokollieren. Zu diesem Zweck leiten wir die Ausgabe mit ">" um:

    tcpdump -i any src host 10.0.0.1 and "tcp[tcpflags] & (tcp-syn) != 0" and "tcp[tcpflags] & (tcp-ack) == 0" &> outbound.log &

    In der Bash-Shell sorgt das "&" am Ende des Befehls dafür, dass tcpdump im Hintergrund läuft und die Proto­kollierung auch nach Beendigung der Sitzung weiterläuft.

    Dies ist der entsprechende Befehl für Windows:

    start /B windump src host 10.0.0.1 and "tcp[tcpflags] & (tcp-syn) != 0" and "tcp[tcpflags] & (tcp-ack) == 0" > outbound.log

    Täglich Know-how für IT-Pros mit unserem Newsletter

    Wir ver­wenden Ihre Mail-Adresse nur für den Ver­sand der News­letter.
    Es erfolgt keine per­sonen­be­zogene Auswertung.

    Bild von Michael Pietroforte
    Michael Pietroforte verfügt über 30 Jahre Erfahrung in IT-Projekten, ist seit fünf Jahren Microsoft MVP Windows IT Pro und Betreiber der Website 4sysops für IT Professionals.

    Verwandte Beiträge

    Weitere Links