20252818 2024-2025-2 《网络攻防实践》实践八
1.实践内容
动手实践任务一
对提供的rada恶意代码样本,进行文件类型识别,脱壳与字符串提取,以获得rada恶意代码的编写作者,具体操作如下:
(1)使用文件格式和类型识别工具,给出rada恶意代码样本的文件格式、运行平台和加壳工具;
(2)使用超级巡警脱壳机等脱壳软件,对rada恶意代码样本进行脱壳处理;
(3)使用字符串提取工具,对脱壳后的rada恶意代码样本进行分析,从中发现rada恶意代码的编写作者是谁?
动手实践任务二:分析Crackme程序
任务:在WinXP Attacker虚拟机中使用IDA Pro静态或动态分析crackme1.exe和crackme2.exe,寻找特定的输入,使其能够输出成功信息。
分析实践任务一:
分析一个自制恶意代码样本rada,并撰写报告,回答以下问题:
1、提供对这个二进制文件的摘要,包括可以帮助识别同一样本的基本信息;
2、找出并解释这个二进制文件的目的;
3、识别并说明这个二进制文件所具有的不同特性;
4、识别并解释这个二进制文件中所采用的防止被分析或逆向工程的技术;
5、对这个恶意代码样本进行分类(病毒、蠕虫等),并给出你的理由;
6、给出过去已有的具有相似功能的其他工具;
7、可能调查处这个二进制文件的开发作者吗?如果可以,在什么样的环境和什么样的限定条件下?
分析实践任务二:
Windows 2000系统被攻破并加入僵尸网络
任务:分析的数据源是用Snort工具收集的蜜罐主机5天的网络数据源,并通过编辑去除了一些不相关的流量并将其组合到了单独的一个二进制网络日志文件中,同时IP地址和其他特定敏感信息都已经被混淆以隐藏蜜罐主机的实际身份和位置。回答下列问题:
1、IRC是什么?当IRC客户端申请加入一个IRC网络时将发送那个消息?IRC一般使用那些TCP端口?
2、僵尸网络是什么?僵尸网络通常用于什么?
3、蜜罐主机(IP地址:172.16.134.191)与那些IRC服务器进行了通信?
4、在这段观察期间,多少不同的主机访问了以209.196.44.172为服务器的僵尸网络?
5、那些IP地址被用于攻击蜜罐主机?
6、攻击者尝试攻击了那些安全漏洞?
7、那些攻击成功了?是如何成功的?
2.实践过程
2.1 动手实践任务一:Rada 恶意代码样本识别、脱壳与作者分析
2.1.1 在 Kali Linux 虚拟机中查看 Rada 文件类型
首先将 RaDa.exe 放入 Kali Linux 虚拟机中。这里使用 Kali Linux 的原因是后面需要用 file、md5sum、strings 等命令查看样本的基础信息。
在 Kali Linux 终端中进入 RaDa.exe 所在目录,执行命令:
file RaDa.exe

从结果可以看出,RaDa.exe 是 Windows 平台下的 PE32 可执行文件,说明该文件不是 Linux 可执行程序,而是 Windows 环境中的可执行程序。后面对该文件进行 PEiD 查壳、脱壳和 IDA 分析时,需要放到 WinXP Attacker 虚拟机中完成。
2.1.2 在 Kali Linux 虚拟机中计算 Rada 样本 MD5
继续在 Kali Linux 虚拟机中执行:
md5sum RaDa.exe

得到样本 MD5 值:
caaa6985a43225a0b3add54f44a0d4c7
MD5 值可以用来标识同一个样本。如果其他分析报告中出现相同 MD5,基本可以判断分析对象是同一个文件。这里先记录 MD5,方便后面写样本摘要。
2.1.3 在 Kali Linux 虚拟机中提取脱壳前字符串
继续在 Kali Linux 虚拟机中执行:
strings RaDa.exe

从脱壳前的字符串结果可以看到一些信息,但是内容不完整,关键功能字符串并不多。因为该样本后面会被检测出使用 UPX 加壳,所以直接对原始文件执行 strings 不一定能看到完整内容。
这一部分的作用主要是做一个对比,后面脱壳后再执行 strings,可以看到脱壳前后分析效果的差别。
2.1.4 在 WinXP Attacker 虚拟机中使用 PEiD 查壳
接着将 RaDa.exe 放入 WinXP Attacker 虚拟机中。这里使用 WinXP Attacker 的原因是 PEiD、超级巡警脱壳机和 IDA Pro 都是在 Windows 环境中运行的。
在 WinXP Attacker 中打开 PEiD,然后将 RaDa.exe 拖入 PEiD。

