20232412 2024-2025-1 《网络与系统攻防技术》实验四实验报告
1.实验内容
实践目标
-
一、恶意代码文件类型标识、脱壳与字符串提取。
-
二、使用IDA Pro静态或动态分析crackme1.exe与crakeme2.exe,寻找特定输入,使其能够输出成功信息。
-
三、分析一个自制恶意代码样本rada,并撰写报告
-
四、取证分析实践:Windows 2000系统被攻破并加入僵尸网络,对Snort收集的蜜罐主机5天的网络数据源进行分析
通过本次实验,我们将学习恶意代码分析技术和网络取证方法,内容涵盖从基础的恶意样本静态分析到复杂的网络攻击事件调查,学会使用PEID、IDA Pro、Process Explorer等软件的使用,掌握现代恶意代码的工作原理、分析技巧以及网络攻击的取证溯源方法。
重点学习内容
- 恶意代码分析技术
恶意代码分析技术是通过静态分析和动态分析等方法,深入剖析恶意软件的结构、行为与意图的安全研究手段。静态分析侧重于逆向工程、反汇编和字符串提取,以揭示代码逻辑与潜在功能;动态分析则通过在沙箱或隔离环境中运行样本,监控其文件操作、网络通信及注册表修改等运行时行为。结合两种方法,我们可识别恶意代码的感染机制、隐蔽技术及通信协议,从而有效制定检测规则、提取威胁指标。
- 僵尸网络
僵尸网络是由攻击者通过命令与控制服务器(C&C)集中操控的受感染计算机群组成的网络。其核心机制是利用恶意软件(如蠕虫、木马)感染大量主机,使这些设备在用户不知情下接受远程指令,协同执行分布式拒绝服务攻击、垃圾邮件分发、数据窃取等恶意活动。僵尸网络通常通过IRC、HTTP或P2P等协议与C&C服务器通信,具备高度隐蔽性、可扩展性和持久化控制能力。
2.实验过程
2.1 恶意代码文件类型标识、脱壳与字符串提取
对提供的rada恶意代码样本,进行文件类型识别,脱壳与字符串提取,以获得rada恶意代码的编写作者,具体操作如下:
2.1.1 使用文件格式和类型识别工具,给出rada恶意代码样本的文件格式、运行平台和加壳工具
将RaDa.exe文件复制到虚拟机Kali上,输入命令file RaDa.exe,查看文件信息。

结果显示,该文件是一个32位Windows图形界面可执行文件。(文件格式为PE32,为Windows系统开发,Intel i386架构,节区数量为3个)
在主机上下载软件PEiD,利用软件PEiD对RaDa.exe文件进行分析,查看文件信息。

这里我们看到显示UPX 0.89.6-1.02 / 1.05-2.90 ->Markus &Laszlo,说明RaDa.exe文件使用了upx加壳,版本区间为 0.89.6 - 1.02 / 1.05 - 2.90,开发者是Markus &Laszlo。
2.1.2 使用超级巡警脱壳机等脱壳软件,对rada恶意代码样本进行脱壳处理
在主机上下载软件超级巡警之虚拟机自动脱壳器 V1.3,打开软件使用其对RaDa.exe文件进行脱壳,得到脱壳后的文件RaDa_unpacked.exe。

2.1.3 使用字符串提取工具,对脱壳后的rada恶意代码样本进行分析
将脱壳后的文件复制到虚拟机中,输入命令strings RaDa_unpacked.exe,对脱壳后的 RaDa.exe 进行初步分析,查看其关键字符串。根据字符串分析结果,作者明确标识为Raul Siles和David Perez。


我们也可以在主机上下载并打开IDA Pro,选择PE Executable,对Windows的可执行文件进行分析。

在Strings选项卡中,发现关键字符串,疑似是作者名称Raul Siles && David Perez。

2.2 使用IDA Pro静态或动态分析crackme1.exe与crakeme2.exe,寻找特定输入,使其能够输出成功信息
2.2.1 分析crackme1.exe
运行crackme1.exe,在输入少于或多于一个参数时会输出I think you are missing something.,在输入一个参数时会输出Pardon? What did you say?,可以推断特定输入应为一个参数,我们要找到这个正确的参数。

打开IDA Pro,选择选项PE Executable运行crackme1.exe,点击View->Graphs->Function calls,打开函数调用图,我们发现sub_401280调用了strcmp、printf等有关字符串的函数,可以合理推测它用于参数判断。

在Functions选项卡中点击sub_401280,查看函数的流程图,可以分析得出要输入两个参数,当第二个参数为输入字符串为"I know the secret"时,可以输出成功信息。在命令行中验证成功。


