1. 项目概述:当流量包成为“犯罪现场”
作为一名在网络安全和运维领域摸爬滚打了十多年的老兵,我处理过无数起安全事件。很多时候,当警报响起,服务器被入侵,或者业务出现异常,第一手也是最宝贵的证据,往往不是日志文件,而是一个个看似冰冷、充满十六进制字符的流量包文件,比如我们今天要对付的这个attack.pcapng。对于新手来说,面对一个几百兆甚至上几个G的pcapng文件,可能会感到无从下手,密密麻麻的数据包列表就像一片信息的海洋。但对于我们这些“网络侦探”来说,这里面藏着的每一条TCP握手、每一个HTTP请求、每一段异常载荷,都是黑客留下的“指纹”和“足迹”。这次,我就带你化身“数字福尔摩斯”,手把手教你如何用Wireshark这把“手术刀”,从attack.pcapng这个“网络犯罪现场”中,精准地揪出黑客活动的五个关键线索。整个过程我会配上完整的操作截图,确保你不仅能看懂,更能跟着做出来。
2. 环境准备与线索分析框架
2.1 工具与思维准备
工欲善其事,必先利其器。我们的核心工具当然是Wireshark,它是开源且功能最强大的网络协议分析器,没有之一。我强烈建议你从官网下载最新稳定版,以确保拥有最全的协议解析库和最新的功能。除了Wireshark本身,我们还需要一个辅助工具:NetworkMiner或Xplico。这类工具被称为网络取证框架(NFAT),它们能自动从流量包中提取文件、图片、证书等对象,对于快速浏览和提取证据非常有用,可以作为Wireshark深度分析前的“快速扫描仪”。
但比工具更重要的是分析思维。面对一个未知的攻击流量包,切忌一头扎进细节。我习惯采用“由外而内,由宏观到微观”的漏斗式分析流程:
- 整体概览:先看对话统计、端点统计,了解流量中的“主角”(哪些IP在大量通信)。
- 协议分布:看协议分层统计,判断攻击主要利用了哪种协议(如HTTP、DNS、SMB)。
- 时间线分析:利用IO图表,观察流量在时间轴上的爆发点,定位攻击发生的关键时刻。
- 深入追踪:基于以上线索,对可疑的TCP流或HTTP会话进行深度解码和检视。
- 证据提取:还原攻击者上传的工具、窃取的数据,或执行的命令。
这个流程能帮你避免在数十万个数据包中迷失方向。记住,黑客也是人,他们的攻击行为在流量上会呈现出明显的“模式”,我们的任务就是识别这些异常模式。
2.2 初始加载与快速过滤技巧
拿到attack.pcapng后,别急着逐条看包。首先,用Wireshark打开它,然后立刻做以下几件事:
第一步:查看“统计”菜单下的“对话”。这里列出了所有通信的端点(IP地址)和它们之间的流量大小。你的眼睛应该立刻去寻找那些“不对称”的对话。比如,一个内部IP(如192.168.1.100)向外部某个IP发送了海量数据,但接收的却很少,这可能是数据外泄。或者,一个外部IP向你的服务器IP的某个端口(如22、3306)发起了大量、快速的连接尝试,这显然是暴力破解或扫描。在本次的案例中,我们可能就会发现一个外部IP172.16.1.110与内部某个IP存在大量交互。
第二步:应用初步显示过滤器。Wireshark的显示过滤器是你的“望远镜”。一开始,可以过滤掉一些“噪音”。例如:
!arp && !dns:过滤掉ARP和DNS这类底层、高频的协议,让画面更干净。tcp.flags.syn==1 and tcp.flags.ack==0:只看TCP SYN包,这是新连接开始的标志,有助于快速发现端口扫描行为(大量SYN包发往不同端口)。http or tls:如果怀疑是Web攻击或加密通信,可以聚焦HTTP或TLS流量。
一个关键技巧:Wireshark的着色规则非常有用。默认情况下,绿色是TCP流量,浅蓝是UDP,黑色通常表示有问题的包(如乱序、重传)。你可以根据分析需要自定义颜色,比如将所有到端口22(SSH)的流量标为红色,这样一旦有红色出现,就会格外醒目。
3. 线索一:识别扫描与侦察行为
黑客在发动实质性攻击前,几乎一定会进行信息搜集,也就是扫描。这在流量中会留下非常明显的痕迹。
3.1 端口扫描的流量特征
在Wireshark中,端口扫描通常表现为:在极短的时间内,从一个源IP向目标IP的多个不同端口发送探测包。最常见的扫描类型是TCP SYN扫描。
操作方法:
- 在显示过滤器栏输入:
ip.src == [可疑IP] and tcp.flags.syn == 1 and tcp.flags.ack == 0。这将列出该IP发出的所有SYN包。 - 观察“目标端口”列。如果看到目标端口在21(FTP)、22(SSH)、23(Telnet)、80(HTTP)、443(HTTPS)、3306(MySQL)、3389(RDP)等常见服务端口上快速、连续地出现,并且每个SYN包都没有后续的完整TCP握手(即没有看到对应的SYN-ACK和ACK),那么这基本就是扫描行为。
- 可以进一步使用“统计” -> “端点”,选择“TCP”标签页,查看该可疑IP与目标IP在不同端口上的数据包计数。扫描行为会使得包计数在多个端口上都是1或2(一个SYN,可能还有一个RST)。
实战截图示例:在attack.pcapng中,我们过滤ip.src == 172.16.1.110并查看TCP SYN包,可能会发现它向目标IP的21, 22, 23, 80, 3306端口都发送了SYN包,且后续没有成功建立连接。这就是典型的端口扫描,说明黑客在寻找可用的入口点。
3.2 服务指纹识别与漏洞探测
比单纯扫描端口更进一步的是服务指纹识别和漏洞探测。黑客会分析目标端口的banner信息或发送特定的探测载荷。
如何发现:
- Banner Grabbing:当连接到22端口(SSH)时,服务端会返回类似“SSH-2.0-OpenSSH_7.4”的banner。在Wireshark中,你可以追踪这条TCP流(右键点击包 -> 追踪流 -> TCP流),直接看到明文交换的信息。如果黑客在扫描后对某个端口建立了连接并获取了banner,那么在这个TCP流里就能看到。
- 漏洞探测Payload:对于Web服务,黑客可能会发送包含
../../(路径遍历)、' OR '1'='1(SQL注入测试) 等字符串的HTTP请求。你可以在过滤出HTTP流量后 (http),在Packet Bytes面板(下方窗口)直接搜索这些特征字符串,或者使用显示过滤器http.request.uri contains “../”。
注意:有些扫描工具会使用NULL扫描、FIN扫描等更隐蔽的方式,这些扫描不会完成TCP三次握手,在流量中表现为只有SYN或只有FIN标志位的数据包,需要你对TCP标志位有更深入的理解才能识别。
4. 线索二:追踪暴力破解攻击
端口扫描之后,如果发现了开放的服务,比如SSH(22)或MySQL(3306),黑客下一步很可能就是尝试暴力破解。
4.1 识别暴力破解的流量模式
暴力破解在流量上的核心特征是:针对同一目标IP和端口,源IP在短时间内发起大量、高频的、结构相似但内容(如密码)不同的认证请求。
以MySQL暴力破解为例:
- 使用过滤器:
tcp.port == 3306聚焦MySQL流量。 - 你会发现大量从
172.16.1.110发往目标服务器3306端口的短小TCP流。右键任意一个包,选择“追踪流” -> “TCP流”。 - 在追踪流的窗口,你会看到经典的MySQL登录过程。黑客工具会不断尝试不同的用户名和密码组合。在流内容中,你会看到类似
COM_QUIT后紧跟一个新的登录尝试,每次登录的password字段的哈希值都不同(如果协议加密,可能看不到明文密码,但尝试频率极高)。 - 关键数量统计:在Wireshark中,你可以使用
tcp.analysis.flags && !tcp.analysis.window_update过滤器结合“统计”->“IO图表”,绘制出每秒连接数(或数据包数)的曲线。暴力破解期间,曲线会出现一个明显的尖峰。
4.2 提取攻击者使用的字典信息
有时,攻击者使用的用户名/密码字典会直接体现在流量中,尤其是使用简单协议或工具配置不当时。
操作方法:
- 对于HTTP Basic认证的暴力破解,用户名和密码是以Base64编码形式放在
Authorization头部的。你可以写一个简单的显示过滤器来提取:http.authorization。然后逐个查看数据包,在Packet Details面板中展开Hypertext Transfer Protocol->Authorization->Credentials,可以看到类似Basic dXNlcjE6cGFzc3dvcmQx的字符串,将其复制出来在线或用Wireshark工具解码即可得到明文user1:password1。 - 对于其他协议,可能需要更复杂的分析。一个技巧是:将疑似包含暴力破解尝试的TCP流内容全部导出(在追踪流窗口点击“另存为”),保存为一个文本文件。然后用
grep或文本编辑器的搜索功能,寻找user、pass、login、password等关键词,可能就能拼凑出攻击者使用的字典列表。
我的心得:面对暴力破解,在Wireshark里数包不是目的。真正的价值在于:确定攻击持续时间、估算尝试次数、提取攻击源IP和可能的字典,为后续的封禁、取证和风险评估提供量化依据。例如,如果你发现攻击者在5分钟内尝试了上万次密码,那么被破解的账户其密码很可能不在常用弱口令字典里,暂时是安全的;但如果只尝试了几百次就成功了,那说明密码强度极差,必须立即强制修改。
5. 线索三:解密与还原攻击载荷
扫描和破解可能只是前奏,真正的破坏来自于攻击载荷的投递和执行。这部分是分析中最精彩也最考验功力的环节。
5.1 HTTP/HTTPS流量的文件提取
Web是常见的攻击向量。攻击者可能通过文件上传漏洞投递Webshell,或者网站被植入恶意JS进行水坑攻击。
从HTTP流量中提取文件:
- 使用过滤器
http筛选出所有HTTP流量。 - 寻找
POST请求,特别是上传文件的请求。在Packet Details面板中,查看Hypertext Transfer Protocol下的Full request URI和Content-Type。如果Content-Type包含multipart/form-data,很可能就是文件上传。 - 要提取这个文件,最方便的方法是使用文件 -> 导出对象 -> HTTP。Wireshark会自动列出所有HTTP传输的文件。你可以在这里看到文件名、内容类型、大小等信息。找到可疑的文件(如
shell.php、payload.exe),将其保存到本地。 - 重要步骤:保存后,切勿在联网的实体机上直接双击打开!应该将其上传到VirusTotal或类似的多引擎扫描平台进行检测,或者放在沙箱环境中进行分析。
从HTTPS流量中提取文件(如果可能): HTTPS是加密的,默认情况下Wireshark看不到内容。但如果你拥有服务器的私钥,就可以解密流量。在Wireshark中,进入编辑 -> 首选项 -> Protocols -> TLS,在(Pre)-Master-Secret log filename中指定一个文件,并在服务器上配置环境变量SSLKEYLOGFILE指向同一文件,这样就能解密并像分析HTTP一样分析HTTPS流量了。在实战取证中,这通常需要协调服务器管理员才能实现。
5.2 还原攻击者执行的命令(以SMB/RDP为例)
如果攻击者通过漏洞获得了系统权限,并建立了SMB(文件共享)或RDP(远程桌面)连接,那么他后续的操作可能就在这些协议通道里。
SMB协议命令追踪:
- 过滤
smb2或nbss。 - 寻找
Tree Connect请求,这表明攻击者连接到了一个共享文件夹。 - 随后,你会看到
Create Request(创建/打开文件)和Write Request(写入文件)。通过追踪这些SMB流,你可以还原出攻击者在共享目录里上传了哪些文件(可能是后门、挖矿程序)。 - 更关键的是,如果攻击者使用了
PsExec或类似工具通过SMB执行命令,你会在流量中看到它访问了ADMIN$或C$等管理共享,并写入服务二进制文件。通过分析这些写入操作,可以还原出被执行的命令。
RDP协议活动分析: RDP流量本身是加密的,但Wireshark可以解析其通道建立过程。你可以通过以下迹象判断RDP被滥用:
- 大量的
TCP TPKT协议数据包,目标端口为3389。 - 在“统计”->“对话”中,看到某个外部IP与内部IP在3389端口有持续、大量的双向流量,这很可能就是活跃的RDP会话。
- 虽然无法解密具体操作,但结合事件时间线,如果发现在非工作时间出现此类连接,就是极强的异常信号。
6. 线索四:分析数据外泄痕迹
攻击的最终目的往往是窃取数据。数据外泄在流量上通常表现为:内部服务器主动向外部IP发起大量、持续的出站连接,并传输大体积数据。
6.1 发现异常出站连接
- 回到“对话”视图:按字节数排序,重点关注“发送字节数”远大于“接收字节数”的对话。这通常意味着数据正在被“拉”出去。
- 使用IO图表:绘制整个抓包时间段内,从内部IP到某个可疑外部IP的流量图。如果数据外泄发生,你会看到一个持续、平稳或脉冲式的出站流量高峰,这与用户访问Web产生的突发性流量模式截然不同。
- 协议分析:数据外泄可能通过多种协议:
- HTTP/HTTPS POST:攻击者将数据打包,通过Web请求发送到受控的服务器。过滤
http.request.method == “POST”并查看那些请求体(Entity Body)特别大的包。 - DNS隧道:这是一种非常隐蔽的数据外泄方式。攻击者将数据编码到DNS查询的子域名中。特征表现为:内部IP向某个不常见的DNS服务器(非公司配置的)发起大量、高频的DNS查询,查询的域名非常长且随机(如
a1b2c3d4e5f6.attacker.com)。你可以过滤dns并观察查询名的长度和规律。 - FTP / SFTP / SCP:直接使用文件传输协议。过滤对应端口(21, 22)的流量,并追踪TCP流查看是否有文件传输的会话。
- HTTP/HTTPS POST:攻击者将数据打包,通过Web请求发送到受控的服务器。过滤
6.2 定位被窃取的数据内容
一旦锁定可疑的数据流,下一步就是尝试还原数据内容。
- 对于HTTP POST数据:在追踪TCP流时,你可以看到完整的请求和响应。请求体中可能包含经过Base64编码或压缩的数据库转储文件内容。你可以将请求体部分(通常是
application/x-www-form-urlencoded或multipart/form-data格式之后的部分)复制出来,尝试进行Base64解码,或者保存为二进制文件后用相应的工具(如7z,tar)尝试解压。 - 文件还原:Wireshark的“文件 -> 导出对象”功能同样适用于FTP等协议。你可以尝试导出对象列表,看看有没有
.sql,.zip,.rar,.xlsx等常见的数据文件格式。 - 字符串搜索:如果你知道可能被窃取的数据类型(如客户邮箱、身份证号),可以在Wireshark中直接搜索字符串。点击
编辑 -> 查找分组,选择“字符串”并在分组详情或分组字节流中搜索。例如,搜索@example.com可能会直接定位到包含邮箱列表的数据包。
警告:数据外泄分析往往涉及海量数据包。务必善用显示过滤器和追踪流功能,聚焦于可疑的会话,避免陷入数据海洋。同时,还原出的敏感数据必须按照公司安全规定妥善处理。
7. 线索五:构建攻击时间线与行为链
单点线索的价值有限,我们需要将上述所有发现串联起来,还原出完整的攻击故事链。这是报告撰写和后续溯源的关键。
7.1 使用时间显示格式与过滤联动
Wireshark默认的时间显示是相对于抓包开始的时间。为了更直观,我建议你调整为绝对时间:视图 -> 时间显示格式 -> 日期和时间。这样每个数据包都会显示具体的发生时刻。
构建时间线的技巧:
- 创建时间线注释:在分析过程中,每发现一个关键事件(如“扫描开始”、“第一次暴力破解尝试”、“Webshell上传成功”、“第一个数据外泄包”),就在对应的数据包上右键点击,选择“分组注释”,写下简要说明。
- 使用过滤按钮:Wireshark的显示过滤器输入框旁边有一个“+”按钮,点击可以将当前过滤器保存为一个按钮。你可以为“扫描流量”、“MySQL登录尝试”、“HTTP文件上传”等分别创建过滤按钮。分析时,通过点击不同按钮,可以快速在不同攻击阶段视图间切换,并结合时间戳观察其先后顺序。
7.2 绘制攻击链与撰写报告要点
根据所有线索,你可以绘制出类似下面的攻击链:
- T0 - T1(侦察):攻击者IP
172.16.1.110对目标网段进行端口扫描,发现开放了22(SSH)、80(HTTP)、3306(MySQL)端口。 - T2 - T3(初始访问):攻击者对MySQL服务(3306)发起暴力破解,在尝试了数百次后,成功以弱口令
root:root123登录。 - T4(执行):通过MySQL的
INTO OUTFILE功能或漏洞,在Web目录写入一句话Webshell (/var/www/html/shell.php)。 - T5 - T6(横向移动/数据窃取):通过Webshell,攻击者上传了渗透工具包,进一步探测内网,并最终将数据库备份文件通过HTTP POST方式外泄至
http://malicious-server.com/upload。
撰写分析报告时,每个环节都需要附上证据:
- 扫描证据:提供显示过滤器
ip.src==172.16.1.110 and tcp.flags.syn==1的截图,高亮目标端口列表。 - 暴力破解证据:提供MySQL登录失败和成功那次TCP流的追踪截图,特别是包含登录尝试和
OK响应的部分。 - Webshell上传证据:提供导出HTTP对象中
shell.php的截图,以及该文件在VirusTotal的检测报告截图。 - 数据外泄证据:提供IO图表中出站流量峰的截图,以及包含大量数据的HTTP POST请求的追踪流截图。
这份由Wireshark流量分析构建出的、带有精确时间戳和完整证据链的报告,才是说服安全团队、管理层乃至执法机构采取行动的最有力武器。它不仅仅是指出了问题,更是清晰地重现了攻击的全过程。