PEiD 检测结果显示,该文件是 Windows PE 可执行文件,并且使用了 UPX 壳。
根据 PEiD 结果可以整理出以下信息。
| 项目 | 结果 |
|---|---|
| 文件格式 | PE 可执行文件 |
| 运行平台 | Windows |
| 程序类型 | Win32 程序 |
| 加壳工具 | UPX |
UPX 本身是一种常见压缩壳。正常软件可能使用 UPX 减小文件体积,恶意代码也可能使用 UPX 来隐藏部分字符串和代码逻辑。因为样本已经加壳,所以后续需要先脱壳再继续分析。
2.1.5 在 Kali Linux 虚拟机中使用 upx 命令辅助验证
为了和 PEiD 结果互相验证,也可以在 Kali Linux 虚拟机中使用 upx 查看样本加壳信息。
在 Kali Linux 中执行:
upx -l RaDa.exe

该结果可以进一步说明 RaDa.exe 存在 UPX 壳。这样 PEiD 图形化工具和命令行工具的结果可以互相印证。
2.1.6 在 WinXP Attacker 虚拟机中使用超级巡警脱壳
确认 RaDa.exe 使用 UPX 壳后,在 WinXP Attacker 虚拟机中打开超级巡警脱壳机。
具体步骤如下。
- 在 WinXP Attacker 中打开超级巡警脱壳机。
- 选择 RaDa.exe 文件。
- 点击给我脱。
- 等待脱壳完成。
- 保存脱壳后的文件。

脱壳完成后得到新的可执行文件。这里可以命名为 RaDa_unpacked.exe,后续 IDA 分析和 strings 分析都主要针对这个脱壳后的文件进行。
2.1.7 在 Kali Linux 虚拟机中提取脱壳后字符串
将 WinXP Attacker 中脱壳得到的 RaDa_unpacked.exe 复制到 Kali Linux 虚拟机中。
然后在 Kali Linux 中执行:
strings RaDa_unpacked.exe

和脱壳前相比,脱壳后的字符串更加完整,可以看到更多和远程控制、上传下载、路径、作者有关的字符串。这说明 UPX 加壳确实影响了直接静态分析,脱壳是后续分析的重要步骤。
2.1.8 在 WinXP Attacker 虚拟机中使用 IDA Pro 分析 Rada
将 RaDa_unpacked.exe 保留在 WinXP Attacker 虚拟机中,并使用 IDA Pro 打开。

因为该文件是 32 位 Windows PE 程序,所以这里使用 IDA 32 位版本。进入 IDA 后,先打开字符串窗口。
Shift + F12

如果字符串显示不完整,可以调整字符串显示方式。
Options -> ASCII string style... -> Unicode

在字符串窗口中继续查找,可以发现作者相关信息。
(c) Raul Siles && David Perez

这说明样本内部保留了作者信息。
2.1.9 在 WinXP Attacker 虚拟机中运行参数查看作者
除了在 IDA 中查看字符串,还可以在 WinXP Attacker 虚拟机的 cmd 中直接运行程序参数。
RaDa.exe --help
运行结果如下:

通过程序参数和 IDA 字符串分析可以相互验证,因此可以确定 Rada 样本中保留的作者信息为 Raul Siles 和 David Perez。
2.2 动手实践任务二:Crackme 程序分析
2.2.1 在 WinXP Attacker 虚拟机中准备 crackme 文件
将 crackme1.exe 和 crackme2.exe 放入 WinXP Attacker 虚拟机中。这里使用 WinXP Attacker 的原因是本部分需要使用 IDA Pro 分析 Windows 可执行文件,并且需要在 Windows 命令行中运行 crackme 程序验证结果。
查看文件摘要,将 crackme1.exe 和 crackme2.exe 放入 Kali Linux 虚拟机中执行 md5sum 和 file 命令。
在 Kali Linux 中执行:
md5sum crackme1.exe
md5sum crackme2.exe
file crackme1.exe
file crackme2.exe

从文件类型可以看出,两个 crackme 文件都是 Windows PE 可执行程序,所以主要分析环境仍然放在 WinXP Attacker 虚拟机中。
2.2.2 在 WinXP Attacker 虚拟机中分析 crackme1.exe
在 WinXP Attacker 虚拟机中打开 IDA Pro,并加载 crackme1.exe。
进入 IDA 后,先打开字符串窗口。
Shift + F12

