20252902 2025-2026-2 《网络攻防实践》第8周作业
20252902 2025-2026-2 《网络攻防实践》第8周作业
1. 实验内容
本次实验围绕恶意代码静态分析、简单逆向分析以及僵尸网络流量分析展开,主要包括以下四部分:
- 对 RaDa 恶意代码样本进行文件类型识别、加壳判断、脱壳处理和字符串提取,找出样本作者信息。
- 使用 IDA Pro 分析
crackme1.exe与crackme2.exe,通过静态分析和运行验证找出能够触发成功输出的输入条件。 - 对 RaDa 样本进行进一步分析,回答样本摘要、行为目的、恶意特性、反分析技术、样本分类、相似工具和作者溯源等问题。
- 分析
botnet_pcap_file.dat网络日志,理解 IRC 僵尸网络通信过程,并判断蜜罐主机受到的攻击方式和攻击结果。
实验中使用的主要工具包括:Kali Linux、WinXP Attacker、IDA Pro、PEiD、超级巡警脱壳工具、file、strings、md5sum、Process Explorer、Wireshark、tcpflow、tcpdump 等。
2. 实验过程
2.1 RaDa 样本识别与脱壳
首先将学习通下载的 rada.rar 解压,并把样本放入 Kali 和 WinXP 环境中,便于分别使用 Linux 命令行工具和 Windows 逆向工具进行观察。
在 Kali 中使用 file /home/kali/Desktop/rada/RaDa.exe 查看文件基本类型。结果显示该文件是 PE32 executable for MS Windows 4.00 (GUI), Intel i386, 3 sections,说明它是 32 位 Windows 图形界面可执行文件,目标平台为 x86 Windows。
随后将文件复制到 WinXP Attacker 虚拟机中,使用命令行和工具继续分析。
直接对原始 RaDa.exe 执行 strings 后,可读字符串较少,内容也比较混乱,说明样本很可能经过了压缩壳或其他形式的处理。
使用 PEiD 打开 RaDa.exe 后,工具识别出其壳为 UPX 0.89.6 - 1.02 / 1.05 - 2.90 -> Markus & Laszlo。因此后续需要先脱壳,再进行字符串和行为分析。
接着使用 WinXP 中的超级巡警虚拟机自动脱壳器处理样本,脱壳后生成 RaDa_unpacked.exe。
对脱壳后的文件再次提取字符串,能看到更多有意义的 API 调用、路径、URL 和提示信息。通过执行 RaDa.exe --authors,可以得到作者信息为:
Raul Siles & David Perez
2.2 Crackme 程序分析
2.2.1 crackme1.exe
打开 IDA Pro 后载入 crackme1.exe,先查看函数调用图。调用关系中可以看到 strcmp、printf、fprintf 等函数,说明程序主要逻辑很可能是检查命令行输入并输出不同提示。
进一步定位到 sub_401280 函数后,查看流程图和汇编逻辑。程序会先判断参数个数,然后使用 strcmp 比较输入内容。
根据分析,crackme1.exe 的运行规则如下:
| 运行情况 | 程序输出 |
|---|---|
| 不带参数运行 | 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" 完全一致。
if (argc != 2) {
puts("I think you are missing something.");
} else if (strcmp(argv[1], "I know the secret") == 0) {
puts("You know how to speak to programs, Mr. Reverse-Engineer");
} else {
puts("Pardon? What did you say?");
}
命令行验证结果与静态分析一致,输入正确字符串后成功输出了 Reverse-Engineer 相关提示。
2.2.2 crackme2.exe
继续使用 IDA Pro 打开 crackme2.exe。函数调用图中同样可以看到字符串比较和输出函数,主要逻辑仍然集中在 sub_401280 附近。
与 crackme1.exe 相比,crackme2.exe 多了一层文件名校验。它不仅要求参数为 "I know the secret",还要求程序自身文件名为 crackmeplease.exe。如果直接以原文件名运行,即使参数正确,也会输出:
I have an identity problem.
继续跟进代码可以看到,当参数和文件名都满足要求后,程序会从 0x00403080 附近读取一段数据,并与 0x42 进行异或运算。部分解密过程如下:
| 原始字节 | 运算 | 字符 |
|---|---|---|
0x15 |
0x15 ^ 0x42 = 0x57 |
W |
0x27 |
0x27 ^ 0x42 = 0x65 |
e |
0x62 |
0x62 ^ 0x42 = 0x20 |
空格 |
0x2A |
0x2A ^ 0x42 = 0x68 |
h |
完整异或解密后的输出为:
We have a little secret: Chocolate
将 crackme2.exe 复制并重命名为 crackmeplease.exe,再输入 "I know the secret",程序成功输出 We have a little secret: Chocolate,说明分析结果正确。
2.3 RaDa 恶意代码综合分析
1. 二进制文件摘要
对 RaDa.exe 执行 md5sum,得到 MD5:
caaa6985a43225a0b3add54f44a0d4c7
同时,file 工具显示它是 32 位 Windows PE GUI 程序,x86 架构,共 3 个节区。PEiD 识别到 UPX 壳,说明原始样本经过压缩或加壳处理。
2. 二进制文件目的
从脱壳后字符串和 Process Explorer 的 Strings 视图可以看到,RaDa 样本内置了 http://10.10.10.10/RaDa 相关 URL,并会尝试下载 RaDa_commands.html。这说明它不是单纯的本地破坏程序,而是会连接远程控制端获取命令。
综合字符串信息判断,该样本的主要目的包括:
- 与远程控制服务器通信,获取后续执行命令。
- 在本机创建或使用
C:\RaDa相关目录保存临时文件和命令文件。 - 通过注册表操作实现持久化或配置修改。
- 在满足条件时执行扫描、传播或 DDoS 相关行为。
3. 样本具有的不同特性
在字符串中可以观察到 RegWrite、RegRead、RegDelete 等内容,说明样本会通过 Windows 脚本对象或相关接口读写注册表。它还包含内网网段、远程 URL、命令文件名、临时路径等信息,体现出后门控制、系统配置修改和网络探测能力。
样本的主要特征可以概括为:
- 使用 HTTP 方式获取控制命令。
- 具备注册表读写能力,可能用于自启动、配置保存或清理痕迹。
- 存在内网扫描和传播相关线索。
- 存在 DDoS 攻击相关功能。
- 在样本中保留作者和提示字符串,如
Security through obscurity is the key。
4. 反分析或反逆向技术
RaDa 采用了 UPX 加壳。加壳会降低直接 strings、静态扫描和反汇编的可读性,因此需要先脱壳才能看到更多有效字符串。
此外,样本还包含虚拟机或分析环境判断相关线索。也就是说,它可能会根据当前运行环境改变行为,避免在分析环境中完全暴露恶意功能。这种做法属于常见的反分析技术。
5. 样本分类
该样本更适合归类为后门程序或远控木马,同时带有蠕虫和 DDoS 工具特征。
理由如下:
- 它会访问远程 URL 并下载命令文件,符合后门或远控木马的控制方式。
- 它存在注册表操作和持久化相关行为。
- 它包含局域网扫描和传播线索,具有蠕虫式扩散倾向。
- 它还具备 DDoS 相关功能,可被控制端用于攻击其他目标。
6. 具有相似功能的工具
历史上与 RaDa 功能相近的恶意程序或工具包括:
- Agobot / Phatbot:早期模块化僵尸程序,支持扫描、传播、DDoS 和远程控制。
- Sdbot / Rbot:常见 IRC Bot,具备命令控制、漏洞传播和拒绝服务攻击能力。
- Gh0st RAT:典型远控木马,可执行远程控制、文件操作和信息收集。
- Poison Ivy:经典后门工具,常用于持久化控制和远程管理。
- Meterpreter:属于 Metasploit 框架中的合法渗透测试载荷,但其文件管理、远程执行、内网探测等能力与后门行为有相似之处。
7. 作者调查
通过 RaDa.exe --authors 可以得到样本自带作者信息:Raul Siles & David Perez。结合样本字符串中出现的时间和作者信息,可以初步判断该样本由这两名作者制作。
不过,这种判断依赖样本内部字符串和命令输出,只能说明该二进制文件中记录了这些作者信息。如果要进行严格归因,还需要结合样本来源、发布时间、哈希、公开资料和网络行为等证据,不能仅凭字符串就推断真实攻击者身份。
2.4 僵尸网络流量分析
1. IRC 是什么?加入 IRC 网络时发送哪些消息?常用端口有哪些?
IRC,即 Internet Relay Chat,是一种基于文本的即时通信协议,采用客户端和服务器模式。早期很多僵尸网络喜欢使用 IRC 作为命令与控制通道,因为 IRC 的频道机制便于控制者向大量主机广播命令。
IRC 客户端连接服务器后,通常需要发送:
NICK:设置昵称。USER:提交用户名、主机名、服务器名和真实姓名等信息。
如果服务器要求认证,可能还会先发送 PASS。注册完成后,客户端可以通过 JOIN 加入指定频道。
IRC 常见 TCP 端口包括:
6667:最常见的明文 IRC 端口。6660-6669:常见备用端口范围。6697:常用于 SSL/TLS 加密 IRC。
2. 僵尸网络是什么?通常用于什么?
僵尸网络是由大量被恶意软件感染并被攻击者集中控制的主机组成的网络。被控制的主机通常被称为僵尸主机或肉鸡,控制者可以通过 C2 服务器、IRC 频道、HTTP 接口或 P2P 网络下发命令。
僵尸网络常见用途包括:
- 发起 DDoS 攻击。
- 发送垃圾邮件或钓鱼邮件。
- 窃取账号、口令和其他敏感信息。
- 传播恶意软件。
- 充当代理或跳板隐藏攻击者真实位置。
- 执行点击欺诈、挖矿等牟利行为。
3. 蜜罐主机与哪些 IRC 服务器通信?
使用 Wireshark 打开 botnet_pcap_file.dat,先观察总体数据包情况。
由于 IRC 常用端口是 6667,因此使用过滤条件:
ip.src == 172.16.134.191 and tcp.dstport == 6667
再查看 IPv4 地址统计,可以看到蜜罐主机 172.16.134.191 主要与以下 IRC 服务器发生通信:
209.196.44.17266.33.65.58209.126.161.2963.241.174.144217.199.175.10
4. 有多少不同主机访问了 209.196.44.172 这个僵尸网络服务器?
安装 tcpflow 后,使用如下命令提取与 209.196.44.172:6667 相关的流量:
tcpflow -r /home/kali/Desktop/botnet_pcap_file.dat "host 209.196.44.172 and port 6667"
随后对生成的流量文件进行过滤、去重和统计:
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
统计结果为 3461,说明在观察期间共有 3461 台不同主机访问过以 209.196.44.172 为服务器的僵尸网络。
5. 哪些 IP 地址被用于攻击蜜罐主机?
为了统计所有向蜜罐主机 172.16.134.191 发送数据的源 IP,使用 tcpdump 读取数据包并通过管道进行字段提取、排序和去重:
tcpdump -n -nn -r /home/kali/Desktop/botnet_pcap_file.dat 'dst host 172.16.134.191' \
| awk -F " " '{print $3}' \
| cut -d '.' -f 1-4 \
| sort \
| uniq \
> 20252902ljy.txt
根据统计结果,共有 165 个不同 IP 地址向蜜罐主机发起了连接或攻击流量。由于完整列表较长,正文中记录统计结果,详细 IP 可在生成的文本文件中查看。
6. 攻击者尝试攻击了哪些安全漏洞?
通过统计蜜罐主机相关 TCP 连接,可以看到涉及的主要 TCP 端口有:
135、139、25、445、4899、80
继续统计 UDP 流量,发现主要涉及 UDP 137 端口。
这些端口对应的可能攻击方向如下:
| 端口 | 协议或服务 | 可能含义 |
|---|---|---|
| TCP 135 | MSRPC / DCOM | 尝试利用 Windows RPC 类漏洞 |
| TCP 139 | NetBIOS Session / SMB | 尝试访问 Windows 文件共享 |
| TCP 25 | SMTP | 可能探测邮件服务或开放中继 |
| TCP 445 | SMB over TCP | 尝试 Windows 共享、远程服务或 PsExec 类攻击 |
| TCP 4899 | Radmin | 尝试远程管理服务连接 |
| TCP 80 | HTTP | 可能针对 Web 服务进行蠕虫或溢出攻击 |
| UDP 137 | NetBIOS Name Service | NetBIOS 名称查询和主机枚举 |
7. 哪些攻击成功了?如何成功?
135 端口:过滤 ip.addr == 172.16.134.191 && tcp.port == 135 后,主要看到连接建立和结束过程,没有发现明显攻击载荷或成功控制痕迹,因此不能判断为成功。
139 端口:过滤 TCP 139 后,可以看到 SMB / NBSS 相关通信,但没有发现能够证明攻击成功的文件上传、远程服务创建或权限获取信息。
25 端口:过滤 TCP 25 后,主要是连接尝试,没有看到完整 SMTP 攻击链或利用成功证据。
445 端口:过滤 TCP 445 后发现了关键证据。流量中出现 PSEXESVC.EXE,这是 PsExec 在远程主机上创建服务时常见的服务端组件名称。结合后续可以看到 ADMIN$、Administrator 等信息,说明攻击者通过 SMB/管理共享方式上传并启动远程服务,成功获得了对蜜罐主机的远程执行能力。
因此,明确成功的攻击是 TCP 445 端口上的 SMB / PsExec 类攻击。其成功过程可以概括为:攻击者连接目标 SMB 服务,利用管理员凭据或管理共享上传 PSEXESVC.EXE,再通过远程服务执行命令,使蜜罐主机被纳入后续控制。
4899 端口:过滤 TCP 4899 后,能看到连接尝试被 RST 拒绝,说明攻击者尝试访问 Radmin 服务,但未能建立有效会话。
80 端口:过滤 TCP 80 后,可以看到大量 HTTP 相关数据和异常填充内容,存在蠕虫或缓冲区溢出攻击尝试的迹象。截图中也能看到与 worm 相关的字符串,但仅根据这些信息,成功证据没有 445 端口明显,因此这里判断为存在攻击尝试,是否完全成功需要结合后续主机行为进一步确认。
137 端口:过滤 UDP 137 后,主要看到 NBNS 查询流量,属于 NetBIOS 名称探测或枚举行为,没有直接攻击成功的证据。
综上,本次流量中最明确的成功攻击为 TCP 445 端口上的 SMB/PsExec 类远程执行。其他端口多数体现为扫描、探测或攻击尝试。
3. 实验中遇到的问题及解决方法
在 Kali 中安装 tcpflow 时,一开始出现 Temporary failure resolving 'http.kali.org',说明虚拟机当时 DNS 或网络连接存在问题。检查虚拟机网络配置后重新执行安装命令,tcpflow 成功安装,后续也顺利生成了 report.xml 和对应的流量文件。
另外,在分析 RaDa 时,原始文件直接查看字符串效果不好。通过 PEiD 确认 UPX 壳后,先脱壳再分析,字符串信息明显增多,也更容易定位 URL、注册表操作和作者信息。
4. 实验总结与体会
这次实验把恶意代码分析和网络流量分析结合在了一起。通过 RaDa 样本,我熟悉了文件类型识别、加壳判断、脱壳和字符串分析的基本流程,也体会到恶意代码经常会使用加壳、环境判断等方式增加分析难度。
在 Crackme 部分,我进一步练习了使用 IDA 查看函数调用图、流程图和关键字符串,理解了命令行参数检查、文件名校验以及 XOR 简单加密的逆向思路。
在僵尸网络流量分析部分,我学会了通过 Wireshark、tcpflow 和 tcpdump 从大量数据包中筛选出关键通信关系,并根据端口、协议、文件名和认证痕迹判断攻击过程。尤其是 TCP 445 端口中出现的 PSEXESVC.EXE,让我更直观地理解了远程服务执行和 Windows 管理共享在攻击中的表现形式。

浙公网安备 33010602011771号