2.2.2 分析crackme2.exe
运行crackme2.exe,在输入少于或多于一个参数时会输出I think you are missing something.,在输入一个参数时会输出I have an identity problem.,可以推断特定输入应为一个参数,我们要找到这个正确的参数。

打开IDA Pro,选择选项PE Executable运行crackme2.exe,点击View->Graphs->Function calls,打开函数调用图,我们发现sub_401280调用了strcmp、fprintf等有关字符串的函数,可以合理推测它用于参数判断。

在Functions选项卡中点击sub_401280,查看函数的流程图,可以分析得出要输入两个参数,其中函数对输入的第一个参数进行了比较,第一个参数要改成crackmeplease.exe,说明我们需要将该文件的文件名修改为crackmeplease.exe,再输入第二个参数"I know the secret"时,可以输出成功信息。我们重命名该文件,在命令行中输入正确的参数,验证成功。


2.3 分析一个自制恶意代码样本rada,并撰写报告
2.3.1 信息获取
在Kali命令行中输入md5sum RaDa.exe,得到RaDa.exe的摘要。

下载并使用process explorer,然后运行脱壳后的Rada,双击进程,查看Strings。在Strings选项卡中,可以看到一些重要信息。


2.3.2 问题回答
(1)提供对这个二进制文件的摘要,包括可以帮助识别同一样本的基本信息
摘要:caaa6985a43225a0b3add54f44a0d4c7
基本信息:该文件是一个32位Windows图形界面可执行文件。(文件格式为PE32,为Windows系统开发,Intel i386架构,节区数量为3个)
(2)找出并解释这个二进制文件的目的
在Strings选项卡中,我们可以看到大量可疑信息,该代码疑似可以通过连接内网特定HTTP服务器(如10.10.10.10)实现C&C通信,借助“RaDa_commands.html”等页面接收指令,并利用上传下载功能进行文件传输。为实现持久化控制,它会修改注册表启动项,并在本地创建“RaDa”目录管理组件与数据。其攻击能力包括发起Smurf DDoS攻击、通过脚本引擎操作文件与注册表(Wscript.Shell),甚至可截取用户屏幕(screenshot),展现出全面的远程控制、信息窃取与系统破坏能力。
根据分析,这个恶意程序的目的可能是在系统上安装恶意软件,使其在启动时自运行,发起DDoS攻击。
(3)识别并说明这个二进制文件所具有的不同特性
-
- 网络通信与控制特性
C&C通信机制:通过HTTP协议连接内网特定IP(如10.10.10.10、192.168.、172.16.)的服务器,获取远程指令。
- 网络通信与控制特性
-
- 持久化与自启动特性
注册表自启动:修改HKLM\Software\Microsoft\Windows\CurrentVersion\Run\RaDa,确保系统重启后自动运行。
- 持久化与自启动特性
-
- 攻击与破坏能力
DDoS攻击:具备发起Smurf攻击的能力,可对目标网络进行流量泛洪。
- 攻击与破坏能力
系统操控:通过Wscript.Shell、Scripting.FileSystemObject等组件执行命令、读写文件及注册表。
屏幕捕获:支持screenshot功能,窃取用户屏幕信息。
(4)识别并解释这个二进制文件中所采用的防止被分析或逆向工程的技术
该文件使用UPX进行压缩加壳,加壳后会隐藏原始程序的代码结构、字符串等关键信息,增加静态分析的难度。
(5)对这个恶意代码样本进行分类(病毒、蠕虫等),并给出你的理由
该程序属于后门,绕过系统的正常安全认证机制,为攻击者创建一个隐蔽的、持久的远程访问通道,它没有呈现出自我复制和传播的特点,所以不是病毒或蠕虫。
(6)给出过去已有的具有相似功能的其他工具;
msfvenom和veil。
(7)可能调查处这个二进制文件的开发作者吗?如果可以,在什么样的环境和什么样的限定条件下?
可以,要首先对文件进行脱壳处理,并且作者要留下署名。之前在2.1.3中介绍了两种发现开发作者名称的方式。
(8)给出至少5种检测该恶意软件的方法,例如基于特征码的方法,需要详细介绍每种方法。
-
基于静态特征码的检测方法
该方法通过提取恶意样本中的独特字节序列作为识别标志。具体实施时,可从脱壳后的RaDa样本中定位其核心代码段的特定指令模式(如8B FF 55 8B EC序列),并结合关键字符串(如"RaDa_commands.html")生成复合特征。利用YARA等工具编写检测规则,当扫描文件时匹配这些特征即告警。这种方法检测效率高,适合大规模筛查,但易被代码混淆或加壳技术绕过。 -
基于导入函数行为的检测方法
此方法通过分析可执行文件的导入地址表来识别恶意意图。针对RaDa样本,可检测其是否同时导入了多个高危API函数,包括网络通信类(URLDownloadToFile)、系统操作类(WinExec)和持久化类(RegSetValue)。通过建立评分模型,当这些函数组合出现时即判定为可疑。该方法能有效检测未知变种,但可能对某些合法管理工具产生误报。 -
基于网络流量分析的检测方法
该方法通过监控网络通信特征来识别恶意活动。针对RaDa,可检测其与特定内网IP段(如10.x.x.x、192.168.x.x)的HTTP连接,以及特定的URL路径(如"/cgi-bin/upload.cgi")。通过Suricata等工具编写检测规则,监控异常User-Agent和频繁的HTTP请求模式。这种方法能在网络层面实时阻断威胁,但需要样本实际发起网络连接才能生效。 -
基于动态行为沙箱的检测方法
该方法在隔离环境中运行样本并监控其系统行为。运行RaDa样本时,沙箱会捕获其创建特定目录(C:\RaDa\tmp)、修改注册表自启动项、使用Wscript.Shell执行命令等恶意行为。通过分析这些行为链,可准确识别其后门本质。这种方法能有效对抗代码混淆,但需要一定的执行时间和资源开销。 -
基于持久化机制监控的检测方法
该方法专注于检测系统持久化点的异常修改。针对RaDa,可监控Windows注册表中HKLM\Software\Microsoft\Windows\CurrentVersion\Run项的变化,特别关注名为"RaDa"的键值创建。结合文件系统监控,检测C盘根目录下RaDa文件夹的创建行为。这种方法能早期发现威胁植入,但需要持续的系统监控支持。
2.4 取证分析实践
Windows 2000系统被攻破并加入僵尸网络,数据源是Snort收集的蜜罐主机5天的网络数据源,并去除了一些不相关的流量,同时IP地址和其他敏感信息被混淆。
问题回答
(1)IRC是什么?当IRC客户端申请加入一个IRC网络时将发送那个消息?IRC一般使用那些TCP端口?
IRC 是互联网中继聊天协议的缩写,是一种分布式的实时文本通信协议,采用客户端-服务器架构,支持多对多通信。
当IRC客户端申请加入一个IRC网络时,会按顺序发送以下核心消息:USER <username> <hostname> <servername> :<realname>,NICK <nickname>,JOIN #
IRC一般使用的TCP端口包括:6660-6669(传统且最常用的IRC端口范围),7000(常用于SSL加密的IRC连接)
(2)僵尸网络是什么?僵尸网络通常用于什么?
僵尸网络是由攻击者通过命令与控制服务器集中控制的、大量被恶意软件感染的计算机所构成的网络,通常用于以下恶意活动:
-
分布式拒绝服务攻击:同时向目标发送大量流量使其瘫痪
-
垃圾邮件发送:大规模分发垃圾或钓鱼邮件
-
信息窃取:收集受害主机的敏感数据和凭证
(3)蜜罐主机(IP地址:172.16.134.191)与那些IRC服务器进行了通信?
将文件botnet_pcap_file.dat用wireshark打开,将过滤条件设置为ip.src == 172.16.134.191 && tcp.dstport == 6667,根据过滤得到的数据包,得到蜜罐主机与IP地址为209.126.161.29、66.33.65.58、63.241.174.144、217.199.175.10、209.126.161.29的这些IRC服务器进行过通信。