在字符串窗口中可以看到几个关键字符串。
I think you are missing something.
Pardon? What did you say?
I know the secret
You know how to speak to programs, Mr. Reverse-Engineer
其中 I know the secret 明显像是程序要求输入的关键内容。双击该字符串,可以找到程序比较用户输入的位置。

继续查看反汇编逻辑,可以发现程序会判断命令行参数,并将用户输入和固定字符串进行比较。程序逻辑大致如下。
- 程序先判断用户是否输入参数。
- 如果没有输入参数,输出缺少内容的提示。
- 如果输入了参数,程序会比较输入内容是否为 I know the secret。
- 如果比较成功,输出成功提示。
- 如果比较失败,输出错误提示。
接着在 WinXP Attacker 的 cmd 中测试错误输入。
crackme1.exe 1 2

然后运行正确输入。
crackme1.exe "I know the secret"

程序输出成功提示,说明 IDA 分析结果正确。
所以 crackme1.exe 的正确运行方式为:
crackme1.exe "I know the secret"
2.2.3 在 WinXP Attacker 虚拟机中分析 crackme2.exe
继续在 WinXP Attacker 虚拟机中使用 IDA Pro 打开 crackme2.exe。

同样先查看字符串窗口。
Shift + F12

在 crackme2.exe 中也可以看到 I know the secret。但是直接在 WinXP Attacker 的 cmd 中运行:
crackme2.exe "I know the secret"

此时程序没有输出成功信息,说明 crackme2.exe 不只是判断输入内容,还有其他判断条件。
继续在 IDA 中查看逻辑,可以发现程序还会判断自身文件名是否为 crackmeplease.exe。

因此,crackme2.exe 的成功条件有两个。
- 输入内容需要是 I know the secret。
- 程序文件名需要是 crackmeplease.exe。
所以在 WinXP Attacker 的 cmd 中先执行复制命令:
copy crackme2.exe crackmeplease.exe

然后运行:
crackmeplease.exe "I know the secret"

此时程序输出成功信息,说明 crackme2.exe 的分析结果正确。
2.2.4 在 WinXP Attacker 虚拟机中分析 crackme2.exe 的异或逻辑
在 crackme2.exe 中还可以看到一段异或隐藏信息的逻辑。程序把一组数据和 0x42 进行异或,从而得到真正输出的内容。
IDA 中可以看到类似的数据区域。
.rdata:00403080 byte_403080 db 15h, 27h, 62h, 2Ah, 23h, 34h, 27h, 62h, 23h, 62h, 2Eh
.rdata:00403080 db 2Bh, 2 dup(36h), 2Eh, 27h, 62h, 31h, 27h, 21h, 30h
.rdata:00403080 db 27h, 36h, 78h, 62h, 1, 2Ah, 2Dh, 21h, 2Dh, 2Eh, 23h
.rdata:00403080 db 36h, 27h, 0

为了验证这段逻辑,可以写一个简单程序进行还原。
#include<bits/stdc++.h>
using namespace std;
int main()
{
int a[0x21]={0x15, 0x27, 0x62, 0x2A, 0x23, 0x34, 0x27, 0x62, 0x23, 0x62, 0x2E,
0x2B, 0x36, 0x2E, 0x27, 0x62, 0x31, 0x27, 0x21, 0x30,
0x27, 0x36, 0x78, 0x62, 0x1, 0x2A, 0x2D, 0x21, 0x2D, 0x2E, 0x23,
0x36, 0x27};
for (int i = 0; i < 0x21; ++i)
{
putchar((char)(a[i] ^ 0x42));
}
return 0;
}

