资讯动态

流量分析实战:从钓鱼邮件到C2通信的完整攻击链还原

发布时间:2026/10/21 23:22:08 来源:尧图企业网站定制
1. 靶场背景与应急场景还原先说下这次靶场的场景小王公司收到了一封钓鱼邮件附件伪装成发票财务人员点开后中招内网机器开始外联。作为应急响应人员我们拿到的是一个抓好的流量包和几个关键线索需要通过流量特征分析还原整个攻击链路提取IOC失陷指标找出邮件源头、恶意文件行为和后续渗透痕迹。这类靶场在【玄机】系列里属于流量分析方向核心考察的是流量分析基本功不是吹嘘什么高深AI检测而是实打实地从pcap里把攻击者的手法和内网失陷情况挖出来。这个案例选择“钓鱼邮件”作为切入点其实很贴近现实。在真实攻防演练和企业应急响应中钓鱼邮件一直是攻击者最喜欢用的入口方式因为它打的是人的弱点技术门槛低、成功率却不低。而流量分析又是应急响应里最直接、最能还原真相的手段——你不需要去猜攻击者怎么进来的流量会告诉你一切。所以这个靶场非常适合三类人一是刚入门安全、想系统学习流量分析的新人二是做蓝队防守、经常要处理告警但不知道怎么深入追查的工程师三是准备参加攻防演练或认证考试需要补强应急响应实战经验的从业者。我拿到这个靶场任务后整个分析思路其实很简单先看整体流量包特征确认协议构成和数据规模然后顺着“邮件发送-用户点击-下载载荷-执行木马-C2外联”这条攻击链一步步抽丝剥茧最后汇总所有IOC形成完整闭环。下面我把整个分析过程拆开来讲每一步都会解释我为什么这么看、怎么看、以及实际操作中容易踩的坑。2. 流量分析前期准备先看清全局再动手2.1 拿到流量包后的第一件事不是打开Wireshark很多新手拿到pcap文件第一反应就是双击打开Wireshark然后面对几十万条数据流发呆不知道从哪看起。实际上专业流调的第一步是用命令行工具做快速体检先把全局分布摸清楚。我习惯用capinfos查看流量包基本信息包括抓包时长、数据包数量、文件大小、捕获接口等这些信息能帮你初步判断流量包的量级和网络环境类型。capinfos mail_analysis.pcap输出里重点关注几个字段数据包总数比如这次是248919个接近25万包属于中等规模的流量包、抓包时长如果只有几分钟说明是定向抓取的某个时间窗口如果长达几小时可能需要按时间分段分析、默认接口的IP地址一般是内网某台机器的IP比如10.10.10.155或者某个内网网段。接下来用tshark做协议分层统计这一步能快速告诉我们流量包的核心构成tshark -r mail_analysis.pcap -q -z io,phs这次统计结果很典型HTTP和TCP占了绝大部分流量HTTP请求数量不少说明有明确的C2命令控制通信或恶意文件下载行为SMTP流量相对较少但只要有就说明邮件传输过程被完整记录下来了。这个分布本身就暗示了攻击链路SMTP进邮件到达、HTTP出回连下载。2.2 用Wireshark的过滤语法快速建立分析框架体检完之后就到了实际分析的阶段。Wireshark虽然界面友好但如果你不懂过滤语法面对几十万条包很容易迷失。我一般会按协议和业务场景建立一套系统的过滤组合逐层推进先看邮件相关流量过滤出SMTP和POP3/IMAP协议的数据包smtp || pop || imap再看HTTP活动的流量重点关注POST方法、可疑URI和下载行为http.request || http.response然后看DNS查询记录因为恶意软件要回连C2第一步必然需要解析域名dns最后看TCP连接建立的会话按数据量排序找出最活跃的通信对tcp.flags.syn 1这套过滤组合的逻辑很清晰邮件是入口怎么进来的DNS是桥梁怎么找到C2的HTTP是通道怎么下载和执行恶意文件的TCP会话是骨架连接关系是什么。按照这个顺序分析整个攻击链就会逐步浮出水面。这里有一个非常重要的实操心得**分析流量不要泡在Wireshark的图形界面里要把tshark当作主力工具。**Wireshark适合单包深度查看但批量提取、统计、筛选这种脏活累活命令行效率高得多。比如要把所有HTTP请求的URL提取出来一行命令就能搞定tshark -r mail_analysis.pcap -Y http.request -T fields -e http.host -e http.uri | sort -u这个习惯在实际工作中能节省大量时间也是区分新手和老手的一个明显特征。3. 钓鱼邮件链路还原从SMTP会话到附件拆解3.1 邮件会话的完整还原钓鱼邮件的起点是SMTP会话。在Wireshark里过滤出SMTP协议后我看到了一个完整的邮件发送会话——从外部邮件服务器发往小王公司的邮件服务器然后是内网用户通过POP3协议收取这封邮件。整个SMTP会话遵循标准流程EHLO握手、MAIL FROM声明发件人、RCPT TO声明收件人、DATA传输邮件内容。用tshark把SMTP的命令序列提取出来可以看到这个会话的完整脉络tshark -r mail_analysis.pcap -Y smtp -T fields -e smtp.req.command -e smtp.req.parameter关键信息集中在邮件头里。我在流量包里找到了完整的邮件原文通过SMTP的DATA部分或POP3的RETR响应其中最有价值的字段是Return-Path显示的是billingexample-corp.com但仔细看Received头中的实际转发路径发现真正的来源IP指向了一个不相关的境外地址段——这就是典型的伪造发件人。Message-ID格式为20240915123456.ABCDmail.example-corp.com这种格式本身没有太大问题但是可以通过在搜索引擎查询确认这个Message-ID并没有对应的公开邮件记录。Received链这是判断邮件是否伪造的最关键字段。合法邮件的Received链通常是清晰、连续的每一跳都有对应的服务器主机名和IP而这封邮件的Received链存在跳跃第一跳的IP与发件人声称的域名的邮件服务器IP不一致。邮件主题是“Invoice_20240915_Invoice_No.8892”内容伪装成催款通知附件是一个名为Invoice_No.8892.zip的压缩包。这个命名方式非常经典——利用财务人员对“未付款”“逾期”等信息的紧张感诱导其立即打开附件。3.2 从邮件中提取关键IOC提取邮件附件这一步我推荐用tcpdump配合foremost或binwalk来做。最直接的方法是使用Wireshark的“导出分组字节流”功能选择POP3协议中附件的MIME部分导出为原始文件。实操中我会先用tshark定位到附件传输的TCP流序号然后导出该流的原始数据tshark -r mail_analysis.pcap -Y pop -T fields -e tcp.stream | sort -n | uniq -c找到附件所在的流序号后用Wireshark里的“Follow TCP Stream”在弹出窗口中切换到原始数据模式另存为zip文件。这里要注意一个细节从流量包里导出的文件可能是经过MIME编码的如果是Content-Transfer-Encoding: base64需要先解码才能得到真实的zip文件。解压这个zip后里面是一个.exe文件命名为Invoice_No.8892.exe。双击这个文件的瞬间我就确认了这是个PE文件——文件头是MZ导入表里有kernel32.dll和ws2_32.dll等网络相关的DLL。一个伪装成发票的可执行文件导入表里有网络库这基本可以断定是恶意远控木马。提取到的关键IOC信息如下IOC类型值来源说明发件人邮箱billingexample-corp.com邮件头Return-Path字段伪造恶意附件MD5e432f1c...32位哈希值解压附件后计算恶意附件SHA256a90b2c3d...64位哈希值解压附件后计算压缩包密码8892或类似弱口令压缩包注释或爆破所得C2域名update.example-soft.com后续DNS分析所得这里补充一个很多教程不会讲的细节在流量包中定位附件时优先看POP3协议的RETR响应。SMTP负责发送但在很多企业环境中SMTP流量是加密的通过StartTLS而内网POP3收信可能还是明文更容易提取内容。这次的场景里邮件是发送到公司邮件服务器然后小王用内网邮件客户端POP3收下来。所以在分析时我把重点放在POP3的RETR响应中这个响应携带了完整的邮件内容和附件。4. 恶意载荷分析DGA域名、下载器与C2通信4.1 恶意文件下载链路的追踪邮件附件本身只是一个下载器它的任务是回连C2服务器下载真正的远控木马主体。这一点在分析流量时有了清晰的体现在邮件接收时间点之后大约几十秒内网机器开始发起大量的DNS查询请求一个看起来比较可疑的域名update.example-soft.com并且拿到解析结果后立即向对应的IP发起了HTTP请求。用tshark提取HTTP请求的具体信息tshark -r mail_analysis.pcap -Y http.request -T fields -e ip.src -e ip.dst -e http.host -e http.uri -e http.user_agent分析结果非常有意思HTTP请求的User-Agent字段不是正常的浏览器标识如Mozilla/5.0 (Windows NT 10.0; Win64; x64)而是一个自定义的UA字符串类似于Mozilla/4.0 (compatible; MSIE 7.0; Win32)——这种老旧的UA和下载器内置的HTTP库特征高度吻合。请求的URI是/update/payload.bin响应状态码是200返回的文件大小约为200KB左右。这200KB的payload.bin就是要下载的远控木马主体。可以手动在Wireshark里过滤这个HTTP响应导出其中的二进制数据做进一步分析。但更高效的做法是用tshark定位到HTTP响应所在的TCP流然后整个流导出。在这一步很多人的问题是“我怎么知道这个域名是恶意的”这里分享几个实用的判断维度域名注册时间通过威胁情报平台查询这个域名的注册时间就在攻击发生前一周左右属于典型的短期使用域名。域名解析记录正常业务域名通常有MX邮件记录和多个A记录指向不同地理位置而C2域名通常只有少数几条A记录且指向的都是同一个IP段。访问逻辑正常软件更新域名的访问模式是大量用户间歇性访问而C2域名的访问特征是单台或多台内网主机周期性访问间隔非常规律。请求特征正常更新请求的URL路径一般是/v2/download/xxx这种规范路径而这个请求是/update/payload.bin接口名称比较随意。4.2 C2通信的特征识别恶意文件下载成功执行后远控木马开始与C2服务器建立持久化的通信通道。通过分析后续的流量可以提炼出C2通信的典型特征通信协议方面木马使用的是HTTP协议进行C2通信POST方式上传主机的敏感信息GET方式接收控制指令。请求路径固定为/gate.php这个路径在后续所有C2通信中保持不变是特征之一。通信频率方面木马每隔约60秒向C2服务器发送一次心跳请求。这种固定时间间隔的心跳机制非常典型因为攻击者需要保持对失陷主机的控制但又不想因为过于频繁的通信引起注意。数据编码方面POST请求的body部分是经过Base64编码的数据解码后可以看到主机名、用户名、操作系统版本、当前进程列表等敏感信息。在流量中识别Base64编码数据的一个技巧是观察数据特征——Base64编码后的字符集只有A-Za-z0-9/而且通常以结尾如果原始数据长度不是3的倍数。C2服务器IP方面这个IP在多个威胁情报平台上都有标记与某个公开的恶意软件家族有相关关系。IP的归属地与企业正常业务往来地区完全不匹配这也是一个重要的异常信号。这里要特别提醒一点**C2通信的识别不能单靠某一个特征而要结合多个特征综合判断。**比如固定UA、固定路径、固定时间间隔、大量POST请求这些特征单独看都可能被误报但组合在一起基本可以确认是C2通信。5. 溯源分析与攻击链全景复盘5.1 从流量中还原攻击时间线经过前面的分析我可以把整个攻击链完整地还原出来。按照时间顺序排列整个攻击过程分为五个关键阶段第一阶段是邮件投递发生在15点08分左右。攻击者通过伪造的billingexample-corp.com发送钓鱼邮件到小王公司邮件服务器。这封邮件的SPF记录校验失败但公司邮件服务器没有拒收。第二阶段是用户收信在15点12分小王通过内网邮件客户端使用POP3协议收取了这封邮件。第三阶段是附件执行约15点15分小王打开了邮件附件解压后运行了Invoice_No.8892.exe。这个下载器开始回连C2域名update.example-soft.com。这里有一个值得注意的细节从收信到点击附件间隔只有3分钟说明攻击者精心伪造的邮件确实让受害者放松了警惕。第四阶段是恶意载荷下载在15点16分左右内网主机请求/update/payload.bin成功下载了约200KB的远控木马主体并执行。第五阶段是C2通信建立从15点17分开始失陷主机每隔约60秒向C2服务器发送心跳请求一直持续到流量抓取结束。这个持续不断的心跳请求在Wireshark的时间戳里可以明显地看到固定间隔。5.2 溯源取证的关键结论针对这个案例我给安全团队提交的溯源结论包含以下几个关键点本次攻击的最初入口是钓鱼邮件发件人通过伪造发件人地址绕过了邮件网关的基础校验。建议邮件网关开启SPF/DKIM/DMARC严格校验策略对伪造发件人的邮件直接拒收或隔离。内部主机失陷的直接原因是用户运行了带毒的附件。这里的人为因素是不可避免的但可以通过EDR终端检测响应产品对附件进行沙箱动态检测在用户点击前就拦截恶意载荷。整个攻击链中C2通信是最容易被监测到的环节。企业安全团队如果部署了流量审计系统应该针对“固定UA固定路径固定时间间隔的HTTP POST请求”建立检测规则这种规则在攻防演练中能覆盖大多数常见远控木马的通信行为。涉及IOC清单需要同步到防火墙、IDS、邮件网关、终端安全产品上形成全局阻断能力。在这次案例中我整理出的关键IOC包括恶意文件哈希、C2域名、C2服务器IP、恶意邮件发件人地址等。6. 流量特征分析速查表常见问题与排查技巧在流量分析的实际操作中我整理了一些高频问题的排查方法这里用速查表的形式分享给大家。这些都是实际项目中反复用到的经验比书籍上写的那些条条框框要实用得多。分析目标过滤/操作语法关注重点定位邮件流量smtp || pop || imap邮件头中的Received链、发件人伪造痕迹提取邮件附件POP3流的RAW模式导出MIME编码类型可能需要Base64解码查看所有HTTP请求http.request异常URI、非浏览器UA、POST请求body提取DNS查询记录dns.qry.name可疑域名、高频查询域名、泛解析域名定位大流量会话tcp.len 0并按Conversations排序可疑的大文件下载、长时间C2连接识别规律性通信http.request按时间排序固定时间间隔的心跳请求提取恶意文件tcp.stream eq N导出RAW关注HTTP响应的Content-Length和文件头查看TLS证书tls.handshake.certificate自签名证书、过期证书、域名字段与访问域名不一致第二个常见问题是“为什么我导出的附件打不开”。这通常是因为没有正确解码MIME。SMTP/POP3流量中的附件往往是Base64编码后的纯文本形式你需要先解码再得到原始二进制数据。可以用Wireshark的“Show data as”功能切换显示格式或者用Python的base64模块解码。第三个常见问题是“抓了包但不知道从何下手”。这其实是分析思路问题不是技术问题。我个人的建议是永远从“异常”入手先看有没有特别大的数据包、有没有外连到没见过的IP、有没有在深夜或非工作时间产生的流量、有没有非标准端口上的通信。找到异常后再顺着异常往上追就是完整的攻击链。第四个常见问题是“如何判断一个域名是C2域名而不是正常站点”。除了前面提到的注册时间短、解析记录少、访问规律性强之外还有一个很重要的特征C2域名的DNS查询通常比较频繁但TTL设置得很短比如60秒或300秒方便攻击者随时更换解析IP而不需要等待缓存过期。第五个常见问题是“如何确认内网失陷范围”。在单包流量分析中你只能看到被监控主机的流量但如果你怀疑横向移动可以通过寻找同一攻击源IP访问内网其他IP的行为来判断。另外C2通信的特征如同一个UA或同一个域名可能出现在多台主机的流量中这就是扩展失陷范围的有效线索。7. 复盘总结这次靶场教给我的三件事整个【玄机】流量特征分析的靶场做下来我个人感受最深的不是某个具体的过滤语法而是三件比技术本身更重要的事。第一件事是流程化思维比技巧更重要。从拿到流量包开始我就强制自己按照“全局体检-入口分析-链路追踪-IOC提取-溯源总结”这个流程走每一步都清楚自己在找什么、为什么找、找到后要做什么。这种流程化思维在真正的应急响应中能救命——你面对的是一个正在被攻击的企业网络没时间东一榔头西一棒子地瞎试必须有一套成熟的作战地图。第二件事是流量分析要跟其他取证手段配合。单独看流量只能看到网络层面发生了什么但很多关键信息比如附件里有什么代码、木马具体做了什么操作还需要配合静态分析、沙箱动态分析、主机取证才能完整还原。我在这个靶场中把流量分析和附件静态分析结合才确定了下载器的行为和远控木马的类型。第三件事是IOC的整理要严谨。最终交付的分析报告里IOC必须是机器可读、格式统一的并且标注来源和可信度。如果只是把看到的IP和域名罗列出来不说明是通过哪个包的哪个字段提取的安全团队很难基于这份报告做有效的处置。这也是我在实战中反复碰壁后总结出来的经验。最后再分享一个小技巧如果你每次做流量分析都觉得手忙脚乱可以自己维护一个“流量分析命令速查备忘”把常用的tshark提取命令、Wireshark过滤语法、常见恶意流量特征都记录下来。每次遇到新的流量包先翻一遍自己的备忘再动手分析效率会显著提升。这次做【玄机】靶场我也是靠着一份积累了很久的备忘才能在几个小时内完成从拿到流量包到输出完整溯源报告的全过程。

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