20242323 2026-2027-1 《网络与系统攻防技术》实验四实验报告
1. 基础知识
1.1 PE 文件结构与加壳脱壳技术
- PE 文件:Windows 下的可执行文件(如 .exe、.dll)被称为 PE 文件,包含文件头、节区(如
.text代码段)和导入表。 - 加壳原理:恶意代码作者为了逃避杀毒软件的特征码扫描,常使用 UPX 等工具压缩加密原始代码。程序运行时,外壳(Stub)会先在内存中还原原始代码。
- 脱壳处理:为了进行逆向分析,需要先将加壳的样本脱壳,还原出真实的代码和字符串。
1.2 逆向工程与静态分析原理
- 静态分析:不运行程序,通过查看二进制内容推断行为。
- 核心汇编指令:
push:将操作数压入栈(常用于传参)。call:调用函数。strcmp:比较字符串。若相等则返回 0。jz(Jump if Zero):条件跳转指令。若比较结果为 0(即密码正确),则跳转到成功输出分支。
- 交叉引用 (Xrefs):在 IDA 中通过字符串定位汇编代码的关键技巧。
1.3 僵尸网络与 IRC 通信机制
- 僵尸网络:攻击者通过 C&C 信道一对多控制大量肉鸡,常用于发起 DDoS 攻击。
- IRC 协议:早期僵尸网络常用通信协议,基于 TCP 6667 端口。肉鸡上线时会发送
NICK和USER消息。
1.4 网络流量取证分析技术
- Wireshark 过滤:按 IP (
ip.addr)、端口 (tcp.port) 或 TCP 标志位 (tcp.flags.syn == 1) 提取关键数据。 - 漏洞特征识别:针对 135 端口的 DCOM RPC 漏洞(MS03-026)和 1434 端口的 SQL Slammer 漏洞具有极其明显的畸形包特征。
2. 实验内容
- 对 Rada 恶意代码样本进行文件类型识别、脱壳与字符串提取。
- 使用 IDA Pro 逆向破解
crackme1.exe和crackme2.exe。 - 分析 Rada 样本并回答 8 个问题。
- 对 Snort 收集的蜜罐网络数据源进行取证分析,回答 7 个问题。
3. 实验过程
3.1 任务一:Rada 样本脱壳与字符串提取
【方案简介】:使用 PEiD 识别文件加壳信息,使用脱壳工具对样本进行脱壳,最后通过 IDA Pro 提取字符串定位作者。
【操作步骤】:
- 将带壳的
RaDa_20242323.exe拖入 PEiD,识别出文件格式为 PE32,运行平台为 Win32,加壳工具为 UPX。 - 使用脱壳工具对样本进行脱壳处理,成功去除了 UPX 壳保护,生成了脱壳后的文件
rada_unpacked_20242323.exe。 - 将脱壳后的文件拖入 IDA Pro,使用
Shift + F12提取字符串,通过搜索成功定位到开发者明文信息:Raul Siles 和 David Perez。
PEiD查壳截图
IDA Pro 搜到作者名的截图
3.2 任务二:IDA Pro 破解 Crackme
【方案简介】:利用 IDA Pro 静态分析定位关键比较函数 strcmp,逆向推导口令并验证。
【操作步骤】:
- 破解 Crackme1:将
crackme1.exe拖入 IDA,在 Strings 窗口发现关键字符串"I know the secret"。通过交叉引用定位到call strcmp代码。在 CMD 中运行crackme1.exe "I know the secret",成功输出成功信息。 - 破解 Crackme2:该程序自带文件名检测机制。将
crackme2.exe复制并重命名为crackmeplease.exe。在 IDA 中定位到同样的比较逻辑。在 CMD 中运行crackmeplease.exe "I know the secret",成功获取隐藏信息Chocolate。
Crackme1 的 IDA 代码截图
Crackme1 的 CMD 回显截图
Crackme2 的 IDA 代码截图
Crackme2 的 CMD 回显截图
3.3 任务三:Rada 样本分析报告
【解答】:
- 摘要:样本文件名为
RaDa_20242323.exe,是一个运行于 Win32 平台的 32 位 PE 可执行文件,大小约 107KB,使用了 UPX 加壳。通过 IDA 提取字符串,包含(c) Raul Siles & David Perez版权信息。 - 目的:它是一个远程访问木马(RAT)。动态测试中,运行该样本会弹出带有
Scan Of The Month 32 (SotM) - September 2004和honeynet.org的网页提示,证明它是 Honeynet 蜜网项目用于安全教学和研究的后门样本。 - 不同特性:具备进程驻留与文件操作特性。通过
Process Explorer动态监控发现,该程序运行后会在内存中驻留(PID 3584 等),并申请文件操作句柄与加载外部 DLL,具备典型的后门控制功能。 - 防止被分析的技术:主要采用了 UPX 加壳技术 隐藏代码;同时结合后续的逆向分析,发现其需要使用专业的脱壳工具才能还原代码,增加了一定的静态分析难度。
- 分类及理由:属于后门(Backdoor)/ 特洛伊木马(Trojan)。理由:它不具备寄生感染能力(非病毒),也不具备自主扫描传播能力(非蠕虫),而是潜伏并为攻击者提供访问通道。
- 相似工具:BO2K (Back Orifice 2000)、冰河、灰鸽子、Netcat (nc)。
- 作者溯源:可以调查出作者。在隔离的虚拟机环境、样本未被重度混淆的条件下,通过脱壳并使用 IDA Pro 静态提取字符串,成功提取到了作者明文信息:Raul Siles 和 David Perez。
- 5 种检测方法:
- 特征码检测:提取脱壳后的恶意代码特有字节序列,加入杀软病毒库。
- 行为监控:监控 API 调用,如发现非法调用
SetWindowsHookEx等敏感函数即拦截。 - 注册表监控:监控系统
Run等自启动项,发现异常写入立即报警。 - 网络流量监控:检测内网主机向非标准端口或已知 C2 IP 发起的异常外连。
- 内存扫描:针对加壳样本,在程序运行解密时,扫描内存中的恶意代码特征。
Process Explorer 抓到 Rada 进程的截图
3.4 任务四:取证分析实践
【解答】:
- IRC 及加入消息:IRC 是互联网中继聊天协议。客户端申请加入时,会发送
NICK(设置昵称)和USER(用户信息)消息。一般使用 TCP 6667 端口。 - 僵尸网络及用途:是指攻击者通过 C&C 信道一对多控制的大量肉鸡网络。通常用于发起大规模 DDoS 攻击、发送垃圾邮件或窃取敏感信息。
- 通信的 IRC 服务器:过滤
ip.addr == 209.196.44.172,发现蜜罐主机172.16.134.191成功连接该 IP 的 6667 端口,并收到了NOTICE响应,证明僵尸网络上线成功。 - 访问僵尸网络的主机数:在 Wireshark 端点统计中,观察到有数十台不同的 IP 主机访问了该僵尸网络服务器。
- 攻击源 IP:过滤向蜜罐发起的 SYN 扫描包,发现大量异常 IP(如
129.116.182.239、24.161.196.103等)对蜜罐发起了连接。 - 攻击的漏洞:通过过滤
dcerpc发现大量针对 DCOM RPC (MS03-026) 的探测包,同时抓包数据中包含具有0x01010101特征的 UDP 1434 包,指向 SQL Slammer 漏洞。 - 成功的攻击及方式:MS03-026 漏洞攻击成功。攻击者向蜜罐的 135 端口发送特制的畸形 RPC 请求(包含
\x90NOP 滑行区),导致栈溢出并执行恶意代码。随后,蜜罐主机主动连接 IRC 服务器上线,正式沦为肉鸡。
Wireshark IRC通信截图
Wireshark NICK/USER上线截图
Wireshark SYN扫描截图
Wireshark DCE/RPC溢出截图
4. 问题及解决方案
问题1:在 Wireshark 中过滤 dcerpc 时,由于没有超长的数据包,未能一眼看出溢出代码。 解决方案:通过查看数据包的十六进制窗口(Packet Bytes),发现在畸形 RPC 请求中,包含大量连续的 90 90 90 90...(NOP 滑行区)特征,这直接证明了溢出 Shellcode 的存在,结合蜜罐主动上线 IRC 的结果,确认了攻击成功。
问题2:在使用 IDA 分析 crackme2.exe 时,输入已知密码却提示错误。 解决方案:通过查看 IDA 汇编代码发现,程序会调用 strcmp 比较当前运行的文件名是否为 "crackmeplease.exe"。将文件重命名后,再次输入密码即验证成功。
5. 学习感悟、思考等
这次实验涵盖了恶意代码的静态分析、逆向破解以及网络流量取证。整个过程虽然遇到了不少阻碍,但也让我对安全分析的底层逻辑有了更具体的认识。
在逆向分析环节,我体会到程序逻辑往往比表面看起来复杂。例如在破解 crackme2 时,直接输入正确的字符串口令并没有通过校验。通过 IDA 仔细阅读汇编代码才发现,程序在比对密码前,先使用 strcmp 校验了当前运行的文件名。将程序重命名为 crackmeplease.exe 后才成功获取隐藏信息。这让我认识到,静态分析不能仅停留在寻找字符串,必须理清完整的执行流和前置条件。
网络流量取证部分则锻炼了从海量数据中提取有效信息的能力。面对几十兆的抓包文件,盲目查找是行不通的。通过使用 Wireshark 的过滤语法,我逐步将范围缩小到特定 IP 和端口。在分析 DCOM RPC 攻击时,直接查看数据包的十六进制载荷,观察到其中包含大量的 \x90(NOP 指令)滑行区,随后又在 IRC 流量中抓到了蜜罐主机发送 NICK 上线指令。这种将漏洞利用特征与网络通信行为结合起来的分析方式,让我对僵尸网络的运作机制有了直观的理解。
总的来说,这次实验让我掌握了查壳脱壳、逆向调试和流量过滤的基本方法。同时也让我意识到,安全分析不能仅仅依赖自动化工具,还需要对底层协议(如 TCP/IRC)和程序指令(如汇编)有扎实的理解,才能在面对异常数据时准确定位问题。
6. 参考资料
- IDA Pro 官方文档
- Wireshark 官方文档
- Honeynet Project