通过这部分可以看出,crackme2.exe 不仅检查输入字符串和程序文件名,还使用了简单异或来隐藏输出信息。这个方法不复杂,但说明逆向分析时不能只看表面字符串,还要结合代码逻辑分析。
2.3 分析实践任务一:Rada 恶意代码样本分析
2.3.1 样本摘要
本部分根据前面对 RaDa.exe 的分析结果,整理样本摘要。
在 Kali Linux 虚拟机中执行:
file RaDa.exe
md5sum RaDa.exe
在 WinXP Attacker 虚拟机中使用 PEiD 查看样本加壳情况,并使用 IDA Pro 和参数运行方式查看作者信息。
整理结果如下。
| 项目 | 内容 |
|---|---|
| 文件名 | RaDa.exe |
| 文件格式 | PE32 executable |
| 运行平台 | Windows |
| 加壳情况 | UPX |
| MD5 | caaa6985a43225a0b3add54f44a0d4c7 |
| 作者信息 | Raul Siles && David Perez |
| 样本类型 | 后门程序或远程控制类恶意代码 |
其中,MD5 用于识别同一样本,文件格式说明样本运行在 Windows 系统中,UPX 说明样本经过压缩壳处理。作者信息可以通过 WinXP Attacker 中的 RaDa.exe --help 和 IDA 字符串窗口得到。
2.3.2 二进制文件的目的
通过在 Kali Linux 虚拟机中对脱壳后文件执行 strings,以及在 WinXP Attacker 虚拟机中使用 IDA 分析字符串,可以看到样本中存在远程通信相关路径。
http://10.10.10.10/RaDa/RaDa_commands.html

从路径名称可以看出,样本会尝试连接远程地址,并请求 RaDa_commands.html。该文件名中包含 commands,说明程序可能从远程页面获取控制命令。
结合样本中出现的 upload、download、screenshot 等字符串,可以判断 Rada 的主要目的包括:
- 在目标 Windows 主机上运行。
- 连接指定远程服务器。
- 请求远程命令文件。
- 根据命令执行上传、下载、截图等操作。
- 修改系统配置,实现持续运行。
- 为攻击者提供远程控制能力。
因此,该二进制文件不是普通应用程序,而是具有远程控制功能的后门类恶意代码。
2.3.3 二进制文件的不同特性
通过前面的分析,可以总结出 Rada 样本具有以下特性。
1. UPX 加壳特性
在 WinXP Attacker 虚拟机中使用 PEiD 检测,发现样本使用 UPX 壳。
加壳会影响直接静态分析,所以需要使用超级巡警脱壳机脱壳后继续分析。
2. 远程通信特性
在 Kali Linux 虚拟机中通过 strings,或者在 WinXP Attacker 虚拟机中通过 IDA,可以发现样本会访问:
10.10.10.10
并请求:
/RaDa/RaDa_commands.html
这说明样本存在远程通信行为。
3. 远程命令获取特性
RaDa_commands.html 这个路径说明样本可能会从远程服务器读取命令。攻击者可以通过修改该页面内容,让被控主机执行不同操作。
4. 文件上传下载特性
在字符串中可以看到 upload、download、get、put 等关键词。

这说明样本可能支持文件上传和下载功能。
5. 截图功能
在样本字符串中可以看到 screenshot 相关内容。

这说明样本可能具有截取目标主机屏幕内容的能力。
6. 持久化特性
样本可能会修改注册表,使自身开机自动运行。

该路径是 Windows 中常见的自启动注册表位置。由此可以判断,样本中存在通过注册表启动项实现持久化的相关线索。如果程序写入启动项,即使系统重启,恶意程序仍然可能继续运行。
7. 临时目录创建特性
样本可能会创建如下目录:
C:\RaDa\tmp

该目录可能用于保存下载文件、临时文件或执行结果。
8. 参数运行特性
在 WinXP Attacker 虚拟机中可以通过参数运行样本。
RaDa.exe --gui

这说明样本本身支持一定的命令行参数功能。
2.3.4 防止分析或逆向工程的技术
Rada 样本中最明显的反分析方式是 UPX 加壳。
UPX 加壳会压缩原始程序代码,使直接使用 strings 或 IDA 分析原始文件时,看到的信息不完整。虽然 UPX 不是很复杂的壳,但对初步静态分析仍然会造成干扰。
本实验中可以通过脱壳前后对比看出这一点。
在 Kali Linux 虚拟机中对原始样本执行:
strings RaDa.exe

对脱壳后的文件执行:
strings RaDa_unpacked.exe