(4)在这段观察期间,多少不同的主机访问了以209.196.44.172为服务器的僵尸网络?
在Kali上输入apt-get install tcpflow下载tcpflower工具,输入命令tcpflow -r botnet_pcap_file.dat "host 209.196.44.172 and port 6667",筛选指定的IP地址和端口。

可以看到目录下新增了三个文件,我们输入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,从IRC网络流量中统计僵尸网络规模,得到共有3461个主机访问。

各步骤作用:
-
- 读取流量文件
cat 209.196.044.172.06667-172.016.134.191.01152,读取tcpflow提取的IRC通信数据文件
- 读取流量文件
-
- 过滤关键IRC命令
grep -a "^:irc5.aol.com 353",-a: 将二进制文件当作文本处理,过滤IRC 353响应,该命令列出频道中的所有用户
- 过滤关键IRC命令
-
- 清理数据格式
sed "s/^:irc5.aol.com 353 rgdiuggac @ #x[^x]*x ://g",移除IRC协议头,只保留用户名列表
- 清理数据格式
-
- 转换格式
tr ' ' '\n',将空格分隔的用户名转换为每行一个用户
- 转换格式
-
- 清理特殊字符
tr -d "\15",删除Windows回车符
- 清理特殊字符
-
- 过滤空行
grep -v "^$",移除所有空行
- 过滤空行
-
- 去重排序
sort -u,排序并去重,得到唯一用户名列表
- 去重排序
-
- 统计数量
wc -l,统计行数,即唯一用户数量
- 统计数量
(5)哪些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 > ipaddr.txt;wc -l ipaddr.txt,从网络取证数据中统计攻击源IP数量,统计所有与蜜罐主机172.16.134.191通信的外部IP地址数量,可以看到共有165个地址被使用。


