$npx -y skills add killvxk/cybersecurity-skills-zh --skill analyzing-network-traffic-for-incidents分析网络流量捕获和流量数据,以识别安全事件期间的攻击者活动,包括命令与控制(C2)通信、横向移动(lateral movement)、数据外泄(exfiltration)和漏洞利用尝试。使用 Wireshark、Zeek 和 NetFlow 分析技术。适用于网络流量分析、数据包捕获调查、PCAP 分析、网络取证、C2 流量检测或数据外泄检测等场景。
| 1 | # 针对安全事件的网络流量分析 |
| 2 | |
| 3 | ## 适用场景 |
| 4 | |
| 5 | - SIEM 告警显示异常网络流量模式,需要深入调查 |
| 6 | - 怀疑存在 C2 信标(beaconing),需通过数据包级别分析加以确认 |
| 7 | - 需要从网络证据中量化数据外泄的规模或目标地址 |
| 8 | - 需要通过网络连接追踪系统间的横向移动 |
| 9 | - IDS/IPS 告警需要数据包级别验证以确认或排除 |
| 10 | |
| 11 | **不适用于**基于主机的取证分析(进程执行、文件系统制品);此类场景请使用终端取证工具。 |
| 12 | |
| 13 | ## 前置条件 |
| 14 | |
| 15 | - 全量数据包捕获(PCAP)基础设施或按需捕获能力(网络分路器、SPAN 端口) |
| 16 | - 分析工作站上已安装 Wireshark,并掌握相应显示过滤器知识 |
| 17 | - 已部署 Zeek(原 Bro)用于生成网络元数据(conn.log、dns.log、http.log、ssl.log) |
| 18 | - 从网络设备收集 NetFlow/IPFIX,用于流量分析 |
| 19 | - 网络架构图,展示 VLAN 布局、防火墙位置和监控点 |
| 20 | - 威胁情报(threat intelligence)源,用于关联观察到的网络失陷指标(IOC) |
| 21 | |
| 22 | ## 工作流程 |
| 23 | |
| 24 | ### 步骤 1:捕获或获取网络流量 |
| 25 | |
| 26 | 获取调查所需的相关流量数据: |
| 27 | |
| 28 | **实时捕获(事件仍在进行时):** |
| 29 | ```bash |
| 30 | # 在特定接口上按主机过滤进行捕获 |
| 31 | tcpdump -i eth0 -w capture.pcap host 10.1.5.42 |
| 32 | |
| 33 | # 捕获发往特定外部 IP 的 C2 流量 |
| 34 | tcpdump -i eth0 -w c2_traffic.pcap host 185.220.101.42 |
| 35 | |
| 36 | # 带滚动轮转的捕获(每个文件 1GB,保留 10 个) |
| 37 | tcpdump -i eth0 -w capture_%Y%m%d%H%M.pcap -C 1000 -W 10 |
| 38 | ``` |
| 39 | |
| 40 | **从现有基础设施获取:** |
| 41 | - 从全量数据包捕获设备导出 PCAP(Arkime/Moloch、ExtraHop、Corelight) |
| 42 | - 从 Zeek 集群拉取调查时间段内的 Zeek 日志 |
| 43 | - 从网络设备导出 NetFlow 数据,用于高层流量分析 |
| 44 | |
| 45 | ### 步骤 2:识别 C2 通信 |
| 46 | |
| 47 | 检测命令与控制流量模式: |
| 48 | |
| 49 | **信标检测(Zeek conn.log):** |
| 50 | ```bash |
| 51 | # 提取具有规律间隔的对外连接 |
| 52 | cat conn.log | zeek-cut ts id.orig_h id.resp_h id.resp_p duration orig_bytes resp_bytes \ |
| 53 | | awk '$4 ~ /^185\.220/' | sort -t. -k1,1n -k2,2n |
| 54 | ``` |
| 55 | |
| 56 | **Wireshark 信标分析:** |
| 57 | ``` |
| 58 | # 过滤发往可疑 C2 IP 的流量 |
| 59 | ip.addr == 185.220.101.42 |
| 60 | |
| 61 | # 过滤非标准端口上的 HTTPS 流量 |
| 62 | tcp.port != 443 && ssl |
| 63 | |
| 64 | # 过滤可疑域名的 DNS 查询 |
| 65 | dns.qry.name contains "evil" or dns.qry.name matches "^[a-z0-9]{32}\." |
| 66 | |
| 67 | # 过滤 HTTP POST(常见 C2 上线方式) |
| 68 | http.request.method == "POST" && ip.dst == 185.220.101.42 |
| 69 | ``` |
| 70 | |
| 71 | 信标特征识别要点: |
| 72 | - 连接之间存在规律性时间间隔(例如每 60 秒,抖动(jitter)10-15%) |
| 73 | - 请求和响应中数据包大小保持一致 |
| 74 | - HTTPS 连接发往与合法 CDN 或服务无关的外部 IP |
| 75 | - DNS 查询子域熵值高(DNS 隧道(DNS tunneling)指标) |
| 76 | |
| 77 | ### 步骤 3:分析横向移动流量 |
| 78 | |
| 79 | 追踪攻击者在内部系统间的移动路径: |
| 80 | |
| 81 | ``` |
| 82 | 横向移动检测关键协议: |
| 83 | ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ |
| 84 | SMB (TCP 445): PsExec、文件共享访问、勒索软件传播 |
| 85 | RDP (TCP 3389): 远程桌面会话 |
| 86 | WinRM (TCP 5985): PowerShell 远程访问 |
| 87 | WMI (TCP 135): 远程命令执行 |
| 88 | SSH (TCP 22): Linux 横向移动 |
| 89 | DCE/RPC (TCP 135): 基于 DCOM 的横向移动 |
| 90 | ``` |
| 91 | |
| 92 | **横向移动的 Wireshark 过滤器:** |
| 93 | ``` |
| 94 | # SMB 横向移动 |
| 95 | smb2 && ip.src == 10.1.5.42 && ip.dst != 10.1.5.42 |
| 96 | |
| 97 | # 来自失陷主机的 RDP 连接 |
| 98 | tcp.dstport == 3389 && ip.src == 10.1.5.42 |
| 99 | |
| 100 | # Kerberos 票据请求(潜在的票据传递(Pass-the-Ticket)) |
| 101 | kerberos.msg_type == 12 && ip.src == 10.1.5.42 |
| 102 | |
| 103 | # NTLM 认证(潜在的哈希传递(Pass-the-Hash)) |
| 104 | ntlmssp.auth.username && ip.src == 10.1.5.42 |
| 105 | ``` |
| 106 | |
| 107 | ### 步骤 4:检测数据外泄 |
| 108 | |
| 109 | 识别从网络中未经授权的数据传输: |
| 110 | |
| 111 | ``` |
| 112 | # 在 Zeek conn.log 中识别大量出站传输 |
| 113 | cat conn.log | zeek-cut ts id.orig_h id.resp_h id.resp_p orig_bytes \ |
| 114 | | awk '$5 > 100000000' | sort -t$'\t' -k5 -rn |
| 115 | |
| 116 | # DNS 隧道检测(高量 TXT 查询) |
| 117 | cat dns.log | zeek-cut query qtype | grep TXT | cut -f1 \ |
| 118 | | rev | cut -d. -f1,2 | rev | sort | uniq -c | sort -rn | head |
| 119 | |
| 120 | # 异常协议使用(ICMP 隧道、DNS over HTTPS) |
| 121 | cat conn.log | zeek-cut proto id.resp_p orig_bytes | awk '$1 == "icmp" && $3 > 1000' |
| 122 | ``` |
| 123 | |
| 124 | **Wireshark 数据外泄过滤器:** |
| 125 | ``` |
| 126 | # 大型 HTTP POST 上传 |
| 127 | http.request.method == "POST" && tcp.len > 10000 |
| 128 | |
| 129 | # FTP 数据传输 |
| 130 | ftp-data && ip.src == 10.0.0.0/8 |
| 131 | |
| 132 | # 含大型 TXT 响应的 DNS(隧道) |
| 133 | dns.resp.type == 16 && dns.resp.len > 200 |
| 134 | ``` |
| 135 | |
| 136 | ### 步骤 5:提取并关联 IOC |
| 137 | |
| 138 | 从流量分析中提取基于网络的失陷指标: |
| 139 | |
| 140 | - 失陷主机联系的外部 IP 地址 |
| 141 | - 事件期间通过 DNS 解析的域名 |
| 142 | - 通过 HTTP/HTTPS 访问的 URL(如已部署 SSL 检测) |
| 143 | - TLS 证书详情(主题、颁发者、序列号、JA3/JA3S 哈希) |
| 144 | - HTTP 请求中的 User-Agent 字符串 |
| 145 | - PCAP 中捕获的文件传输(使用 Wireshark 导出对象功能提取) |
| 146 | |
| 147 | ### 步骤 6:记录网络取证发现 |
| 148 | |
| 149 | 将分析结果汇编为带证据引用的结构化报告: |
| 150 | |
| 151 | - 对每个发现引用具体的 PCAP 文件、帧编号和时间戳 |
| 152 | - 以截图或导出 PDF 形式保存关键证据的数据包捕获 |
| 153 | - 将网络活动映射到事件时间线 |
| 154 | - 将网络发现与终端取证的基于主机的证据进行关联 |
| 155 | |
| 156 | ## 核心概念 |
| 157 | |
| 158 | | 术语 | 定义 | |
| 159 | |------|------| |
| 160 | | **PCAP(数据包捕获)** | 存储从网络接口捕获的原始网络数据包的文件格式,用于离线分析 | |
| 161 | | **信标(Beaconing)** | 失陷主机向 C2 服务器发出的规律性、周期性网络连接,可通过一致的时间间隔识别 | |
| 162 | | **JA3/JA3S** | 基于 ClientHello 和 ServerHello 参数的 TLS 客户端和服务器指纹方法;每个应用程序具有唯一指纹 | |
| 163 | | **NetFlow/IPFIX** | 由路由器和交换机收集的网络流量元数据(源、目标、端口、字节数、持续时间),无需全量数据包捕获 | |
| 164 | | **DNS 隧道(DNS Tunneling)** | 将数据编码在 DNS 查询和响应中,通过 DNS 协议进行数据外泄或维持 C2 的技术 | |
| 165 | | **网络分路器(Network Tap)** | 创建网络流量精确副本用于监控的硬件设备,不影响网络性能 | |
| 166 | | **Zeek 日志** | Zeek 网络分析框架生成的结构化元数据日志,涵盖连接、DNS、HTTP、SSL 等 | |
| 167 | |
| 168 | ## 工具与系统 |
| 169 | |
| 170 | - **Wireshark**:开源数据包分析器,用于对网络协议进行数据包级别的深度检测 |
| 171 | - **Zeek(原 Bro)**:网络分析框架,从实时或捕获的流量中生成结构化元数据日志 |
| 172 | - **Arkime(原 Moloch)**:开源全量数据包捕获和搜索平台,用于大规模网络取证 |
| 173 | - **NetworkMiner**:网络取证分析工具,用于从 PCAP 文件中提取文件、图像和凭据 |
| 174 | - **RITA(Real Intelligence Threat Analytics)**:开源信标检测和 DNS 隧道分析工具,适用于 Zeek 日志 |
| 175 | |
| 176 | ## 常见场景 |
| 177 | |
| 178 | ### 场景:确认 C2 信标并量化数据外泄 |
| 179 | |
| 180 | **场景背景**:EDR 在某工作站检测到可疑进程,但无法确定数据外泄量。网络团队提供了覆盖事件时间段的全量数据包捕获设备中的 PCAP。 |
| 181 | |
| 182 | **方法**: |
| 183 | 1. 将 PCAP 过滤为从失陷主机 IP 到外部目标的流量 |
| 184 | 2. 通过分析连接时间模式(信标检测)识别 C2 通道 |
| 185 | 3. 从 C2 连接中提取 TLS 证书和 JA3 哈希,用于生成 IOC |
| 186 | 4. 计算整个事件期间向 C2 基础设施传输的总字节数 |
| 187 | 5. 检查其他外泄通道(DNS 隧道、云存储上传) |
| 188 | 6. 使用 Wireshark 导出对象功能提取任何未加密的传输文件 |
| 189 | |
| 190 | **常见陷阱**: |
| 191 | - 当 C2 在没有 SSL 检测的情况下通过 HTTPS 运行时,仅分析 HTTP 流量 |
| 192 | - 忽略 DNS 隧道,因为每个查询的数据量很小(但随时间累积后总量可观) |
| 193 | - 未将网络时间戳与终端时间戳关联(时区不匹配问题) |
| 194 | - 忽视被滥用于数据外泄的合法云服务(OneDrive、Google Drive、Dropbox) |
| 195 | |
| 196 | ## 输出格式 |
| 197 | |
| 198 | ``` |
| 199 | 网络流量分析报告 |
| 200 | ================================= |
| 201 | 事件编号: INC-2025-1547 |
| 202 | 分析师: [姓名] |
| 203 | 捕获来源: |