脱壳后可以看到更多有意义的字符串,包括远程路径、功能字符串和作者信息。因此可以说明 UPX 加壳在该样本中起到了隐藏真实内容、增加分析难度的作用。
2.3.5 恶意代码分类
根据分析结果,Rada 样本更适合归类为后门程序或远程控制类恶意代码。
理由如下。
- 样本会主动连接远程服务器。
- 样本会请求远程命令页面。
- 样本具有上传、下载、截图等远程控制能力。
- 样本可能通过注册表实现持久化。
- 没有发现其感染其他正常文件的行为,所以不适合归类为传统病毒。
- 没有发现明显自我复制和主动传播机制,所以不适合归类为蠕虫。
所以,Rada 更像是攻击者用于控制目标主机的后门程序,而不是普通病毒或蠕虫。
2.3.6 相似功能的其他工具
和 Rada 功能相似的工具或恶意代码包括以下几类。
| 名称 | 相似点 |
|---|---|
| Setiri | 具有远程控制和信息获取能力 |
| GatSlag | 具有后门和远程控制特征 |
| Bobax | 可用于控制受害主机并执行恶意活动 |
| Netcat 后门 | 可以实现远程连接和命令执行 |
| PsExec 被滥用场景 | 可以用于远程执行程序和控制主机 |
这些工具和 Rada 的相似点是都可以让攻击者远程控制目标主机。不同点在于 Rada 更明显地通过 HTTP 路径获取远程命令,而有些工具更多依赖端口连接或远程服务执行。
2.3.7 是否可以调查出开发作者
在本次实验环境中,可以调查出样本中保留的作者信息。
第一种方法是在 WinXP Attacker 虚拟机中运行:
RaDa.exe --help

第二种方法是在 Kali Linux 虚拟机中对脱壳后的文件执行:
strings RaDa_unpacked.exe

第三种方法是在 WinXP Attacker 虚拟机中使用 IDA Pro 打开 RaDa_unpacked.exe,并在 Strings 窗口中查找作者信息。

最终得到作者信息为:
Raul Siles && David Perez
但是这里需要注意,这个结果只能说明样本中保留了这些作者信息。如果样本在真实攻击中被别人重新修改、重新加壳或者删除作者字段,就不能只靠字符串判断真实攻击者身份。更严谨的做法还需要结合样本来源、编译信息、远程地址、域名信息和历史样本关系综合判断。
2.4 分析实践任务二:Windows 2000 系统被攻破并加入僵尸网络
2.4.1 在 Kali Linux 虚拟机中准备流量文件
将 botnet_pcap_file.dat 放入 Kali Linux 虚拟机中。这里使用 Kali Linux 的原因是本部分需要使用 Wireshark、tcpdump 和 tcpflow 对 pcap 文件进行分析。
使用 Wireshark 打开 botnet_pcap_file.dat。

本部分分析的蜜罐主机IP地址为:
172.16.134.191
Windows 2000 主机只是流量中的被攻击对象,不需要单独启动 Windows 2000 虚拟机。
2.4.2 IRC 是什么,IRC 客户端加入网络时发送什么消息,IRC 常用哪些 TCP 端口
IRC 是 Internet Relay Chat 的缩写,中文一般称为互联网中继聊天。它是一种早期的即时通信协议,采用客户端和服务器模式。用户连接 IRC 服务器后,可以进入频道进行通信。
当 IRC 客户端申请加入 IRC 网络时,通常会发送 NICK 消息声明昵称,也会发送 USER 消息提供用户身份信息。如果服务器需要密码,还可能发送 PASS 消息。
IRC 常用 TCP 端口为:
6667
有些 IRC 服务也可能使用 6660 到 6669 之间的端口,或者使用加密通信端口。本次实验重点分析 TCP 6667 端口。
2.4.3 僵尸网络是什么,通常用于什么
僵尸网络是攻击者通过恶意代码控制大量主机后形成的受控主机网络。被控制的主机通常称为 Bot 或僵尸主机。攻击者可以通过控制服务器或 IRC 频道向这些主机下发命令。
僵尸网络通常用于:
- 发起 DDoS 攻击。
- 发送垃圾邮件。
- 窃取账号和敏感信息。
- 扫描和攻击其他主机。
- 下载并执行新的恶意代码。
- 作为跳板隐藏攻击者真实来源。
- 批量控制大量主机执行统一任务。
本次实验中的 Windows 2000 蜜罐主机被攻破后加入了基于 IRC 通信的僵尸网络。
2.4.4 蜜罐主机与哪些 IRC 服务器进行了通信
本步骤在 Kali Linux 虚拟机中完成。
在 Wireshark 中设置过滤条件:
ip.src == 172.16.134.191 and tcp.dstport == 6667

为了进一步筛选蜜罐主机主动连接 IRC 服务器的行为,继续使用过滤条件:
ip.src == 172.16.134.191 and tcp.dstport == 6667 and tcp.flags.syn == 1

然后在 Wireshark 中打开统计功能。
Statistics -> IPv4 Statistics -> All Addresses