其工作流程如下:首先使用"tcpdump -n -nn -r botnet_pcap_file.dat 'dst host 172.16.134.191'"从数据包文件中过滤出所有以蜜罐为目标地址的流量记录;接着通过"awk -F " " '{print $3}'"提取每行记录中的第三个字段(即源IP地址与端口号);然后利用"cut -d '.' -f 1-4"去除端口号,仅保留纯IP地址;再通过"sort | uniq"对IP地址进行排序与去重,生成唯一的攻击源列表;最后将结果保存至文件并用"wc -l ipaddr.txt"统计行数,最终得到的数字即为不同的攻击源IP总数。
(6)攻击者尝试攻击了那些安全漏洞?
输入命令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,筛选受感染的蜜罐主机172.16.134.191发起的TCP连接的目标服务端口。我么可以发现攻击者尝试攻击的有135(RPC远程过程调用)、139(NetBIOS/SMB)、25(SMTP简单邮件传输协议)、445(SMB,用于文件、打印机等的共享)、4899(Radmin,用于远程控制)、80(HTTP)。

(7)那些攻击成功了?是如何成功的?
我们使用wireshark,筛选不同端口的数据包。






我们可以发现针对445端口,攻击者首先通过SMB协议与蜜罐主机完成认证握手,随后使用SAMR协议枚举域内账号信息进行侦察;在获取系统高级权限后,通过发送删除PSEXESVC.EXE系统文件的请求,清除横向移动痕迹,为后续投递恶意载荷做准备,标志着攻击已成功得手。

针对4899端口,出现了大量的PSH包,表现出攻击行为。攻击者通过Radmin 服务端口(4899)成功建立了 TCP 连接,向Web服务器发送了一条经过编码的HTTP请求"/cgi/..../..../winnt/system32/cmd.exe?/c+dir",该请求利用目录遍历漏洞尝试穿越路径至系统目录,并试图通过cmd.exe执行dir命令,以此探测系统文件结构并验证是否存在远程命令执行漏洞,最终通过FIN-ACK报文有序关闭连接,完成了一次典型的Web路径遍历与命令注入攻击。

针对80端口,攻击者向蜜罐主机的80端口发起TCP连接后,发送了一个异常的HTTP GET请求,目标为/NULL.ida文件,并在参数中填充了大量重复的字符“C”。该攻击旨在利用微软IIS Web服务器早期版本中存在的索引服务ISAPI扩展缓冲区溢出漏洞。通过向ida扩展名处理程序发送超长数据,攻击者尝试触发栈溢出,从而执行嵌入在请求中的Shellcode,最终实现远程代码执行并完全控制服务器。
综上所述,攻击的应该是tcp的445、4899和80端口
3.问题及解决方案
- 问题1:不会根据数据包分析网络攻击行为
- 问题1解决方案:面对大量的数据包,我先观察出现异常的部分,即与其他报文不同的数据包,然后将报文截屏交给AI分析,分析出现的攻击过程。
4.学习感悟、思考等
通过本次系统性的恶意代码分析与网络取证实验,我深刻体会到网络安全是一场永不停息的攻防博弈。在分析RaDa样本时,从最初的文件识别、脱壳到字符串提取,我一步步了解分析的步骤与方法,学会使用各种工具。当在层层加壳的二进制文件中最终发现作者信息时,我感受到了逆向工程带来的成就感,也理解了恶意代码开发者如何通过加壳、字符串模糊化等技术规避检测。
而在网络取证部分,通过Wireshark和tcpflow等工具对蜜罐主机的网络数据源进行了分析。我亲眼见证了攻击者如何利用IRC协议构建庞大的僵尸网络,以及他们如何通过SMB、Radmin等服务对端口进行攻击,这个过程让我意识到,通过对网络流量的分析和监控,我们可以及时发现和防范各种网络攻击和威胁。这一次实验不仅锻炼了我的实践能力,也让我对网络安全有了更广泛更深刻的认识。

浙公网安备 33010602011771号