omarbabba779xx/network-traffic-monitoring-lab

GitHub: omarbabba779xx/network-traffic-monitoring-lab

基于真实恶意软件流量的SOC网络取证实验室,涵盖五个完整调查案例并配套MITRE ATT&CK映射、Sigma检测规则和IOC导出。

Stars: 0 | Forks: 0

# 网络流量监控与分析实验室 网络流量是攻击者一旦接入网络就无法轻易伪造的数据源—— 进程可以被杀掉,日志可以被清空,但数据包捕获(pcap)是确凿的事实。本项目是一个 SOC 分析师风格的工作成果,完全基于真实的数据包捕获构建:一份我自己的“正常”流量基线, 以及五个从 [malware-traffic-analysis.net](https://www.malware-traffic-analysis.net/) 提取的真实恶意软件样本, 每一个都进行了端到端的完整调查——包括受感染主机识别、C2 基础设施、数据窃取时间线、 MITRE ATT&CK 映射、Sigma 检测规则以及机器可读的 IOC 导出——使用了 SOC 实际运行的相同四款工具: **Wireshark、tcpdump、Zeek 和 NetworkMiner**。 **快速链接:** [SUMMARY.md](SUMMARY.md)(案例面板) · [rules/](rules/)(Sigma 检测) · [iocs/](iocs/)(IOC 导出) · [captures/SHA256SUMS](captures/SHA256SUMS)(完整性清单) · [MALWARE_HANDLING.md](MALWARE_HANDLING.md)(解压任何 pcap 前请阅读) · [LICENSE](LICENSE) 本实验中的两个独立案例([C2 beacon](reports/investigation-c2-beacon-2026-02-28.md) 和 [NetSupport RAT](reports/investigation-netsupport-rat-2024-11-26.md))被发现共享一个 逐字节完全相同的 C2 beacon 协议,尽管它们的日期、IP 和受害者环境各不相同—— 这是一次真实的跨案例关联,而不是为了写文章而刻意捏造的。 ## 演练:本实验室是如何一步步构建的 本节记录了带有证据的实际方法论,就像我在面试中向招聘 经理展示我的工作一样。 ### 第 1 步 — 建立正常流量基线 在寻找恶意软件之前,我捕获了 25 秒自己的真实流量(`dumpcap -i 1 -a duration:25`),在此期间我浏览了 GitHub/Python.org/Cloudflare 并进行了 DNS 查询——共计 11,430 个数据包。这为每一个恶意软件案例提供了可供对比的参照:在这个网络上,*正常*的 协议分布是什么样的? ![基线协议层次结构](https://static.pigsec.cn/wp-content/uploads/repos/cas/7b/7b2381df08fc70925775caa3bb6fd4d41102c524f10f7b62843c308f7b4f63fa.png) *基线捕获上的 Wireshark Protocol Hierarchy——以 TLS/HTTPS 为主导,包含真实的 DNS、QUIC、NTP、 ARP 以及 3 个无害的明文 HTTP 请求(一个 OCSP 证书吊销检查和一个 HTTP→HTTPS 重定向——两者都是正常的浏览器/操作系统后台流量,而非用户可见的浏览)。没有可疑 域名,没有 C2 形态的流量。这就是“正常”状态,下文的每一个恶意软件案例都与它形成鲜明对比。* ### 第 2 步 — 提取真实的恶意软件样本并在 Wireshark 中加载 样本来自 malware-traffic-analysis.net,通过有据可查的 `infected_YYYYMMDD` 方案进行密码保护。第一个深入分析的案例:一个 2026-01-31 的练习, 因被标记为存在 **Lumma Stealer** C2 流量而备受关注。 ![恶意软件 pcap 的协议层次结构](https://static.pigsec.cn/wp-content/uploads/repos/cas/15/15a8d9d257b75cf3e71c560be5b5d5bd1bf979f75ab66a93980f8f17367731e6.png) *51,181 个数据包,真实的 HTTP/TLS/Kerberos/LDAP/SMB 流量——一个完整的小型办公 AD 环境 在感染过程中被捕获。* ### 第 3 步 — 统计信息 → 对话,找出谁在和谁通信 ![IPv4 对话](https://static.pigsec.cn/wp-content/uploads/repos/cas/a4/a441a3db0fd85f7e822bf956195b4f83bd399c4b6efdcc79f3ddab9e6a561c9d.png) *一个对话格外显眼:`10.1.21.58 ↔ 153.92.1.49`,明文 HTTP,非 Microsoft/非云端 IP—— 这是第一条真实的线索。* ### 第 4 步 — 过滤出可疑对话 ![C2 HTTP 过滤](https://static.pigsec.cn/wp-content/uploads/repos/cas/57/5702893afb9c90337eacc7d8183c2ed83530c6ccbe39b32f8339e071cb91d4bd.png) *`ip.addr==153.92.1.49 && http` 隔离出了 12 个数据包:一个发往 `/api/set_agent?id=...&token=...` 的 GET 请求,随后跟着一个带有 `&act=log` 的 POST 请求——在每个浏览器(先 Chrome 后 Edge)中各重复一次。这是 Lumma Stealer 的机器人注册 + 数据窃取模式。* ### 第 5 步 — 跟踪 HTTP Stream 以阅读完整对话 ![跟踪 HTTP Stream](https://static.pigsec.cn/wp-content/uploads/repos/cas/c7/c7016284c726ff479a55f0d4acfb13c33178cbfa0981224488020feef9369148.png) *请求发往 `Host: whitepepper.su`。响应并不是一个简单的 ack——它是一个带有内嵌 JavaScript 的 HTML 页面,会在执行数据采集 POST 之前对浏览器进行指纹识别(`navigator.platform`、`hardwareConcurrency`、 `deviceMemory`...)。捕捉到这个细节(而不是假设“仅仅是一个 ack”)正是阅读数据包摘要与真正阅读数据流之间的区别。* ### 第 6 步 — 切换到 NetworkMiner 进行主机/文件重构 ![NetworkMiner Hosts 标签页](https://static.pigsec.cn/wp-content/uploads/repos/cas/7b/7ba62f329c3df52b31c273ff0fcefb31d892bcc2b41c3299be57a0faa9afc2e9.png) *同一个 pcap,不同的工具:NetworkMiner 重构了受感染主机的完整身份—— 主机名 `DESKTOP-ES9F3ML`、MAC(Intel Corporate 网卡)、操作系统指纹、TTL——这些均独立于 Wireshark 的发现。* ![NetworkMiner Files 标签页](https://static.pigsec.cn/wp-content/uploads/repos/cas/d0/d0d4e48820f27c612d070655002e8d1d94371172048acebde27bdb02638668bd.png) *从 pcap 中提取了 875 个文件,包括与 `whitepepper.su` 交换的实际 `set_agent_*.html`/`.w` 载荷——这是真正的被采集数据工件,而不仅仅是关于它们的日志行。* ### 第 7 步 — 使用 tcpdump 和 Zeek 进行交叉验证(独立工具,同一个 pcap) ![tcpdump 和 Zeek 终端运行记录](https://static.pigsec.cn/wp-content/uploads/repos/cas/9f/9f47b46cab4b76330440c7eae7e279fed030fea861ed9da061c9b9103f8b8a0d.png) *真实的终端会话(WSL Ubuntu)运行 `tcpdump` 进行原始 TCP 验证,并运行 `Zeek 8.2.1` 生成完整的协议日志(`conn.log`、`http.log`、`dns.log`、`kerberos.log`、`x509.log` 等 另外 13 个日志)。Zeek 的 `http.log` 独立复现了在 Wireshark 中发现的所有 6 个 C2 请求—— 三种不同的工具,得出同一个结论。可通过 `analysis/run_demo.sh` 复现。* ### 第 8 步 — 像真实调查一样撰写报告,而不仅仅是倾倒数据包 `reports/` 中的每一份报告都遵循相同的结构:攻击链图、受影响的系统、 C2 基础设施、**MITRE ATT&CK 映射**、IOC 表格、建议的防御措施,以及——同样 重要的是——一个明确的**“这个捕获文件没有告诉我们的信息”**部分,以确保没有任何内容 被夸大到超出证据实际显示的范围。 ### 第 9 步 — 在另外 4 个真实的独立案例中重复此过程 相同的方法论(Wireshark → 在有用的地方使用 NetworkMiner → tcpdump/Zeek 交叉验证 → 附带 MITRE 映射和 IOC 的报告),应用于另外 4 个真实样本,以涵盖不同的攻击 技术:一个硬编码的 C2 beacon、一个通过滥用 Cloudflare Tunnel 构建的多域 C2、一个 通过滥用 TeamViewer 交付 PowerShell 推送的 RAT,以及一个 NetSupport RAT 安装。有关完整的案例表和 MITRE 覆盖范围,请参阅 [SUMMARY.md](SUMMARY.md),或直接跳转到下方的任意 报告。各案例的证据: **案例:周期性 C2 beacon (2026-02-28)** ![C2 beacon NetSupport headers](https://static.pigsec.cn/wp-content/uploads/repos/cas/59/59c88c5007428621ed9eec8a2bbff1c3e69b0c53370321bcf9461935ec1473d1.png) *恶意软件的 HTTP 客户端将自己标识为 `User-Agent: NetSupport Manager/1.3`,并且 C2 面板以 `Server: NetSupport Gateway/1.92` 响应——考虑到与下方 [2024-11-26 的 NetSupport RAT 案例](reports/investigation-netsupport-rat-2024-11-26.md)共享了相同的 `CMD=POLL`/`CMD=ENCD` 协议,这绝非巧合。 这个细节将一个独立的 beacon 案例变成了一次跨案例关联。* ![tcpdump 和 Zeek 终端运行记录,案例 3](https://static.pigsec.cn/wp-content/uploads/repos/cas/18/18a10e572dd4cbeb9d40b4b563426be44de36a36daa0ef5fa36f052e368e0dc1.png) *与第 7 步相同的跨工具验证,针对此案例的 pcap 运行: `tcpdump` 检查发往 `45.131.214.85` 的原始 TCP 会话,`Zeek` 生成完整的协议日志集, 并通过 `http.log` grep 确认了全部 5 个 `fakeurl.htm` POST beacon。可通过 `analysis/run_demo_case3.sh` 复现。* **案例:通过滥用 Cloudflare Tunnel 实现的多域 C2 (2025-06-13)** ![多域 C2 过滤](https://static.pigsec.cn/wp-content/uploads/repos/cas/b3/b3aa19c47914f902e1339065987b92ac01a5a17c9a97956502fa7ac45cca5f05.png) *跨三个轮换的 C2 域名的显示过滤器 (`http.host contains "msgas" or "microsoft.live" or "trycloudflare" or "microsoft.org"`)——64 个匹配的数据包。十六进制窗格显示一个 PowerShell User-Agent 访问了伪造的 `eventtime-microsoft.org` 主机,这是为了伪装成合法 Microsoft 遥测而精心制作的几个域名之一。 `*.trycloudflare.com`——Cloudflare 的免费 Quick Tunnel 服务——托管了部分 C2 基础设施,特别是因为 Cloudflare 的共享 IP 空间能够击败简单的基于 IP 的封锁。* **案例:通过滥用 TeamViewer 交付 PowerShell 推送的 RAT (2025-01-22)** ![RAT 分阶段序列](https://static.pigsec.cn/wp-content/uploads/repos/cas/81/818edeaabe1012084bec2dd99c7f80debea685da86a6802cf4fc8043fd1f35fb.png) *`ip.addr==5.252.153.241 && http.request` 上有 594 个匹配的数据包——完整的分阶段序列: 首先获取 PowerShell 加载器(`29842.ps1`),然后是 TeamViewer RAT 组件 (`TeamViewer`、`Teamviewer_Resource_fr`、`TV`)通过同一个通用的 `/api/file/get-file/` API 进行部署,随后是第二个 PowerShell 脚本(`pas.ps1`)。TeamViewer—— 一款合法的远程访问工具——被部署以供攻击者控制,而不是由真正的 软件供应商部署。* **案例:NetSupport RAT 安装 (2024-11-26)** ![NetSupport 签入与 C2](https://static.pigsec.cn/wp-content/uploads/repos/cas/97/97c07eb353c603e0c89d84b82a9be828c65bc317d0ec3e981b1328f2bd544497.png) *过滤器 `http.request and (ip.addr==194.180.191.64 or http.host contains "netsupport")` 显示了 真实的 NetSupport Manager 签入(`geo.netsupportsoftware.com/location/loca.asp`),随后是 上述 2026-02-28 案例中出现的相同 `fakeurl.htm` `CMD=POLL`/`CMD=ENCD` beacon 循环—— 从两个方向确认的跨案例关联。* ### 第 10 步 — 将发现转化为可重用的检测,而不仅仅是文字描述 每个案例的检测逻辑都被编写成了实际的 [Sigma rule](rules/)(总计 7 条规则),而不仅仅 是在段落中进行描述——这正是“我知道该寻找什么”与“这是一条 SIEM 今天就能运行的规则”之间的区别。 ## 使用的工具 | 工具 | 作用 | 证据 | |---|---|---| | **Wireshark 4.6.7** (GUI) | Protocol Hierarchy、Conversations、显示过滤器、Follow HTTP Stream | `screenshots/` 中的 9 张截图 | | **tshark / dumpcap / capinfos** | CLI 捕获,在真实的 WiFi 接口上进行实时捕获,捕获文件取证(SHA256、计时) | `captures/SHA256SUMS`,内嵌于每份报告中 | | **tcpdump** (WSL Ubuntu) | 对每个 C2 会话进行独立的原始 TCP 验证 | `analysis/tcpdump-*.txt`(5 个文件,每个案例一个) | | **Zeek 8.2.1** (WSL Ubuntu) | 生成完整的协议日志集(conn、http、dns、ssl、kerberos、ldap、x509、dce_rpc、smb、weird...) | `analysis/zeek-logs*/`(5 套日志,每个案例一套) | | **NetworkMiner 3.1** (GUI, Community Edition) | 主机/操作系统/会话重构及文件提取 | `screenshots/` 中的 2 张截图 | ## 结构 ``` SUMMARY.md one-page case dashboard — start here README.md this file — full walkthrough with evidence rules/ 7 Sigma detection rules, one or more per case analysis/detection-validation.md all 7 rules run against a real Sigma engine (Zircolite), including a zero-false-positive check against the baseline iocs/ IOC exports per case (.csv + .json) + all-indicators combined feed captures/ SHA256SUMS integrity manifest for every pcap in this project own/ real traffic captured on my own machine (baseline) malware-samples/ 5 real malicious pcaps from malware-traffic-analysis.net analysis/ tcpdump-*.txt tcpdump verification, one per case zeek-logs*/ full Zeek log sets, one per case run_demo.sh reproducible tcpdump+Zeek demo (Lumma case) run_demo_all_cases.sh reproducible demo script covering all 5 cases screenshots/ 9 Wireshark + 2 NetworkMiner + 2 terminal-run screenshots (13 total) reports/ 5 full investigation write-ups, one per malware case (baseline is documented in this README's "Real baseline capture" section) ``` ## 报告 | 案例 | 报告 | Sigma rule(s) | |---|---|---| | Lum Stealer 信息窃取器 (DESKTOP-ES9F3ML) | [investigation-lumma-stealer-2026-01-31.md](reports/investigation-lumma-stealer-2026-01-31.md) | [lumma_stealer_c2_uri.yml](rules/lumma_stealer_c2_uri.yml) | | 周期性 C2 beacon,DarkGate/NetSupport 风格协议 | [investigation-c2-beacon-2026-02-28.md](reports/investigation-c2-beacon-2026-02-28.md) | [netsupport_style_cmd_poll_beacon.yml](rules/netsupport_style_cmd_poll_beacon.yml), [generic_http_beacon_interval.yml](rules/generic_http_beacon_interval.yml) | | 通过滥用 Cloudflare Tunnel 实现的多域 C2 | [investigation-multidomain-c2-2025-06-13.md](reports/investigation-multidomain-c2-2025-06-13.md) | [typosquatted_microsoft_domain.yml](rules/typosquatted_microsoft_domain.yml), [cloudflare_tunnel_c2_beacon.yml](rules/cloudflare_tunnel_c2_beacon.yml) | | 通过滥用 TeamViewer 交付 PowerShell 推送的 RAT | [investigation-rat-deployment-2025-01-22.md](reports/investigation-rat-deployment-2025-01-22.md) | [rat_staging_fileget_api.yml](rules/rat_staging_fileget_api.yml) | | NetSupport RAT + 匹配的 C2 beacon(跨案例) | [investigation-netsupport-rat-2024-11-26.md](reports/investigation-netsupport-rat-2024-11-26.md) | [netsupport_rat_checkin.yml](rules/netsupport_rat_checkin.yml), [netsupport_style_cmd_poll_beacon.yml](rules/netsupport_style_cmd_poll_beacon.yml) | ### 关于 `iocs/` 内容的说明 `iocs/` 中的每个导出文件都是一个位于单一 `indicators` 数组下的扁平列表,特意混合了多种 不同类型的条目,而不是将它们分类到不同的数据源中: - **真实威胁指标** — 用于黑名单屏蔽的、由攻击者控制的基础设施 (C2 域名/IP、恶意 URI 模式、协议标记)。 - **事件观测数据** — 关于*受害者*环境的事实(受感染主机的 IP/主机名/MAC, 已登录的用户名),对内部关联/隔离有用,但不用于屏蔽。 - **上下文基础设施** — 诸如 `geo.netsupportsoftware.com` 之类的内容,这是一个*合法的* 供应商端点,因为合法工具被滥用而碰巧出现在流量中;它的记录是为了提供调查上下文, 而不是作为需要加入黑名单的内容。 除了现有的 `confidence: high/medium` 字段之外,这些条目均不包含有效期、TLP 标记或 置信度评分规范——请将此导出文件视为每个案例的调察记录, 而不是一个受维护的、去重的、生产级别的威胁情报源。如果您要将此处 的数据提取到黑名单或 SIEM 监视列表中,请过滤出真正属于攻击者 基础设施的 `type` 值,并首先重新验证其时效性。 有关结论、严重程度、IOC 数量、时间线以及一目了然的 MITRE ATT&CK 覆盖范围,请参阅 [SUMMARY.md](SUMMARY.md)。 ## 真实基线捕获 `captures/own/own_traffic_capture_01.pcap` — 在真实的 WiFi 接口上进行 25 秒的实时捕获, 同时产生真实的混合流量(发往 GitHub/Python.org/Cloudflare 的 HTTPS,针对 8.8.8.8 的 DNS 查询)。11,430 个数据包。协议分布:以 TLS/HTTPS 为主导,包含真实的 DNS(26 个帧)、QUIC (HTTP/3)、NTP、ARP — 这是一个用于与每个恶意软件样本进行对比的“正常”流量的真实基线。 以经典的 PCAP 格式存储(不是 PCAPNG,尽管之前的文件名看起来像)。 关于 TCP checksum 的说明:此捕获中约 95% 的*出站*数据包显示其 TCP checksum 无法 通过重新计算验证——这是预期行为,并非数据损坏。这是直接在发送主机的自身接口上启用 了 TX checksum offload 进行的实时捕获,因此 Wireshark/tcpdump 在 NIC 填入真实的 checksum 之前就看到了数据包(这是本地捕获普遍常见的现象,并非 此文件特有)。*入站*数据包(checksum 由远程发送方计算并完整到达)显示 0% 的不匹配率,这正是表明没有任何内容损坏的真实信号。 所有五个在网络上观察到的真实硬件 MAC 地址——不仅仅是生成我自身流量的 以太网帧的那两三个端点,还包括同一 LAN 网段上的其他设备(网关和另外两个本地主机) 在 ARP 请求/回复负载中宣告的额外真实厂商 MAC 地址——在发布前都被匿名化为占位符 (`02:00:00:00:00:01` 到 `02:00:00:00:00:05`)。对捕获中的每个以太网和 ARP 硬件地址字段 (不仅仅是本次捕获“涉及”的两台主机)进行的全面匿名化后扫描 确认没有其他唯一的 MAC 残留。对于本项目的任何分析来说,都不需要永久的 硬件标识符,它也不应该出现在公开的代码库中。在一个 HTTP 重定向中观察到的一个 Cloudflare `__cf_bm` 机器人管理 cookie 值也出于同样的原因被原位编辑 (随后正确地重新计算了其 TCP checksum,没有留下过时的结果)。IP 被保留为真实的 (我这边的 RFC1918 私有地址范围,另一端的公共服务器 IP),因为它们具有实际的 分析价值,且本身不具备唯一 识别性。 针对 malware-traffic-analysis.net 样本的 Zip 密码方案:`infected_YYYYMMDD`(博客文章的 日期),根据其发布的[关于页面](https://www.malware-traffic-analysis.net/about.html)而定。 ## 安全设置 / 验证(各一条命令) ``` # 1. Verify everything actually stored in git matches its recorded hash # (--ignore-missing: the manifest also lists post-extraction pcap hashes, # which don't exist yet at this point — that's expected, not a failure) cd captures && sha256sum -c --ignore-missing SHA256SUMS; cd .. # 2. Extract all five malware-sample zips (each password is infected_YYYYMMDD # for that case's date, e.g. infected_20260131 for the 2026-01-31 case) for z in captures/malware-samples/*.zip; do d=$(basename "$z" .pcap.zip) unzip -P "infected_${d:0:4}${d:5:2}${d:8:2}" -o "$z" -d captures/malware-samples/ done # 3. Re-verify the newly-extracted pcaps against the same manifest cd captures && sha256sum -c SHA256SUMS; cd .. ``` 请在一次性的/离线环境中针对恶意软件样本 pcap 运行此操作——它们包含活跃的 恶意流量,在某些情况下,其中的 C2 IP 目前或近期仍处于活跃状态。不要在与 生产网络连接的机器上解压它们。
标签:DAST, IP 地址批量处理, SOC分析, 威胁情报, 开发者工具, 恶意软件分析, 网络安全, 隐私保护