通过统计结果可以发现,蜜罐主机与以下 IRC 服务器进行了通信。
209.196.44.172
207.172.16.150
24.197.194.106
其中后续重点分析的是:
209.196.44.172
2.4.5 有多少不同主机访问了以 209.196.44.172 为服务器的僵尸网络
本步骤在 Kali Linux 虚拟机中完成。
先安装 tcpflow。

然后使用 tcpflow 提取与 209.196.44.172 的 IRC 通信流量。
tcpflow -r botnet_pcap_file.dat "host 209.196.44.172 and port 6667"

执行完成后会生成对应的 TCP 会话文件。接着使用下面命令筛选 IRC 频道成员并去重统计。
sudo cat 209.196.044.172.06667-172.016.134.191.01152 | grep -a "^:irc5.aol.com 353" | sed "s/^:irc5.aol.com 353 rgdiuggac @ #x[^x]*x ://g" | tr ' ' '\n' | tr -d "\15" | grep -v "^$" | sort -u | wc -l

这条命令的作用是从 IRC 服务器返回的频道成员列表中提取主机信息,并进行去重统计。最终统计结果为:
3462
所以,在观察期间,有 3462个不同主机访问了以 209.196.44.172 为服务器的僵尸网络。
2.4.6 哪些 IP 地址被用于攻击蜜罐主机
本步骤在 Kali Linux 虚拟机中完成。
使用 tcpdump 从 botnet_pcap_file.dat 中筛选所有目的地址为蜜罐主机的流量,并提取源 IP。
tcpdump -n -nn -r botnet_pcap_file.dat 'dst host 172.16.134.191' | awk -F " " '{print $3}' | cut -d '.' -f 1-4 | sort | uniq | more > IP.txt;wc -l IP.txt

该命令的大致含义如下。
- 从 botnet_pcap_file.dat 中读取数据包。
- 筛选目的地址为 172.16.134.191 的数据包。
- 提取源 IP。
- 对源 IP 排序去重。
- 将结果保存到 IP.txt。
- 使用 wc -l 统计 IP 数量。
最终统计结果显示,共有:
165
个不同 IP 地址被用于攻击蜜罐主机。
查看 IP.txt 内容。
cat IP.txt

2.4.7 攻击者尝试攻击了哪些安全漏洞
本步骤在 Kali Linux 虚拟机中完成。
为了判断攻击者尝试攻击哪些漏洞,可以先从端口入手。不同端口对应不同服务,攻击者访问这些端口通常说明存在扫描或攻击尝试。
统计 TCP 响应端口。
tcpdump -r botnet_pcap_file.dat -nn 'src host 172.16.134.191' and tcp[tcpflags]== 0x12 | cut -d ' ' -f 3 | cut -d '.' -f 5 | sort | uniq

统计 UDP 响应端口。
tcpdump -r botnet_pcap_file.dat -nn 'src host 172.16.134.191' and udp | cut -d ' ' -f 3 | cut -d '.' -f 5 | sort | uniq

根据统计结果,攻击者尝试访问的 TCP 端口主要包括:
| 端口 | 服务 | 可能攻击方向 |
|---|---|---|
| 25 | SMTP | 邮件服务探测或攻击 |
| 80 | HTTP | Web 服务探测或攻击 |
| 135 | RPC | Windows RPC 相关漏洞 |
| 139 | NetBIOS-SSN | Windows 文件共享相关攻击 |
| 445 | SMB | Windows SMB 远程攻击或口令攻击 |
| 4899 | Radmin | 远程控制服务攻击 |
UDP 端口主要包括:
| 端口 | 服务 | 可能攻击方向 |
|---|---|---|
| 137 | NetBIOS Name Service | 主机名枚举和 NetBIOS 探测 |
从这些端口可以判断,攻击者主要针对 Windows 2000 系统上的 RPC、NetBIOS、SMB、HTTP、SMTP 和远程控制服务进行探测或攻击。其中 445 端口最值得重点分析,因为 SMB 服务在老旧 Windows 系统中经常成为攻击入口。
2.4.8 哪些攻击成功了,是如何成功的
判断攻击是否成功不能只看端口是否被访问。端口被访问只能说明存在扫描或攻击尝试,真正判断成功需要找到更具体的证据,例如文件传输、服务创建、远程执行等。
下面继续在 Kali Linux 虚拟机中使用 Wireshark 分析各端口流量。
1. 135 端口分析
Wireshark 过滤条件:
ip.addr == 172.16.134.191 && tcp.port ==135

