20242416 2026-2027-1 《网络与系统攻防技术》实验四实验报告

1.基础知识

1.1 PE 文件与加壳技术

PE(Portable Executable)是 Windows 平台可执行文件的标准格式,包括 EXE、DLL 等。加壳(Packing)是对可执行文件进行压缩或加密的技术,运行时由壳代码先解压/解密原始程序再执行。加壳会掩盖程序的原始代码和字符串,常用于保护软件版权,也被恶意代码用来对抗静态分析。常见壳工具有 UPX、ASPack 等,可用 PEiD、Exeinfo PE 等工具识别。

1.2 静态分析基本方法

  • 文件识别:通过 PEiD 等工具识别文件格式、编译器、壳信息;
  • 哈希指纹:MD5、SHA1 等哈希值是样本的唯一标识,是安全社区识别同一样本的通用方式;
  • 字符串提取:使用 Sysinternals Strings 等工具提取二进制中的可读字符串,常能直接暴露功能、网络地址、作者信息;
  • 反汇编分析:使用 IDA Pro 将二进制反汇编为汇编代码,通过字符串交叉引用(XREF)定位关键逻辑。

1.3 IRC 协议

IRC(Internet Relay Chat,互联网中继聊天)是基于客户端/服务器模型的实时文字聊天协议。客户端注册时发送 NICK(昵称)和 USER(用户名)消息,加入频道时发送 JOIN 消息。默认使用 TCP 6667 端口(常见范围 6660–6669),SSL 加密使用 6697。由于 IRC 协议简单、支持一对多广播,常被僵尸网络用作命令控制(C&C)信道。

1.4 僵尸网络与蜜罐

  • 僵尸网络(Botnet):大量被恶意代码感染、受攻击者统一远程控制的主机(Bot/Zombie)组成的网络,常用于 DDoS 攻击、垃圾邮件、信息窃取、扫描扩散等。
  • 蜜罐(Honeypot):故意暴露给攻击者的诱饵系统,用于诱捕攻击、收集攻击行为数据供分析。
  • 取证分析:通过 Snort/Wireshark 等工具对蜜罐捕获的网络流量进行分析,还原攻击过程、识别攻击源与攻击手段。

2.实验内容

一、对 rada 恶意代码样本进行文件类型识别、脱壳与字符串提取,获取样本的编写作者信息。

二、使用 IDA Pro 静态分析 crackme1.exe 与 crackme2.exe,寻找特定输入使其输出成功信息。

三、对 rada 恶意代码样本撰写完整分析报告,回答样本摘要、目的、特性、反分析技术、分类、同类工具、作者调查、检测方法共八个问题。

四、对 Snort 收集的蜜罐主机(172.16.134.191)5 天网络数据进行取证分析,还原 Windows 2000 系统被攻破并加入僵尸网络的过程,回答 IRC 基础、僵尸网络、IRC 服务器、僵尸网络规模、攻击源 IP、攻击漏洞、成功攻击方式共七个问题。

3.实验过程

实验环境

  • VMware Workstation,Windows 10 x64 虚拟机(任务一、二、三),Kali Linux 虚拟机(任务四)
  • 虚拟机网络设为仅主机/断开连接,分析前拍摄快照,关闭 Windows Defender 实时防护
  • 工具:PEiD v0.95、Exeinfo PE、超级巡警脱壳机、Sysinternals Suite(Strings)、IDA Pro、Wireshark、tshark

3.1 任务一:文件类型标识、脱壳与字符串提取

(1)文件格式与壳识别

使用 PEiD 打开原始样本 RaDa.exe,识别结果为:

  • 文件格式:PE(Portable Executable)可执行文件,子系统为 Win32 GUI,即 Windows 32 位图形界面程序;
  • 入口点 0000FD20,EP 段 JDR1(UPX 加壳后的节名特征);
  • 壳识别:UPX 0.89.6 - 1.02 / 1.05 - 2.90 -> Markus & Laszlo。

(2)脱壳

使用超级巡警脱壳机对 RaDa.exe 进行脱壳,生成 rada_dump_.exe。用 PEiD 复检脱壳后文件,识别结果变为 Microsoft Visual Basic 5.0 / 6.0(连接器版本 6.0,EP 段 JDRO),说明壳已去除,程序由 VB6 编写。

(3)字符串提取找作者

使用 Sysinternals Strings 提取脱壳后文件字符串:

strings.exe -accepteula rada_dump_.exe > rada_strings.txt

在结果中搜索发现:

Authors: Raul Siles & David Perez, 2004

同时发现 --authors 参数(运行时加此参数可显示作者信息)、RaDa Current Configuration、COMSPEC 等字符串。

结论:rada 恶意代码的编写作者是 Raul Siles 和 David Perez(2004 年)。

