mcpField
A
analyzing-network-traffic-of-malware

analyzing-network-traffic-of-malware

github.com/mukul975安全35.2k415 次安装8 周前更新
代码仓库

关于 analyzing-network-traffic-of-malware

面向安全分析人员的恶意软件 PCAP 分析技能,用于调查命令与控制流量并制定网络检测规则。内容涵盖数据包、DNS 和 Web 流量分析,以及文件提取和签名编写。

主要功能

  1. 01PCAP 概览与协议分析
  2. 02DNS 与 C2 流量调查
  3. 03信标通信模式检测
  4. 04编写 Suricata 和 Snort 规则
  5. 05文件与流量产物提取

适用场景

  1. 01调查沙箱捕获的恶意软件流量
  2. 02识别 C2 基础设施与外传数据
  3. 03检查 DGA 和 DNS 隧道行为
  4. 04根据流量特征创建网络检测规则

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/mukul975/anthropic-cybersecurity-skills --skill analyzing-network-traffic-of-malware

安装后在 Claude Code 中输入/analyzing-network-traffic-of-malware确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

LICENSE
references/
api-reference.md
scripts/
agent.py

详细介绍

分析恶意软件网络流量

使用场景

  • 沙箱执行已捕获 PCAP 文件,需要对网络行为进行详细分析
  • 识别 C2 协议结构,以编写网络检测规则
  • 确定恶意软件会窃取哪些数据,以及数据会发送到哪些外部基础设施
  • 分析 DNS 隧道、域名生成算法(DGA)或快速通量行为
  • 根据观察到的恶意软件网络模式创建 Suricata/Snort 规则

请勿用于恶意软件行为的主机层分析;进程级活动请使用 Cuckoo 沙箱报告或 Volatility 内存分析。

前提条件

  • 已安装 Wireshark 4.x,用于交互式 PCAP 分析
  • 使用 tshark(Wireshark 命令行工具)进行脚本化数据包提取
  • 已安装 Zeek,用于从 PCAP 自动生成元数据
  • 已安装 Suricata 和 ET Open/ET Pro 规则集,用于规则匹配
  • 已安装 NetworkMiner,用于从 PCAP 提取文件和检测凭据
  • 已安装 Python 3.8+,并配有 scapy 和 dpkt,用于以编程方式分析数据包

工作流

第 1 步:初步查看 PCAP

从整体上了解网络流量:

# Capture statistics
capinfos malware.pcap

# Protocol hierarchy
tshark -r malware.pcap -q -z io,phs

# Endpoint statistics (top talkers)
tshark -r malware.pcap -q -z endpoints,ip

# Conversation statistics
tshark -r malware.pcap -q -z conv,tcp

# DNS query summary
tshark -r malware.pcap -q -z dns,tree
第 2 步:分析 DNS 活动

检查 DNS 查询,寻找 DGA、隧道或 C2 域名解析:

# Extract all DNS queries
tshark -r malware.pcap -T fields -e frame.time -e dns.qry.name -e dns.a \
  -Y "dns.flags.response == 1" | sort

# Detect DGA patterns (high entropy domain names)
python3 << 'PYEOF'
import math
from collections import Counter

def entropy(s):
    p = [n/len(s) for n in Counter(s).values()]
    return -sum(pi * math.log2(pi) for pi in p if pi > 0)

# Parse DNS queries from tshark output
import subprocess
result = subprocess.run(
    ["tshark", "-r", "malware.pcap", "-T", "fields", "-e", "dns.qry.name",
     "-Y", "dns.flags.response == 0"],
    capture_output=True, text=True
)

domains = set(result.stdout.strip().split('\n'))
print("Suspicious DNS queries (high entropy):")
for domain in domains:
    if domain:
        subdomain = domain.split('.')[0]
        ent = entropy(subdomain)
        if ent > 3.5 and len(subdomain) > 10:
            print(f"  {domain} (entropy: {ent:.2f})")
PYEOF

# Detect DNS tunneling (large TXT responses)
tshark -r malware.pcap -T fields -e dns.qry.name -e dns.txt \
  -Y "dns.resp.type == 16 and dns.resp.len > 100"
第 3 步:分析 HTTP/HTTPS C2 通信

检查基于 Web 的命令与控制流量:

# Extract HTTP requests
tshark -r malware.pcap -T fields \
  -e frame.time -e ip.src -e ip.dst -e http.host \
  -e http.request.method -e http.request.uri -e http.user_agent \
  -Y "http.request"

