1. 项目概述:为什么我们需要从流量中“抓”出黑客?
在网络安全这个没有硝烟的战场上,防御方和攻击者之间永远在进行一场信息与时间的赛跑。攻击者得手后,往往会迅速清理痕迹,抹除日志,试图消失在网络的海洋里。而作为防守方,我们手里最宝贵的“犯罪现场”证据,往往就是网络流量。这就像刑警勘查现场,地上的脚印、空气中的气味、遗留的物品,都指向了犯罪者的行踪。网络流量,就是数字世界的“犯罪现场”。
“黑客攻击溯源:从Wireshark流量分析到攻击路径还原”这个标题,精准地概括了安全应急响应中一项核心且极具挑战性的工作。它不是一个简单的工具使用教程,而是一套完整的“数字刑侦”方法论。其核心价值在于,当传统的防火墙日志、主机日志被篡改或缺失时,我们依然能够通过捕获到的原始网络数据包(PCAP文件),像拼图一样,一块一块地还原出攻击者完整的入侵链条:他是从哪里来的(源IP),用了什么方法(攻击载荷),攻击了谁(目标IP/端口),在系统内部做了什么(横向移动、数据外传),以及最终留下了什么(后门、Webshell)。
Wireshark作为这个领域的“瑞士军刀”,其强大之处在于它能将二进制流量的“天书”,解码成我们人类可以理解的协议对话。但工具再强大,也只是工具。真正的挑战在于分析师的思维、经验和对协议细节的深刻理解。你需要从海量的、看似正常的会话中,识别出那微小的、异常的“心跳”。本次分享,我将结合多年一线应急响应的实战经验,带你深入这个领域,不仅学会使用Wireshark,更重要的是掌握从流量中抽丝剥茧、还原攻击路径的思维模型和实操技巧。
2. 攻击溯源的整体框架与核心思路
在开始具体分析之前,我们必须建立一个清晰的框架。盲目地打开一个几个G的抓包文件,无异于大海捞针。攻击溯源通常遵循一个从宏观到微观、从现象到本质的递进过程。
2.1 溯源分析的“三层漏斗”模型
我习惯将整个分析过程抽象为一个“三层漏斗”模型,这能有效提升分析效率。
第一层:时间与范围聚焦。这是最关键的第一步。你需要一个“锚点”。这个锚点可能是:
- 已知告警时间:IDS/IPS、防火墙、EDR系统报告的异常时间点。
- 业务异常时间:网站无法访问、服务器卡顿、数据被篡改被发现的时间。
- 可疑文件时间戳:在服务器上发现的Webshell、后门文件的创建或修改时间。 以这个“锚点”为中心,向前后扩展一个合理的时间窗口(例如,攻击前30分钟到攻击后2小时),在Wireshark中使用时间过滤器,迅速缩小分析范围。同时,结合受害服务器的IP地址和开放端口,在过滤器中限定会话的一方,进一步过滤无关流量。
第二层:协议与行为异常识别。在缩小的时间和范围里,寻找不符合正常业务模式的“噪声”。
- 协议异常:例如,内网服务器突然出现了大量的ICMP(Ping)包、SNMP查询包;或者HTTP协议中出现了非标准端口、畸形请求方法(如GET请求体过长、POST请求路径异常)。
- 行为异常:高频的、失败的登录尝试(如SSH、RDP、数据库);单一IP在短时间内与服务器建立了大量短暂的TCP连接(扫描特征);出现本不应存在的协议通信(如内网机器向外网IP发送DNS隧道流量)。
第三层:载荷深度分析与关联还原。锁定可疑会话流后,进行深度挖掘。
- 跟踪TCP流/HTTP流:这是Wireshark的核心功能,能将一个会话的所有请求和响应内容重组,让你看到完整的“对话”。对于HTTP,可以直接看到上传的Webshell内容、执行的命令;对于TCP,可能看到交互式Shell的输入输出。
- 提取文件与载荷:从HTTP的
POST上传包、FTP数据包、或经过Base64编码的通信内容中,将攻击者上传的木马、工具直接导出。 - 关联外部情报:将流量中发现的恶意IP、域名、URL路径、文件哈希值,在威胁情报平台(如VirusTotal,微步在线等)进行查询,确认其是否已知的恶意资源。
这个“三层漏斗”模型,能帮你避免在数据海洋中迷失,系统地逼近真相。
2.2 核心分析工具链选型:为什么是Wireshark?
市面上流量分析工具很多,从商业的NetworkMiner、科来,到命令行工具tcpdump、tshark。我坚持将Wireshark作为核心,辅以其他工具,是基于以下几点考量:
- 协议解析能力无出其右:Wireshark拥有最全面、最深入的协议解码库。对于千奇百怪的应用层协议、私有协议,甚至是恶意软件自定义的C2(命令与控制)协议,其强大的解析和自定义能力是无可替代的。很多工具只能看到原始字节,而Wireshark能告诉你“这是一个畸形的SMB协议协商包,可能用于永恒之蓝漏洞攻击”。
- 交互式深度分析体验:图形化界面带来的逐包点击、字段展开、流跟踪、着色规则功能,对于需要反复揣摩、假设验证的深度分析场景,效率远高于纯命令行。你可以快速在包列表、包详情、字节流三个视图间切换,形成分析闭环。
- 过滤器的强大与灵活:Wireshark的显示过滤器和捕获过滤器语法功能极其强大。你可以组合出非常精细的条件,例如:
http.request.uri contains “.php” && ip.src == 192.168.1.100 && tcp.port == 8080。这种灵活性在快速定位特定模式时至关重要。 - 生态与扩展性:拥有庞大的用户社区,任何奇怪的流量都可能在网上找到分析案例。同时支持Lua脚本扩展,可以编写自定义的解析器和工具,应对新型威胁。
实操心得:在应急响应现场,我通常会并行操作:在服务器上用
tcpdump或tshark进行轻量级实时抓包和初步过滤,将抓到的关键流量保存为pcap文件后,再传到分析机上用Wireshark进行图形化深度分析。两者结合,兼顾了效率和深度。
3. Wireshark实战:从零开始捕获与分析可疑流量
工欲善其事,必先利其器。让我们跳过简单的安装步骤,直接切入安全分析场景下的关键配置和捕获技巧。
3.1 针对攻击溯源的捕获配置要点
很多人抓包分析不出结果,第一步就错了——要么抓错了网卡,要么抓了一堆没用的数据把关键信息淹没了。
- 选择正确的网卡:这是首要问题。如果你要分析Web服务器是否被入侵,应该在服务器的网络接口上抓包;如果要分析内网横向移动,应该在核心交换机做端口镜像,或者在可能被攻陷的终端上抓包。在Wireshark的捕获界面,务必看清网卡描述(通常是IP地址),选择流量流入流出的那个接口。
- 使用捕获过滤器(BPF语法):在开始抓包前就过滤掉大量噪音,能极大提升后续分析效率和保存文件的大小。常用过滤器:
host 192.168.1.10:只抓与指定IP相关的所有流量(进出)。port 80:只抓80端口的流量。not arp and not icmp:排除常见的ARP广播和ICMP Ping包(除非你怀疑攻击与此相关)。- 组合使用:
host 192.168.1.10 and port 80只抓该IP的Web流量。
- 设置合理的环形缓冲区:在“捕获选项”中,可以设置“多个文件”和“环形缓冲区”。例如,每个文件100MB,最多10个文件。这样能防止单文件过大导致Wireshark卡死,并且旧的流量会被自动覆盖,适用于长期监控。
- 开启“混杂模式”:默认情况下,网卡只捕获发给本机的数据包。开启混杂模式后,可以捕获流经该网卡的所有数据包(在共享式网络或镜像端口上必需)。但注意,在现代交换网络环境中,除非是镜像端口,否则抓不到其他主机的流量。
3.2 初筛利器:显示过滤器的进阶用法
捕获到数据包后,显示过滤器是你寻找蛛丝马迹的主要武器。除了常用的ip.addr、tcp.port、http等,安全分析中更需要关注以下过滤器:
- 寻找可疑HTTP请求:
http.request.uri contains “.php”:查找所有访问php文件的请求(常见Webshell)。http.request.uri contains “upload” or http.request.uri contains “admin”:查找上传点或管理后台的访问,这些是常见攻击目标。http.request.method == “POST” && http.content_type contains “multipart/form-data”:专门过滤文件上传的POST请求。
- 发现扫描与爆破行为:
tcp.flags.syn == 1 and tcp.flags.ack == 0:过滤出所有SYN包(TCP连接尝试),观察其源IP和目标端口分布,可快速发现端口扫描。tcp.analysis.retransmission或tcp.analysis.duplicate_ack:重传和重复ACK过多,可能意味着网络扫描工具在快速建立和断开连接,导致网络拥塞。- 对于登录爆破,可以统计失败尝试:例如,在RDP协议中,可以过滤
tcp.port == 3389并观察数据包频率和大小模式。
- 揪出数据外传(数据渗出):
tcp.payload contains “pass” or tcp.payload contains “SELECT”:在TCP载荷中搜索敏感关键词(注意,这仅在未加密流量中有效)。http.request.uri contains “.zip” or http.request.uri contains “.rar”:攻击者可能将窃取的数据打包后通过HTTP下载。- 观察出站流量的大小和模式:一个长期保持连接、持续有规律小包输出的会话,可能是反向Shell或心跳包;一个短时间内出现巨大出站流量的连接,可能是文件外传。
注意事项:显示过滤器是实时生效的,不会删除数据包,只是隐藏。你可以大胆尝试各种过滤条件,结合“着色规则”将不同类型的可疑流量标记为不同颜色,让异常流量在列表中“跳”出来。
4. 典型攻击场景的流量特征与还原实战
理论说得再多,不如实战一次。下面我们模拟几个最常见的攻击场景,看看如何在流量中识别并还原它们。
4.1 场景一:Webshell上传与命令执行
这是最经典的Web攻击流量。假设攻击者利用文件上传漏洞,向http://target.com/upload.php上传了一个名为shell.php的Webshell。
流量特征与还原步骤:
- 定位上传请求:使用过滤器
http.request.uri contains “upload” and http.request.method == “POST”。你会看到一个较大的POST数据包。 - 分析上传包:选中该数据包,右键 -> “追踪流” -> “HTTP流”。在弹出的窗口中,你将看到完整的HTTP请求和响应。
- 请求部分:查看
Content-Disposition,确认上传的文件名是shell.php。在流内容中,你可以直接看到Webshell的源代码(通常是PHP/ASP/JSP代码),例如包含eval($_POST[‘cmd’])的典型一句话木马。 - 响应部分:查看服务器返回的状态码和内容。如果是200 OK,并且返回了上传后的文件路径(如
/uploads/shell.php),说明上传成功。
- 请求部分:查看
- 定位命令执行流量:攻击者接下来会访问这个Webshell执行命令。过滤
http.request.uri contains “shell.php”或http.request.uri contains “uploads”。你会看到一系列新的GET或POST请求。 - 还原命令:追踪这些新请求的HTTP流。在POST请求中,查看
Body部分,通常会看到类似cmd=ipconfig或cmd=whoami的参数。服务器的响应流中,就会包含命令执行的结果(如ipconfig的输出文本)。通过按时间顺序查看这些流,你可以完整还原攻击者执行了哪些命令(whoami,ipconfig /all,net user,dir C:\\等),从而了解其侦察和提权过程。
实操心得:攻击者通常会使用编码来绕过简单的WAF。在流量中,你可能会看到
cmd参数的值是Base64编码的。在Wireshark中,你可以选中编码后的字符串,右键 -> “复制” -> “Bytes as Printable Text”,然后到外部工具或使用Wireshark内置的“解码为…”功能进行Base64解码,直接看到明文命令。
4.2 场景二:内网横向移动与凭证窃取
攻击者在获取一台内网机器的权限后,会尝试横向移动,攻击同一网段的其他机器。常用手法包括SMB爆破、PsExec、WMI执行等。
以SMB协议爆破为例的流量分析:
- 识别SMB协议流量:过滤
smb2或nbns(NetBIOS名称服务)。大量SMB流量出现在非文件服务器上,就是可疑信号。 - 寻找登录尝试:SMB2的登录过程对应
SMB2 SESSION_SETUP请求。你可以过滤smb2.cmd == 1(SESSION_SETUP的命令码)。 - 分析失败与成功:展开
SMB2 SESSION_SETUP请求包,查看NT Status字段。如果看到大量的STATUS_LOGON_FAILURE(如0xC000006D),说明正在发生密码爆破。如果其中夹杂着STATUS_SUCCESS(0x00000000),则说明爆破成功了一次。 - 还原攻击路径:
- 统计源IP(攻击发起机器)和目标IP(被爆破机器)。
- 观察爆破成功后,紧随其后的流量。攻击者可能会立即发起
SMB2 TREE_CONNECT连接到共享(如C$,ADMIN$),然后通过SMB2 CREATE请求打开文件,最终通过SMB2 WRITE或SMB2 READ进行文件上传/下载,实现远程代码执行(如上传PsExec工具)或信息窃取。
流量特征表格:
| 攻击阶段 | 协议/行为 | 关键Wireshark过滤器/字段 | 分析要点 |
|---|---|---|---|
| 信息收集 | NBNS/LLMNR查询 | nbnsorllmnr | 攻击者可能使用工具(如Responder)毒化响应,窃取NTLM哈希。观察是否有异常主机在响应这些查询。 |
| 凭证爆破 | SMB会话建立 | smb2.cmd == 1 | 查看NT Status,统计STATUS_LOGON_FAILURE的频率和来源IP,定位爆破源。 |
| 横向移动 | PsExec over SMB | tcp.port == 445和smb2.filename contains “PSEXESVC.exe” | PsExec会在目标机器的ADMIN$共享下创建服务。过滤文件名是关键。 |
| 命令执行 | DCERPC over SMB | dcerpc | 通过WMI或服务管理执行的命令,其交互内容可能封装在DCERPC调用中,需要深入解析。 |
4.3 场景三:远程控制木马(C2)通信
高级攻击者会使用定制化的远控木马,其通信流量往往经过加密或混淆,但仍有迹可循。
分析思路:
- 寻找“心跳”与“信标”:远控木马会定期向C2服务器发送心跳包,以保持在线。这种流量通常表现为:固定时间间隔(如每30秒一次)、固定大小的小数据包(几十到几百字节)、协议和端口非常规(可能是80/443以外的任意端口,甚至使用ICMP、DNS等协议进行隧道传输)。
- 分析通信模式:选中可疑会话,统计
对话(Statistics -> Conversations)。查看TCP或UDP标签页,关注那些会话数量不多但持续时间很长、字节数不对称(可能下行指令包很小,上行数据包很大)的连接。 - 检查SSL/TLS证书:如果C2通信使用HTTPS,可以查看TLS握手阶段的
Client Hello和Server Hello包。检查服务器返回的证书(Certificate消息)。很多恶意软件使用自签名证书,其颁发者(Issuer)和主体(Subject)信息可能是伪造的、相同的,或者证书有效期非常长,这些都是可疑点。在Wireshark的协议首选项中启用TLS密钥日志,并配合浏览器导出的密钥文件,可以解密部分HTTPS流量。 - DNS隧道识别:一种隐蔽的数据外传方式。特征包括:对某个陌生域名的查询频率异常高(每秒数次);查询的子域名长且随机(如
sd7f9a.suspicious.domain.com);查询类型为TXT或NULL等不常见类型;响应数据包大小异常。可以过滤dns,然后按Length排序,查看较大的DNS响应包。
5. 攻击路径还原:将碎片拼成完整故事
单个可疑流量点就像散落的珍珠,我们需要用逻辑的线将它们串起来,还原攻击者的完整行动轨迹(Kill Chain)。
5.1 构建时间线图谱
这是最直观的方法。将分析中发现的所有关键事件,按时间顺序排列:
- 初始入侵点:
[时间T1]外部IPX.X.X.X对Web服务器:80进行SQL注入尝试/文件上传攻击。 - 漏洞利用成功:
[时间T2]同一IP成功上传Webshellshell.php,服务器返回200。 - 立足与侦察:
[时间T3]至[时间T4],攻击者通过Webshell执行whoami,ipconfig,netstat -an等命令,获取系统权限和网络信息。 - 内网横向移动:
[时间T5]从Web服务器(192.168.1.10) 向数据库服务器(192.168.1.20) 发起SMB爆破,并在[时间T6]成功。 - 权限提升与持久化:
[时间T7]在数据库服务器上创建计划任务或服务,安装新的后门。 - 数据窃取:
[时间T8]从数据库服务器建立到外部IPY.Y.Y.Y的大流量FTP/HTTP连接,传输压缩文件。
你可以用简单的文本列表,或使用时间线工具来可视化这条路径。这条时间线清晰地展示了攻击的步骤、停留点和目标。
5.2 关联分析与证据链固定
流量分析不能孤立进行,必须与主机日志、内存镜像等其他证据关联。
- 关联主机日志:在流量中发现的攻击时间
T2,去Web服务器的Web访问日志(如Apache的access.log)中查找对应时间的记录,确认请求详情。在系统安全日志(Windows Event Log)或/var/log/auth.log中查找对应时间的登录/进程创建事件。 - 提取恶意文件:从HTTP流或SMB文件传输流中,直接将攻击者上传的恶意软件(Webshell、exe木马)导出(Wireshark:
文件 -> 导出对象 -> HTTP)。计算其MD5/SHA256哈希值,用于威胁情报查询和在全网进行IOC(失陷指标)排查。 - 绘制网络拓扑图:在分析中,你会得到一张“攻击关系图”:外部IP
X.X.X.X攻击了A,A又攻击了内网的B和C。将这张图画出来,对理解攻击者的意图和路径非常有帮助。
6. 高级技巧与疑难问题排查
在实际操作中,你会遇到各种棘手情况。这里分享几个压箱底的技巧。
6.1 处理海量数据包的策略
面对几十GB的抓包文件,Wireshark可能直接卡死。策略如下:
- 先用tshark进行预处理:在命令行使用
tshark(Wireshark的命令行版本)进行初步过滤和提取。
通过分析提取出的文本摘要,找到关键时间点和会话,再用Wireshark打开原文件,通过时间过滤器精准定位。# 提取所有与可疑IP 10.0.0.5 相关的HTTP请求URI tshark -r huge_capture.pcap -Y "http and ip.addr==10.0.0.5" -T fields -e http.request.uri > uris.txt # 提取所有SMB登录失败的记录 tshark -r huge_capture.pcap -Y "smb2.nt_status == 0xc000006d" -T fields -e ip.src -e ip.dst > smb_fails.txt - 使用“导出分组字节流”:如果已经锁定了一个可疑的TCP流(例如,一个反向Shell会话),可以直接右键该流中的任意包 -> “追踪流” -> “TCP流”,然后在弹出的窗口中选择“另存为…”,将这个完整的会话内容保存为一个单独的二进制文件或文本文件,方便后续用其他脚本或工具分析。
- 分而治之:按时间或按IP段将大的pcap文件切割成多个小文件,使用工具如
editcap(Wireshark自带):editcap -A "2023-10-01 14:00:00" -B "2023-10-01 15:00:00" big.pcap small.pcap
6.2 解密加密流量
HTTPS、SSH、RDP等加密流量是分析中的“盲区”。但仍有方法可以获取部分信息或进行解密:
- SSL/TLS解密(前提条件苛刻):
- 服务器私钥:如果你拥有服务器的私钥,可以在Wireshark的
编辑 -> 首选项 -> Protocols -> TLS中,添加(IP, Port, 密钥文件),解密该服务的所有HTTPS流量。这在分析自己管理的服务器时可行。 - 会话密钥日志文件:在客户端(如浏览器)配置环境变量
SSLKEYLOGFILE,浏览器会将TLS会话密钥写入该文件。在Wireshark的TLS设置中指向这个文件,可以解密该客户端产生的所有HTTPS流量。适用于分析从特定终端发起的恶意访问。
- 服务器私钥:如果你拥有服务器的私钥,可以在Wireshark的
- 元数据分析:即使无法解密内容,也能获得大量信息:
- JA3/JA3S指纹:TLS握手阶段的客户端和服务端指纹,可以用于识别恶意软件家族(如Cobalt Strike的Beacon有特定指纹)。
- 证书信息:如前所述,自签名、过期或伪造的证书是可疑信号。
- 通信模式:连接建立时间、数据包大小、发送间隔等行为特征,可用于异常检测。
6.3 常见问题速查表
| 问题现象 | 可能原因 | 排查思路 |
|---|---|---|
| Wireshark捕获界面无网卡 | 1. 权限不足(Linux/macOS需sudo)。 2. 没有安装WinPcap/Npcap(Windows)。 3. 使用的远程桌面或虚拟机,物理网卡未暴露。 | 1. 以管理员/root权限运行。 2. 安装或重新安装Npcap(勾选“支持WinPcap API”)。 3. 在虚拟机设置中桥接或使用USB网卡。 |
| 过滤器语法正确但无结果 | 1. 协议名称拼写错误(如http不是HTTP)。2. 字段名错误(使用 http.request.uri而非http.uri)。3. 数据包未包含该协议层。 | 1. 在输入过滤器时,利用Wireshark的自动补全功能。 2. 在包详情面板中,右键你感兴趣的字段 -> “作为过滤器应用” -> “选中”,让Wireshark自动生成正确的过滤表达式。 |
| 看不到HTTP等应用层协议 | 1. 捕获的是非标准端口流量(如8080端口的HTTP)。 2. 流量被加密(HTTPS)。 3. Wireshark未能正确解码。 | 1. 右键数据包 -> “解码为…”,强制指定该TCP端口为HTTP协议。 2. 尝试配置TLS解密。 3. 检查是否抓取了完整TCP流(握手、数据传输、挥手)。 |
| 如何抓取特定进程的流量 | 需要将进程的网络活动关联到端口,再抓取该端口。 | 1. 使用`netstat -ano |
攻击溯源是一项对耐心、细心和知识面要求极高的工作。它没有一成不变的公式,每一个案例都是新的谜题。核心在于建立系统性的分析思维(如“三层漏斗”模型),熟练掌握Wireshark这把利器,并不断积累各种攻击手法的流量特征知识库。从海量噪声中锁定关键信号,从破碎的片段中还原完整故事,这种“数字侦探”的成就感,正是网络安全工作最吸引人的魅力之一。最后一个小建议:养成好习惯,对每一个分析过的可疑流量包,都做好分类归档和笔记,你积累的“案例库”将成为你最宝贵的财富。