3.2 任务二:IDA Pro 分析 crackme1 与 crackme2

(1)crackme1.exe

IDA 加载 crackme1.exe,打开字符串窗口,发现四个关键字符串:

  • I think you are missing something.(缺少参数提示)
  • I know the secret(口令)
  • Pardon? What did you say?(失败提示)
  • You know how to speak to programs, Mr. Reverse-Engineer(成功提示)

双击口令字符串,通过 DATA XREF 跳转到引用代码(sub_401280),分析汇编逻辑:

cmp [ebp+arg_0], 2          ; 判断参数个数 argc 是否为 2
jz  short loc_4012D2        ; 是则进入比较逻辑
...
push offset aIKnowTheSecret ; "I know the secret"
push dword ptr [eax]        ; 用户输入 argv[1]
call strcmp                 ; 字符串比较
test eax, eax
jz short loc_401310         ; 相等则进入成功分支

逻辑:必须携带一个命令行参数,且参数与 I know the secret 完全相同才输出成功信息。运行验证:

crackme1.exe "I know the secret"

输出 You know how to speak to programs, Mr. Reverse-Engineer,破解成功。

(2)crackme2.exe

字符串窗口中除与 crackme1 相同的口令字符串外,新增两个关键字符串:

  • crackmeplease.exe(程序要求的自身文件名)
  • I have an identity problem.(文件名不符时的提示)

分析引用代码可知:crackme2 在比较口令之前,先提取程序自身文件名并与 crackmeplease.exe 比较,不一致则打印 "I have an identity problem." 退出;通过文件名检查后,再进行与 crackme1 相同的 argc 判断和口令 strcmp 比较。

因此破解条件有两个:将程序改名为 crackmeplease.exe,并以 I know the secret 为参数运行:

copy crackme2.exe crackmeplease.exe
crackmeplease.exe "I know the secret"

输出 We have a little secret: Chocolate,破解成功。

3.3 实验三:rada 恶意代码完整分析

(1)样本摘要

项目 值
文件名 RaDa.exe
文件大小 20,992 字节
MD5 caaa6985a43225a0b3add54f44a0d4c7
SHA1 4164423ece62c5c4c237f8c2003b84e4e3a6cfda
脱壳后文件 MD5(rada_dump_.exe) 6822fd4734dcb2b5064f3e78304d0eeb
文件格式 PE32,Win32 GUI 子系统
编写语言 Microsoft Visual Basic 6.0
加壳工具 UPX(0.89.6–2.90)

MD5/SHA1 哈希是识别同一样本的通用指纹,配合文件大小、编译器与壳信息可完整标识该样本。

(2)二进制文件的目的

RaDa 是一个远程控制后门(僵尸程序)。运行后感染主机,连接硬编码的 C&C 服务器 http://10.10.10.10/RaDa,定期下载 RaDa_commands.html 网页并解析其中的指令,接受攻击者远程控制,执行文件下载/上传、截屏、命令执行、休眠等操作,达到长期控制受害主机并窃取数据的目的。

(3)具有的特性

  1. 自我复制:将自身复制到 C:\RaDa\bin\RaDa.exe,以 C:\RaDa\tmp 为临时工作目录;
  2. 持久化:写注册表 HKLM\Software\Microsoft\Windows\CurrentVersion\Run\ 实现开机自启动;
  3. HTTP C&C 通信:通过 HTTP 获取指令网页,流量形似正常网页浏览,隐蔽性好;
  4. 远程功能:get(下载文件)、put(以 multipart/form-data 上传文件)、screenshot(远程截屏)、sleep(休眠等待);
  5. 高度可配置:支持 --server、--commands、--cgipath、--cgiget/--cgiput、--period、--cycles、--installdir、--tmpdir、--noinstall、--uninstall、--gui、--visible、--verbose、--help、--authors 等 16 个命令行参数,可自定义服务器、指令页、连接周期、安装方式等;
  6. 信息输出:可生成 HTML 格式的使用说明(RaDa Usage)与当前配置报告(RaDa Current Configuration)。

(4)防分析/反逆向技术

  1. UPX 加壳:原始文件被压缩加壳,直接提取字符串只能得到乱码,必须脱壳后才能静态分析;
  2. 虚拟机检测:字符串中存在 HKLM\Software\VMware, Inc.\VMware Tools\InstallPath,程序读取该注册表项判断是否运行于 VMware 虚拟机,以对抗沙箱与分析环境;
  3. VB6 编写:VB 程序基于事件驱动模型和运行库(大量 __vbaXxx 调用、MSVBVM60.DLL),反汇编代码不如 C 程序直观,增加逆向难度。

(5)分类及理由

分类为后门程序(Backdoor)/僵尸程序(Bot)。理由:它不具备病毒感染其他文件的能力,也不具备蠕虫自动网络传播的能力;其核心行为是驻留受害主机、接受远程指令,是典型的僵尸网络节点程序。

