20252811 2025-2026-2 《网络攻防实践》第八周作业
1. 实践内容
本次实践主要围绕恶意代码静态分析、简单逆向分析以及网络数据取证分析展开。实验内容包括对 RaDa 恶意代码样本进行文件类型识别、查壳、脱壳和字符串提取;对 crackme1.exe 和 crackme2.exe 进行静态或动态分析,找出能够触发成功输出的输入;进一步分析 RaDa 样本的功能、行为特征、反分析方式和恶意代码分类;最后通过 Wireshark、tcpdump、tcpflow 等工具分析蜜罐主机被攻破并加入僵尸网络的网络数据。
1.1 恶意代码基本概念
恶意代码是指被设计用来破坏系统、窃取信息、控制主机或执行未经授权操作的程序。常见类型包括病毒、蠕虫、木马、后门程序、僵尸程序、间谍软件和勒索软件等。
| 类型 | 主要特征 | 典型用途 |
|---|---|---|
| 病毒 | 依附宿主文件,自我复制 | 感染文件、破坏系统 |
| 蠕虫 | 可自主传播,不依赖宿主文件 | 利用漏洞扩散 |
| 木马 | 伪装成正常程序 | 窃取信息、远程控制 |
| 后门程序 | 为攻击者保留远程访问入口 | 远程控制目标主机 |
| 僵尸程序 | 接收 C&C 服务器指令 | 组成僵尸网络 |
| Rootkit | 隐藏进程、文件或系统行为 | 规避检测 |
1.2 恶意代码分析方法
恶意代码分析通常分为静态分析和动态分析两类。
静态分析是不运行样本,直接通过文件类型识别、查壳、字符串提取、反汇编、反编译等方式分析程序结构和潜在行为。其优点是风险较低,缺点是难以直接观察运行时行为。
动态分析是在隔离环境中运行样本,通过进程监控、注册表监控、文件系统监控和网络抓包等方式观察程序真实行为。其优点是能够获取更直观的行为证据,缺点是必须保证环境隔离,并且部分恶意代码可能具有反调试或反虚拟机能力。
2. 实践过程
2.1 动手实践任务一:识别 RaDa 恶意代码样本
2.1.1 实验任务说明
对提供的 RaDa 恶意代码样本进行文件类型识别、脱壳与字符串提取,以获得 RaDa 恶意代码样本的相关信息和编写作者。具体包括:
- 使用文件格式和类型识别工具,给出 RaDa 样本的文件格式、运行平台和加壳工具;
- 使用超级巡警脱壳机等脱壳软件,对 RaDa 样本进行脱壳处理;
- 使用字符串提取工具,对脱壳后的样本进行分析,寻找样本作者信息。
2.1.2 文件准备
首先将实验所需的 RaDa 样本文件复制到 WinXP Attacker 虚拟机中,放置在便于操作的目录下
C:\Documents and Settings\Administrator\
2.1.4 初步字符串查看
继续使用字符串提取工具查看原始样本中的可打印字符串:
strings RaDa.exe
从结果可以看出,原始样本中可读字符串较少,存在大量不可读内容,说明该样本可能经过了加壳处理,直接进行静态字符串分析效果不佳。
2.1.5 使用 PEiD 查壳
打开 PEiD 工具,选择 RaDa.exe 文件进行检测。
检测结果显示,RaDa.exe 使用了 UPX 壳,具体为:
UPX 0.89.6 - 1.02 / 1.05 - 2.90 -> Markus & Laszlo
因此,RaDa 样本经过 UPX 加壳处理,这也是原始 strings 分析中难以直接看到有效字符串的重要原因。
2.1.6 使用超级巡警脱壳机脱壳
打开超级巡警脱壳机,选择 RaDa.exe 文件路径,进行自动脱壳。
脱壳完成后,在原目录下生成脱壳后的文件
RaDa_unpacked.exe
2.1.7 对脱壳后文件进行字符串提取
对脱壳后的文件执行 strings 命令:
strings RaDa_unpacked.exe
脱壳后可以看到更多可读字符串,包括 URL、注册表操作、截图、睡眠、命令执行等相关字符串。这说明脱壳后样本的静态分析效果明显提升。
2.1.8 使用 IDA Pro 辅助分析作者信息
将 RaDa_unpacked.exe 拖入 IDA Pro 中进行静态分析,重点查看 Strings 窗口和可疑字符串引用位置。
在字符串中可以发现与作者相关的版权信息:
Copyright (C) 2004 Raul Siles & David Perez
因此,可以判断该 RaDa 样本相关作者为:
Raul Siles & David Perez
需要注意的是,如果在 IDA 中看到 DataRescue sa/nv、ida@datarescue.com 等信息,这通常是 IDA 工具本身的版权信息,不应直接作为 RaDa 恶意代码作者。
2.1.9 小结
通过本任务可以得出:
- RaDa.exe 是 Windows 32 位 PE 可执行文件;
- 该样本使用了 UPX 壳;
- 使用超级巡警脱壳后,可以提取到更多有效字符串;
- 通过字符串分析和 IDA 辅助分析,可以发现样本作者相关信息为 Raul Siles & David Perez。
2.2 动手实践任务二:分析 Crackme 程序
2.2.1 实验任务说明
在 WinXP Attacker 虚拟机中使用 IDA Pro 静态或动态分析 crackme1.exe 和 crackme2.exe,寻找特定输入,使其能够输出成功信息。
2.2.2 分析 crackme1.exe
(1)命令行试探
首先在命令行中分别输入不同数量的参数进行试探:
crackme1.exe 1
crackme1.exe 1 2
crackme1.exe 1 2 3
通过输出结果可以发现,输入一个参数时程序输出与其他情况不同,因此初步判断 crackme1.exe 需要一个参数。
(2)使用 IDA 查看字符串
使用 IDA Pro 打开 crackme1.exe,在 Strings 窗口中查看字符串。
可以发现以下关键字符串:
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
其中,I know the secret 很可能是程序要求输入的口令,而 You know how to speak to programs, Mr. Reverse-Engineer 很可能是输入正确后的成功提示。
(3)查看函数调用关系
在 IDA 中选择关键字符串,右键查看其引用位置,并打开函数调用图。
可以看到程序中调用了字符串比较函数,说明程序会将用户输入参数与固定字符串进行比较。
(4)查看流程图
查看相关函数的 Flow Chart,可以看到程序通过条件判断决定输出失败提示还是成功提示。
(5)验证输入
根据分析结果,在命令行输入:
crackme1.exe "I know the secret"
程序输出:
You know how to speak to programs, Mr. Reverse-Engineer
说明输入正确,crackme1.exe 的正确参数为:
I know the secret
2.2.3 分析 crackme2.exe
(1)命令行试探
首先对 crackme2.exe 进行不同参数数量的试探:
crackme2.exe 1
crackme2.exe 1 2
crackme2.exe 1 2 3
根据输出结果,可以初步判断 crackme2.exe 也与参数数量和参数内容有关。
(2)使用 IDA 查看字符串
使用 IDA Pro 打开 crackme2.exe,在 Strings 窗口中查看关键字符串。
可以发现以下关键字符串:
I think you are missing something
crackmeplease.exe
I have an identity problem.
I know the secret
Pardon? What did you say?
与 crackme1.exe 相比,crackme2.exe 多了 crackmeplease.exe 和 I have an identity problem.,说明程序不仅检查输入参数,还可能检查程序自身文件名。
(3)分析函数调用和流程图
查看函数调用图和流程图。
分析可知,程序会先判断自身文件名是否为:
crackmeplease.exe
然后继续判断输入参数是否为:
I know the secret
只有两个条件都满足时,才会输出成功信息。
(4)复制并重命名程序
使用以下命令将 crackme2.exe 复制并重命名为 crackmeplease.exe:
copy crackme2.exe crackmeplease.exe
然后输入:
crackmeplease.exe "I know the secret"
程序输出:
We have a little secret: Chocolate
说明 crackme2.exe 的成功条件为:
- 程序文件名必须为
crackmeplease.exe; - 输入参数必须为
"I know the secret"。
2.3 分析实践任务一:分析自制恶意代码样本 RaDa
2.3.1 提供二进制文件摘要
首先使用 md5sum 命令计算 RaDa 样本的 MD5 值:
md5sum RaDa.exe
得到 MD5 摘要为:
caaa6985a43225a0b3add54f44a0d4c7
样本基本信息如下:
| 信息项 | 内容 |
|---|---|
| 文件名 | RaDa.exe |
| 文件类型 | Windows 32 位 PE 可执行文件 |
| 运行平台 | Windows XP / 32 位 Windows 系统 |
| 加壳方式 | UPX |
| MD5 | caaa6985a43225a0b3add54f44a0d4c7 |
| 相关作者 | Raul Siles & David Perez |
| 主要行为 | 连接指定服务器、获取指令、执行命令、修改注册表、创建目录、截图等 |
2.3.2 找出并解释二进制文件的目的
使用 Process Explorer、Regshot、Wireshark 观察 RaDa 样本运行行为。
通过分析可以发现,RaDa 程序运行后会尝试与如下地址进行通信:
http://10.10.10.10/RaDa
该程序的主要目的不是单纯破坏本机文件,而是通过 HTTP 协议连接远程控制端,从远程服务器获取命令并执行。因此,该样本更接近后门程序或僵尸程序,能够被攻击者远程控制并执行相关操作。
2.3.3 识别并说明二进制文件的不同特性
通过 strings、IDA 和动态监控可以发现,该样本具有以下行为特征:
| 特征 | 说明 |
|---|---|
| 网络通信 | 连接 http://10.10.10.10/RaDa 获取指令 |
| 注册表操作 | 存在 RegWrite、RegDelete 等字符串,说明可能修改或删除注册表项 |
| 持久化 | 可能通过修改注册表实现开机自启动 |
| 文件操作 | 创建 C:\RaDa\bin、C:\RaDa\tmp 等目录 |
| 截图功能 | 存在 screenshot 等字符串,说明可能具备截图功能 |
| 命令执行 | 能够根据远程指令执行相应操作 |
| 延时等待 | 存在 sleep 字符串,用于控制执行间隔 |
2.3.4 识别并解释防止分析或逆向工程的技术
RaDa 样本主要使用 UPX 加壳技术防止直接静态分析。加壳后,原始程序代码和字符串被压缩或重组,使用 strings 直接分析原始文件时只能看到较少有效信息,影响分析人员快速判断程序行为。
不过,该样本的反分析能力较弱,使用超级巡警等脱壳工具即可完成脱壳。脱壳后再进行 strings 和 IDA 分析,可以看到较多明文字符串和函数调用线索。
2.3.5 对恶意代码样本进行分类
该样本不属于病毒,因为它没有表现出感染其他文件或依附宿主文件进行复制的行为;也不属于典型蠕虫,因为没有观察到其通过网络漏洞或邮件等方式进行自主传播。
结合其连接远程服务器、获取命令并执行、修改注册表和维持控制的行为,可以将其归类为:
后门程序 / 僵尸程序
2.3.6 具有相似功能的其他工具
过去具有相似功能的工具包括:
| 工具名称 | 相似点 |
|---|---|
| Bobax | 可通过远程服务器获取命令并执行 |
| Back Orifice | 具有远程控制功能 |
| NetBus | 可远程控制 Windows 主机 |
| Setiri / GatSla | 具有后门或远程控制特征 |
这些工具与 RaDa 的共同点在于,它们都可以通过网络通信接受攻击者指令,从而实现对目标主机的控制或进一步操作。
2.3.7 是否可能调查出开发作者
可以在一定条件下调查出该样本的作者。通过对脱壳后的样本进行字符串分析,可以发现如下版权信息:
Copyright (C) 2004 Raul Siles & David Perez
因此,在样本为原始版本、未被二次修改、字符串信息未被破坏的情况下,可以根据样本中的明文版权字符串判断相关作者为:
Raul Siles & David Perez
2.4 分析实践任务二:Windows 2000 系统被攻破并加入僵尸网络
2.4.1 实验任务说明
本任务分析的数据源是由 Snort 工具收集的蜜罐主机 5 天网络数据。该数据经过编辑,去除了部分无关流量,并将相关流量合并为一个二进制网络日志文件。实验目标是通过 Wireshark、tcpdump、tcpflow 等工具分析蜜罐主机与 IRC 服务器通信、僵尸网络规模、攻击源 IP、攻击端口和成功攻击过程。
蜜罐主机 IP 地址为:
172.16.134.191
分析文件为:
botnet_pcap_file.dat
2.4.2 问题1:IRC是什么?加入IRC网络时发送什么消息?IRC一般使用哪些TCP端口?
IRC 全称为 Internet Relay Chat,即互联网中继聊天协议,是一种早期的实时聊天协议。用户可以通过 IRC 客户端连接 IRC 服务器,并加入指定频道进行群组通信。
当 IRC 客户端申请加入 IRC 网络时,通常会发送以下消息:
NICK
USER
JOIN
其中,NICK 用于设置昵称,USER 用于提交用户信息,JOIN 用于加入指定频道。
IRC 常见端口包括:
| 端口 | 说明 |
|---|---|
| 6667/TCP | IRC 明文通信常用端口 |
| 6660-6669/TCP | IRC 常见端口范围 |
| 6697/TCP | IRC over SSL/TLS 加密通信端口 |
2.4.3 问题2:僵尸网络是什么?通常用于什么?
僵尸网络是指攻击者通过恶意程序控制大量受害主机,并通过一对多的命令与控制信道统一下发指令所形成的受控主机网络。被控制的主机通常被称为 Bot 或 Zombie。
僵尸网络通常用于:
- 发起 DDoS 攻击;
- 批量发送垃圾邮件;
- 窃取账号、密码和敏感信息;
- 传播新的恶意代码;
- 恶意挖矿;
- 代理隐藏攻击者真实来源;
- 伪造点击量或流量。
2.4.4 问题3:蜜罐主机与哪些 IRC 服务器进行了通信?
在 Wireshark 中使用过滤条件:
ip.src == 172.16.134.191 && tcp.dstport == 6667
可以发现蜜罐主机与以下 IRC 服务器进行了通信:
209.126.161.29
66.33.65.58
63.241.174.144
217.199.175.10
209.196.44.172
因此,蜜罐主机曾经通过 IRC 常用端口 6667 与多个 IRC 服务器建立通信。
2.4.5 问题4:多少不同主机访问了以 209.196.44.172 为服务器的僵尸网络?
首先使用 tcpflow 提取与指定 IRC 服务器相关的 TCP 流:
tcpflow -r botnet_pcap_file.dat "host 209.196.44.172 and port 6667"
然后对 IRC 通信内容进行提取和去重统计:
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 为服务器的僵尸网络。
2.4.6 问题5:哪些 IP 地址被用于攻击蜜罐主机?
使用 tcpdump 筛选所有访问蜜罐主机的流量,提取源 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 > result.txt
wc -l result.txt
统计结果显示,共有:
165个不同 IP 地址访问过蜜罐主机,说明这些 IP 可能参与了对蜜罐主机的扫描或攻击。
2.4.7 问题6:攻击者尝试攻击了哪些安全漏洞?
通过分析蜜罐主机响应过的 TCP 端口和 UDP 端口,可以判断攻击者重点访问了哪些服务。
提取 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 | 80 | HTTP / IIS | IIS Web 漏洞攻击,如 Code Red、.ida 相关攻击 |
| TCP | 135 | RPC | RPC 服务扫描或漏洞探测 |
| TCP | 139 | NetBIOS / SMB | 空会话、SMB 探测 |
| TCP | 445 | SMB | 远程服务创建、PSEXESVC 蠕虫攻击 |
| TCP | 4899 | Radmin | 远程控制服务探测 |
| TCP | 25 | SMTP | 邮件服务扫描 |
| UDP | 137 | NetBIOS Name Service | NetBIOS 信息探测 |
(1)分析 UDP 139 端口
可以看到存在大量rst包,并且没有攻击成功相关信息
(2)分析 TCP 80 端口
过滤条件:
tcp.dstport == 80 && ip.dst == 172.16.134.191 && http
能看出所有关于80端口的相关攻击的信息,包括null.ida、dafault.ida为标识的code red,这是一个红色代码蠕虫攻击,但是没有检测到上传文件、执行命令或其他成功利用证据,所以不能直接判断成功。
(3)分析 TCP 445 端口
过滤条件:
tcp.dstport == 445 && ip.dst == 172.16.134.191
在 TCP 445 端口流量中,可以发现与 SMB 服务相关的攻击行为,并出现:
PSEXESVC.EXE
\PIPE\ntsvcs
PSEXESVC.EXE 通常与远程服务创建和执行有关,\PIPE\ntsvcs 表明攻击者通过服务控制管理器相关管道进行远程调用。由此可以判断攻击者利用 SMB 445 端口成功在目标主机上创建并执行恶意服务。
2.4.8 问题7:哪些攻击成功了?是如何成功的?
综合流量分析结果,可以判断 TCP 445 端口上的攻击成功。
成功攻击的关键证据包括:
- 发现
PSEXESVC.EXE;null.ida、dafault.ida为标识的code red - 出现
\PIPE\ntsvcs远程服务控制相关通信; - 攻击者通过 SMB 服务与蜜罐主机发生了有效交互;
- 蜜罐主机随后加入 IRC 僵尸网络,与 IRC 服务器进行通信。
因此,攻击者很可能利用 Windows SMB 服务漏洞或弱口令/远程服务创建机制,通过 TCP 445 端口在蜜罐主机上部署并执行 PSEXESVC.EXE,从而获得系统控制权。随后,恶意程序通过 IRC 协议连接 C&C 服务器,使蜜罐主机加入僵尸网络。
3. 学习中遇到的问题及解决
问题一:原始 RaDa 样本 strings 结果较少,难以判断程序功能
在最开始直接对 RaDa.exe 执行 strings 命令时,能够看到的有效字符串较少,大部分内容不可读,导致无法直接判断程序功能。
解决方法:使用 PEiD 对样本进行查壳,发现其使用 UPX 加壳;随后使用超级巡警脱壳机进行脱壳,再对脱壳后的 RaDa_unpacked.exe 执行 strings 命令,成功看到更多 URL、注册表、截图和命令执行相关字符串。
问题二:IDA 中字符串较多,容易误把工具版权信息当成样本作者
在 IDA 的 Strings 窗口中可以看到大量字符串,其中部分字符串可能属于 IDA 或其他工具本身的信息,容易误判为恶意代码作者。
解决方法:结合字符串上下文、样本功能相关字符串和版权字段进行判断。对于 RaDa 样本,应重点关注样本内部保留的版权信息,例如 Copyright (C) 2004 Raul Siles & David Perez,而不是将 IDA 工具自身信息当成样本作者。
4. 学习感想和体会
通过本次实验,我对恶意代码分析和网络攻击取证有了更加直观的认识。以前对恶意代码的理解更多停留在概念层面,例如病毒、蠕虫、木马、后门程序等分类,但通过 RaDa 样本分析,我发现实际判断一个样本类型时,不能只看名称,而要结合它是否自我复制、是否主动传播、是否连接远程服务器、是否接收指令等行为特征进行综合判断。
在 RaDa 分析过程中,我体会到脱壳对于静态分析的重要性。原始样本经过 UPX 加壳后,直接使用 strings 很难看到有效信息,而脱壳后再进行字符串提取和 IDA 分析,就可以发现 URL、注册表操作、截图、命令执行等关键线索。这说明恶意代码分析不能只依赖单一工具,而要结合文件识别、查壳、脱壳、字符串分析、反汇编和动态监控等多种方法。
在 Crackme 程序分析中,我进一步理解了逆向分析的基本思路。通过命令行试探可以初步判断参数数量,通过 IDA 查看字符串和函数调用关系可以找到关键比较逻辑,再通过实际运行验证分析结果。尤其是 crackme2.exe 不仅检查输入参数,还检查程序自身文件名,这让我认识到程序的判断逻辑可能比表面输入更加复杂,必须结合流程图和关键字符串进行分析。
在网络数据分析部分,我认识到网络取证的关键在于筛选思路。面对大量 pcap 数据,如果没有明确目标,很容易陷入无效查看。通过围绕蜜罐主机 IP、IRC 端口、SMB 端口和可疑文件名进行过滤,可以逐步还原攻击过程。最终通过 PSEXESVC.EXE、\PIPE\ntsvcs 和 IRC 通信等证据,可以判断蜜罐主机被攻破后加入了僵尸网络。

浙公网安备 33010602011771号