# Extract HTTP response bodies (potential payload downloads)
tshark -r malware.pcap -T fields \
  -e http.host -e http.request.uri -e http.content_type -e tcp.len \
  -Y "http.response and tcp.len > 1000"

# Extract POST data (potential exfiltration)
tshark -r malware.pcap -T fields \
  -e http.host -e http.request.uri -e http.file_data \
  -Y "http.request.method == POST"

# TLS analysis (SNI, JA3 fingerprints)
tshark -r malware.pcap -T fields \
  -e tls.handshake.extensions_server_name \
  -e tls.handshake.ja3 \
  -Y "tls.handshake.type == 1"

# Extract TLS certificate details
tshark -r malware.pcap -T fields \
  -e x509ce.dNSName -e x509af.serialNumber \
  -e x509sat.utf8String \
  -Y "tls.handshake.type == 11"

# Export HTTP objects (downloaded files)
tshark -r malware.pcap --export-objects http,exported_files/
第 4 步:检测信标模式

识别表明 C2 信标通信的定期通信:

# Beacon detection from PCAP
from scapy.all import rdpcap, IP, TCP
from collections import defaultdict
import statistics

packets = rdpcap("malware.pcap")

# Group connections by destination IP:port
connections = defaultdict(list)
for pkt in packets:
    if IP in pkt and TCP in pkt:
        if pkt[TCP].flags & 0x02:  # SYN flag
            dst = f"{pkt[IP].dst}:{pkt[TCP].dport}"
            connections[dst].append(float(pkt.time))

# Analyze timing intervals for beaconing
print("Beacon Analysis:")
for dst, times in connections.items():
    if len(times) >= 5:
        intervals = [times[i+1] - times[i] for i in range(len(times)-1)]
        avg = statistics.mean(intervals)
        stdev = statistics.stdev(intervals) if len(intervals) > 1 else 0
        jitter = (stdev / avg * 100) if avg > 0 else 0

        if 10 < avg < 3600 and jitter < 30:  # Regular interval with < 30% jitter
            print(f"  [!] {dst}: {len(times)} connections")
            print(f"      Interval: {avg:.1f}s ± {stdev:.1f}s (jitter: {jitter:.1f}%)")
            print(f"      Pattern: LIKELY BEACONING")
第 5 步:生成网络检测规则

根据观察到的流量模式创建 Suricata/Snort 规则:

# Run Suricata against the PCAP for existing signature matches
suricata -r malware.pcap -l suricata_output/ -c /etc/suricata/suricata.yaml

# Review alerts
cat suricata_output/fast.log

# Create custom Suricata rule from observed patterns
cat << 'EOF' > custom_malware.rules
# C2 beacon detection based on observed URI pattern
alert http $HOME_NET any -> $EXTERNAL_NET any (
    msg:"MALWARE MalwareX C2 Beacon";
    flow:established,to_server;
    http.method; content:"POST";
    http.uri; content:"/gate.php?id=";
    http.user_agent; content:"Mozilla/5.0 (compatible; MSIE 10.0)";
    sid:9000001; rev:1;
)

# DNS query for known C2 domain
alert dns $HOME_NET any -> any any (
    msg:"MALWARE MalwareX C2 DNS Query";
    dns.query; content:"update.malicious.com";
    sid:9000002; rev:1;
)

# JA3 hash match for malware TLS client
alert tls $HOME_NET any -> $EXTERNAL_NET any (
    msg:"MALWARE MalwareX JA3 Match";
    ja3.hash; content:"a0e9f5d64349fb13191bc781f81f42e1";
    sid:9000003; rev:1;
)
EOF
第 6 步:从流量中提取文件和工件

恢复传输的文件和嵌入的数据:

# Extract files using Zeek
zeek -r malware.pcap /opt/zeek/share/zeek/policy/frameworks/files/extract-all-files.zeek
ls extract_files/

# Extract files using NetworkMiner (GUI)
# Or use tshark for specific protocol exports
tshark -r malware.pcap --export-objects http,http_objects/
tshark -r malware.pcap --export-objects smb,smb_objects/
tshark -r malware.pcap --export-objects tftp,tftp_objects/