(6)具有相似功能的其他工具

  • Back Orifice / Back Orifice 2000:经典远程控制后门,支持文件管理、截屏、键盘记录;
  • SubSeven:同时代著名远程控制木马;
  • NetBus:早期远程控制工具;
  • SDBot / Agobot:基于 IRC 的僵尸程序(与实验四的僵尸网络直接相关);
  • Poison Ivy、Gh0st RAT 等现代远程访问木马(RAT)。

(7)能否调查出开发作者

可以。脱壳后的字符串中直接包含 Authors: Raul Siles & David Perez, 2004,且程序支持 --authors 参数显示作者信息。限定条件:必须在脱壳后的文件中才能发现(加壳状态下字符串被压缩不可见);且该方法依赖作者信息以明文形式存在于程序中,若作者不写或伪造信息则失效。此外字符串中的 http://www.honeynet.org/scans/index.html 表明该样本出自 Honeynet Project 的扫描挑战赛(Scan of the Month),可据此进一步考证样本背景。

(8)检测该恶意软件的方法

  1. 哈希特征码检测:以样本 MD5/SHA1 为特征,在终端或网关比对文件哈希。优点是精确、速度快;缺点是样本重新编译或修改一个字节即失效,需配合其他方法。
  2. YARA 字符串特征检测:编写 YARA 规则匹配脱壳后的特征字符串组合,如 RaDa_commands.html、C:\RaDa\bin、--cgiput、Authors: Raul Siles 等同时出现即报警,对同族变种亦有检出能力。
  3. 网络特征检测(Snort/IDS):编写 Snort 规则,检测 HTTP 请求 URI 中的 /RaDa、RaDa_commands.html 特征,或检测到固定 C&C 地址 10.10.10.10 的连接即告警。
  4. 注册表/文件系统行为检测:监控 HKLM\...\CurrentVersion\Run 键的异常新增项,以及 C:\RaDa\bin\RaDa.exe、C:\RaDa\tmp 等路径的创建,发现即处置。
  5. 进程与网络行为关联检测(EDR/沙箱):监控"未知程序周期性发起 HTTP 请求 + 修改自启动项 + 调用截屏 API"的组合行为;在动态沙箱中运行样本观察完整行为链。
  6. 壳与编译器启发式检测:以"UPX 壳 + VB6 + 可疑字符串(VMware 检测、截屏指令)"的启发式组合评分,作为未知变种的辅助检测手段。

3.4 实验四:蜜罐取证分析

使用 Kali 中的 Wireshark 打开 botnet_pcap_file.dat(共 54,536 个数据包),配合 tshark 命令行进行统计过滤。

(1)IRC 基础

IRC 是互联网中继聊天协议;客户端加入 IRC 网络时先发送 NICK 和 USER 注册消息,加入频道时发送 JOIN 消息;一般使用 TCP 6667 端口(6660–6669),SSL 加密使用 6697。

(2)僵尸网络

僵尸网络是由大量被感染、受攻击者远程统一控制的主机组成的网络,通常通过 IRC/HTTP 等 C&C 信道接收指令;通常用于 DDoS 攻击、发送垃圾邮件、窃取敏感信息、扫描入侵新主机扩大规模、点击欺诈等。

(3)蜜罐通信的 IRC 服务器

过滤 tcp.port == 6667 并用 tshark 统计蜜罐发出的 IRC 连接目的地址:

tshark -r botnet_pcap_file.dat -Y "tcp.port==6667 && ip.src==172.16.134.191" -T fields -e ip.dst | sort -u

结果:蜜罐与 5 个 IRC 服务器通信:

209.126.161.29
209.196.44.172
217.199.175.10
63.241.174.144
66.33.65.58

(4)访问 209.196.44.172 僵尸网络的主机数

本数据集中该服务器仅与蜜罐有往返流量,故通过分析 IRC 会话内容统计:在 Wireshark 中过滤 ip.addr == 209.196.44.172 && tcp.port == 6667,Follow TCP Stream 保存为 irc_stream.txt。蜜罐加入频道时服务器返回 353 响应(RPL_NAMREPLY),包含频道内全部成员昵称列表,统计昵称数:

grep "353" ~/irc_stream.txt | awk '{n+=NF-6} END{print n}'