135 端口对应 Windows RPC 服务。从流量看,该端口存在访问尝试,但没有发现明显的文件传输或远程控制证据,所以不能判断该端口攻击成功。
2. 139 端口分析
Wireshark 过滤条件:
ip.addr == 172.16.134.191 && tcp.port ==139

139 端口和 NetBIOS 文件共享有关。流量中可以看到连接或探测行为,但没有发现完整的成功控制过程,因此这里只能判断存在攻击尝试。
3. 25 端口分析
Wireshark 过滤条件:
ip.addr == 172.16.134.191 && tcp.port ==25

25 端口对应 SMTP 服务。从流量看存在访问行为,但没有明显利用成功证据,所以不能判断攻击成功。
4. 445 端口分析
Wireshark 过滤条件:
ip.addr == 172.16.134.191 && tcp.port ==445

在 445 端口流量中可以发现关键文件名:
PSEXESVC.EXE

PSEXESVC.EXE 通常和 PsExec 远程执行有关。攻击者可以通过 SMB 连接目标主机,再借助服务控制机制在远程主机上创建服务并执行程序。
继续查看相关数据包,可以看到 SVCCTL 相关内容。

SVCCTL 和 Windows 服务控制有关。如果在 SMB 流量中同时发现 PSEXESVC.EXE 和 SVCCTL,就说明攻击者很可能通过 SMB 服务在目标主机上进行了远程服务创建或远程命令执行。
因此,445 端口相关攻击可以判断为成功。成功过程大致为:
- 攻击者连接蜜罐主机的 SMB 服务。
- 攻击者通过某种方式获得访问权限。
- 攻击者向目标主机传输或调用 PSEXESVC.EXE。
- 攻击者通过 SVCCTL 创建或控制服务。
- 目标主机执行攻击者指定程序。
- Windows 2000 蜜罐主机被控制。
- 主机随后加入 IRC 僵尸网络。
5. 4899 端口分析
Wireshark 过滤条件:
ip.addr == 172.16.134.191 && tcp.port ==4899

4899 端口通常和 Radmin 远程控制服务有关。流量中存在访问尝试,但没有找到足够证据说明攻击者通过该端口成功控制主机。
6. 80 端口分析
Wireshark 过滤条件:
ip.addr == 172.16.134.191 && tcp.port ==80

80 端口对应 HTTP 服务。这里可以看到访问或探测行为,但没有明显发现上传文件、执行命令或其他成功利用证据,所以不能直接判断成功。
7. 137 端口分析
Wireshark 过滤条件:
ip.addr == 172.16.134.191 && udp.port ==137