# Hash all extracted files
sha256sum http_objects/* smb_objects/* 2>/dev/null

# Generate Zeek logs for comprehensive metadata
zeek -r malware.pcap
# Output: conn.log, dns.log, http.log, ssl.log, files.log, etc.

核心概念

术语定义
信标通信恶意软件定期连接 C2 服务,可通过一致的时间间隔和数据包大小识别
JA3/JA3STLS 指纹识别方法,通过对 ClientHello/ServerHello 参数生成哈希值,唯一识别恶意软件的 TLS 实现
DGA(域名生成算法)生成伪随机域名的算法,恶意软件通过查询这些域名来定位 C2 服务,从而规避静态域名拦截列表
DNS 隧道在 DNS 查询和响应中编码数据,以建立 C2 通道或通过 DNS 基础设施窃取数据
快速通量一种 DNS 技术,通过快速轮换域名的 IP 地址来避免被查封,并将 C2 分布到许多已被入侵的主机上
SNI(服务器名称指示)一种 TLS 扩展,用于显示客户端要连接的主机名;即使在加密的 HTTPS 连接中也可见
网络规则用于匹配网络流量中特定模式(标头、负载、时间)的 Suricata/Snort 规则,以检测恶意通信

工具与系统

  • Wireshark:开源数据包分析器,可在协议层面深入交互式检查网络流量
  • Zeek:网络分析框架,可从实时流量或捕获的流量生成结构化元数据日志(conn、dns、http、ssl)
  • Suricata:高性能网络 IDS/IPS,支持基于规则的检测,并可通过 Lua 脚本实现自定义检测逻辑
  • NetworkMiner:网络取证分析工具,可从 PCAP 文件中提取文件、图像和凭据
  • Scapy:Python 数据包操作库,可用于以编程方式分析数据包、检测信标和解码协议

常见场景

场景:解码自定义二进制 C2 协议

背景:恶意软件通过 TCP 8443 端口,使用自定义二进制协议与其 C2 服务通信。标准 HTTP 分析无法得出结果。需要根据 PCAP 对协议结构进行逆向工程。

方法:

  1. 筛选 PCAP 中 TCP 8443 端口的通信,并跟踪 TCP 流
  2. 确定消息帧格式(长度前缀、分隔符、固定大小的标头)
  3. 对比多条消息,识别静态标头字段与可变数据字段
  4. 与使用 Ghidra 得出的逆向分析结果交叉验证(如果已对二进制文件进行分析)
  5. 为自定义协议编写 Wireshark 解码器或 Scapy 解析器
  6. 创建匹配静态标头字节的 Suricata 规则,用于网络检测
  7. 编写完整的协议规范文档,以便共享威胁情报

注意事项:

  • 只分析最初的几个数据包;有些 C2 协议会在初始握手后改变行为
  • 沙箱具备 MITM 能力时,未对 TLS 流量进行解密
  • 将合法的 CDN 或云流量误认为 C2 流量(请验证目标 IP)
  • 遗漏使用 DNS 或 ICMP 而非 TCP/UDP 的 C2 流量

输出格式

MALWARE NETWORK TRAFFIC ANALYSIS
===================================
PCAP File:        malware_sandbox.pcap
Duration:         300 seconds
Total Packets:    12,847
Total Bytes:      4.2 MB

DNS ACTIVITY
Total Queries:    47
DGA Detected:     Yes (23 high-entropy queries to .com TLD)
Tunneling:        No
Resolved C2:      update.malicious[.]com -> 185.220.101[.]42

C2 COMMUNICATION
Protocol:         HTTPS (TLS 1.2)
Server:           185.220.101[.]42:443
SNI:              update.malicious[.]com
JA3 Hash:         a0e9f5d64349fb13191bc781f81f42e1
Beacon Interval:  60.2s ± 6.8s (11.3% jitter)
Total Sessions:   237
Data Sent:        147 MB
Data Received:    2.3 MB
Certificate:      CN=update.malicious[.]com (self-signed, expired)

PAYLOAD DOWNLOADS
GET /payload.dll from compromised-site[.]com
  Size: 98,304 bytes
  SHA-256: abc123def456...
  Content-Type: application/octet-stream

EXFILTRATION
Method:           HTTPS POST to /gate.php
Content-Type:     application/octet-stream
Average Size:     15,432 bytes per request
Total Volume:     147 MB over 4 hours

SURICATA ALERTS
[1:2028401] ET MALWARE Generic C2 Beacon Pattern
[1:2028500] ET POLICY Self-Signed Certificate

GENERATED SIGNATURES
SID 9000001: MalwareX HTTP beacon pattern
SID 9000002: MalwareX DNS C2 domain
SID 9000003: MalwareX JA3 TLS fingerprint

评论

支持 Markdown