(NF-6 用于扣除每行 :irc5.aol.com 353 昵称 @ #频道 : 共 6 个固定字段)

结果为 3384,即在观察时刻该僵尸网络频道中约有 3384 台主机在线。

(5)用于攻击蜜罐主机的 IP 地址

统计所有向蜜罐发起 TCP 连接(SYN)的源地址:

tshark -r botnet_pcap_file.dat -Y "ip.dst==172.16.134.191 && tcp.flags.syn==1 && tcp.flags.ack==0" -T fields -e ip.src | sort | uniq -c | sort -rn

主要攻击源:

IP SYN 次数
24.197.194.106 1229
210.22.204.101 105
129.116.182.239 10
66.139.10.15、209.45.125.69、61.111.101.78、195.36.247.77 等 5–6

另有数十个 IP 发起过零星连接(219.118.31.42、218.163.9.89、213.23.49.158 等)。

(6)攻击者尝试攻击的安全漏洞/服务

统计蜜罐被访问的 TCP 目的端口并解读:

端口 对应攻击
445 / 139 SMB/NetBIOS 文件共享攻击:IPC$ 空连接枚举、管理员共享弱口令猜测、通过 ADMIN$ 上传文件
80 IIS Web 服务攻击:Unicode 目录遍历、IDA/IDQ 缓冲区等 IIS 漏洞
4899 Radmin 远程管理软件弱口令/爆破
1152、1061、1077 等高端口 多为入侵成功后后门/木马的通信通道
(7)成功的攻击及方式

过滤 ip.addr == 61.111.101.78 && svcctl,发现数据包 35030:

Service Control, CreateServiceA: PSEXESVC
Binary Path: %SystemRoot%\System32\PSEXESVC.EXE

61.111.101.78 的 SMB + PsExec 攻击成功,完整入侵链为:

  1. 利用有效管理员凭据(弱口令/空口令)通过 SMB(445 端口)连接蜜罐的 IPC$/ADMIN$ 共享;
  2. 通过 SMB Write AndX 将 PSEXESVC.EXE(PsExec 服务端组件)上传至 %SystemRoot%\System32\;
  3. 通过 DCERPC 调用服务控制管理器(OpenSCManagerA → CreateServiceA)创建 PSEXESVC 服务;
  4. 启动服务,获得在蜜罐上以 SYSTEM 权限远程执行任意命令的能力;
  5. 随后植入 IRC 僵尸程序,蜜罐开始连接上述 5 个 IRC 服务器,正式加入僵尸网络。

4.问题及解决方案

  • 问题1:使用 findstr 搜索 -- 参数时报错"FINDSTR: 忽略 /-。

  • 问题1解决方案:-- 被 findstr 误认为自身命令行选项,改用 findstr /c:"--" 的字面字符串匹配方式解决。。

  • 问题2:统计僵尸网络主机数时,wc -w 统计整个 IRC 会话流得到 71337,明显偏大。

  • 问题2解决方案:会话流中混有大量 PING/PONG、JOIN 等消息,不能整体计数。改为只统计服务器 353 响应(频道成员昵称列表)中的昵称数,并用 awk 扣除每行固定前缀字段,得到 3384 的合理结果。

  • 问题3:数据包数量庞大(5 万余个),肉眼找不到 CreateServiceA 等关键攻击证据。

  • 问题3解决方案:使用精确协议过滤 ip.addr == 61.111.101.78 && svcctl 将范围缩小到服务控制协议的几个数据包,快速定位创建 PSEXESVC 服务的决定性证据;也可用 tshark 按帧号定位后 Ctrl+G 跳转。

5.学习感悟、思考等

本次实验完整实践了恶意代码静态分析与网络取证分析两条主线,收获很大:

第一,静态分析是层层递进的。RaDa 样本从"加壳文件几乎看不到信息",到脱壳后字符串暴露作者、C&C 地址、注册表项、反虚拟机特征,让我体会到壳只是第一道门槛,脱壳+字符串+交叉引用这套组合拳能解决大部分基础分析问题。crackme 练习则让我掌握了从提示字符串入手、顺 XREF 定位判断逻辑的通用逆向思路,crackme2 的文件名检查也提醒我:程序的运行条件可能不止用户输入一项,要全面分析前置判断。

第二,网络取证重在"过滤"而非"浏览"。面对 5 万多个数据包,肉眼翻找毫无意义,必须依靠 Wireshark 显示过滤器和 tshark 的统计能力逐步缩小范围:先用端口锁定 IRC 信道,再用 Follow TCP Stream 还原会话内容,最后用协议级过滤(svcctl)定位入侵证据。PSEXESVC 服务创建这一发现,把 SMB 上传、RPC 调用、服务创建串成了完整的入侵链,让我直观理解了"蜜罐是如何被攻破并加入僵尸网络的"。

第三,分析环境的安全性与数据严谨性同样重要。快照、网络隔离、关闭实时防护这些准备工作看似琐碎,却是安全分析的前提;统计主机数时 71337 与 3384 的偏差也让我认识到,取证结论必须明确统计口径,不能拿一个"看起来像"的数字就下结论。

参考资料

  • 《网络与系统攻防技术》课程教材与实验指导