137 端口对应 NetBIOS Name Service,一般用于名称查询和主机信息收集。该端口更多体现攻击前的信息探测,不能单独作为攻击成功证据。
综合来看,本次流量中最明确成功的是 445 端口相关攻击。主要证据是 SMB 流量中出现 PSEXESVC.EXE 和 SVCCTL,说明攻击者通过 SMB 和服务控制机制实现远程执行,最终导致蜜罐主机被攻破并加入 IRC 僵尸网络。
3.学习中遇到的问题及解决
问题1:一开始没有分清哪些步骤该在哪个虚拟机中做
刚开始容易把所有操作都写成放入实验环境,但这样不够清楚。比如 file、md5sum、strings 更适合在 Kali Linux 中执行,而 PEiD、超级巡警、IDA Pro 和 crackme 运行验证需要在 WinXP Attacker 中完成。
问题1解决方案:
重新整理两个虚拟机的分工。WinXP Attacker 主要负责 Windows 程序分析和图形化逆向工具,Kali Linux 主要负责命令行分析和网络流量分析。之后每一步都明确写在哪个虚拟机中操作,避免环境描述不清楚。
问题2:Rada 样本直接 strings 分析时信息不完整
在 Kali Linux 中直接对 RaDa.exe 执行 strings 时,能看到的信息不多,无法完整判断样本功能。
问题2解决方案:
先在 WinXP Attacker 中使用 PEiD 判断加壳情况,确认样本存在 UPX 壳。然后在 WinXP Attacker 中用超级巡警脱壳机进行脱壳,再把脱壳后的文件复制到 Kali Linux 中重新执行 strings。脱壳后的结果明显更完整。
问题3:IDA 打开程序后不知道从哪里开始分析
刚开始在 WinXP Attacker 中用 IDA 打开程序后,反汇编代码很多,直接看代码不容易找到关键位置。
问题3解决方案:
先使用 Shift + F12 打开字符串窗口,从字符串入手分析。分析 crackme 程序时重点查找 I know the secret。分析 Rada 样本时重点查找 authors、RaDa_commands、upload、download、screenshot 等关键词。通过字符串再跳转到交叉引用位置,比直接看反汇编更容易定位核心逻辑。
问题4:crackme2.exe 输入正确字符串后仍然失败
在 WinXP Attacker 中运行 crackme2.exe 时,输入 I know the secret 后没有成功。一开始以为输入错了,但 crackme1.exe 使用同样字符串可以成功。
问题4解决方案:
继续用 IDA 分析 crackme2.exe,发现它不仅判断输入内容,还判断程序自身文件名是否为 crackmeplease.exe。因此需要先在 WinXP Attacker 中执行:
copy crackme2.exe crackmeplease.exe
然后运行:
crackmeplease.exe "I know the secret"
这样才能得到成功提示。
问题5:Wireshark 中数据包太多,难以定位 IRC 通信
在 Kali Linux 中用 Wireshark 打开 botnet_pcap_file.dat 后,数据包数量很多,直接查看很难找到关键通信。
问题5解决方案:
先根据 IRC 常用端口 6667 设置过滤条件:
ip.src == 172.16.134.191 and tcp.dstport == 6667
为了查看蜜罐主机主动连接 IRC 服务器的行为,再增加 SYN 条件:
ip.src == 172.16.134.191 and tcp.dstport == 6667 and tcp.flags.syn == 1
这样就可以快速定位蜜罐主机通信过的 IRC 服务器。
问题6:统计僵尸网络主机数量时不能手动数
IRC 频道成员数量很多,手动统计容易遗漏或者重复。
问题6解决方案:
在 Kali Linux 中使用 tcpflow 提取 TCP 会话,再通过 grep、sed、tr、sort、wc 等命令进行筛选和去重统计。最终得到访问 209.196.44.172 的不同主机数量为 3462。
问题7:不知道如何判断攻击是否成功
一开始看到 135、139、445、4899 等端口都有流量,容易误以为这些攻击都成功了。
问题7解决方案:
端口有流量只能说明有扫描或尝试,不能说明攻击成功。判断成功需要继续找文件传输、服务创建、远程执行等证据。本次实验中,445 端口流量中出现 PSEXESVC.EXE 和 SVCCTL,因此可以判断 SMB 相关攻击成功。
4.实践总结
本次实验内容比较多,前半部分是恶意代码和逆向分析,后半部分是网络流量取证。做完之后,我感觉这次实验最重要的不是单独会用某一个工具,而是要知道不同工具适合放在哪个步骤中使用。
在 Rada 样本分析中,我先在 Kali Linux 中用 file、md5sum 和 strings 查看基础信息,再在 WinXP Attacker 中使用 PEiD 查壳、超级巡警脱壳和 IDA Pro 分析。这个过程让我理解了加壳对静态分析的影响。脱壳前 strings 能看到的信息有限,脱壳后才能看到更多远程路径、功能字符串和作者信息。
在 Crackme 分析中,我主要在 WinXP Attacker 中完成。crackme1.exe 的关键是输入字符串,crackme2.exe 除了输入字符串外,还判断程序文件名。这个过程让我认识到逆向分析不能只靠运行测试,还需要看程序内部判断逻辑。IDA 的字符串窗口和交叉引用功能在这里很有用。
在 Botnet 流量分析中,我主要在 Kali Linux 中完成。通过 Wireshark 可以快速过滤 IRC 通信,通过 tcpflow 可以提取 TCP 会话,通过 tcpdump 可以统计攻击 IP 和端口。最开始我以为端口被访问就代表攻击成功,但后面发现还需要结合更具体的证据。本次实验中,445 端口出现 PSEXESVC.EXE 和 SVCCTL,才是判断攻击成功的重要依据。
总体来说,本次实践把文件分析、程序逆向和流量取证结合在了一起。以后分析类似问题时,应该先明确实验环境,再根据任务选择合适工具。Windows 程序分析主要放在 WinXP Attacker 中,命令行统计和流量分析主要放在 Kali Linux 中。这样实验过程会更清楚,报告中截图和文字说明也更容易对应。

浙公网安备 33010602011771号