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. 实验内容

  1. 对 Rada 恶意代码样本进行文件类型识别、脱壳与字符串提取。
  2. 使用 IDA Pro 逆向破解 crackme1.exe 和 crackme2.exe。
  3. 分析 Rada 样本并回答 8 个问题。
  4. 对 Snort 收集的蜜罐网络数据源进行取证分析,回答 7 个问题。

3. 实验过程

3.1 任务一:Rada 样本脱壳与字符串提取

【方案简介】:使用 PEiD 识别文件加壳信息,使用脱壳工具对样本进行脱壳,最后通过 IDA Pro 提取字符串定位作者。

【操作步骤】:

  1. 将带壳的 RaDa_20242323.exe 拖入 PEiD,识别出文件格式为 PE32,运行平台为 Win32,加壳工具为 UPX。
  2. 使用脱壳工具对样本进行脱壳处理,成功去除了 UPX 壳保护,生成了脱壳后的文件 rada_unpacked_20242323.exe。
  3. 将脱壳后的文件拖入 IDA Pro,使用 Shift + F12 提取字符串,通过搜索成功定位到开发者明文信息:Raul Siles 和 David Perez。

PEiD查壳截图

IDA Pro 搜到作者名的截图

3.2 任务二:IDA Pro 破解 Crackme

【方案简介】:利用 IDA Pro 静态分析定位关键比较函数 strcmp,逆向推导口令并验证。

【操作步骤】:

  1. 破解 Crackme1:将 crackme1.exe 拖入 IDA,在 Strings 窗口发现关键字符串 "I know the secret"。通过交叉引用定位到 call strcmp 代码。在 CMD 中运行 crackme1.exe "I know the secret",成功输出成功信息。
  2. 破解 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 样本分析报告

【解答】:

  1. 摘要:样本文件名为 RaDa_20242323.exe,是一个运行于 Win32 平台的 32 位 PE 可执行文件,大小约 107KB,使用了 UPX 加壳。通过 IDA 提取字符串,包含 (c) Raul Siles & David Perez 版权信息。
  2. 目的:它是一个远程访问木马(RAT)。动态测试中,运行该样本会弹出带有 Scan Of The Month 32 (SotM) - September 2004 和 honeynet.org 的网页提示,证明它是 Honeynet 蜜网项目用于安全教学和研究的后门样本。
  3. 不同特性:具备进程驻留与文件操作特性。通过 Process Explorer 动态监控发现,该程序运行后会在内存中驻留(PID 3584 等),并申请文件操作句柄与加载外部 DLL,具备典型的后门控制功能。
  4. 防止被分析的技术:主要采用了 UPX 加壳技术 隐藏代码;同时结合后续的逆向分析,发现其需要使用专业的脱壳工具才能还原代码,增加了一定的静态分析难度。
  5. 分类及理由:属于后门(Backdoor)/ 特洛伊木马(Trojan)。理由:它不具备寄生感染能力(非病毒),也不具备自主扫描传播能力(非蠕虫),而是潜伏并为攻击者提供访问通道。
  6. 相似工具:BO2K (Back Orifice 2000)、冰河、灰鸽子、Netcat (nc)。
  7. 作者溯源:可以调查出作者。在隔离的虚拟机环境、样本未被重度混淆的条件下,通过脱壳并使用 IDA Pro 静态提取字符串,成功提取到了作者明文信息:Raul Siles 和 David Perez。
  8. 5 种检测方法:
    • 特征码检测:提取脱壳后的恶意代码特有字节序列,加入杀软病毒库。
    • 行为监控:监控 API 调用,如发现非法调用 SetWindowsHookEx 等敏感函数即拦截。
    • 注册表监控:监控系统 Run 等自启动项,发现异常写入立即报警。
    • 网络流量监控:检测内网主机向非标准端口或已知 C2 IP 发起的异常外连。
    • 内存扫描:针对加壳样本,在程序运行解密时,扫描内存中的恶意代码特征。

Process Explorer 抓到 Rada 进程的截图

3.4 任务四:取证分析实践

【解答】:

  1. IRC 及加入消息:IRC 是互联网中继聊天协议。客户端申请加入时,会发送 NICK(设置昵称)和 USER(用户信息)消息。一般使用 TCP 6667 端口。
  2. 僵尸网络及用途:是指攻击者通过 C&C 信道一对多控制的大量肉鸡网络。通常用于发起大规模 DDoS 攻击、发送垃圾邮件或窃取敏感信息。
  3. 通信的 IRC 服务器:过滤 ip.addr == 209.196.44.172,发现蜜罐主机 172.16.134.191 成功连接该 IP 的 6667 端口,并收到了 NOTICE 响应,证明僵尸网络上线成功。
  4. 访问僵尸网络的主机数:在 Wireshark 端点统计中,观察到有数十台不同的 IP 主机访问了该僵尸网络服务器。
  5. 攻击源 IP:过滤向蜜罐发起的 SYN 扫描包,发现大量异常 IP(如 129.116.182.239、24.161.196.103 等)对蜜罐发起了连接。
  6. 攻击的漏洞:通过过滤 dcerpc 发现大量针对 DCOM RPC (MS03-026) 的探测包,同时抓包数据中包含具有 0x01010101 特征的 UDP 1434 包,指向 SQL Slammer 漏洞。
  7. 成功的攻击及方式:MS03-026 漏洞攻击成功。攻击者向蜜罐的 135 端口发送特制的畸形 RPC 请求(包含 \x90 NOP 滑行区),导致栈溢出并执行恶意代码。随后,蜜罐主机主动连接 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